os/mm/devsound/sounddevbt/PlatSec/src/Server/AudioServer/MmfBtDevSoundSession.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
#include <s32mem.h> 
sl@0
    17
#include "MmfBtDevSoundSession.h"
sl@0
    18
#include "MmfBtDevSoundSessionXtnd.h"
sl@0
    19
#include "MmfBtDevSoundSessionBody.h"
sl@0
    20
sl@0
    21
#include "MmfBtAudioClientServer.h"
sl@0
    22
#include "MmfBtAudioServer.h"
sl@0
    23
#include "MmfBtDevSoundServer.h"
sl@0
    24
sl@0
    25
sl@0
    26
void CMMFDevSoundSession::CreateL(const CMmfIpcServer& aServer)
sl@0
    27
	{
sl@0
    28
	CMmfIpcSession::CreateL(aServer);
sl@0
    29
	CMMFDevSoundServer& server = 
sl@0
    30
		const_cast<CMMFDevSoundServer&>(static_cast<const CMMFDevSoundServer&>(aServer));
sl@0
    31
	server.IncrementSessionId();
sl@0
    32
	iDevSoundSessionId = server.DevSoundSessionId();
sl@0
    33
	iClientHasCaps = server.CheckClientCapabilities();
sl@0
    34
	}
sl@0
    35
sl@0
    36
TBool CMMFDevSoundSession::CheckClientCapabilities()
sl@0
    37
	{
sl@0
    38
	return iClientHasCaps;
sl@0
    39
	}
sl@0
    40
sl@0
    41
void CMMFDevSoundSession::ServiceL(const RMmfIpcMessage& aMessage)
sl@0
    42
	{
sl@0
    43
	TBool complete = EFalse;
sl@0
    44
	switch(aMessage.Function())
sl@0
    45
		{
sl@0
    46
	case EMMFDevSoundProxyInitialize1:
sl@0
    47
		complete = DoInitialize1L(aMessage);
sl@0
    48
		break;
sl@0
    49
	case EMMFDevSoundProxyInitialize2:
sl@0
    50
		complete = DoInitialize2L(aMessage);
sl@0
    51
		break;
sl@0
    52
	case EMMFDevSoundProxyInitialize3:
sl@0
    53
		complete = DoInitialize3L(aMessage);
sl@0
    54
		break;
sl@0
    55
	case EMMFDevSoundProxyInitialize4:
sl@0
    56
		complete = DoInitialize4L(aMessage);
sl@0
    57
		break;
sl@0
    58
	case EMMFDevSoundProxyCapabilities:
sl@0
    59
		complete = DoCapabilitiesL(aMessage);
sl@0
    60
		break;
sl@0
    61
	case EMMFDevSoundProxyConfig:
sl@0
    62
		complete = DoConfigL(aMessage);
sl@0
    63
		break;
sl@0
    64
	case EMMFDevSoundProxySetConfig:
sl@0
    65
		complete = DoSetConfigL(aMessage);
sl@0
    66
		break;
sl@0
    67
	case EMMFDevSoundProxyMaxVolume:
sl@0
    68
		complete = DoMaxVolumeL(aMessage);
sl@0
    69
		break;
sl@0
    70
	case EMMFDevSoundProxyVolume:
sl@0
    71
		complete = DoVolumeL(aMessage);
sl@0
    72
		break;
sl@0
    73
	case EMMFDevSoundProxySetVolume:
sl@0
    74
		complete = DoSetVolumeL(aMessage);
sl@0
    75
		break;
sl@0
    76
	case EMMFDevSoundProxyMaxGain:
sl@0
    77
		complete = DoMaxGainL(aMessage);
sl@0
    78
		break;
sl@0
    79
	case EMMFDevSoundProxyGain:
sl@0
    80
		complete = DoGainL(aMessage);
sl@0
    81
		break;
sl@0
    82
	case EMMFDevSoundProxySetGain:
sl@0
    83
		complete = DoSetGainL(aMessage);
sl@0
    84
		break;
sl@0
    85
	case EMMFDevSoundProxyPlayBalance:
sl@0
    86
		complete = DoGetPlayBalanceL(aMessage);
sl@0
    87
		break;
sl@0
    88
	case EMMFDevSoundProxySetPlayBalance:
sl@0
    89
		complete = DoSetPlayBalanceL(aMessage);
sl@0
    90
		break;
sl@0
    91
	case EMMFDevSoundProxyRecordBalance:
sl@0
    92
		complete = DoGetRecordBalanceL(aMessage);
sl@0
    93
		break;
sl@0
    94
	case EMMFDevSoundProxySetRecordBalance:
sl@0
    95
		complete = DoSetRecordBalanceL(aMessage);
sl@0
    96
		break;
sl@0
    97
	case EMMFDevSoundProxyReceiveICEvent:
sl@0
    98
		complete = DoInitializeCompleteEventL(aMessage);
sl@0
    99
		break;
sl@0
   100
	case EMMFDevSoundProxyCancelReceiveICEvent:
sl@0
   101
		complete = DoCancelInitializeCompleteEventL(aMessage);
sl@0
   102
		break;
sl@0
   103
	case EMMFDevSoundProxyReceiveBTBFEvent:
sl@0
   104
		complete = DoBufferToBeFilledEventL(aMessage);
sl@0
   105
		break;
sl@0
   106
	case EMMFDevSoundProxyCancelReceiveBTBFEvent:
sl@0
   107
		complete = DoCancelBufferToBeFilledEventL(aMessage);
sl@0
   108
		break;	
sl@0
   109
	case EMMFDevSoundProxyReceiveBTBEEvent:
sl@0
   110
		complete = DoBufferToBeEmptiedEventL(aMessage);
sl@0
   111
		break;
sl@0
   112
	case EMMFDevSoundProxyCancelReceiveBTBEEvent:
sl@0
   113
		complete = DoCancelBufferToBeEmptiedEventL(aMessage);
sl@0
   114
		break;
sl@0
   115
	case EMMFDevSoundProxyReceivePEEvent:
sl@0
   116
		complete = DoPlayErrorEventL(aMessage);
sl@0
   117
		break;
sl@0
   118
	case EMMFDevSoundProxyCancelReceivePEEvent:
sl@0
   119
		complete = DoCancelPlayErrorEventL(aMessage);
sl@0
   120
		break;
sl@0
   121
	case EMMFDevSoundProxyReceiveREEvent:
sl@0
   122
		complete = DoRecordErrorEventL(aMessage);
sl@0
   123
		break;
sl@0
   124
	case EMMFDevSoundProxyCancelReceiveREEvent:
sl@0
   125
		complete = DoCancelRecordErrorEventL(aMessage);
sl@0
   126
		break;
sl@0
   127
	case EMMFDevSoundProxyReceiveSETCEvent:
sl@0
   128
		complete = DoSendEventToClientEventL(aMessage);
sl@0
   129
		break;
sl@0
   130
	case EMMFDevSoundProxyCancelReceiveSETCEvent:
sl@0
   131
		complete = DoCancelSendEventToClientEventL(aMessage);
sl@0
   132
		break;
sl@0
   133
	case EMMFDevSoundProxyReceiveTFEvent:
sl@0
   134
		complete = DoToneFinishedEventL(aMessage);
sl@0
   135
		break;
sl@0
   136
	case EMMFDevSoundProxyCancelReceiveTFEvent:
sl@0
   137
		complete = DoCancelToneFinishedEventL(aMessage);
sl@0
   138
		break;
sl@0
   139
	case EMMFDevSoundProxyPlayInit:
sl@0
   140
		complete = DoPlayInitL(aMessage);
sl@0
   141
		break;
sl@0
   142
	case EMMFDevSoundProxyRecordInit:
sl@0
   143
		complete = DoRecordInitL(aMessage);
sl@0
   144
		break;
sl@0
   145
	case EMMFDevSoundProxyPlayData:
sl@0
   146
		complete = DoPlayDataL(aMessage);
sl@0
   147
		break;
sl@0
   148
	case EMMFDevSoundProxyRecordData:
sl@0
   149
		complete = DoRecordDataL(aMessage);
sl@0
   150
		break;
sl@0
   151
	case EMMFDevSoundProxyStop:
sl@0
   152
		complete = DoStopL(aMessage);
sl@0
   153
		break;
sl@0
   154
	case EMMFDevSoundProxyPause:
sl@0
   155
		complete = DoPauseL(aMessage);
sl@0
   156
		break;
sl@0
   157
	case EMMFDevSoundProxyPlayTone:
sl@0
   158
		complete = DoPlayToneL(aMessage);
sl@0
   159
		break;
sl@0
   160
	case EMMFDevSoundProxyPlayDualTone:
sl@0
   161
		complete = DoPlayDualToneL(aMessage);
sl@0
   162
		break;
sl@0
   163
	case EMMFDevSoundProxyPlayDTMFString:
sl@0
   164
		complete = DoPlayDTMFStringL(aMessage);
sl@0
   165
		break;
sl@0
   166
	case EMMFDevSoundProxyPlayToneSequence:
sl@0
   167
		complete = DoPlayToneSequenceL(aMessage);
sl@0
   168
		break;
sl@0
   169
	case EMMFDevSoundProxyPlayFixedSequence:
sl@0
   170
		complete = DoPlayFixedSequenceL(aMessage);
sl@0
   171
		break;
sl@0
   172
	case EMMFDevSoundProxySetDTMFLengths:
sl@0
   173
		complete = DoSetDTMFLengthsL(aMessage);
sl@0
   174
		break;
sl@0
   175
	case EMMFDevSoundProxySetVolumeRamp:
sl@0
   176
		complete = DoSetVolumeRampL(aMessage);
sl@0
   177
		break;
sl@0
   178
	case EMMFDevSoundProxyGetSupportedInputDataTypes:
sl@0
   179
		complete = DoGetSupportedInputDataTypesL(aMessage);
sl@0
   180
		break;
sl@0
   181
	case EMMFDevSoundProxyGetSupportedOutputDataTypes:
sl@0
   182
		complete = DoGetSupportedOutputDataTypesL(aMessage);
sl@0
   183
		break;
sl@0
   184
	case EMMFDevSoundProxyCopyFourCCArrayData:
sl@0
   185
		complete = DoCopyFourCCArrayDataL(aMessage);
sl@0
   186
		break;
sl@0
   187
	case EMMFDevSoundProxyGetRecordedBuffer:
sl@0
   188
		complete = DoGetRecordedBufferL(aMessage);
sl@0
   189
		break;
sl@0
   190
	case EMMFDevSoundProxySamplesRecorded:
sl@0
   191
		complete = DoSamplesRecordedL(aMessage);
sl@0
   192
		break;
sl@0
   193
	case EMMFDevSoundProxySamplesPlayed:
sl@0
   194
		complete = DoSamplesPlayedL(aMessage);
sl@0
   195
		break;
sl@0
   196
	case EMMFDevSoundProxySetToneRepeats:
sl@0
   197
		complete = DoSetToneRepeatsL(aMessage);
sl@0
   198
		break;
sl@0
   199
	case EMMFDevSoundProxySetPrioritySettings:
sl@0
   200
		complete = DoSetPrioritySettingsL(aMessage);
sl@0
   201
		break;
sl@0
   202
	case EMMFDevSoundProxyFixedSequenceName:
sl@0
   203
		complete = DoFixedSequenceNameL(aMessage);
sl@0
   204
		break;
sl@0
   205
	case EMMFDevSoundProxyConvertInit:
sl@0
   206
		complete = DoConvertInitL(aMessage);
sl@0
   207
		break;
sl@0
   208
	case EMMFDevSoundProxyConvertData:
sl@0
   209
		complete = DoConvertDataL(aMessage);
sl@0
   210
		break;
sl@0
   211
	case EMMFDevSoundProxyFixedSequenceCount:
sl@0
   212
		complete = DoFixedSequenceCountL(aMessage);
sl@0
   213
		break;
sl@0
   214
	case EMMFDevSoundProxyRequestResourceNotification:
sl@0
   215
		complete = DoRegisterAsClientL(aMessage);
sl@0
   216
		break;
sl@0
   217
	case EMMFDevSoundProxyCancelRequestResourceNotification:
sl@0
   218
		complete = DoCancelRegisterAsClientL(aMessage);
sl@0
   219
		break;
sl@0
   220
	case EMMFDevSoundProxyGetResourceNotificationData:
sl@0
   221
		complete = DoGetResourceNotificationDataL(aMessage);
sl@0
   222
		break;
sl@0
   223
	case EMMFDevSoundProxyWillResumePlay:
sl@0
   224
		complete = DoWillResumePlayL(aMessage);
sl@0
   225
		break;
sl@0
   226
	case EMMFDevSoundProxySetClientThreadInfo:
sl@0
   227
		complete = DoSetClientThreadInfoL(aMessage);
sl@0
   228
		break;
sl@0
   229
	default:
sl@0
   230
		User::Leave(KErrNotSupported);
sl@0
   231
		break;
sl@0
   232
		}
sl@0
   233
	if (complete)
sl@0
   234
		aMessage.Complete(KErrNone);
sl@0
   235
	}
