devsound/a3fdevsound/src/mmfaudioserver/mmfaudioserver.h
changeset 0 b8ed18f6c07b
child 6 fe9d1bf55678
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/a3fdevsound/src/mmfaudioserver/mmfaudioserver.h	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,283 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+
+
+#ifndef MMFAUDIOSERVER_H
+#define MMFAUDIOSERVER_H
+
+#include <e32base.h>
+#include <e32std.h>
+#include <mmf/common/mmfipc.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mmf/common/mmfipcserver.h>
+#endif
+#include <a3f/a3ffourcclookup.h>
+#include "mglobalproperties.h"
+
+
+// FORWARD DECLARATIONS
+class CStartAndMonitorDevSoundThread;
+class CMMFAudioServerFactory;
+class RMMFDevSoundServerProxy;
+
+enum TMMFAudioServerPanicCodes
+	{
+	EMMFAudioServerIsActive = 1
+	};
+
+/**
+	The Audio Server holds a list of DevSound servers and manages it.
+	This class is a container process for all the DevSound Server threads that are
+	created for each DevSound proxy and for all other servers that are created
+	using Factory.
+	
+	@lib MmfAudioServer.exe
+*/
+class CMMFAudioServer : public CMmfIpcServer, public MGlobalProperties
+	{
+public:
+
+	/**
+		Constructs, and returns a pointer to, a new CMMFAudioServer
+		object.
+		@return CMMFAudioServer* A pointer to newly created object.
+	*/
+	static CMMFAudioServer* NewL();
+
+	/**
+		Destructor.
+	*/
+	~CMMFAudioServer();
+
+
+
+	/**
+		From CServer2. Creates a server-side client session object.
+		@param aVersion server version requested by the client.
+		@return CMmfIpcSession* A pointer to newly created session.
+	*/
+	CMmfIpcSession* NewSessionL(const TVersion &aVersion) const;
+
+	/**
+		Increment the session Id.
+	*/
+	void IncrementSessionId();
+
+	/**
+		Decrement the session Id.
+	*/
+	void DecrementSessionId();
+
+	/**
+		Increment the DevSound server counter.
+	*/
+	void IncrementDevSoundCount();
+
+	/**
+		Decrement the DevSound server counter.
+		Once the number of DevSound server's instances becomes zero, Audio
+		Server will start its shutdown routine.
+	*/
+	void DecrementDevSoundCount();
+
+	/**
+		Sends Event to DevSound client.
+		@param  aSessionToAlert Id of DevSound to be alerted.
+		@param  aSessionToBeLaunched Id of DevSound to be launched.
+	*/
+	void SendEventToClient(TInt aSessionToAlert, TInt aSessionToBeLaunched);
+
+	/**
+		Launches the DevSound servers waiting for Audio Policy.
+		@param  aSessionToBeLaunched Id of DevSound to be launched.
+	*/
+	void LaunchRequest(TInt aSessionId);
+
+	/**
+		Returns Audio Server session identifier.
+		@return a integer representing session id.
+	*/
+	TInt AudioServerSessionId() {return iAudioServerSessionId;};
+
+	/**
+		Starts a new DevSound server instance.
+		@param  aDevSoundSessionHandle. A handle to the DevSound server session to be launched.
+		@return KErrNone if successfull, else corresponding error code.
+	*/
+	TInt StartDevSoundServer(RMMFDevSoundServerProxy& aDevSoundSessionHandle) const;
+
+	// From MGlobalProperties
+	
+	/**
+	 * Returns reference to FourCC to format converter
+	 * (other items were commented in a header).
+	*/
+	inline const CFourCCConvertor& GetFourCCConvertor();
+
+private:
+	
+		//A timer utility class used by Audio Server for shutdown purpose.
+	
+	class CDelayAudioServerShutDown : public CActive
+		{
+	public:
+	
+	
+		//Constructs and returns a pointer to a new CDelayAudioServerShutDown object.
+		static CDelayAudioServerShutDown* NewL();
+	
+		//Destructor.
+		~CDelayAudioServerShutDown();
+
+		//Request a timeout after aDelay
+		void SetDelay(TTimeIntervalMicroSeconds32 aDelay);
+
+	private:
+		// From CActive
+		void RunL();
+		void DoCancel();
+
+	private:
+		//Standart Constructor
+		CDelayAudioServerShutDown();
+		//Second phase contructor.
+		void ConstructL();
+
+		RTimer iShutDownTimer;
+		};
+
+private:
+
+	
+	//Default constructor.
+	
+	CMMFAudioServer();
+
+	
+	//Second phase constructor.
+
+	void ConstructL();
+
+private:	// Data
+	// FourCC to format convertor
+	CFourCCConvertor* iFourCCConvertor;
+	// Current session id
+	TInt iAudioServerSessionId;
+	// Number of DevSound servers.
+	TInt iDevSoundCount;
+	// Audio Server shutdown utility
+	CDelayAudioServerShutDown* iDelayAudioServerShutDown;
+	// Array of DevSound server monitor objects.
+	mutable RPointerArray<CStartAndMonitorDevSoundThread> iDevSoundServList;
+	
+	CMMFAudioServerFactory* iFactory;
+	};
+
+/**
+	A utility class to monitor the DevSound server state.
+	This class is used by Audio Server to monitor the state of DevSound server
+	and to manage the client side RThread handle.
+
+	@lib MmfAudioServer.exe
+*/
+class CStartAndMonitorDevSoundThread: public CActive
+	{
+public:	// Constructors and destructor
+
+	/**
+		Constructs, and returns a pointer to, a new CStartAndMonitorDevSoundThread object.
+		
+		@return CStartAndMonitorDevSoundThread* a pointer to newly created
+		object.
+	*/
+	static CStartAndMonitorDevSoundThread* NewL(CMMFAudioServer* aAudioServer);
+
+	/**
+		Destructor.
+	*/
+	~CStartAndMonitorDevSoundThread();
+
+
+	/**
+		Starts a new instance of DevSound server. The server is given a unique
+		name using aDevSoundName and aUniqueNum passed in by Audio Server.
+		
+		@param aMessage. A reference to client message requesting to create a new DevSound server.
+		@param aDevSoundSessionHandle. A handle to the DevSound server session.
+		@return KErrNone if succesful else a systemwide error code.
+	*/
+	TInt StartDevSoundServer(RMessage2& aMessage,RMMFDevSoundServerProxy& aDevSoundSessionHandle);
+
+private: // Functions from base classes
+
+	// From CActive
+	//Called by Active Object framework when DevSound server is destroyed.
+	void RunL();
+	
+	//Called by Active Object framework when client cancels active object.
+	void DoCancel();
+	
+	
+	//Constructor.
+	CStartAndMonitorDevSoundThread(CMMFAudioServer* aAudioServer);
+	
+	//Second phase constructor.
+	void ConstructL();
+	
+private:	// Data
+	// A pointer reference to Audio Server.
+	CMMFAudioServer* iAudioServer;
+	// Client side handle to DevSound server thread.
+	RThread iServer;
+	};
+
+
+/**
+	DevSound server client-side proxy class.
+	This class is used by the Audio Server to open new session with
+	the DevSound server.
+	
+	@lib MmfAudioServer.exe
+*/
+class RMMFDevSoundServerProxy : public RMmfSessionBase
+	{
+public:
+	/**
+		Opens new session with the DevSound server. The server is given a
+		unique handle passed in by the Audio Server.
+
+		@param aDevSoundServerHandle A handle to the DevSound server.
+		@return KErrNone if successfull, else corresponding error code.
+	*/
+	TInt Open(RServer2& aDevSoundServerHandle);
+	};
+
+#include "mmfaudioserver.inl"
+
+#endif // MMFAUDIOSERVER_H
+
+// End of File
+