diff -r 000000000000 -r 79dd3e2336a0 devsound/devsoundrefplugin/src/platsec/server/AudioServer/MmfDevSoundSession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devsound/devsoundrefplugin/src/platsec/server/AudioServer/MmfDevSoundSession.h Fri Oct 08 19:40:43 2010 +0100 @@ -0,0 +1,203 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __MMFDEVSOUNDSESSION_H__ +#define __MMFDEVSOUNDSESSION_H__ + +#include +#include +#include +#include +#include +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include "MmfAudioClientServer.h" +#include +#include "MmfDevSoundCIDeMuxUtility.h" + +#include + +class CMMFAudioServer; +class CMMFDevSoundServer; +class CMMFDevSoundSvrImp; + +class CMMFDevSoundSession : public CMmfIpcSession, public MDevSoundObserver, + public MMMFDevSoundCustomInterfaceDeMuxInterface + { +public: + static CMMFDevSoundSession* NewL(RServer2& aPolicyServerHandle); + ~CMMFDevSoundSession(); + + void CreateL(const CMmfIpcServer& aServer); + void ServiceL(const RMmfIpcMessage& aMessage); + TInt DevSoundSessionId(void) {return iDevSoundSessionId;}; + void SendEventToClient(/*TMMFAudioServerEvent& aEvent*/); + TBool CheckClientCapabilities(); + + + TBool DoInitialize1L(const RMmfIpcMessage& aMessage); + TBool DoInitialize2L(const RMmfIpcMessage& aMessage); + TBool DoInitialize3L(const RMmfIpcMessage& aMessage); + TBool DoInitialize4L(const RMmfIpcMessage& aMessage); + TBool DoCapabilitiesL(const RMmfIpcMessage& aMessage); + TBool DoConfigL(const RMmfIpcMessage& aMessage); + TBool DoSetConfigL(const RMmfIpcMessage& aMessage); + TBool DoMaxVolumeL(const RMmfIpcMessage& aMessage); + TBool DoVolumeL(const RMmfIpcMessage& aMessage); + TBool DoSetVolumeL(const RMmfIpcMessage& aMessage); + TBool DoMaxGainL(const RMmfIpcMessage& aMessage); + TBool DoGainL(const RMmfIpcMessage& aMessage); + TBool DoSetGainL(const RMmfIpcMessage& aMessage); + TBool DoGetPlayBalanceL(const RMmfIpcMessage& aMessage); + TBool DoSetPlayBalanceL(const RMmfIpcMessage& aMessage); + TBool DoGetRecordBalanceL(const RMmfIpcMessage& aMessage); + TBool DoSetRecordBalanceL(const RMmfIpcMessage& aMessage); + TBool DoPlayInitL(const RMmfIpcMessage& aMessage); + TBool DoRecordInitL(const RMmfIpcMessage& aMessage); + TBool DoPlayDataL(const RMmfIpcMessage& aMessage); + TBool DoRecordDataL(const RMmfIpcMessage& aMessage); + TBool DoStopL(const RMmfIpcMessage& aMessage); + TBool DoPauseL(const RMmfIpcMessage& aMessage); + TBool DoPlayToneL(const RMmfIpcMessage& aMessage); + TBool DoPlayDualToneL(const RMmfIpcMessage& aMessage); + TBool DoPlayDTMFStringL(const RMmfIpcMessage& aMessage); + TBool DoPlayToneSequenceL(const RMmfIpcMessage& aMessage); + TBool DoPlayFixedSequenceL(const RMmfIpcMessage& aMessage); + TBool DoSetDTMFLengthsL(const RMmfIpcMessage& aMessage); + TBool DoSetVolumeRampL(const RMmfIpcMessage& aMessage); + TBool DoGetSupportedInputDataTypesL(const RMmfIpcMessage& aMessage); + TBool DoCopyFourCCArrayDataL(const RMmfIpcMessage& aMessage); + TBool DoGetRecordedBufferL(const RMmfIpcMessage& aMessage); + TBool DoSamplesRecordedL(const RMmfIpcMessage& aMessage); + TBool DoSamplesPlayedL(const RMmfIpcMessage& aMessage); + TBool DoSetToneRepeatsL(const RMmfIpcMessage& aMessage); + TBool DoSetPrioritySettingsL(const RMmfIpcMessage& aMessage); + TBool DoFixedSequenceNameL(const RMmfIpcMessage& aMessage); + TBool DoFixedSequenceCountL(const RMmfIpcMessage& aMessage); + TBool DoGetSupportedOutputDataTypesL(const RMmfIpcMessage& aMessage); + + TBool DoBufferToBeFilledDataL(const RMmfIpcMessage& aMessage); + TBool DoBufferToBeEmptiedDataL(const RMmfIpcMessage& aMessage); + TBool DoRegisterAsClientL(const RMmfIpcMessage& aMessage); + TBool DoCancelRegisterAsClientL(const RMmfIpcMessage& aMessage); + TBool DoGetResourceNotificationDataL(const RMmfIpcMessage& aMessage); + TBool DoWillResumePlayL(const RMmfIpcMessage& aMessage); + TBool DoEmptyBuffersL(const RMmfIpcMessage& aMessage); + TBool DoSetClientThreadInfoL(const RMmfIpcMessage& aMessage); + TBool DoGetTimePlayedL(const RMmfIpcMessage& aMessage); + + TBool DoSyncCustomCommandL(const RMmfIpcMessage& aMessage); + TBool DoSyncCustomCommandResultL(const RMmfIpcMessage& aMessage); + TBool DoAsyncCustomCommandL(const RMmfIpcMessage& aMessage); + TBool DoAsyncCustomCommandResultL(const RMmfIpcMessage& aMessage); + + // from MMMFDevSoundCustomInterfaceDeMuxInterface + virtual TInt DoOpenSlaveL(TUid aInterface, const TDesC8& aPackageBuf); + virtual void DoCloseSlaveL(TInt aHandle); + virtual TInt DoSendSlaveSyncCommandL(const RMmfIpcMessage& aMessage); + virtual TInt DoSendSlaveSyncCommandResultL(const RMmfIpcMessage& aMessage); + virtual void DoSendSlaveAsyncCommandL(const RMmfIpcMessage& aMessage); + virtual void DoSendSlaveAsyncCommandResultL(const RMmfIpcMessage& aMessage); + + + void InitializeL(MDevSoundObserver& aDevSoundObserver, TMMFState aMode); + void InitializeL(MDevSoundObserver& aDevSoundObserver, TUid aHWDev, TMMFState aMode); + void InitializeL(MDevSoundObserver& aDevSoundObserver, TFourCC aDesiredFourCC, TMMFState aMode); + + TMMFCapabilities Capabilities(); + TMMFCapabilities Config() const; + void SetConfigL(const TMMFCapabilities& aCaps); + TInt MaxVolume(); + TInt Volume(); + void SetVolume(TInt aVolume); + TInt MaxGain(); + TInt Gain(); + void SetGain(TInt aGain); + void GetPlayBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage); + void SetPlayBalanceL(TInt aLeftPercentage, TInt aRightPercentage); + void GetRecordBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage); + void SetRecordBalanceL(TInt aLeftPercentage, TInt aRightPercentage); + void PlayInitL(); + void RecordInitL(); + void PlayData(); + void RecordData(); + void Stop(); + void Pause(); + TInt SamplesRecorded(); + TInt SamplesPlayed(); + void PlayToneL(TInt aFrequency, const TTimeIntervalMicroSeconds& aDuration); + void PlayDualToneL(TInt aFrequencyOne, TInt aFrequencyTwo, const TTimeIntervalMicroSeconds& aDuration); + void PlayDTMFStringL(const TDesC& aDTMFString); + void PlayToneSequenceL(const TDesC8& aData); + void PlayFixedSequenceL(TInt aSequenceNumber); + void SetToneRepeats(TInt aRepeatCount, + const TTimeIntervalMicroSeconds& aRepeatTrailingSilence); + void SetDTMFLengths(TTimeIntervalMicroSeconds32& aToneOnLength, + TTimeIntervalMicroSeconds32& aToneOffLength, + TTimeIntervalMicroSeconds32& aPauseLength); + + void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration); + void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings); + + TAny* CustomInterface(TUid aInterfaceId); + TInt FixedSequenceCount(); + const TDesC& FixedSequenceName(TInt aSequenceNumber); + void GetSupportedInputDataTypesL(RArray& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) const; + void GetSupportedOutputDataTypesL(RArray& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) const; + + void InitializeComplete(TInt aError); + void ToneFinished(TInt aError); + void BufferToBeFilled(CMMFBuffer* aBuffer); + void PlayError(TInt aError); + void BufferToBeEmptied(CMMFBuffer* aBuffer); + void RecordError(TInt aError); + void ConvertError(TInt aError); + void DeviceMessage(TUid aMessageType, const TDesC8& aMsg); + void SendEventToClient(const TMMFEvent& aEvent); + + TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData = KNullDesC8); + TInt CancelRegisterAsClient(TUid aEventType); + TInt GetResourceNotificationData(TUid aEventType, TDes8& aNotificationData); + TInt WillResumePlay(); + + +protected: + CMMFDevSoundSession(); + void ConstructL(RServer2& aPolicyServerHandle); + CMMFDevSoundSvrImp* iBody; + +private: + TInt iDevSoundSessionId; + CMMFDataBuffer* iBufferPlay; + CMMFDataBuffer* iBufferRecord; + RArray iArray; + HBufC* iDTMFString; + HBufC8* iToneSeqBuf; + TBool iClientHasCaps; + + RMsgQueue iMsgQueue; // replaces the messages / AO handlers + TMMFDevSoundProxyHwBufPckg iHwBufPckgFill; // data store for 2-stage asynch message passing + TMMFDevSoundProxyHwBufPckg iHwBufPckgEmpty; // data store for 2-stage asynch message passing + + // array of custom interface pairs + RArray iCustomInterfaceArray; + CMMFDevSoundCIDeMuxUtility* iDeMuxUtility; + }; + + + +#endif