sl@0
   236
sl@0
   237
TBool CMMFDevSoundSession::DoInitialize1L(const RMmfIpcMessage& aMessage)
sl@0
   238
	{
sl@0
   239
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   240
	MmfMessageUtil::ReadL(aMessage,0,buf);
sl@0
   241
	TMMFState mode = buf().iMode;
sl@0
   242
	iBody->InitializeL(*this, mode);
sl@0
   243
	return ETrue;
sl@0
   244
	}
sl@0
   245
sl@0
   246
TBool CMMFDevSoundSession::DoInitialize2L(const RMmfIpcMessage& aMessage)
sl@0
   247
	{
sl@0
   248
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   249
	MmfMessageUtil::ReadL(aMessage,0,buf);
sl@0
   250
	TUid HWDev = buf().iHWDev;
sl@0
   251
	TMMFState mode = buf().iMode;
sl@0
   252
	iBody->InitializeL(*this, HWDev, mode);
sl@0
   253
	return ETrue;
sl@0
   254
	}
sl@0
   255
sl@0
   256
TBool CMMFDevSoundSession::DoInitialize3L(const RMmfIpcMessage& /*aMessage*/)
sl@0
   257
	{
sl@0
   258
	User::Leave(KErrNotSupported);
sl@0
   259
	return ETrue;
sl@0
   260
	}
sl@0
   261
sl@0
   262
TBool CMMFDevSoundSession::DoInitialize4L(const RMmfIpcMessage& aMessage)
sl@0
   263
	{
sl@0
   264
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   265
	aMessage.ReadL(TInt(0),buf);
sl@0
   266
	TFourCC desiredFourCC = buf().iDesiredFourCC;
sl@0
   267
	TMMFState mode = buf().iMode;
sl@0
   268
	iBody->InitializeL(*this, desiredFourCC, mode);
sl@0
   269
	return ETrue;
sl@0
   270
	}
sl@0
   271
