sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). // 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: #ifndef __MMFDEVSOUNDSESSION_H__ sl@0: #define __MMFDEVSOUNDSESSION_H__ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS sl@0: #include sl@0: #endif sl@0: #include sl@0: #include "MmfAudioClientServer.h" sl@0: #include sl@0: #include "MmfDevSoundCIDeMuxUtility.h" sl@0: sl@0: #include sl@0: sl@0: class CMMFAudioServer; sl@0: class CMMFDevSoundServer; sl@0: class CMMFDevSoundSvrImp; sl@0: sl@0: class CMMFDevSoundSession : public CMmfIpcSession, public MDevSoundObserver, sl@0: public MMMFDevSoundCustomInterfaceDeMuxInterface sl@0: { sl@0: public: sl@0: static CMMFDevSoundSession* NewL(RServer2& aPolicyServerHandle); sl@0: ~CMMFDevSoundSession(); sl@0: sl@0: void CreateL(const CMmfIpcServer& aServer); sl@0: void ServiceL(const RMmfIpcMessage& aMessage); sl@0: TInt DevSoundSessionId(void) {return iDevSoundSessionId;}; sl@0: void SendEventToClient(/*TMMFAudioServerEvent& aEvent*/); sl@0: TBool CheckClientCapabilities(); sl@0: sl@0: sl@0: TBool DoInitialize1L(const RMmfIpcMessage& aMessage); sl@0: TBool DoInitialize2L(const RMmfIpcMessage& aMessage); sl@0: TBool DoInitialize3L(const RMmfIpcMessage& aMessage); sl@0: TBool DoInitialize4L(const RMmfIpcMessage& aMessage); sl@0: TBool DoCapabilitiesL(const RMmfIpcMessage& aMessage); sl@0: TBool DoConfigL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetConfigL(const RMmfIpcMessage& aMessage); sl@0: TBool DoMaxVolumeL(const RMmfIpcMessage& aMessage); sl@0: TBool DoVolumeL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetVolumeL(const RMmfIpcMessage& aMessage); sl@0: TBool DoMaxGainL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGainL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetGainL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetPlayBalanceL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetPlayBalanceL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetRecordBalanceL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetRecordBalanceL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayInitL(const RMmfIpcMessage& aMessage); sl@0: TBool DoRecordInitL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayDataL(const RMmfIpcMessage& aMessage); sl@0: TBool DoRecordDataL(const RMmfIpcMessage& aMessage); sl@0: TBool DoStopL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPauseL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayToneL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayDualToneL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayDTMFStringL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayToneSequenceL(const RMmfIpcMessage& aMessage); sl@0: TBool DoPlayFixedSequenceL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetDTMFLengthsL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetVolumeRampL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetSupportedInputDataTypesL(const RMmfIpcMessage& aMessage); sl@0: TBool DoCopyFourCCArrayDataL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetRecordedBufferL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSamplesRecordedL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSamplesPlayedL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetToneRepeatsL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetPrioritySettingsL(const RMmfIpcMessage& aMessage); sl@0: TBool DoFixedSequenceNameL(const RMmfIpcMessage& aMessage); sl@0: TBool DoFixedSequenceCountL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetSupportedOutputDataTypesL(const RMmfIpcMessage& aMessage); sl@0: sl@0: TBool DoBufferToBeFilledDataL(const RMmfIpcMessage& aMessage); sl@0: TBool DoBufferToBeEmptiedDataL(const RMmfIpcMessage& aMessage); sl@0: TBool DoRegisterAsClientL(const RMmfIpcMessage& aMessage); sl@0: TBool DoCancelRegisterAsClientL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetResourceNotificationDataL(const RMmfIpcMessage& aMessage); sl@0: TBool DoWillResumePlayL(const RMmfIpcMessage& aMessage); sl@0: TBool DoEmptyBuffersL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSetClientThreadInfoL(const RMmfIpcMessage& aMessage); sl@0: TBool DoGetTimePlayedL(const RMmfIpcMessage& aMessage); sl@0: sl@0: TBool DoSyncCustomCommandL(const RMmfIpcMessage& aMessage); sl@0: TBool DoSyncCustomCommandResultL(const RMmfIpcMessage& aMessage); sl@0: TBool DoAsyncCustomCommandL(const RMmfIpcMessage& aMessage); sl@0: TBool DoAsyncCustomCommandResultL(const RMmfIpcMessage& aMessage); sl@0: sl@0: // from MMMFDevSoundCustomInterfaceDeMuxInterface sl@0: virtual TInt DoOpenSlaveL(TUid aInterface, const TDesC8& aPackageBuf); sl@0: virtual void DoCloseSlaveL(TInt aHandle); sl@0: virtual TInt DoSendSlaveSyncCommandL(const RMmfIpcMessage& aMessage); sl@0: virtual TInt DoSendSlaveSyncCommandResultL(const RMmfIpcMessage& aMessage); sl@0: virtual void DoSendSlaveAsyncCommandL(const RMmfIpcMessage& aMessage); sl@0: virtual void DoSendSlaveAsyncCommandResultL(const RMmfIpcMessage& aMessage); sl@0: sl@0: sl@0: void InitializeL(MDevSoundObserver& aDevSoundObserver, TMMFState aMode); sl@0: void InitializeL(MDevSoundObserver& aDevSoundObserver, TUid aHWDev, TMMFState aMode); sl@0: void InitializeL(MDevSoundObserver& aDevSoundObserver, TFourCC aDesiredFourCC, TMMFState aMode); sl@0: sl@0: TMMFCapabilities Capabilities(); sl@0: TMMFCapabilities Config() const; sl@0: void SetConfigL(const TMMFCapabilities& aCaps); sl@0: TInt MaxVolume(); sl@0: TInt Volume(); sl@0: void SetVolume(TInt aVolume); sl@0: TInt MaxGain(); sl@0: TInt Gain(); sl@0: void SetGain(TInt aGain); sl@0: void GetPlayBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage); sl@0: void SetPlayBalanceL(TInt aLeftPercentage, TInt aRightPercentage); sl@0: void GetRecordBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage); sl@0: void SetRecordBalanceL(TInt aLeftPercentage, TInt aRightPercentage); sl@0: void PlayInitL(); sl@0: void RecordInitL(); sl@0: void PlayData(); sl@0: void RecordData(); sl@0: void Stop(); sl@0: void Pause(); sl@0: TInt SamplesRecorded(); sl@0: TInt SamplesPlayed(); sl@0: void PlayToneL(TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration); sl@0: void PlayDualToneL(TInt aFrequencyOne, TInt aFrequencyTwo, const TTimeIntervalMicroSeconds& aDuration); sl@0: void PlayDTMFStringL(const TDesC& aDTMFString); sl@0: void PlayToneSequenceL(const TDesC8& aData); sl@0: void PlayFixedSequenceL(TInt aSequenceNumber); sl@0: void SetToneRepeats(TInt aRepeatCount, sl@0: const TTimeIntervalMicroSeconds& aRepeatTrailingSilence); sl@0: void SetDTMFLengths(TTimeIntervalMicroSeconds32& aToneOnLength, sl@0: TTimeIntervalMicroSeconds32& aToneOffLength, sl@0: TTimeIntervalMicroSeconds32& aPauseLength); sl@0: sl@0: void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration); sl@0: void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings); sl@0: sl@0: TAny* CustomInterface(TUid aInterfaceId); sl@0: TInt FixedSequenceCount(); sl@0: const TDesC& FixedSequenceName(TInt aSequenceNumber); sl@0: void GetSupportedInputDataTypesL(RArray& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) const; sl@0: void GetSupportedOutputDataTypesL(RArray& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) const; sl@0: sl@0: void InitializeComplete(TInt aError); sl@0: void ToneFinished(TInt aError); sl@0: void BufferToBeFilled(CMMFBuffer* aBuffer); sl@0: void PlayError(TInt aError); sl@0: void BufferToBeEmptied(CMMFBuffer* aBuffer); sl@0: void RecordError(TInt aError); sl@0: void ConvertError(TInt aError); sl@0: void DeviceMessage(TUid aMessageType, const TDesC8& aMsg); sl@0: void SendEventToClient(const TMMFEvent& aEvent); sl@0: sl@0: TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData = KNullDesC8); sl@0: TInt CancelRegisterAsClient(TUid aEventType); sl@0: TInt GetResourceNotificationData(TUid aEventType, TDes8& aNotificationData); sl@0: TInt WillResumePlay(); sl@0: sl@0: sl@0: protected: sl@0: CMMFDevSoundSession(); sl@0: void ConstructL(RServer2& aPolicyServerHandle); sl@0: CMMFDevSoundSvrImp* iBody; sl@0: sl@0: private: sl@0: TInt iDevSoundSessionId; sl@0: CMMFDataBuffer* iBufferPlay; sl@0: CMMFDataBuffer* iBufferRecord; sl@0: RArray iArray; sl@0: HBufC* iDTMFString; sl@0: HBufC8* iToneSeqBuf; sl@0: TBool iClientHasCaps; sl@0: sl@0: RMsgQueue iMsgQueue; // replaces the messages / AO handlers sl@0: TMMFDevSoundProxyHwBufPckg iHwBufPckgFill; // data store for 2-stage asynch message passing sl@0: TMMFDevSoundProxyHwBufPckg iHwBufPckgEmpty; // data store for 2-stage asynch message passing sl@0: sl@0: // array of custom interface pairs sl@0: RArray iCustomInterfaceArray; sl@0: CMMFDevSoundCIDeMuxUtility* iDeMuxUtility; sl@0: }; sl@0: sl@0: sl@0: sl@0: #endif