devsound/a3fdevsound/src/mmfdevsoundproxy/mmfdevsoundcallbackhandler.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/a3fdevsound/src/mmfdevsoundproxy/mmfdevsoundcallbackhandler.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* 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 MMFDEVSOUNDCALLBACKHANDLER_H
+#define MMFDEVSOUNDCALLBACKHANDLER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <e32msgqueue.h>
+#include "mmfaudioclientserver.h"
+
+// CLASS DECLARATION
+class RMMFDevSoundProxy;
+class MDevSoundObserver;
+
+/**
+*  Utility class to handle Play Error callback from DevSound server.
+*
+*  @lib MMFDevSound.dll
+*  @since 
+*/
+class CMsgQueueHandler : public CActive
+	{
+public:  // Constructors and destructor
+
+	/**
+	* Constructs, and returns a pointer to, a new
+	* CMMFPlayErrorHandler object.
+	* Leaves on failure..
+	* @param RMMFDevSoundProxy* aDevSoundProxy A handle to DevSoundProxy to
+	*        subcribe for event notification from server.
+	* @param MDevSoundObserver& aDevSoundObserver A reference to
+	*        MDevSoundObserver to which the events will be forwarded to.
+	* @param aDevSoundCIObserver Observer which will receive Custom Interface events
+	* @return CMMFPlayErrorHandler* A pointer to newly created object.
+	*/
+	static CMsgQueueHandler* NewL(RMMFDevSoundProxy* aDevSoundProxy,
+								MDevSoundObserver& aDevSoundObserver,
+								RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
+								MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver);
+	/**
+	* Destructor.
+	*/
+	~CMsgQueueHandler();
+
+	/**
+	* Subscribes for Play Error event from DevSound server.
+	* @since 
+	* @return void
+	*/
+	void ReceiveEvents();
+
+	/**
+	* Called by DevSound server when Play Error event occurs.
+	* Leaves on failure.
+	* @since 
+	* @return void
+	*/
+	void RunL();
+
+	/**
+	* Called by CActive object framework if RunL leaves.
+	* @since 
+	* @param TInt aError Reason for leave
+	* @return TInt KErrNone if error is handled succesfully, else
+	* corresponding error codel
+	*/
+	TInt RunError(TInt aError);
+
+	/**
+	* Called by CActive object framework when client cancels active object.
+	* @since 
+	* @return void
+	*/
+	void DoCancel();
+	/**
+	* Called as part of Stop() process to recover any buffers etc
+	*/
+	void Finish();
+
+private:
+	/**
+	* C++ default constructor.
+	*/
+	CMsgQueueHandler(RMMFDevSoundProxy* aDevSoundProxy,
+					MDevSoundObserver& aDevSoundObserver,
+					RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
+					MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver);
+	/**
+	* By default Symbian 2nd phase constructor is private.
+	*/
+	void ConstructL();
+
+	/*
+	* Handles initialization completion event.
+	*/
+	void DoInitComplete();
+
+	/*
+	* Handles play completion or cancel event.
+	*/
+	void DoPlayErrorComplete();
+
+	/*
+	* Handles record completion or cancel event.
+	*/
+	void DoRecordErrorComplete();
+
+	/*
+	* Handles CMMFDevSound object's data request event to supply
+	* CMMFDevSound with the buffer that it needs to play.
+	*/
+	void DoBTBFCompleteL();
+
+	/*
+	* Handles CMMFDevSound object's data request event to supply
+	* CMMFDevSound with the buffer that it needs to record.
+	*/
+	void DoBTBECompleteL();
+
+	/*
+	* Handles tone play completion event.
+	*/
+	void DoToneFinishedComplete();
+
+	/*
+	* Sends DevSound server event completion notification to the client.
+	*/
+	void DoSendEventToClientComplete();
+	
+	/* Handles CMMFDevSound object's data request event to supply 
+	* CMMFDevSound with the last buffer that it needs to record.
+	*/
+	void DoPausedRecordComplete();
+	
+	/*
+	* Allocates local data buffer and links it with the global chunk.
+	* @param aHandle Handle to a global chunk or 0 if chunk already exists.
+	*/
+	void AssignDataBufferToChunkL(TInt aHandle);
+	/*
+	* Update existing data buffer with latest buffer info from server
+	* but using existing chunk
+	*/
+	void UpdateDataBufferL();
+	
+	static TInt AsyncQueueFinishCallback(TAny* aPtr);
+	void DoAsyncQueueFinishCallback();
+
+private:
+	
+	RMMFDevSoundProxy* iDevSoundProxy;
+	MDevSoundObserver& iDevSoundObserver;
+	TMMFDevSoundProxyHwBufPckg iSetPckg;
+
+	TMMFEventPckg iEventPckg;
+
+	RMsgQueue<TMMFDevSoundQueueItem>* iMsgQueue;
+	TMMFDevSoundQueueItem   iCurrentItem;
+	RChunk iChunk;
+	TPtr8 iChunkDataPtr;
+	CMMFPtrBuffer* iDataBuffer;
+	CMMFDataBuffer* iEmptyBuffer;
+	MMMFDevSoundCustomInterfaceObserver& iDevSoundCIObserver;
+	CAsyncCallBack*				iAsyncQueueFinish;
+	};
+
+#endif      // MMFDEVSOUNDCALLBACKHANDLER_H
+
+// End of File