sl@0
   272
TBool CMMFDevSoundSession::DoCapabilitiesL(const RMmfIpcMessage& aMessage)
sl@0
   273
	{
sl@0
   274
	TMMFDevSoundProxySettings set;
sl@0
   275
	set.iCaps = iBody->Capabilities();
sl@0
   276
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   277
	aMessage.WriteL(TInt(2),pckg);
sl@0
   278
	return ETrue;
sl@0
   279
	}
sl@0
   280
sl@0
   281
TBool CMMFDevSoundSession::DoConfigL(const RMmfIpcMessage& aMessage)
sl@0
   282
	{
sl@0
   283
	TMMFDevSoundProxySettings set;
sl@0
   284
	set.iConfig = iBody->Config();
sl@0
   285
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   286
	aMessage.WriteL(TInt(2),pckg);
sl@0
   287
	return ETrue;
sl@0
   288
	}
sl@0
   289
sl@0
   290
TBool CMMFDevSoundSession::DoSetConfigL(const RMmfIpcMessage& aMessage)
sl@0
   291
	{
sl@0
   292
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   293
	aMessage.ReadL(TInt(0),buf);
sl@0
   294
	TMMFCapabilities config = buf().iConfig;
sl@0
   295
	iBody->SetConfigL(config);
sl@0
   296
	return ETrue;
sl@0
   297
	}
sl@0
   298
sl@0
   299
TBool CMMFDevSoundSession::DoMaxVolumeL(const RMmfIpcMessage& aMessage)
sl@0
   300
	{
sl@0
   301
	TMMFDevSoundProxySettings set;
sl@0
   302
	set.iMaxVolume = iBody->MaxVolume();
sl@0
   303
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   304
	aMessage.WriteL(TInt(2),pckg);
sl@0
   305
	return ETrue;
sl@0
   306
	}
sl@0
   307
sl@0
   308
TBool CMMFDevSoundSession::DoVolumeL(const RMmfIpcMessage& aMessage)
sl@0
   309
	{
sl@0
   310
	TMMFDevSoundProxySettings set;
sl@0
   311
	set.iVolume = iBody->Volume();
sl@0
   312
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   313
	aMessage.WriteL(TInt(2),pckg);
sl@0
   314
	return ETrue;
sl@0
   315
	}
sl@0
   316
sl@0
   317
TBool CMMFDevSoundSession::DoSetVolumeL(const RMmfIpcMessage& aMessage)
sl@0
   318
	{
sl@0
   319
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   320
	aMessage.ReadL(TInt(0),buf);
sl@0
   321
	TInt volume = buf().iVolume;
sl@0
   322
	iBody->SetVolume(volume);
sl@0
   323
	return ETrue;
sl@0
   324
	}
sl@0
   325
sl@0
   326
TBool CMMFDevSoundSession::DoMaxGainL(const RMmfIpcMessage& aMessage)
sl@0
   327
	{
sl@0
   328
	TMMFDevSoundProxySettings set;
sl@0
   329
	set.iMaxGain = iBody->MaxGain();
sl@0
   330
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   331
	aMessage.WriteL(TInt(2),pckg);
sl@0
   332
	return ETrue;
sl@0
   333
	}
sl@0
   334
sl@0
   335
TBool CMMFDevSoundSession::DoGainL(const RMmfIpcMessage& aMessage)
sl@0
   336
	{
sl@0
   337
	TMMFDevSoundProxySettings set;
sl@0
   338
	set.iGain = iBody->Gain();
sl@0
   339
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   340
	aMessage.WriteL(TInt(2),pckg);
sl@0
   341
	return ETrue;
sl@0
   342
	}
sl@0
   343
sl@0
   344
TBool CMMFDevSoundSession::DoSetGainL(const RMmfIpcMessage& aMessage)
sl@0
   345
	{
sl@0
   346
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   347
	aMessage.ReadL(TInt(0),buf);
sl@0
   348
	TInt gain = buf().iGain;
sl@0
   349
	iBody->SetGain(gain);
sl@0
   350
	return ETrue;
sl@0
   351
	}
sl@0
   352
sl@0
   353
TBool CMMFDevSoundSession::DoGetPlayBalanceL(const RMmfIpcMessage& aMessage)
sl@0
   354
	{
sl@0
   355
	TMMFDevSoundProxySettings set;
sl@0
   356
	iBody->GetPlayBalanceL(set.iLeftPercentage, set.iRightPercentage);
sl@0
   357
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   358
	aMessage.WriteL(TInt(2),pckg);
sl@0
   359
	return ETrue;
sl@0
   360
	}
sl@0
   361
sl@0
   362
TBool CMMFDevSoundSession::DoSetPlayBalanceL(const RMmfIpcMessage& aMessage)
sl@0
   363
	{
sl@0
   364
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   365
	aMessage.ReadL(TInt(0),buf);
sl@0
   366
	TInt leftPercentage = buf().iLeftPercentage;
sl@0
   367
	TInt rightPercentage = buf().iRightPercentage;
sl@0
   368
	iBody->SetPlayBalanceL(leftPercentage, rightPercentage);
sl@0
   369
	return ETrue;
sl@0
   370
	}
sl@0
   371
sl@0
   372
TBool CMMFDevSoundSession::DoGetRecordBalanceL(const RMmfIpcMessage& aMessage)
sl@0
   373
	{
sl@0
   374
	TMMFDevSoundProxySettings set;
sl@0
   375
	iBody->GetRecordBalanceL(set.iLeftPercentage, set.iRightPercentage);
sl@0
   376
	TMMFDevSoundProxySettingsPckg pckg(set);
sl@0
   377
	aMessage.WriteL(TInt(2),pckg);
sl@0
   378
	return ETrue;
sl@0
   379
	}
sl@0
   380
sl@0
   381
TBool CMMFDevSoundSession::DoSetRecordBalanceL(const RMmfIpcMessage& aMessage)
sl@0
   382
	{
sl@0
   383
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   384
	aMessage.ReadL(TInt(0),buf);
sl@0
   385
	TInt leftPercentage = buf().iLeftPercentage;
sl@0
   386
	TInt rightPercentage = buf().iRightPercentage;
sl@0
   387
	iBody->SetRecordBalanceL(leftPercentage, rightPercentage);
sl@0
   388
	return ETrue;
sl@0
   389
	}
sl@0
   390
sl@0
   391
TBool CMMFDevSoundSession::DoPlayInitL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   392
	{
sl@0
   393
	iBody->PlayInitL();
sl@0
   394
	return ETrue;
sl@0
   395
	}
sl@0
   396
sl@0
   397
TBool CMMFDevSoundSession::DoRecordInitL(const RMmfIpcMessage& aMessage)
sl@0
   398
	{
sl@0
   399
	iBody->RecordInitL(aMessage);
sl@0
   400
	return ETrue;
sl@0
   401
	}
sl@0
   402
sl@0
   403
TBool CMMFDevSoundSession::DoPlayDataL(const RMmfIpcMessage& aMessage)
sl@0
   404
	{
sl@0
   405
	TMMFDevSoundProxyHwBufPckg buf;
sl@0
   406
	aMessage.ReadL(TInt(0),buf);
sl@0
   407
	iBufferPlay->SetLastBuffer(buf().iLastBuffer);
sl@0
   408
sl@0
   409
	aMessage.ReadL(TInt(1),iBufferPlay->Data());
sl@0
   410
	iBody->PlayData();
sl@0
   411
	return ETrue;
sl@0
   412
	}
sl@0
   413
sl@0
   414
