sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include "MmfDevSoundProxy.h" sl@0: #include "MmfDevSoundServerStart.h" sl@0: #include "MmfBase.hrh" sl@0: #include "MmfAudioClientServer.h" sl@0: #include sl@0: #include sl@0: sl@0: sl@0: /** sl@0: @internalTechnology sl@0: sl@0: This function raises a panic sl@0: sl@0: @param aError sl@0: one of the several panic codes that may be raised by this dll sl@0: sl@0: @panic EMMFDevSoundProxyPlayDataWithoutInitialize is raised when playdata is called without initialization sl@0: @panic EMMFDevSoundProxyRecordDataWithoutInitialize is raised when recorddata is called without initialization sl@0: @panic EMMFDevSoundProxyConvertDataWithoutInitialize is raised when convertdata is called without initialization sl@0: */ sl@0: GLDEF_C void Panic(TMMFDevSoundProxyPanicCodes aPanicCode) sl@0: { sl@0: User::Panic(KMMFDevSoundProxyPanicCategory, aPanicCode); sl@0: } sl@0: sl@0: EXPORT_C RMMFDevSoundProxy::RMMFDevSoundProxy() sl@0: : iBuffer(NULL), iSeqName(NULL), iMsgQueueHandle(NULL), iAudioServerProxy (NULL) sl@0: { sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::Close() sl@0: { sl@0: RMmfSessionBase::Close(); sl@0: iState = EIdle; sl@0: if(iAudioServerProxy) sl@0: { sl@0: iAudioServerProxy->Close(); sl@0: delete iAudioServerProxy; sl@0: } sl@0: delete iBuffer; sl@0: delete iSeqName; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::Open(RHandleBase& aMsgQueueHandle) sl@0: { sl@0: TInt err = KErrNone; sl@0: iMsgQueueHandle = &aMsgQueueHandle; sl@0: TRAP(err, iSeqName = HBufC::NewL(KMaxFixedSequenceNameLength)); sl@0: if(err == KErrNone) sl@0: { sl@0: TRAP(err, iAudioServerProxy = new (ELeave) RMMFAudioServerProxy()); sl@0: if(err == KErrNone) sl@0: { sl@0: err = iAudioServerProxy->Open(); sl@0: if(err == KErrNone) sl@0: { sl@0: err = SetReturnedHandle(iAudioServerProxy->GetDevSoundSessionHandle()); sl@0: } sl@0: } sl@0: } sl@0: if(err) sl@0: { sl@0: Close(); sl@0: } sl@0: sl@0: return err; sl@0: } sl@0: EXPORT_C TInt RMMFDevSoundProxy::SetDevSoundInfo() sl@0: { sl@0: return SendReceive(EMMFAudioLaunchRequests); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::InitializeL(TMMFState aMode) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iMode = aMode; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: TIpcArgs args(&pckg, *iMsgQueueHandle); sl@0: return RSessionBase::SendReceive(EMMFDevSoundProxyInitialize1, args); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::InitializeL(TUid aHWDev, TMMFState aMode) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iHWDev = aHWDev; sl@0: set.iMode = aMode; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: TIpcArgs args(&pckg, *iMsgQueueHandle); sl@0: return RSessionBase::SendReceive(EMMFDevSoundProxyInitialize2, args); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::InitializeL(TFourCC aDesiredFourCC, TMMFState aMode) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iDesiredFourCC = aDesiredFourCC; sl@0: set.iMode = aMode; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: TIpcArgs args(&pckg, *iMsgQueueHandle); sl@0: return RSessionBase::SendReceive(EMMFDevSoundProxyInitialize4, args); sl@0: } sl@0: sl@0: EXPORT_C TMMFCapabilities RMMFDevSoundProxy::Capabilities() sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceiveResult(EMMFDevSoundProxyCapabilities,KNullDesC8,KNullDesC8,pckg); sl@0: return pckg().iCaps; sl@0: } sl@0: sl@0: EXPORT_C TMMFCapabilities RMMFDevSoundProxy::Config() sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceiveResult(EMMFDevSoundProxyConfig,KNullDesC8,KNullDesC8,pckg); sl@0: return pckg().iConfig; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::SetConfigL(const TMMFCapabilities& aConfig) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iConfig = aConfig; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: TInt err = SendReceive(EMMFDevSoundProxySetConfig, pckg); sl@0: User::LeaveIfError(err); sl@0: return err; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::MaxVolume() sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceiveResult(EMMFDevSoundProxyMaxVolume,KNullDesC8,KNullDesC8,pckg); sl@0: return pckg().iMaxVolume; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::Volume() sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceiveResult(EMMFDevSoundProxyVolume,KNullDesC8,KNullDesC8,pckg); sl@0: return pckg().iVolume; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::SetVolume(TInt aVolume) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iVolume = aVolume; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: return SendReceive(EMMFDevSoundProxySetVolume, pckg); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::MaxGain() sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceiveResult(EMMFDevSoundProxyMaxGain,KNullDesC8,KNullDesC8,pckg); sl@0: return pckg().iMaxGain; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::Gain() sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceiveResult(EMMFDevSoundProxyGain,KNullDesC8,KNullDesC8,pckg); sl@0: return pckg().iGain; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::SetGain(TInt aGain) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iGain = aGain; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: return SendReceive(EMMFDevSoundProxySetGain, pckg); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::GetPlayBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: User::LeaveIfError(SendReceiveResult(EMMFDevSoundProxyPlayBalance,KNullDesC8,KNullDesC8,pckg)); sl@0: aLeftPercentage = pckg().iLeftPercentage; sl@0: aRightPercentage = pckg().iRightPercentage; sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetPlayBalanceL(TInt aLeftPercentage, TInt aRightPercentage) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iLeftPercentage = aLeftPercentage; sl@0: set.iRightPercentage = aRightPercentage; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxySetPlayBalance, pckg)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::GetRecordBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: User::LeaveIfError(SendReceiveResult(EMMFDevSoundProxyRecordBalance,KNullDesC8,KNullDesC8,pckg)); sl@0: aLeftPercentage = pckg().iLeftPercentage; sl@0: aRightPercentage = pckg().iRightPercentage; sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetRecordBalanceL(TInt aLeftPercentage, TInt aRightPercentage) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iLeftPercentage = aLeftPercentage; sl@0: set.iRightPercentage = aRightPercentage; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxySetRecordBalance, pckg)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayInitL() sl@0: { sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyPlayInit)); sl@0: iState = EPlaying; sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::RecordInitL() sl@0: { sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyRecordInit)); sl@0: iState = ERecording; sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayData() sl@0: { sl@0: __ASSERT_ALWAYS(iState == EPlaying, Panic(EMMFDevSoundProxyPlayDataWithoutInitialize)); sl@0: sl@0: TMMFDevSoundProxyHwBuf set; sl@0: set.iLastBuffer = iBuffer->LastBuffer(); sl@0: TMMFDevSoundProxyHwBufPckg pckg(set); sl@0: SendReceive(EMMFDevSoundProxyPlayData, pckg, iBuffer->Data()); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::RecordData() sl@0: { sl@0: __ASSERT_ALWAYS(iState == ERecording, Panic(EMMFDevSoundProxyRecordDataWithoutInitialize)); sl@0: SendReceive(EMMFDevSoundProxyRecordData); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::Stop() sl@0: { sl@0: SendReceive(EMMFDevSoundProxyStop); sl@0: iState = EIdle; sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::Pause() sl@0: { sl@0: SendReceive(EMMFDevSoundProxyPause); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayToneL(TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iFrequencyOne = aFrequency; sl@0: set.iDuration = aDuration; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyPlayTone, pckg)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayDualToneL(TInt aFrequencyOne, TInt aFrequencyTwo, const TTimeIntervalMicroSeconds& aDuration) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iFrequencyOne = aFrequencyOne; sl@0: set.iFrequencyTwo = aFrequencyTwo; sl@0: set.iDuration = aDuration; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyPlayDualTone, pckg)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayDTMFStringL(const TDesC& aDTMFString) sl@0: { sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyPlayDTMFString, aDTMFString)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayToneSequenceL(const TDesC8& aData) sl@0: { sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyPlayToneSequence, aData)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::PlayFixedSequenceL(TInt aSequenceNumber) sl@0: { sl@0: TPckgBuf seqNum(aSequenceNumber); sl@0: User::LeaveIfError(SendReceive(EMMFDevSoundProxyPlayFixedSequence, seqNum)); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetDTMFLengths(TTimeIntervalMicroSeconds32& aToneOnLength, sl@0: TTimeIntervalMicroSeconds32& aToneOffLength, sl@0: TTimeIntervalMicroSeconds32& aPauseLength) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iToneOnLength = aToneOnLength; sl@0: set.iToneOffLength = aToneOffLength; sl@0: set.iPauseLength = aPauseLength; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceive(EMMFDevSoundProxySetDTMFLengths, pckg); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iDuration = aRampDuration; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: SendReceive(EMMFDevSoundProxySetVolumeRamp, pckg); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::GetSupportedInputDataTypesL(RArray& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) sl@0: { sl@0: aSupportedDataTypes.Reset(); sl@0: sl@0: TMMFPrioritySettings prioritySet = aPrioritySettings; sl@0: TMMFPrioritySettingsPckg pckg(prioritySet); sl@0: sl@0: TPckgBuf numberOfElementsPckg; sl@0: User::LeaveIfError(SendReceiveResult(EMMFDevSoundProxyGetSupportedInputDataTypes, pckg, KNullDesC8, numberOfElementsPckg)); sl@0: sl@0: HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TFourCC)); sl@0: TPtr8 ptr = buf->Des(); sl@0: sl@0: sl@0: User::LeaveIfError(SendReceiveResult(EMMFDevSoundProxyCopyFourCCArrayData,KNullDesC8,KNullDesC8,ptr)); sl@0: RDesReadStream stream(ptr); sl@0: CleanupClosePushL(stream); sl@0: sl@0: for (TInt i=0; i& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) sl@0: { sl@0: aSupportedDataTypes.Reset(); sl@0: sl@0: TMMFPrioritySettings prioritySet = aPrioritySettings; sl@0: TMMFPrioritySettingsPckg pckg(prioritySet); sl@0: sl@0: TPckgBuf numberOfElementsPckg; sl@0: User::LeaveIfError(SendReceiveResult(EMMFDevSoundProxyGetSupportedOutputDataTypes, pckg, KNullDesC8, numberOfElementsPckg)); sl@0: sl@0: HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TFourCC)); sl@0: TPtr8 ptr = buf->Des(); sl@0: sl@0: sl@0: User::LeaveIfError(SendReceiveResult(EMMFDevSoundProxyCopyFourCCArrayData,KNullDesC8,KNullDesC8,ptr)); sl@0: RDesReadStream stream(ptr); sl@0: CleanupClosePushL(stream); sl@0: sl@0: for (TInt i=0; i numSamples; sl@0: SendReceiveResult(EMMFDevSoundProxySamplesRecorded, KNullDesC8, KNullDesC8, numSamples); sl@0: return numSamples(); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::SamplesPlayed() sl@0: { sl@0: TPckgBuf numSamples; sl@0: SendReceiveResult(EMMFDevSoundProxySamplesPlayed, KNullDesC8, KNullDesC8, numSamples); sl@0: return numSamples(); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetToneRepeats(TInt aRepeatCount, const TTimeIntervalMicroSeconds& aRepeatTrailingSilence) sl@0: { sl@0: TPckgBuf countRepeat(aRepeatCount); sl@0: TPckgBuf repeatTS(aRepeatTrailingSilence); sl@0: SendReceive(EMMFDevSoundProxySetToneRepeats, countRepeat, repeatTS); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings) sl@0: { sl@0: TPckgBuf prioritySet(aPrioritySettings); sl@0: SendReceive(EMMFDevSoundProxySetPrioritySettings, prioritySet); sl@0: } sl@0: sl@0: EXPORT_C const TDesC& RMMFDevSoundProxy::FixedSequenceName(TInt aSequenceNumber) sl@0: { sl@0: TPckgBuf seqNum(aSequenceNumber); sl@0: TPtr SeqNamePtr = iSeqName->Des(); sl@0: SeqNamePtr.FillZ(); sl@0: SendReceiveResult(EMMFDevSoundProxyFixedSequenceName, seqNum, KNullDesC8, SeqNamePtr); sl@0: return *iSeqName; sl@0: } sl@0: sl@0: EXPORT_C TAny* RMMFDevSoundProxy::CustomInterface(TUid /*aInterfaceId*/) sl@0: { sl@0: // No custom interfaces are supported at the moment so return NULL. sl@0: //TO DO sl@0: return NULL; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::FixedSequenceCount() sl@0: { sl@0: TPckgBuf fixSeqCountPckg; sl@0: SendReceiveResult(EMMFDevSoundProxyFixedSequenceCount, fixSeqCountPckg); sl@0: return fixSeqCountPckg(); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::BufferToBeFilledData(TMMFDevSoundProxyHwBufPckg& aSetPckg) sl@0: { sl@0: // Note that there will only ever be one of these requests outstanding per session sl@0: return SendReceiveResult(EMMFDevSoundProxyBTBFData, aSetPckg); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::BufferToBeEmptiedData(TMMFDevSoundProxyHwBufPckg& aSetPckg) sl@0: { sl@0: // Note that there will only ever be one of these requests outstanding per session sl@0: return SendReceiveResult(EMMFDevSoundProxyBTBEData, aSetPckg); sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::SetBuffer(CMMFDataBuffer* aBuffer) sl@0: { sl@0: if(iBuffer) sl@0: { sl@0: delete iBuffer; sl@0: } sl@0: iBuffer = aBuffer; sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::GetRecordedBufferL(CMMFDataBuffer& aBuffer) sl@0: { sl@0: return SendReceiveResult(EMMFDevSoundProxyGetRecordedBuffer, aBuffer.Data()); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iNotificationEventUid = aEventType; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: return SendReceive(EMMFDevSoundProxyRequestResourceNotification, pckg, aNotificationRegistrationData); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::CancelRegisterAsClient(TUid aEventType) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iNotificationEventUid = aEventType; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: return SendReceiveResult(EMMFDevSoundProxyCancelRequestResourceNotification, pckg); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::GetResourceNotificationData(TUid aEventType, TDes8& aNotificationData) sl@0: { sl@0: TMMFDevSoundProxySettings set; sl@0: set.iNotificationEventUid = aEventType; sl@0: TMMFDevSoundProxySettingsPckg pckg(set); sl@0: return SendReceiveResult(EMMFDevSoundProxyGetResourceNotificationData, pckg,KNullDesC8,aNotificationData); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::WillResumePlay() sl@0: { sl@0: return SendReceive(EMMFDevSoundProxyWillResumePlay); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::EmptyBuffers() sl@0: { sl@0: return SendReceive(EMMFDevSoundProxyEmptyBuffers); sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::GetTimePlayed(TTimeIntervalMicroSeconds& aTime) sl@0: { sl@0: TTimeIntervalMicroSeconds time(0); sl@0: TPckgBuf timePckg(time); sl@0: TInt err = SendReceiveResult(EMMFDevSoundProxyGetTimePlayed, KNullDesC8, KNullDesC8, timePckg); sl@0: if(err==KErrNone) sl@0: { sl@0: aTime = timePckg(); sl@0: } sl@0: return err; sl@0: } sl@0: sl@0: // implementation of a simple CustomCommand() scheme sl@0: EXPORT_C TInt RMMFDevSoundProxy::SyncCustomCommand(TUid aUid, const TDesC8& aParam1, const TDesC8& aParam2, TDes8* aOutParam) sl@0: { sl@0: // the UID of the custom command is passed as an integer so as maintain consistency with the async methods below sl@0: TInt command = aUid.iUid; sl@0: sl@0: if (aOutParam==NULL) sl@0: { sl@0: return SendReceive(EMMFDevSoundProxySyncCustomCommand, command, aParam1, aParam2); sl@0: } sl@0: else sl@0: { sl@0: return SendReceiveResult(EMMFDevSoundProxySyncCustomCommandResult, command, aParam1, aParam2, *aOutParam); sl@0: } sl@0: } sl@0: sl@0: EXPORT_C void RMMFDevSoundProxy::AsyncCustomCommand(TUid aUid, TRequestStatus& aStatus, const TDesC8& aParam1, const TDesC8& aParam2, TDes8* aOutParam) sl@0: { sl@0: // this seemingly only allows 1 simultaneous async call. Need an array of TRequestStatus for more than one call. sl@0: // the UID of the custom command is passed as an integer so as to prevent the need of a consistent UID array. sl@0: TInt command = aUid.iUid; sl@0: sl@0: if (aOutParam==NULL) sl@0: { sl@0: SendReceive(EMMFDevSoundProxyAsyncCustomCommand, command, aParam1, aParam2, aStatus); sl@0: } sl@0: else sl@0: { sl@0: SendReceiveResult(EMMFDevSoundProxyAsyncCustomCommandResult, command, aParam1, aParam2, *aOutParam, aStatus); sl@0: } sl@0: } sl@0: sl@0: EXPORT_C TInt RMMFDevSoundProxy::SetClientThreadInfo(TThreadId& aTid) sl@0: { sl@0: TPckgBuf threadId(aTid); sl@0: return SendReceive(EMMFDevSoundProxySetClientThreadInfo, threadId); sl@0: }