--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.h Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,1504 @@
+// Copyright (c) 2006-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 <e32msgqueue.h>
+#include <mmf/common/mmfbase.h>
+#include <mmf/common/mmfutilities.h>
+#include <mmf/common/mmfipc.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mmf/common/mmfipcserver.h>
+#endif
+#include <mmf/server/sounddevice.h>
+#include <a3f/mmfdevsoundcustominterfaceextensions.h>
+#include "mmfaudioclientserver.h"
+#include "mmfdevsoundadaptation.h"
+
+#include <mmf/server/mmfdevsoundcustominterface.h>
+#include "MmfDevSoundCIDeMuxUtility.h"
+#include <mmf/common/mcustominterface.h>
+
+// FORWARD DECLARATIONS
+class CMMFDevSoundServer;
+class CMMFDevSoundAdaptation;
+class MGlobalProperties;
+
+/**
+Panic category and codes that MMFDevSoundSession raises on the client
+*/
+_LIT(KMMFDevSoundSessionPanicCategory, "MMFDevSoundSession");
+
+enum TMMFDevSoundSessionPanicCodes
+ {
+ EMsgQueueFailedToSendMsg =1,
+ EQueueRequestsFailedToAppend
+ };
+
+// CLASS DECLARATION
+
+/*
+ This class is wrapper for RMmfIpcMessage
+ The main purpose of this class is to hold a messages and
+ keep the status of the process started with the request
+ This is not related to message status itself (if was completed or not)
+
+ @lib MmfDevSoundServer.lib
+ @since
+*/
+class TMMFDevSoundRequest
+ {
+public:
+
+ enum TA3FDevSoundRequestType
+ {
+ EQuery_Synchronous, // Message completed immediately, doesn't involve commit cycle, can be serviced even when a commit operation is pending
+ EQuery_Asynchronous, // Message is not completed until operation is completed, doesn't involve commit cycle
+ EConfigure_Synchronous, // Message completed immediately, doesn't involve commit cycle, can be serviced even when a commit operation is pending
+ EConfigure_Asynchronous, // Message is not completed until operation is completed, cannot be serviced when a commit operation is pending
+ EAction_Asynchronous, // Message is not completed until operation is completed, cannot be serviced when a commit operation is pending
+ EAction_PseudoAsynchronous, // Message is completed, but all the incoming asynchronous request that involves commit are enqueued
+ EOther_Synchronous, // Message completed immediately, doesn't involve commit cycle, can be serviced even when a commit operation is pending
+ EBufferExchangeRelated, // Message completed immediately, doesn't involve commit cycle, can be serviced even when a commit operation is pending
+ ECustomInterfacesRelated, // Message completed immediately, doesn't involve commit cycle, can be serviced even when a commit operation is pending
+ EUndefinedType,
+ ECallBackType,
+ ESessionEvents,
+ };
+
+public:
+
+ TMMFDevSoundRequest();
+ TMMFDevSoundRequest(TInt aIsCallBack);
+ TMMFDevSoundRequest(const TMMFDevSoundRequest& aRequest);
+ void SetMessage(const RMmfIpcMessage& aMessage);
+ void SetMessageCallback();
+ TBool operator==(const TMMFDevSoundRequest& aRequest) const;
+ const RMmfIpcMessage& Message();
+ TInt Function() const;
+
+ TA3FDevSoundRequestType Type() const;
+ TInt IsCallBack() const;
+
+ void Complete(TInt aError);
+
+private:
+ TA3FDevSoundRequestType ResolveType();
+
+private:
+ TBool iMessageCompleted;
+
+ /**
+ The encapsulated request message
+ */
+ RMmfIpcMessage iMessage;
+
+ /**
+ The classification for this request
+ */
+ TA3FDevSoundRequestType iRequestType;
+
+ TInt iCallBackPF;
+ };
+
+// CLASS DECLARATION
+
+/*
+ Server-side session implementation.
+ This class handles all the request from RMmfDevSoundProxy.
+ This classes uses MmfDevSoundAdaptation library and forwards all the reqeusts
+ to it. The main purpose of this class is to handle client server
+ communication.
+
+ @lib MmfDevSoundServer.lib
+ @since
+*/
+class CMMFDevSoundSession : public CMmfIpcSession,
+ public MDevSoundAdaptationObserver,
+ public MMMFDevSoundCustomInterfaceDeMuxInterface,
+ public MCustomInterface,
+ public MMMFDevSoundCustomInterfaceTarget
+
+ {
+
+public: // Constructors and destructor
+
+ /**
+ Constructs, and returns a pointer to, a new CMMFDevSoundSession
+ object.
+ Leaves on failure.
+ @param MGlobalProperties a reference to global properties such as FourCC to format converter
+ @return CMMFDevSoundSession* A pointer to newly created object.
+ */
+ static CMMFDevSoundSession* NewL(MGlobalProperties& aGlobalProperties);
+
+ /**
+ Destructor.
+ */
+ ~CMMFDevSoundSession();
+
+public: // New functions
+
+ /**
+ Called by Client/Server framework when a new session is created.
+ Leaves on failure.
+ @since
+ @param const CMmfIpcServer& aServer A constant reference to server
+ creating this session.
+ @return void
+ */
+ void CreateL(const CMmfIpcServer& aServer);
+
+ /**
+ Called by Client/Server framework when service request is made by the
+ corresponding RMmfDevSoundProxy.object.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return void
+ */
+ void ServiceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Function to handle DevSound session id request.
+ @since
+ @return TInt A integer assigned to this DevSound server.
+ */
+ TInt DevSoundSessionId() {return iDevSoundSessionId;};
+
+ // TODO: Review if the parameter should be kept or not
+ void SendEventToClient(/*TMMFAudioServerEvent& aEvent*/);
+
+ /**
+ Method to service PostOpen request - 2nd phase async open.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPostOpenL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service Initialize1L request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoInitialize1L(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service Initialize2L request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoInitialize2L(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service Initialize3L request.
+ Leaves on failure.
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoInitialize3L(const RMmfIpcMessage& aMessage);
+ /**
+ Method to service Initialize4L request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoInitialize4L(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service CancelInitialize request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoCancelInitializeL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service capabilities query request from
+ RMmfDevSoundProxy.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoCapabilitiesL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service current configuration query request from
+ RMmfDevSoundProxy.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoConfigL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service set current configuration request from
+ RMmfDevSoundProxy.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetConfigL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service maximum volume query request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoMaxVolumeL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service current volume level query request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoVolumeL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service set current volume level request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetVolumeL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service maximum gain query request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoMaxGainL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service current gain level query request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoGainL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service set current gain level request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetGainL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service current play balance level query request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoGetPlayBalanceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service set current play balance level request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetPlayBalanceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service current record balance level query request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoGetRecordBalanceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service set current record balance level request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetRecordBalanceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service initialize DevSound to play request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayInitL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service initialize DevSound to record request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoRecordInitL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to playing current buffer request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayDataL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to continue record request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoRecordDataL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to stop ongoing operation request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoStopL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to temporarily stop ongoing
+ operation request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPauseL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to play simple tone operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayToneL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to play dual tone operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayDualToneL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to play DTMFString operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayDTMFStringL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to play tone sequence operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayToneSequenceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to play fixed sequence operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPlayFixedSequenceL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to initilize DTMF String operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetDTMFLengthsL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to set volume ramp operation
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetVolumeRampL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service query DevSound to return supported input data types
+ operation request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoGetSupportedInputDataTypesL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service query DevSound to copy FourCC array data
+ operation request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoCopyFourCCArrayDataL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querying samples recorded so far.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSamplesRecordedL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querying samples played so far.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSamplesPlayedL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request to set tone repeats.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetToneRepeatsL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request to set priority settings.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoSetPrioritySettingsL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querrying fixed sequence name.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoFixedSequenceNameL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querrying fixed sequence count.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoFixedSequenceCountL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querrying supported output data types.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoGetSupportedOutputDataTypesL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querrying specifics of the TBF data
+ buffer.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoBufferToBeFilledDataL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querrying specifics of the TBE data
+ buffer.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoBufferToBeEmptiedDataL(const RMmfIpcMessage& aMessage);
+
+ /**
+
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoEmptyBuffersL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service the request querrying preparation for close session
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoPrepareCloseL(const RMmfIpcMessage& aMessage);
+
+
+ TBool DoRegisterAsClientL(const RMmfIpcMessage& aMessage);
+ TBool DoCancelRegisterAsClientL(const RMmfIpcMessage& aMessage);
+ TBool DoGetResourceNotificationDataL(const RMmfIpcMessage& aMessage);
+ TBool DoWillResumePlayL(const RMmfIpcMessage& aMessage);
+ TBool DoSetClientThreadInfoL(const RMmfIpcMessage& aMessage);
+
+
+ /**
+ Method to get the current play time from the audio renderer
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoGetTimePlayedL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to query if True Pause is supported by current codec format
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoQueryResumeSupportedL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Method to service signal DevSound to resume playback, recording or tone playing
+ request.
+ Leaves on failure.
+ @since
+ @param const RMmfIpcMessage& aMessage A reference to message object
+ containing request attributes.
+ @return ETrue if the request is serviced completely else EFalse.
+ */
+ TBool DoResumeL(const RMmfIpcMessage& aMessage);
+
+ /**
+ Initializes to raw audio data PCM16 and Sampling Rate of 8 KHz.
+ On completion of Initialization, calls InitializeComplete() on
+ aDevSoundObserver.
+ Leaves on failure.
+ @since
+ @param MDevSoundAdaptationObserver& aDevSoundObserver A reference to DevSound
+ Observer instance.
+ @param TMMFState aMode Mode for which this object will be used.
+ @return void
+ */
+ void InitializeL(MDevSoundAdaptationObserver& aDevSoundObserver,
+ TMMFState aMode);
+
+ /**
+ Initializes DevSound object for the mode aMode for processing audio
+ data with hardware device aHWDev.
+ On completion of Initialization, calls InitializeComplete() on
+ aDevSoundObserver.
+ Leaves on failure.
+ @since
+ @param MDevSoundAdaptationObserver& aDevSoundObserver A reference to DevSound
+ Observer instance.
+ @param TUid aHWDev The CMMFHwDevice implementation identifier.
+ @param TMMFState aMode The mode for which this object will be used
+ @return void
+ */
+ void InitializeL(MDevSoundAdaptationObserver& aDevSoundObserver,
+ TUid aHWDev,
+ TMMFState aMode);
+
+ /**
+ Initializes DevSound object for the mode aMode for processing audio
+ data with hardware device supporting FourCC aDesiredFourCC.
+ Leaves on failure.
+ @since
+ @param MDevSoundAdaptationObserver& aDevSoundObserver A reference to
+ the DevSound adaptation observer instance.
+ @param TFourCC aDesiredFourCC The CMMFHwDevice implementation FourCC
+ code.
+ @param TMMFState aMode The mode for which this object will be used
+ @return KErrNone if successfull, else corresponding error code
+ @return void
+ */
+ void InitializeL(MDevSoundAdaptationObserver& aDevSoundObserver,
+ TFourCC aDesiredFourCC,
+ TMMFState aMode);
+
+ /**
+ Returns the supported Audio settings ie. encoding, sample rates,
+ mono/stereo operation, buffer size etc..
+ @since
+ @return TMMFCapabilities The device settings.
+ */
+ TMMFCapabilities Capabilities();
+
+ /**
+ Returns the current device configuration.
+ @since
+ @return TMMFCapabilities The device settings.
+ */
+ TMMFCapabilities Config() const;
+
+ /**
+ Configure CMMFDevSound object with the settings in aConfig. Use this
+ to set sampling rate, encoding and mono/stereo.
+ Leaves on failure.
+ @since
+ @param const TMMFCapabilities& aConfig The attribute values to which
+ CMMFDevSound object will be configured to.
+ @return void
+ */
+ void SetConfigL(const TMMFCapabilities& aCaps);
+
+ /**
+ Returns an integer representing the maximum volume device supports.
+ This is the maximum value which can be passed to
+ CMMFDevSound::SetVolume.
+ @since
+ @return TInt The maximum volume. This value is platform dependent but
+ is always greater than or equal to one.
+ */
+ TInt MaxVolume();
+
+ /**
+ Returns an integer representing the current volume.
+ @since
+ @return TInt The current volume level.
+ */
+ TInt Volume();
+
+ /**
+ Changes the current playback volume to a specified value. The volume
+ can be changed before or during playback and is effective immediately.
+ @since
+ @param TInt aVolume The volume setting. This can be any value from 0
+ to the value returned by a call to
+ CMMFDevSound::MaxVolume(). If the volume is not
+ within this range, the volume is automatically set
+ to minimum or maximum value based on the value
+ that is being passed. Setting a zero value mutes
+ the sound. Setting the maximum value results in
+ the loudest possible sound.
+ @return void
+ */
+ void SetVolume(TInt aVolume);
+
+ /**
+ Returns an integer representing the maximum gain the device supports.
+ This is the maximum value which can be passed to CMMFDevSound::SetGain
+ @since
+ @return TInt The maximum gain. This value is platform dependent but is
+ always greater than or equal to one.
+ */
+ TInt MaxGain();
+
+ /**
+ Returns an integer representing the current gain.
+ @since
+ @return TInt The current gain level.
+ */
+ TInt Gain();
+
+ /**
+ Changes the current recording gain to a specified value. The gain can
+ be changed before or during recording and is effective immediately.
+ @since
+ @param TInt aGain The gain setting. This can be any value from zero to
+ the value returned by a call to
+ CMMFDevSound::MaxGain(). If the volume
+ is not within this range, the gain is automatically
+ set to minimum or maximum value based on the value
+ that is being passed. Setting a zero value mutes the
+ sound. Setting the maximum value results in the
+ loudest possible sound.
+ @return void
+ */
+ void SetGain(TInt aGain);
+
+ /**
+ Returns the speaker balance set for playing.
+ Leaves on failure.
+ @since
+ @param TInt &aLeftPercentage On return contains the left speaker
+ volume percentage.
+ @param TInt &aRightPercentage On return contains the right speaker
+ volume percentage.
+ @return void
+ */
+ void GetPlayBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage);
+
+ /**
+ Sets the speaker balance for playing. The speaker balance can be
+ changed before or during playback and is effective immediately.
+ Leaves on failure.
+ @since
+ @param TInt aLeftPercentage The left speaker volume percentage. This
+ can be any value from zero to 100. Setting
+ a zero value mutes the sound on left
+ speaker.
+ @param TInt aRightPercentage The right speaker volume percentage.
+ This can be any value from zero to 100.
+ Setting a zero value mutes the sound on
+ right speaker.
+ @return void
+ */
+ void SetPlayBalanceL(TInt aLeftPercentage, TInt aRightPercentage);
+
+ /**
+ Returns the microphone gain balance set for recording.
+ Leaves on failure.
+ @since
+ @param TInt &aLeftPercentage On return contains the left microphone
+ gain percentage.
+ @param TInt &aRightPercentage On return contains the right microphone
+ gain percentage.
+ @return void
+ */
+ void GetRecordBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage);
+ /**
+ Sets the microphone balance for recording. The microphone balance can
+ be changed before or during recording and is effective immediately.
+ Leaves on failure.
+ @since
+ @param TInt aLeftPercentage The left microphone gain percentage. This
+ can be any value from zero to 100. Setting
+ a zero value mutes the sound from left
+ microphone.
+ @param TInt aRightPercentage The right microphone gain percentage.
+ This can be any value from zero to 100.
+ Setting a zero value mutes the sound from
+ right microphone.
+ @return void
+ */
+ void SetRecordBalanceL(TInt aLeftPercentage, TInt aRightPercentage);
+
+ /**
+ Initializes the audio device and starts the play process. This
+ function queries and acquires the audio policy before initializing
+ audio device. If there was an error during policy initialization,
+ PlayError() function will be called on the observer with error code
+ KErrAccessDenied, otherwise BufferToBeFilled() function will be called
+ with a buffer reference. After reading data into the buffer reference
+ passed, the client should call PlayData() to play data.
+ The amount of data that can be played is specified in
+ CMMFBuffer::RequestSize(). Any data that is read into buffer beyond
+ this size will be ignored.
+ Leaves on failure.
+ @since
+ @return void
+ */
+ void PlayInitL();
+
+ /**
+ Initializes the audio device and starts the record process. This
+ function queries and acquires the audio policy before initializing
+ audio device. If there was an error during policy initialization,
+ RecordError() function will be called on the observer with error code
+ KErrAccessDenied, otherwise BufferToBeEmptied() function will be called
+ with a buffer reference. This buffer contains recorded or encoded
+ data. After processing data in the buffer reference passed, the client
+ should call RecordData() to continue recording process.
+ The amount of data that is available is specified in
+ CMMFBuffer::RequestSize().
+ Leaves on failure.
+ @since
+ @return void
+ */
+ void RecordInitL();
+
+ /**
+ Plays data in the buffer at the current volume.
+ The client should fill the buffer with audio data before calling this
+ function. The observer gets a reference to the buffer along with the
+ callback function BufferToBeFilled(). When playing of the audio sample
+ is complete, successfully or otherwise, the function PlayError() on
+ the observer is called.
+ The last buffer of the audio stream being played should have the last
+ buffer flag set using CMMFBuffer::SetLastBuffer(TBool). If a
+ subsequent attempt to play the clip is made, this flag will need
+ resetting by the client.
+ @return void
+ */
+ void PlayData();
+
+ /**
+ Contine the process of recording.
+ Once the buffer is filled with recorded data, the Observer gets a
+ reference to the buffer along with the callback function
+ BufferToBeEmptied(). After processing the buffer (copying over to a
+ different buffer or writing to file) the client should call this
+ function to continue the recording process.
+ @return void
+ */
+ void RecordData();
+
+ /**
+ Stops the ongoing operation (Play, Record, TonePlay).
+ @since
+ @return void
+ */
+ void Stop();
+
+ /**
+ Temporarily Stops the ongoing operation (Play, Record, TonePlay).
+ @since
+ @return void
+ */
+ void Pause();
+
+ /**
+ Returns the Sample recorded so far
+ @since
+ @return TInt Returns the samples recorded.
+ */
+ TInt SamplesRecorded();
+
+ /**
+ Returns the Sample played so far
+ @since
+ @return TInt Returns the samples played.
+ */
+ TInt SamplesPlayed();
+
+ /**
+ Initializes the audio device and starts playing a tone. The tone is
+ played with the frequency and duration specified.
+ Leaves on failure.
+ @since
+ @param TInt aFrequency The frequency at which the tone will be played.
+ @param const TTimeIntervalMicroSeconds &aDuration The period over
+ which the tone will be played. A zero value causes the no tone
+ to be played.
+ @return void
+ */
+ void PlayToneL(TInt aFrequency,
+ const TTimeIntervalMicroSeconds& aDuration);
+
+ /**
+ Initializes audio device and starts playing a dual tone. Dual Tone is
+ played with the specified frequencies and for the specified duration.
+ Leaves on failure.
+ @since
+ @param TInt aFrequencyOne The first frequency of dual tone.
+ @param TInt aFrequencyTwo The second frequency of dual tone.
+ @param const TTimeIntervalMicroSeconds &aDuration The period over
+ which the tone will be played. A zero value causes the no tone
+ to be played.
+ @return void
+ */
+ void PlayDualToneL(TInt aFrequencyOne,
+ TInt aFrequencyTwo,
+ const TTimeIntervalMicroSeconds& aDuration);
+
+ /**
+ Initializes the audio device and starts playing the DTMF string
+ aDTMFString.
+ Leaves on failure.
+ @since
+ @param const TDesC &aDTMFString The DTMF sequence in a descriptor.
+ @return void
+ */
+ void PlayDTMFStringL(const TDesC& aDTMFString);
+
+ /**
+ Initializes the audio device and starts playing a tone sequence.
+ Leaves on failure.
+ @since
+ @param const TDesC8 &aData The tone sequence in a descriptor.
+ @return void
+ */
+ void PlayToneSequenceL(const TDesC8& aData);
+
+ /**
+ Initializes the audio device and starts playing the specified
+ pre-defined tone sequence.
+ Leaves on failure.
+ @since
+ @param TInt aSequenceNumber The index identifying the specific
+ pre-defined tone sequence. Index values are relative to zero.
+ This can be any value from zero to the value returned by a call
+ to FixedSequenceCount() - 1. The function raises a panic if the
+ sequence number is not within this range.
+ @return void
+ */
+ void PlayFixedSequenceL(TInt aSequenceNumber);
+
+ /**
+ Defines the number of times the audio is to be repeated during the
+ tone playback operation. A period of silence can follow each playing
+ of a tone. The tone playing can be repeated indefinitely
+ @since
+ @param TInt aRepeatCount The number of times the tone, together with
+ the trailing silence, is to be repeated. If this is set to
+ KMdaRepeatForever, then the tone, together with the trailing
+ silence, is repeated indefinitely or until Stop() is called.
+ If this is set to zero, then the tone is not repeated.
+ @param const TTimeIntervalMicroSeconds &aRepeatTrailingSilence An
+ interval of silence which will be played after each tone.
+ Supported only during tone playing.
+ @return void
+ */
+ void SetToneRepeats(
+ TInt aRepeatCount,
+ const TTimeIntervalMicroSeconds& aRepeatTrailingSilence);
+
+ /**
+ Defines the duration of tone on, tone off and tone pause to be used
+ during the DTMF tone playback operation.
+ Supported only during tone playing.
+ @since
+ @param TTimeIntervalMicroSeconds32 &aToneOnLength The period over
+ which the tone will be played. If this is set to zero, then the
+ tone is not played.
+ @param TTimeIntervalMicroSeconds32 &aToneOffLength The period over
+ which the no tone will be played.
+ @param TTimeIntervalMicroSeconds32 &aPauseLength The period over which
+ the tone playing will be paused.
+ @return void
+ */
+ void SetDTMFLengths(TTimeIntervalMicroSeconds32& aToneOnLength,
+ TTimeIntervalMicroSeconds32& aToneOffLength,
+ TTimeIntervalMicroSeconds32& aPauseLength);
+
+ /**
+ Defines the period over which the volume level is to rise smoothly
+ from nothing to the normal volume level.
+ The function is only available before playing.
+ @since
+ @param const TTimeIntervalMicroSeconds &aRampDuration The period over
+ which the volume is to rise. A zero value causes the tone
+ sample to be played at the normal level for the full duration
+ of the playback. A value, which is longer than the duration of
+ the tone sample means that the sample never reaches its normal
+ volume level.
+ @return void
+ */
+ void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
+
+ /**
+ Defines the priority settings that should be used for this instance.
+ @since
+ @param const TMMFPrioritySettings &aPrioritySettings A class type
+ representing the client's priority, priority preference and
+ state
+ @return void
+ */
+ void SetPrioritySettings(TMMFPrioritySettings& aPrioritySettings);
+
+ /**
+ Returns a pointer reference to custom interface implementation.
+ Note: Implementation from MCustomInterface.
+ @since
+ @return "TAny"
+ Custom interface implementation. The exact type of pointer is
+ dependent on the custom interface implemenation.
+ */
+ virtual TAny* CustomInterface(TUid aInterfaceId);
+
+ /**
+ Returns the number of available pre-defined tone sequences.
+ This is the number of fixed sequence supported by DevSound by default.
+ @since
+ @return TInt The fixed sequence count. This value is implementation
+ dependent.
+ */
+ TInt FixedSequenceCount();
+
+ /**
+ Returns the name assigned to a specific pre-defined tone sequence.
+ This is the number of the fixed sequence supported by DevSound by
+ default.
+ The function raises a panic if sequence number specified is invalid.
+ @since
+ @param TInt aSequenceNumber The index identifying the specific
+ pre-defined tone sequence. Index values are relative to zero.
+ This can be any value from zero to the value returned by a call
+ to CMdaAudioPlayerUtility::FixedSequenceCount() - 1. The
+ function raises a panic if sequence number is not within this
+ range.
+ @return const TDesC & A reference to a Descriptor containing the fixed
+ sequence name indexed by aSequenceNumber.
+ */
+ const TDesC& FixedSequenceName(TInt aSequenceNumber);
+
+ /**
+ Returns a list of the supported input datatypes that can be sent to
+ DevSound for playing audio. The datatypes returned are those that the
+ DevSound supports given the priority settings passed in
+ aPrioritySettings. Note that if no supported data types are found this
+ does not constitute failure, the function will return normally with no
+ entries in aSupportedDataTypes.
+ @since
+ @param RArray< TFourCC > &aSupportedDataTypes The array of supported
+ data types that will be filled in by this function. The
+ supported data types of the DevSound are in the form of an
+ array of TFourCC codes. Any existing entries in the array will
+ be overwritten on calling this function. If no supported data
+ types are found given the priority settings, then the
+ aSupportedDatatypes array will have zero entries.
+ @param const TMMFPrioritySettings &aPrioritySettings The priority
+ settings used to determine the supported datatypes. Note this
+ does not set the priority settings. For input datatypes the
+ iState member of the priority settings would be expected to be
+ either EMMFStatePlaying or EMMFStatePlayingRecording. The
+ priority settings may effect the supported datatypes depending
+ on the audio routing.
+ @return void
+ */
+ void GetSupportedInputDataTypesL(
+ RArray<TFourCC>& aSupportedDataTypes,
+ const TMMFPrioritySettings& aPrioritySettings) const;
+
+ /**
+ Returns a list of the supported output dataypes that can be received
+ from DevSound for recording audio. The datatypes returned are those
+ that the DevSound supports given the priority settings passed in
+ aPrioritySettings. Note that if no supported data types are found this
+ does not constitute failure, the function will return normally with no
+ entries in aSupportedDataTypes.
+ @since
+ @param RArray< TFourCC > &aSupportedDataTypes The array of supported
+ data types that will be filled in by this function. The
+ supported datatypes of the DevSound are in the form of an array
+ of TFourCC codes. Any existing entries in the array will be
+ overwritten on calling this function. If no supported datatypes
+ are found given the priority settings, then the
+ aSupportedDatatypes array will have zero entries.
+ @param const TMMFPrioritySettings &aPrioritySettings The priority
+ settings used to determine the supported data types. Note this
+ does not set the priority settings. For output data types the
+ iState member of the priority settings would expected to be
+ either EMMFStateRecording or EMMFStatePlayingRecording. The
+ priority settings may effect the supported datatypes depending
+ on the audio routing.
+ @return void
+ */
+ void GetSupportedOutputDataTypesL(
+ RArray<TFourCC>& aSupportedDataTypes,
+ const TMMFPrioritySettings& aPrioritySettings) const;
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when DevSound initialization is complete.
+ @since
+ @param TInt aError KErrNone if successfull, else corresponding error
+ code
+ @return void
+ */
+ void InitializeComplete(TInt aError);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when tone play back is complete.
+ @since
+ @param TInt aError KErrNone if successfull, else corresponding error
+ code
+ @return void
+ */
+ void ToneFinished(TInt aError);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when more data is needed during digital audio playback.
+ @since
+ @param CMMFBuffer* aBuffer A pointer to buffer where data is needed.
+ @return void
+ */
+ void BufferToBeFilled(CMMFBuffer* aBuffer);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when there is error during playback.
+ @since
+ @param TInt aError KErrUnderflow if last buffer is played back, else
+ corresponding error code
+ @return void
+ */
+ void PlayError(TInt aError);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when data is available during digital audio recording.
+ @since
+ @param CMMFBuffer* aBuffer A pointer to buffer where recorded data is
+ available.
+ @return void
+ */
+ void BufferToBeEmptied(CMMFBuffer* aBuffer);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when there is error during recording.
+ @since
+ @param TInt aError Corresponding error code
+ @return void
+ */
+ void RecordError(TInt aError);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ This is called when there is a message from audio device.
+ @since
+ @param TUid aMessageType A Uid identifying message type.
+ @param const TDesC8& aMsg A reference to constant descriptor
+ containing packed message.
+ @return void
+ */
+ void DeviceMessage(TUid aMessageType, const TDesC8& aMsg);
+
+
+ // from MMMFDevSoundCustomInterfaceDeMuxPlugin
+ /**
+ MDevSoundAdaptationObserver callback.
+ Underlying interface has been (or is about to be) deleted.
+ Implementations will generally cancel outstanding messages
+
+ @param aInterfaceId Uid of the Interface which has been deleted
+ */
+
+ void InterfaceDeleted(TUid aInterfaceId);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ Not used.
+ @since
+ @param const TMMFEvent& aEvent Not used
+ @return void
+ */
+ void SendEventToClient(const TMMFEvent& aEvent);
+
+ void DoProcessingFinished();
+ void DoProcessingError();
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ Underlying physical adaptation has sent a callback that will result either on a commit
+ and need to scheduled or in the case of RecordPauseComplete, completes the message.
+ @since
+ @param aType the callback type
+ @param aError KErrNone if successful, else corresponding error
+ code
+ */
+ void CallbackFromAdaptorReceived(TInt aType, TInt aError);
+
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ Underlying physical adaptation has sent a callback indicating that a preemption process
+ has started, any incomming commands will be queued during the preemption.
+
+ @since
+ */
+ void PreemptionStartedCallbackReceived();
+
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ Underlying physical adaptation has sent a callback indicating that a preemption process
+ has finished. Queued commands during preemption can now be processed.
+ @since
+ @param aCanStartNewOperation If EFalse indicates that the operation has more than a cycle
+ */
+ void PreemptionFinishedCallbackReceived(TBool aCanStartNewOperation);
+
+ /**
+ MDevSoundAdaptationObserver callback.
+ Indicates that a low layer operation completion
+ @since
+ @param aError The status of operation in progress
+ @param aCanStartNewOperation If EFalse indicates that the operation has more than a cycle
+ */
+ void AsynchronousOperationComplete(TInt aError, TBool aCanStartNewOperation);
+
+
+ // from MMMFDevSoundCustomInterfaceDeMuxInterface
+ TInt DoOpenSlaveL(TUid aInterface, const TDesC8& aPackageBuf);
+ void DoCloseSlaveL(TInt aHandle);
+ TInt DoSendSlaveSyncCommandL(const RMmfIpcMessage& aMessage);
+ TInt DoSendSlaveSyncCommandResultL(const RMmfIpcMessage& aMessage);
+ void DoSendSlaveAsyncCommandL(const RMmfIpcMessage& aMessage);
+ void DoSendSlaveAsyncCommandResultL(const RMmfIpcMessage& aMessage);
+
+
+private: // Functions
+
+ /**
+ Returns a object reference to CMMFObjectContainer.
+ @since
+ @return CMMFObjectContainer& A reference to CMMFObjectContainer
+ implemenation.
+ */
+ CMMFObjectContainer& MMFObjectContainerL();
+
+ /**
+ Returns a object reference to CMMFObjectContainer.
+ @since
+ @return CMMFCustomCommandParserBase& aParser A reference to
+ Custom command parser implemenation.
+ @return void
+ */
+ void AddCustomCommandParserL(CMMFCustomCommandParserBase& aParser);
+
+ /**
+ Method to set client configuration information to DevSound Adaptation.
+ Leaves on failure.
+ @since
+ @return void
+ */
+ void DoSetClientConfigL();
+
+ /**
+ Equivalent of DoSetClientConfigL() that returns error
+ @return system-wide error
+ */
+ TInt DoSetClientConfig();
+
+ /**
+ Method to create global chunk
+ @since
+ @param TMMFDevSoundProxyHwBufPckg& - buffer information container
+ @param CMMFDataBuffer* - data buffer pointer
+ @return void
+ */
+ TInt CreateChunk(TMMFDevSoundProxyHwBufPckg& aBufPckg, TInt aRequestedSize);
+
+
+ // New internal methods
+ /*
+ Services the first request at the FIFO
+ */
+ void DoServiceRequestL(const RMmfIpcMessage& aMessage);
+
+ /*
+ Services the first request at the FIFO
+ */
+ void DoServiceNextRequestL();
+
+ /*
+ Completes the message
+ @param aReason the error to complete message
+ @param aOperationComplete if is true also this message will be removed from the queue
+ if is false just the message will be completed but will be keeped at the queue
+ */
+ void CompleteRequest(TInt aReason);
+
+ /*
+ Adds a message to the FIFO
+ */
+ void EnqueueRequest(const RMmfIpcMessage& aMessage);
+
+ /*
+ Removes the message from the FIFO
+ */
+ void DequeueRequest();
+
+
+
+ /*
+ Flush event queue - called as part of Stop() sequence
+ */
+ void FlushEventQueue();
+
+ /*
+ Filter certain events from message queue
+ */
+ void FilterQueueEvent(TMMFDevSoundProxyRequest aRequest);
+
+ /*
+ Called by a server when it receives a disconnect message for the session.
+ Overrided in order to perform asynchronous cleanup actions
+ these actions must end with a call to the base class implementation of this method
+ which will delete the session object and complete the disconnect message
+ */
+ void Disconnect(const RMessage2& aMessage);
+
+ //panic function
+ void Panic(TMMFDevSoundSessionPanicCodes aCode);
+
+ /*
+ Used to send a stop call when error in buffer
+ */
+ void BufferErrorEvent();
+
+protected:
+
+ /**
+ C++ default constructor.
+ */
+ CMMFDevSoundSession();
+ /**
+ By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(MGlobalProperties& aGlobalProperties);
+
+private:
+ TBool DoCustomCommandL(const RMmfIpcMessage& aMessage);
+ MMMFDevSoundCustomInterfaceDeMuxPlugin* InterfaceFromUid(TUid aUid);
+
+ static TInt AsyncQueueStartCallback(TAny* aPtr);
+ void AsyncQueueStartCallback();
+
+protected: // Data
+ CMMFDevSoundAdaptation* iAdapter;
+
+private: // Data
+ // A number representing the session id
+ TInt iDevSoundSessionId;
+ // Reference to play buffer
+ CMMFDataBuffer* iBufferPlay;
+ // Reference to record buffer
+ CMMFDataBuffer* iBufferRecord;
+ // Array to hold supported input/output data types
+ RArray<TFourCC> iArray;
+ // Buffer to hold DTMFString to be played
+ HBufC* iDtmfString;
+ // Buffer to hold tone sequence to be played
+ HBufC8* iToneSeqBuf;
+
+
+ // Replaces the messages / AO handlers
+ RMsgQueue<TMMFDevSoundQueueItem> iMsgQueue;
+ // data store for 2-stage asynch message passing
+ TMMFDevSoundProxyHwBufPckg iHwBufPckgFill;
+ // data store for 2-stage asynch message passing
+ TMMFDevSoundProxyHwBufPckg iHwBufPckgEmpty;
+
+ // Array of custom interface pairs
+ RArray<TMMFDevSoundCustomInterfaceDeMuxData> iCustomInterfaceArray;
+
+ //Capabilities from DevSoundAdaptor
+ TMMFCapabilities iDevSoundCapabilities;
+ //
+ CMMFDevSoundCIDeMuxUtility* iDeMuxUtility;
+ // CI Extension
+ MDevSoundCIServerExtension* iCIExtension;
+
+ // Handling async requests
+ RArray<TMMFDevSoundRequest> iQueuedRequests;
+ TMMFDevSoundRequest iRequestBeingServiced;
+ TBool iOperationCompletePending;
+ TBool iPlayErrorOccured;
+
+ //Check if the call of SetClientConfigL was alredy made
+ TBool iSetClientConfigApplied;
+
+ // Chunk for use between DevSound client and server
+ RChunk iChunk;
+ TBool iForceSendOfChunkHandle;
+
+ CActiveSchedulerWait* iClosingWait;
+ CAsyncCallBack* iAsyncQueueStart;
+ };
+
+#endif // MMFDEVSOUNDSESSION_H
+
+// End of File