TBool CMMFDevSoundSession::DoRecordDataL(const RMmfIpcMessage& aMessage)
sl@0
   415
	{
sl@0
   416
	iBody->RecordData(aMessage);
sl@0
   417
	return ETrue;
sl@0
   418
	}
sl@0
   419
sl@0
   420
TBool CMMFDevSoundSession::DoStopL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   421
	{
sl@0
   422
	iBody->Stop();
sl@0
   423
	return ETrue;
sl@0
   424
	}
sl@0
   425
sl@0
   426
TBool CMMFDevSoundSession::DoPauseL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   427
	{
sl@0
   428
	iBody->Pause();
sl@0
   429
	return ETrue;
sl@0
   430
	}
sl@0
   431
sl@0
   432
TBool CMMFDevSoundSession::DoPlayToneL(const RMmfIpcMessage& aMessage)
sl@0
   433
	{
sl@0
   434
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   435
	aMessage.ReadL(TInt(0),buf);
sl@0
   436
	TInt frequency = buf().iFrequencyOne;
sl@0
   437
	TTimeIntervalMicroSeconds duration(buf().iDuration);
sl@0
   438
	iBody->PlayToneL(frequency, duration);
sl@0
   439
	return ETrue;
sl@0
   440
	}
sl@0
   441
sl@0
   442
TBool CMMFDevSoundSession::DoPlayDualToneL(const RMmfIpcMessage& aMessage)
sl@0
   443
	{
sl@0
   444
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   445
	aMessage.ReadL(TInt(0),buf);
sl@0
   446
	TInt frequencyOne = buf().iFrequencyOne;
sl@0
   447
	TInt frequencyTwo = buf().iFrequencyTwo;
sl@0
   448
	TTimeIntervalMicroSeconds duration(buf().iDuration);
sl@0
   449
	iBody->PlayDualToneL(frequencyOne, frequencyTwo, duration);
sl@0
   450
	return ETrue;
sl@0
   451
	}
sl@0
   452
sl@0
   453
TBool CMMFDevSoundSession::DoPlayDTMFStringL(const RMmfIpcMessage& aMessage)
sl@0
   454
	{
sl@0
   455
	TInt DTMFLength = aMessage.GetDesLength(0);
sl@0
   456
sl@0
   457
	if(iDTMFString)
sl@0
   458
		{
sl@0
   459
		delete iDTMFString;
sl@0
   460
		iDTMFString = NULL;
sl@0
   461
		}
sl@0
   462
sl@0
   463
	iDTMFString = HBufC::NewL(DTMFLength);
sl@0
   464
	TPtr DTMFPtr = iDTMFString->Des();
sl@0
   465
	aMessage.ReadL(TInt(0), DTMFPtr);
sl@0
   466
sl@0
   467
	iBody->PlayDTMFStringL(*iDTMFString);
sl@0
   468
	return ETrue;
sl@0
   469
	}
sl@0
   470
sl@0
   471
TBool CMMFDevSoundSession::DoPlayToneSequenceL(const RMmfIpcMessage& aMessage)
sl@0
   472
	{
sl@0
   473
	TInt toneLength = aMessage.GetDesLength(0);
sl@0
   474
sl@0
   475
	if(iToneSeqBuf)
sl@0
   476
		{
sl@0
   477
		delete iToneSeqBuf;
sl@0
   478
		iToneSeqBuf = NULL;
sl@0
   479
		}
sl@0
   480
sl@0
   481
	iToneSeqBuf = HBufC8::NewL(toneLength);
sl@0
   482
	TPtr8 toneSeqPtr = iToneSeqBuf->Des();
sl@0
   483
	aMessage.ReadL(TInt(0), toneSeqPtr);
sl@0
   484
sl@0
   485
	iBody->PlayToneSequenceL(*iToneSeqBuf);
sl@0
   486
	return ETrue;
sl@0
   487
	}
sl@0
   488
sl@0
   489
TBool CMMFDevSoundSession::DoPlayFixedSequenceL(const RMmfIpcMessage& aMessage)
sl@0
   490
	{
sl@0
   491
	TPckgBuf<TInt> buf;
sl@0
   492
	aMessage.ReadL(TInt(0),buf);
sl@0
   493
	TInt seqNum = buf();
sl@0
   494
sl@0
   495
	iBody->PlayFixedSequenceL(seqNum);
sl@0
   496
	return ETrue;
sl@0
   497
	}
sl@0
   498
sl@0
   499
TBool CMMFDevSoundSession::DoSetDTMFLengthsL(const RMmfIpcMessage& aMessage)
sl@0
   500
	{
sl@0
   501
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   502
	aMessage.ReadL(TInt(0),buf);
sl@0
   503
	TTimeIntervalMicroSeconds32 toneOnLength = buf().iToneOnLength;
sl@0
   504
	TTimeIntervalMicroSeconds32 toneOffLength = buf().iToneOffLength;
sl@0
   505
	TTimeIntervalMicroSeconds32 pauseLength = buf().iPauseLength;
sl@0
   506
	iBody->SetDTMFLengths(toneOnLength, toneOffLength, pauseLength);
sl@0
   507
	return ETrue;
sl@0
   508
	}
sl@0
   509
sl@0
   510
TBool CMMFDevSoundSession::DoSetVolumeRampL(const RMmfIpcMessage& aMessage)
sl@0
   511
	{
sl@0
   512
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   513
	aMessage.ReadL(TInt(0),buf);
sl@0
   514
	TTimeIntervalMicroSeconds duration = buf().iDuration;
sl@0
   515
	iBody->SetVolumeRamp(duration);
sl@0
   516
	return ETrue;
sl@0
   517
	}
sl@0
   518
sl@0
   519
TBool CMMFDevSoundSession::DoGetSupportedInputDataTypesL(const RMmfIpcMessage& aMessage)
sl@0
   520
	{
sl@0
   521
	iArray.Reset();
sl@0
   522
sl@0
   523
	TMMFPrioritySettingsPckg buf;
sl@0
   524
	aMessage.ReadL(TInt(0),buf);
sl@0
   525
	TMMFPrioritySettings prioritySet = buf();
sl@0
   526
sl@0
   527
	iBody->GetSupportedInputDataTypesL(iArray, prioritySet);
sl@0
   528
sl@0
   529
	TPckgBuf<TInt> pckg;
sl@0
   530
	pckg() = iArray.Count();
sl@0
   531
	aMessage.WriteL(TInt(2),pckg);
sl@0
   532
sl@0
   533
	return ETrue;
sl@0
   534
	}
sl@0
   535
sl@0
   536
TBool CMMFDevSoundSession::DoGetSupportedOutputDataTypesL(const RMmfIpcMessage& aMessage)
sl@0
   537
	{
sl@0
   538
	iArray.Reset();
sl@0
   539
sl@0
   540
	TMMFPrioritySettingsPckg buf;
sl@0
   541
	aMessage.ReadL(TInt(0),buf);
sl@0
   542
	TMMFPrioritySettings prioritySet = buf();
sl@0
   543
sl@0
   544
	iBody->GetSupportedOutputDataTypesL(iArray, prioritySet);
sl@0
   545
sl@0
   546
	TPckgBuf<TInt> pckg;
sl@0
   547
	pckg() = iArray.Count();
sl@0
   548
	aMessage.WriteL(TInt(2),pckg);
sl@0
   549
sl@0
   550
	return ETrue;
sl@0
   551
	}
sl@0
   552
sl@0
   553
