devsound/devsoundrefplugin/src/platsec/server/AudioServer/MmfDevSoundSession.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/devsoundrefplugin/src/platsec/server/AudioServer/MmfDevSoundSession.h	Tue Feb 02 01:56:55 2010 +0200
@@ -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 <e32base.h>
+#include <e32std.h>
+#include <mmf/common/mmfbase.h>
+#include <mmf/common/mmfutilities.h>
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/common/mmfipc.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mmf/common/mmfipcserver.h>
+#endif
+#include <mmf/server/sounddevice.h>
+#include "MmfAudioClientServer.h"
+#include <mmf/server/mmfdevsoundcustominterface.h>
+#include "MmfDevSoundCIDeMuxUtility.h"
+
+#include <e32msgqueue.h>
+
+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<TFourCC>& aSupportedDataTypes, const TMMFPrioritySettings& aPrioritySettings) const;
+	void GetSupportedOutputDataTypesL(RArray<TFourCC>& 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<TFourCC> iArray;
+	HBufC* iDTMFString;
+	HBufC8* iToneSeqBuf;
+	TBool iClientHasCaps;
+	
+	RMsgQueue<TMMFDevSoundQueueItem> 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<TMMFDevSoundCustomInterfaceDeMuxData> iCustomInterfaceArray;
+	CMMFDevSoundCIDeMuxUtility* iDeMuxUtility;
+	};
+	
+	
+
+#endif