devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundserver.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundserver.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,233 @@
+// 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 MMFDEVSOUNDSERVER_H
+#define MMFDEVSOUNDSERVER_H
+	
+#include <e32base.h>
+#include <e32def.h>
+#include <e32std.h>
+#include <mmf/common/mmfipc.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mmf/common/mmfipcserver.h>
+#endif
+#include "mmfaudioserver.h"
+#include "mmfdevsoundserverstart.h"
+
+/**
+	Panic category and codes that MmfDevSoundServer raises on the client
+*/
+_LIT(KMMFDevSoundClientPanicCategory, "DevSoundClient");
+
+enum TMMFDevSoundClientPanicCodes
+	{
+	EMMFDevSoundPlayDataWithoutInitialize,
+	EMMFDevSoundRecordDataWithoutInitialize
+	};
+
+enum TMMFDevSoundServerPanicCodes
+	{
+	EMMFDevSoundServerIsActive = 1
+	};
+
+// FORWARD DECLARATIONS
+class CMMFDevSoundServer;
+class MGlobalProperties;
+
+// CLASS DECLARATION
+
+/**
+	DevSound server implementation.
+	This class implements the DevSound server thread. The main purpose of this
+	class is to create a new session when requested by DevSound proxy.
+	
+	@lib MmfDevSoundServer.lib
+	@since 
+*/
+NONSHARABLE_CLASS( CMMFDevSoundServer ): public CMmfIpcServer
+	{
+public:  // Constructors and destructor
+
+	/**
+		Constructs, and returns a pointer to, a new CMMFDevSoundServer object.
+		Leaves on failure.
+		@param CMMFAudioServer* aAudioServer A pointer reference to Audio
+		Server launchining this.
+		@param TProcessId& aClientPID A reference to process id of the client
+		launching DevSound server.
+		@param MGlobalProperties a reference to global properties such as FourCC to format converter
+		@return CMMFDevSoundServer* A pointer to newly created object.
+	*/
+	IMPORT_C static CMMFDevSoundServer* NewL(MGlobalProperties* aGlobalProperties,
+						TProcessId& aClientPID);
+
+	/**
+		Destructor.
+	*/
+	~CMMFDevSoundServer();
+
+	// New functions
+
+	/**
+		From CServer2. Creates a server-side client session object.
+		@since 
+		@param TVersion - server version requested by the client.
+		@return CMmfIpcSession* A pointer to newly created session.
+	*/
+	CMmfIpcSession* NewSessionL(const TVersion &aVersion) const;
+
+	/**
+		Increment the session Id.
+		@since 
+		@param ?arg1 ?description
+		@return ?description
+		@return void
+	*/
+	void IncrementSessionId();
+
+	/**
+		Decrement the session Id.
+		Once the number of DevSound sessions becomes zero, DevSound
+		Server will start its shutdown routine.
+		@since 
+		@param ?arg1 ?description
+		@return void
+	*/
+	void DecrementSessionId();
+
+	/**
+		Sends Event to DevSound client.
+		@since 
+		@param TInt aSessionToAlert Id of DevSound to be alerted.
+		@param TInt aSessionToBeLaunched Id of DevSound to be launched.
+		@return void
+	*/
+	void SendEventToClient(TInt aSessionToAlert, TInt aSessionToBeLaunched);
+
+	/**
+		Launches the DevSound servers waiting for Audio Policy.
+		@since 
+		@param TInt aSessionToBeLaunched Id of DevSound to be launched.
+		@return void
+	*/
+	void LaunchRequest(TInt aSessionId);
+
+	/**
+		Returns DevSound Server session identifier.
+		@since 
+		@return TInt A integer representing session id.
+	*/
+	TInt DevSoundSessionId() {return iDevSoundSessionId;};
+
+
+	/**
+		Static entry point to launch the thread.
+		@since 
+		@param TAny* aParams
+		@return KErrNone if successfull, else corresponding error code
+	*/
+	IMPORT_C static TInt StartThread(TAny* aParams);
+
+
+	/**
+		Returns process id of the client application.
+		@since 
+		@return TProcessId Process id of the client application.
+	*/
+	TProcessId ProcessId() {return iClientPID;};
+
+	/**
+		
+		@since 
+		@return void.
+	*/
+	void SetClientProcessIdL(TThreadId aTid);
+
+	/**
+		Returns the actual process id of the client application.
+		@since 
+		@return TProcessId Process id of the client application.
+	*/
+	TProcessId ActualProcessId() {return iActualClientPID;};
+	
+private:
+
+	/**
+		C++ default constructor.
+	*/
+	CMMFDevSoundServer(MGlobalProperties* aGlobalProperties,
+					TProcessId& aClientPID);
+
+	/**
+		By default Symbian 2nd phase constructor is private.
+	*/
+	void ConstructL();
+	static void RenamePrioritizeServer();
+	static void StartThreadL(TDevSoundServerStart& aStart);
+	
+	CMmfIpcSession* CreateNewSessionL(const TVersion& aVersion) const;
+	void CheckForNoSessionsLeft();
+
+private:
+	/**
+		A Timer utility class used by DevSound Server for shutdown purpose.
+	*/
+	class CDelayDevSoundShutDown : public CActive
+		{
+	public:
+		// Construct/destruct
+		static CDelayDevSoundShutDown* NewL();
+		~CDelayDevSoundShutDown();
+
+	public:
+		// Request a timeout after aDelay
+		void SetDelay(TTimeIntervalMicroSeconds32 aDelay);
+
+	protected:
+		// From CActive
+		void RunL();
+		void DoCancel();
+
+	private:
+		// Construct/destruct
+		CDelayDevSoundShutDown();
+		void ConstructL();
+
+	private:
+		RTimer iTimer;      // Has
+		};
+
+private:    // Data
+	// Id allocated to this DevSound server.
+	TInt iDevSoundSessionId;
+	// Session to be launched
+	TInt iSessionToBeLaunched;
+	// Process id of client
+	TProcessId iClientPID;
+	// DevSound server shutdown utlilty timer object
+	CDelayDevSoundShutDown* iDelayDevSoundShutDown;
+	// A pointer reference to Audio Server
+	MGlobalProperties* iGlobalProperties;
+	// Process id of client
+	TProcessId iActualClientPID;
+	};
+
+GLDEF_C void PanicClient(const RMmfIpcMessage& aMessage,
+					TMMFDevSoundClientPanicCodes aPanicCode);
+
+
+#endif // MMFDEVSOUNDSERVER_H
+
+// End of File