TBool CMMFDevSoundSession::DoSamplesRecordedL(const RMmfIpcMessage& aMessage)
sl@0
   554
	{
sl@0
   555
	TPckgBuf<TInt> pckg;
sl@0
   556
	pckg() = iBody->SamplesRecorded();
sl@0
   557
	aMessage.WriteL(TInt(2),pckg);
sl@0
   558
	return ETrue;
sl@0
   559
	}
sl@0
   560
sl@0
   561
TBool CMMFDevSoundSession::DoSamplesPlayedL(const RMmfIpcMessage& aMessage)
sl@0
   562
	{
sl@0
   563
	TPckgBuf<TInt> pckg;
sl@0
   564
	pckg() = iBody->SamplesPlayed();
sl@0
   565
	aMessage.WriteL(TInt(2),pckg);
sl@0
   566
	return ETrue;
sl@0
   567
	}
sl@0
   568
sl@0
   569
TBool CMMFDevSoundSession::DoSetToneRepeatsL(const RMmfIpcMessage& aMessage)
sl@0
   570
	{
sl@0
   571
	TPckgBuf<TInt> countRepeat;
sl@0
   572
	aMessage.ReadL(TInt(0),countRepeat);
sl@0
   573
sl@0
   574
	TPckgBuf<TTimeIntervalMicroSeconds> repeatTS;
sl@0
   575
	aMessage.ReadL(TInt(1),repeatTS);
sl@0
   576
sl@0
   577
	iBody->SetToneRepeats(countRepeat(), repeatTS());
sl@0
   578
	return ETrue;
sl@0
   579
	}
sl@0
   580
sl@0
   581
TBool CMMFDevSoundSession::DoSetPrioritySettingsL(const RMmfIpcMessage& aMessage)
sl@0
   582
	{
sl@0
   583
	TPckgBuf<TMMFPrioritySettings> prioritySet;
sl@0
   584
	aMessage.ReadL(TInt(0),prioritySet);
sl@0
   585
sl@0
   586
	iBody->SetPrioritySettings(prioritySet());
sl@0
   587
	return ETrue;
sl@0
   588
	}
sl@0
   589
sl@0
   590
TBool CMMFDevSoundSession::DoFixedSequenceNameL(const RMmfIpcMessage& aMessage)
sl@0
   591
	{
sl@0
   592
	TPckgBuf<TInt> seqNum;
sl@0
   593
	aMessage.ReadL(0, seqNum);
sl@0
   594
	aMessage.WriteL(2, iBody->FixedSequenceName(seqNum()).Left(KMaxFixedSequenceNameLength));
sl@0
   595
	return ETrue;
sl@0
   596
	}
sl@0
   597
sl@0
   598
TBool CMMFDevSoundSession::DoConvertInitL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   599
	{
sl@0
   600
	iBody->ConvertInitL();
sl@0
   601
	return ETrue;
sl@0
   602
	}
sl@0
   603
sl@0
   604
TBool CMMFDevSoundSession::DoConvertDataL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   605
	{
sl@0
   606
	iBody->ConvertData();
sl@0
   607
	return ETrue;
sl@0
   608
	}
sl@0
   609
sl@0
   610
TBool CMMFDevSoundSession::DoFixedSequenceCountL(const RMmfIpcMessage& aMessage)
sl@0
   611
	{
sl@0
   612
	TPckgBuf<TInt> fixSeqCountPckg;
sl@0
   613
	TInt fixSeqCount = iBody->FixedSequenceCount();
sl@0
   614
	fixSeqCountPckg = fixSeqCount;
sl@0
   615
sl@0
   616
	aMessage.WriteL(TInt(0),fixSeqCountPckg);
sl@0
   617
	return ETrue;
sl@0
   618
	}
sl@0
   619
sl@0
   620
sl@0
   621
TBool CMMFDevSoundSession::DoCopyFourCCArrayDataL(const RMmfIpcMessage& aMessage)
sl@0
   622
	{
sl@0
   623
	const TInt KBufExpandSize8 = 8;//two TInts
sl@0
   624
	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
sl@0
   625
	CleanupStack::PushL(dataCopyBuffer);
sl@0
   626
	RBufWriteStream stream;
sl@0
   627
	stream.Open(*dataCopyBuffer);
sl@0
   628
	CleanupClosePushL(stream);
sl@0
   629
	for (TInt i=0;i<iArray.Count();i++)
sl@0
   630
		{
sl@0
   631
		stream.WriteInt32L(iArray[i].FourCC());
sl@0
   632
		}
sl@0
   633
	aMessage.WriteL(TInt(2), dataCopyBuffer->Ptr(0));
sl@0
   634
	stream.Close();
sl@0
   635
	CleanupStack::PopAndDestroy(2);//iDataCopyBuffer, stream
sl@0
   636
	return ETrue;
sl@0
   637
	}
sl@0
   638
sl@0
   639
sl@0
   640
TBool CMMFDevSoundSession::DoGetRecordedBufferL(const RMmfIpcMessage& aMessage)
sl@0
   641
	{
sl@0
   642
	MmfMessageUtil::Write(aMessage, TInt(0), iBufferRecord->Data());
sl@0
   643
	return ETrue;
sl@0
   644
	}
sl@0
   645
sl@0
   646
sl@0
   647
TBool CMMFDevSoundSession::DoInitializeCompleteEventL(const RMmfIpcMessage& aMessage)
sl@0
   648
	{
sl@0
   649
	if (iICMessage)
sl@0
   650
		{
sl@0
   651
		delete iICMessage;
sl@0
   652
		iICMessage = NULL;
sl@0
   653
		}
sl@0
   654
	iICMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   655
	return EFalse;
sl@0
   656
	}
sl@0
   657
sl@0
   658
TBool CMMFDevSoundSession::DoCancelInitializeCompleteEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   659
	{
sl@0
   660
	if(iICMessage)
sl@0
   661
		iICMessage->Complete(KErrCancel);
sl@0
   662
	return ETrue;
sl@0
   663
	}
sl@0
   664
sl@0
   665
sl@0
   666
TBool CMMFDevSoundSession::DoBufferToBeFilledEventL(const RMmfIpcMessage& aMessage)
sl@0
   667
	{
sl@0
   668
	if(iBTBFMessage)
sl@0
   669
		{
sl@0
   670
		delete iBTBFMessage;
sl@0
   671
		iBTBFMessage = NULL;
sl@0
   672
		}
sl@0
   673
	iBTBFMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   674
	return EFalse;
sl@0
   675
	}
sl@0
   676
sl@0
   677
TBool CMMFDevSoundSession::DoCancelBufferToBeFilledEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   678
	{
sl@0
   679
	if(iBTBFMessage)
sl@0
   680
		iBTBFMessage->Complete(KErrCancel);
sl@0
   681
	return ETrue;
sl@0
   682
	}
sl@0
   683
sl@0
   684
TBool CMMFDevSoundSession::DoBufferToBeEmptiedEventL(const RMmfIpcMessage& aMessage)
sl@0
   685
	{
sl@0
   686
	if(iBTBEMessage)
sl@0
   687
		{
sl@0
   688
		delete iBTBEMessage;
sl@0
   689
		iBTBEMessage = NULL;
sl@0
   690
		}
sl@0
   691
	iBTBEMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   692
	return EFalse;
sl@0
   693
	}
sl@0
   694
sl@0
   695
TBool CMMFDevSoundSession::DoCancelBufferToBeEmptiedEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   696
	{
sl@0
   697
	if(iBTBEMessage)
sl@0
   698
		iBTBEMessage->Complete(KErrCancel);
sl@0
   699
	return ETrue;
sl@0
   700
	}
sl@0
   701
sl@0
   702
