devsoundextensions/telephonyaudiorouting/Server/inc/TelephonyAudioRoutingServer.h
author hgs
Mon, 23 Aug 2010 22:02:51 +0100
changeset 48 73a8aa9e4318
parent 0 40261b775718
permissions -rw-r--r--
2010wk32_05

/*
* Copyright (c) 2006 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:   TelephonyAudioRoutingServer implementation
*
*/



#ifndef TELEPHONYAUDIOROUTINGSERVER_H
#define TELEPHONYAUDIOROUTINGSERVER_H

#include <e32base.h>
#include "TelephonyAudioRouting.h"

const TInt KMaxNumberOfSessions = 256; 

enum TTelephonyAudioRoutingPanic
	{
	EPanicGeneral,
	EPanicIllegalFunction,
	EPanicResourceError
	};

void PanicClient(const RMessage2& aMessage,TTelephonyAudioRoutingPanic aPanic);

// CLASS DECLARATION

/**
*  TelephonyAudioRoutingServer class declaration
*
*  @lib TelephonyAudioRoutingServer.lib
*  @since Series 60 3.1
*/
class CTelephonyAudioRoutingServer : public CServer2
	{
		
	public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        IMPORT_C static CTelephonyAudioRoutingServer* NewL();
        
        /**
        * Destructor.
        */
        ~CTelephonyAudioRoutingServer();
        
	public:
	
		/**
        * Start the TelephonyAudioRoutingServer thread
        * @since Series 60 3.1
        * @param TAny* aParams
        * @return KErrNone is successfull, else appropriate err code
        */
		IMPORT_C static TInt StartThreadL(TAny* aParams);
		
		/**
        * Add a new Session.
        * @since Series 60 3.1
        * @param none
        * @return void
        */
		void AddSession();
		
		/**
        * Remove an existing session.
        * @since Series 60 3.1
        * @param TInt aSessionId Id of the session to remove
        * @return void
        */
		void RemoveSession(TInt aSessionId);
		
		/**
        * Notify the policy session about a request to change output.
        * @since Series 60 3.1
        * @param TInt aSessionId Id of the session to utilize, aMessage contains output value
        * @return void
        */
		void DoSetOutputL (TInt aSessionId, const RMessage2& aMessage);
		
		/**
        * Assign a unique session Id to a new session.
        * @since Series 60 3.1
        * @param none
        * @return TInt session Id
        */
		TInt IdentifyAndAllocateNextFreeSessionIdL();
		
		/**
        * Free the session Id or a deleted session for re-use.
        * @since Series 60 3.1
        * @param TInt aSessionId Id of the session to free
        * @return void
        */
		void FreeSessionId(TInt aSessionId);
		
		/**
        * Used by policy session to indicate the session that requested a SetOutput() that
        * the request is complete, all the other session get OutputChanged() notification
        * @since Series 60 3.1
        * @param aOutput value of modified output, aError result of operation.
        * @return void
        */
		void SetOutputCompleteL(CTelephonyAudioRouting::TAudioOutput aOutput, TInt aError);
		
		/**
        * Used by policy session to notify all sessions that the output has changed.
        * (Policy initiated change in output)
        * @since Series 60 3.1
        * @param aOutput value of modified output
        * @return void
        */
		void OutputChanged(CTelephonyAudioRouting::TAudioOutput aOutput);		
		
		/**
        * Used by policy session to indicated to all other sessions that available outputs have changed.
        * @since Series 60 3.1
        * @param aOutputs contains array of available outputs
        * @return void
        */
		void AvailableOutputsChangedL( const TArray<CTelephonyAudioRouting::TAudioOutput>& aOutputs);
		
		/**
        * Set the Id of the policy session.
        * @since Series 60 3.1
        * @param TInt aSessionId is Id to set
        * @return void
        */
		void SetPolicySessionId(TInt aSessionId);
		
    	/**
        * Provide caller with iCurrentAudioOutput
        * @since Series 60 3.1
        * @param none
        * @return iCurrentAudioOutput
        */
    	CTelephonyAudioRouting::TAudioOutput& CurrentAudioOutput();  			
		
   		/**
        * Provide caller with iPreviousAudioOutput
        * @since Series 60 3.1
        * @param none
        * @return iPreviousAudioOutput
        */
    	CTelephonyAudioRouting::TAudioOutput& PreviousAudioOutput();  
    	
    	/**
        * Provide caller with iShowNoteMode
        * @since Series 60 3.1
        * @param none
        * @return iShowNoteMode
        */
    	TBool& ShowNoteMode(); 
    	
    	/**
        * Allows caller to set iShowNoteMode
        * @since Series 60 3.1
        * @param TBool aShowNoteMode
        * @return void
        */    	
 		void SetShowNoteMode(TBool aShowNoteMode);  	
    	
       	/**
        * Provide caller with iAvailableOutputs array
        * @since Series 60 3.1
        * @param none
        * @return: Array of available outputs
        */
    	RArray<CTelephonyAudioRouting::TAudioOutput>& AvailableOutputs();    				
								
		
	private:
	
		/**
        * C++ default constructor.
        */
        CTelephonyAudioRoutingServer(/*TProcessId& aClientPID*/);

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

		/**
        * From CServer2
        * Creates a server-side client session object.
        */
		CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
		
		/**
        * determines if audio output is in available outputs array.
        * @since Series 60 3.1
        * @param aOutput is current output value
        * @return TBool ETrue if current output is available, EFalse if not
        */		
		TBool IsAvailableOutput(CTelephonyAudioRouting::TAudioOutput aOutput);
			
	private:
	
		TInt iSessionCount;
		TInt iPolicySessionId;
		RArray<TInt> iSetOutputRequests;
		RArray<TInt> iSessionIdsInUse;
		CTelephonyAudioRouting::TAudioOutput iCurrentAudioOutput;
		CTelephonyAudioRouting::TAudioOutput iPreviousAudioOutput;
		RArray<CTelephonyAudioRouting::TAudioOutput> iAvailableOutputs;
		TBool iShowNoteMode;
		

	};

#endif