TBool CMMFDevSoundSession::DoPlayErrorEventL(const RMmfIpcMessage& aMessage)
sl@0
   703
	{
sl@0
   704
	if(iPEMessage)
sl@0
   705
		{
sl@0
   706
		delete iPEMessage;
sl@0
   707
		iPEMessage = NULL;
sl@0
   708
		}
sl@0
   709
	iPEMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   710
	return EFalse;
sl@0
   711
	}
sl@0
   712
sl@0
   713
TBool CMMFDevSoundSession::DoCancelPlayErrorEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   714
	{
sl@0
   715
	if(iPEMessage)
sl@0
   716
		iPEMessage->Complete(KErrCancel);
sl@0
   717
	return ETrue;
sl@0
   718
	}
sl@0
   719
sl@0
   720
TBool CMMFDevSoundSession::DoRecordErrorEventL(const RMmfIpcMessage& aMessage)
sl@0
   721
	{
sl@0
   722
	if(iREMessage)
sl@0
   723
		{
sl@0
   724
		delete iREMessage;
sl@0
   725
		iREMessage = NULL;
sl@0
   726
		}
sl@0
   727
	iREMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   728
	return EFalse;
sl@0
   729
	}
sl@0
   730
sl@0
   731
TBool CMMFDevSoundSession::DoCancelRecordErrorEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   732
	{
sl@0
   733
	if(iREMessage)
sl@0
   734
		iREMessage->Complete(KErrCancel);
sl@0
   735
	return ETrue;
sl@0
   736
	}
sl@0
   737
sl@0
   738
TBool CMMFDevSoundSession::DoToneFinishedEventL(const RMmfIpcMessage& aMessage)
sl@0
   739
	{
sl@0
   740
	if(iTFMessage)
sl@0
   741
		{
sl@0
   742
		delete iTFMessage;
sl@0
   743
		iTFMessage = NULL;
sl@0
   744
		}
sl@0
   745
	iTFMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   746
	return EFalse;
sl@0
   747
	}
sl@0
   748
sl@0
   749
TBool CMMFDevSoundSession::DoCancelToneFinishedEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   750
	{
sl@0
   751
	if(iTFMessage)
sl@0
   752
		iTFMessage->Complete(KErrCancel);
sl@0
   753
	return ETrue;
sl@0
   754
	}
sl@0
   755
sl@0
   756
TBool CMMFDevSoundSession::DoSendEventToClientEventL(const RMmfIpcMessage& aMessage)
sl@0
   757
	{
sl@0
   758
	if(iSETCMessage)
sl@0
   759
		{
sl@0
   760
		delete iSETCMessage;
sl@0
   761
		iSETCMessage = NULL;
sl@0
   762
		}
sl@0
   763
	iSETCMessage = new (ELeave) RMmfIpcMessage(aMessage);
sl@0
   764
	return EFalse;
sl@0
   765
	}
sl@0
   766
sl@0
   767
TBool CMMFDevSoundSession::DoCancelSendEventToClientEventL(const RMmfIpcMessage& /*aMessage*/)
sl@0
   768
	{
sl@0
   769
	if(iSETCMessage)
sl@0
   770
		iSETCMessage->Complete(KErrCancel);
sl@0
   771
	return ETrue;
sl@0
   772
	}
sl@0
   773
sl@0
   774
TBool CMMFDevSoundSession::DoRegisterAsClientL(const RMmfIpcMessage& aMessage)
sl@0
   775
	{
sl@0
   776
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   777
	aMessage.ReadL(0,buf);
sl@0
   778
	HBufC8* notificationRegistrationData = NULL;
sl@0
   779
	notificationRegistrationData = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesLengthL(1)));
sl@0
   780
	TPtr8 dataPtr(notificationRegistrationData->Des());  	
sl@0
   781
	aMessage.ReadL(1,dataPtr);
sl@0
   782
	TInt err = KErrNone;
sl@0
   783
	err = iBody->RegisterAsClient(buf().iNotificationEventUid,dataPtr);
sl@0
   784
	CleanupStack::PopAndDestroy(1); // Notification Registeration data
sl@0
   785
	if (err != KErrNone)
sl@0
   786
		{
sl@0
   787
		aMessage.Complete(err);
sl@0
   788
		return EFalse;		
sl@0
   789
		}
sl@0
   790
	return ETrue;
sl@0
   791
	}
sl@0
   792
	
sl@0
   793
TBool CMMFDevSoundSession::DoCancelRegisterAsClientL(const RMmfIpcMessage& aMessage)
sl@0
   794
	{
sl@0
   795
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   796
	aMessage.ReadL(0,buf);
sl@0
   797
	TInt err = KErrNone;
sl@0
   798
	err = iBody->CancelRegisterAsClient(buf().iNotificationEventUid);
sl@0
   799
	if (err != KErrNone)
sl@0
   800
		{
sl@0
   801
		aMessage.Complete(err);
sl@0
   802
		return EFalse;		
sl@0
   803
		}
sl@0
   804
	return ETrue;
sl@0
   805
	}
sl@0
   806
sl@0
   807
TBool CMMFDevSoundSession::DoGetResourceNotificationDataL(const RMmfIpcMessage& aMessage)
sl@0
   808
	{
sl@0
   809
	TMMFDevSoundProxySettingsPckg buf;
sl@0
   810
	aMessage.ReadL(0,buf);
sl@0
   811
	HBufC8* notificationData = NULL;
sl@0
   812
	notificationData = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesMaxLengthL(2)));
sl@0
   813
	TPtr8 dataPtr(notificationData->Des());  	
sl@0
   814
	aMessage.ReadL(2,dataPtr);
sl@0
   815
	TInt err = KErrNone;
sl@0
   816
	err = iBody->GetResourceNotificationData(buf().iNotificationEventUid,dataPtr);
sl@0
   817
	aMessage.WriteL(2,*notificationData);
sl@0
   818
	CleanupStack::PopAndDestroy(1); // Notification data
sl@0
   819
	if (err != KErrNone)
sl@0
   820
		{
sl@0
   821
		aMessage.Complete(err);
sl@0
   822
		return EFalse;		
sl@0
   823
		}
sl@0
   824
	return ETrue;
sl@0
   825
	}
sl@0
   826
sl@0
   827
TBool CMMFDevSoundSession::DoWillResumePlayL(const RMmfIpcMessage& aMessage)
sl@0
   828
	{
sl@0
   829
	TInt err = KErrNone;
sl@0
   830
	if(CheckClientCapabilities())
sl@0
   831
		{
sl@0
   832
		err = iBody->WillResumePlay();
sl@0
   833
		}
sl@0
   834
	else
sl@0
   835
		{
sl@0
   836
		err = KErrPermissionDenied;
sl@0
   837
		}
sl@0
   838
		
sl@0
   839
	if (err != KErrNone)
sl@0
   840
		{
sl@0
   841
		aMessage.Complete(err);
sl@0
   842
		return EFalse;		
sl@0
   843
		}
sl@0
   844
	return ETrue;
sl@0
   845
	}
sl@0
   846
sl@0
   847
TBool CMMFDevSoundSession::DoSetClientThreadInfoL(const RMmfIpcMessage& aMessage)
sl@0
   848
	{
sl@0
   849
	if (aMessage.HasCapability(ECapabilityMultimediaDD))
sl@0
   850
		{		
sl@0
   851
		TPckgBuf<TThreadId> threadId;
sl@0
   852
		aMessage.ReadL(0, threadId);
sl@0
   853
		
sl@0
   854
		CMMFDevSoundServer* server = 
sl@0
   855
			const_cast<CMMFDevSoundServer*>(static_cast<const CMMFDevSoundServer*>(Server()));
sl@0
   856
		server->SetClientCapabilitiesL(threadId());
sl@0
   857
		iClientHasCaps = server->CheckClientCapabilities();
sl@0
   858
		}
sl@0
   859
	else
sl@0
   860
		{
sl@0
   861
		User::Leave(KErrPermissionDenied);
sl@0
   862
		}
sl@0
   863
	
sl@0
   864
	return ETrue;
sl@0
   865
	}
sl@0
   866
sl@0
   867
void CMMFDevSoundSession::SendEventToClient(/*TMMFAudioPolicyEvent& aEvent*/)
sl@0
   868
	{
sl@0
   869
	}
sl@0
   870
sl@0
   871
sl@0
   872
/*
sl@0
   873
 *
sl@0
   874
 *	Default Constructor.
sl@0
   875
 *
sl@0
   876
 *
sl@0
   877
 */
sl@0
   878
CMMFDevSoundSession::CMMFDevSoundSession()
sl@0
   879
	{
sl@0
   880
	}
sl@0
   881
sl@0
   882
CMMFDevSoundSession::~CMMFDevSoundSession()
sl@0
   883
	{
sl@0
   884
	delete iBTBFMessage;
sl@0
   885
	delete iBTBEMessage;
sl@0
   886
	delete iPEMessage;
sl@0
   887
	delete iREMessage;
sl@0
   888
	delete iTFMessage;
sl@0
   889
	delete iICMessage;
sl@0
   890
	delete iSETCMessage;
sl@0
   891
	iArray.Close();
sl@0
   892
	delete iDTMFString;
sl@0
   893
	delete iToneSeqBuf;
sl@0
   894
	delete iBody;
sl@0
   895
sl@0
   896
	CMMFDevSoundServer* server = 
sl@0
   897
		const_cast<CMMFDevSoundServer*>(static_cast<const CMMFDevSoundServer*>(Server()));
sl@0
   898
	if (server)
sl@0
   899
		{
sl@0
   900
		server->DecrementSessionId();		
sl@0
   901
		}
sl@0
   902
	}
sl@0
   903
sl@0
   904
/*
sl@0
   905
 *  -doxygen comments moved to header-
sl@0
   906
 *
sl@0
   907
 *	Constructs, and returns a pointer to, a new CMMFDevSoundProxy object.
sl@0
   908
 *
sl@0
   909
 *	Leaves on failure.
sl@0
   910
 *
sl@0
   911
 */
sl@0
   912
CMMFDevSoundSession* CMMFDevSoundSession::NewL(RServer2& aPolicyServerHandle)
sl@0
   913
	{
sl@0
   914
	CMMFDevSoundSession* self = new (ELeave) CMMFDevSoundSessionXtnd;
sl@0
   915
	CleanupStack::PushL(self);
sl@0
   916
	self->ConstructL(aPolicyServerHandle);
sl@0
   917
	CleanupStack::Pop();
sl@0
   918
	return self;
sl@0
   919
	}
sl@0
   920
sl@0
   921
/*
sl@0
   922
 *  -doxygen comments moved to header-
sl@0
   923
 *
sl@0
   924
 *	Second phase constructor.
sl@0
   925
 *
sl@0
   926
 */
sl@0
   927
void CMMFDevSoundSession::ConstructL(RServer2& aPolicyServerHandle)
sl@0
   928
	{
sl@0
   929
	iBody = CMMFDevSoundSvrImp::NewL(static_cast<CMMFDevSoundSessionXtnd*>(this));
sl@0
   930
	iBody->Construct3L(aPolicyServerHandle);
sl@0
   931
	}
sl@0
   932
sl@0
   933
//callbacks
sl@0
   934
void CMMFDevSoundSession::InitializeComplete(TInt aError)
sl@0
   935
	{
sl@0
   936
	if (iICMessage)
sl@0
   937
		{
sl@0
   938
		iICMessage->Complete(aError);
sl@0
   939
		delete iICMessage;
sl@0
   940
		iICMessage = NULL;
sl@0
   941
		}
sl@0
   942
	}
sl@0
   943
sl@0
   944
void CMMFDevSoundSession::ToneFinished(TInt aError)
sl@0
   945
	{
sl@0
   946
	iTFMessage->Complete(aError);
sl@0
   947
	delete iTFMessage;
sl@0
   948
	iTFMessage = NULL;
sl@0
   949
	}
sl@0
   950
sl@0
   951
void CMMFDevSoundSession::BufferToBeFilled(CMMFBuffer* aBuffer)
sl@0
   952
	{
sl@0
   953
	/* store here "aBuffer" to be used later with PlayData*/
sl@0
   954
	iBufferPlay = reinterpret_cast<CMMFDataBuffer*>(aBuffer);
sl@0
   955
sl@0
   956
	TMMFDevSoundProxyHwBuf set;
sl@0
   957
	set.iBufferType = iBufferPlay->Type();
sl@0
   958
	set.iRequestSize = iBufferPlay->RequestSize();
sl@0
   959
	set.iBufferSize = iBufferPlay->Data().MaxLength();
sl@0
   960
	set.iLastBuffer = iBufferPlay->LastBuffer();
sl@0
   961
	TMMFDevSoundProxyHwBufPckg pckg(set);
sl@0
   962
	TInt err = MmfMessageUtil::Write(*iBTBFMessage, 0, pckg);
sl@0
   963
	iBTBFMessage->Complete(err);
sl@0
   964
	delete iBTBFMessage;
sl@0
   965
	iBTBFMessage = NULL;
sl@0
   966
	}
sl@0
   967
sl@0
   968
void CMMFDevSoundSession::PlayError(TInt aError)
sl@0
   969
	{
sl@0
   970
	if (iPEMessage)
sl@0
   971
		{
sl@0
   972
		iPEMessage->Complete(aError);
sl@0
   973
		delete iPEMessage;
sl@0
   974
		iPEMessage = NULL;
sl@0
   975
		}
sl@0
   976
	else
sl@0
   977
		{
sl@0
   978
		// need to send message but for some reason nobody to send to - just swallow
sl@0
   979
		__DEBUGGER() 
sl@0
   980
		}
sl@0
   981
	}
sl@0
   982
sl@0
   983
void CMMFDevSoundSession::BufferToBeEmptied(CMMFBuffer* aBuffer)
sl@0
   984
	{
sl@0
   985
	iBufferRecord = reinterpret_cast<CMMFDataBuffer*>(aBuffer);
sl@0
   986
sl@0
   987
	TMMFDevSoundProxyHwBuf set;
sl@0
   988
	set.iBufferType = iBufferRecord->Type();
sl@0
   989
	set.iRequestSize = iBufferRecord->RequestSize();
sl@0
   990
	set.iBufferSize = iBufferRecord->Data().MaxLength();
sl@0
   991
	set.iLastBuffer = iBufferRecord->LastBuffer();
sl@0
   992
	TMMFDevSoundProxyHwBufPckg pckg(set);
sl@0
   993
	TInt err = MmfMessageUtil::Write(*iBTBEMessage, 0, pckg);
sl@0
   994
	iBTBEMessage->Complete(err);
sl@0
   995
	delete iBTBEMessage;
sl@0
   996
	iBTBEMessage = NULL;
sl@0
   997
	}
sl@0
   998
sl@0
   999
void CMMFDevSoundSession::RecordError(TInt aError)
sl@0
  1000
	{
sl@0
  1001
	iREMessage->Complete(aError);
sl@0
  1002
	delete iREMessage;
sl@0
  1003
	iREMessage = NULL;
sl@0
  1004
	}
sl@0
  1005
sl@0
  1006
void CMMFDevSoundSession::ConvertError(TInt /*aError*/)
sl@0
  1007
	{
sl@0
  1008
	}
sl@0
  1009
void CMMFDevSoundSession::DeviceMessage(TUid /*aMessageType*/, const TDesC8& /*aMsg*/)
sl@0
  1010
	{
sl@0
  1011
	}
sl@0
  1012
sl@0
  1013
void CMMFDevSoundSession::SendEventToClient(const TMMFEvent& aEvent)
sl@0
  1014
	{
sl@0
  1015
	TMMFEventPckg iEventPckg(aEvent);
sl@0
  1016
	TInt err = MmfMessageUtil::Write(*iSETCMessage, 0, iEventPckg);
sl@0
  1017
	iSETCMessage->Complete(err);
sl@0
  1018
	delete iSETCMessage;
sl@0
  1019
	iSETCMessage = NULL;
sl@0
  1020
	}
sl@0
  1021
sl@0
  1022
/********************************************************************************
sl@0
  1023
 *				Non Exported public functions begins here						*
sl@0
  1024
 ********************************************************************************/
sl@0
  1025
sl@0
  1026
//
sl@0
  1027
//				Audio Policy specific implementation begins here				//
sl@0
  1028
//
sl@0
  1029
sl@0
  1030
/**
sl@0
  1031
 *
sl@0
  1032
 *	Sets Id for this instance of DevSound
sl@0
  1033
 *
sl@0
  1034
 *	@param	"TInt aDevSoundId"
sl@0
  1035
 *			Integer value assigned by Audio Policy Server
sl@0
  1036
 *
sl@0
  1037
 */
sl@0
  1038
void CMMFDevSoundSessionXtnd::SetDevSoundId(TInt aDevSoundId)
sl@0
  1039
	{
sl@0
  1040
	iBody->SetDevSoundId(aDevSoundId);
sl@0
  1041
	}
sl@0
  1042
sl@0
  1043
/**
sl@0
  1044
 *
sl@0
  1045
 *	Returns information about this DevSound instance.
sl@0
  1046
 *
sl@0
  1047
 *	This method is used by Audio Policy Server to make audio policy decisions.
sl@0
  1048
 *
sl@0
  1049
 *	@return	"TMMFDevSoundinfo"
sl@0
  1050
 *			A reference to TMMFDevSoundinfo object holding the current settings
sl@0
  1051
 *			of this DevSound instance.
sl@0
  1052
 *
sl@0
  1053
 */
sl@0
  1054
TMMFDevSoundInfo CMMFDevSoundSessionXtnd::DevSoundInfo()
sl@0
  1055
	{
sl@0
  1056
 	return iBody->DevSoundInfo();
sl@0
  1057
	}
sl@0
  1058
sl@0
  1059
/**
sl@0
  1060
 *
sl@0
  1061
 *	Called by Audio Policy Server when a request to play is approved by the 
sl@0
  1062
 *	Audio Policy Server.
sl@0
  1063
 *
sl@0
  1064
 *	Leaves on failure.
sl@0
  1065
 *
sl@0
  1066
 */
sl@0
  1067
void CMMFDevSoundSessionXtnd::StartPlayDataL()
sl@0
  1068
	{
sl@0
  1069
	iBody->StartPlayDataL();
sl@0
  1070
	}
sl@0
  1071
sl@0
  1072
/**
sl@0
  1073
 *
sl@0
  1074
 *	Called by Audio Policy Server when a request to record is approved by the 
sl@0
  1075
 *	Audio Policy Server.
sl@0
  1076
 *
sl@0
  1077
 *	Leaves on failure.
sl@0
  1078
 *
sl@0
  1079
 */
sl@0
  1080
void CMMFDevSoundSessionXtnd::StartRecordDataL()
sl@0
  1081
	{
sl@0
  1082
	iBody->StartRecordDataL();
sl@0
  1083
	}
sl@0
  1084
sl@0
  1085
/**
sl@0
  1086
 *
sl@0
  1087
 *	Called by Audio Policy Server when a request to play tone is approved by
sl@0
  1088
 *	the Audio Policy Server.
sl@0
  1089
 *
sl@0
  1090
 *	Leaves on failure.
sl@0
  1091
 *
sl@0
  1092
 */
sl@0
  1093
void CMMFDevSoundSessionXtnd::StartPlayToneL()
sl@0
  1094
	{
sl@0
  1095
	iBody->StartPlayToneL();
sl@0
  1096
	}
sl@0
  1097
sl@0
  1098
/**
sl@0
  1099
 *
sl@0
  1100
 *	Called by Audio Policy Server when a request to play a dual tone is approved by
sl@0
  1101
 *	the Audio Policy Server.
sl@0
  1102
 *
sl@0
  1103
 */
sl@0
  1104
void CMMFDevSoundSessionXtnd::StartPlayDualToneL()
sl@0
  1105
	{
sl@0
  1106
	iBody->StartPlayDualToneL();
sl@0
  1107
	}
sl@0
  1108
sl@0
  1109
/**
sl@0
  1110
 *
sl@0
  1111
 *	Called by Audio Policy Server when a request to play DTMF String is approved
sl@0
  1112
 *	by the Audio Policy Server.
sl@0
  1113
 *
sl@0
  1114
 *	Leaves on failure.
sl@0
  1115
 *
sl@0
  1116
 */
sl@0
  1117
void CMMFDevSoundSessionXtnd::StartPlayDTMFStringL()
sl@0
  1118
	{
sl@0
  1119
	iBody->StartPlayDTMFStringL();
sl@0
  1120
	}
sl@0
  1121
sl@0
  1122
/**
sl@0
  1123
 *
sl@0
  1124
 *	Called by Audio Policy Server when a request to play tone sequence is
sl@0
  1125
 *	approved by the Audio Policy Server.
sl@0
  1126
 *
sl@0
  1127
 *	Leaves on failure.
sl@0
  1128
 *
sl@0
  1129
 */
sl@0
  1130
void CMMFDevSoundSessionXtnd::StartPlayToneSequenceL()
sl@0
  1131
	{
sl@0
  1132
	iBody->StartPlayToneSequenceL();
sl@0
  1133
	}
sl@0
  1134
sl@0
  1135
/**
sl@0
  1136
 *
sl@0
  1137
 *	Called by Audio Policy Server when the current DevSound instance looses the
sl@0
  1138
 *	policy because of another instance with a higher priority wants the device.
sl@0
  1139
 *
sl@0
  1140
 */
sl@0
  1141
void CMMFDevSoundSessionXtnd::SendEvent(const TMMFEvent& aEvent)
sl@0
  1142
	{
sl@0
  1143
	iBody->SendEventToClient(aEvent);
sl@0
  1144
	}
sl@0
  1145
sl@0
  1146
sl@0
  1147
//
sl@0
  1148
//				Audio Policy specific implementation begins here				//
sl@0
  1149
//
sl@0
  1150
sl@0
  1151
/**
sl@0
  1152
 *
sl@0
  1153
 *	Updates the total bytes played.
sl@0
  1154
 *
sl@0
  1155
 */
sl@0
  1156
void CMMFDevSoundSessionXtnd::UpdateBytesPlayed()
sl@0
  1157
	{
sl@0
  1158
	iBody->UpdateBytesPlayed();
sl@0
  1159
	}
sl@0
  1160
sl@0
  1161
sl@0
  1162
sl@0
  1163