sl@0: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0: // All rights reserved.
sl@0: // This component and the accompanying materials are made available
sl@0: // under the terms of "Eclipse Public License v1.0"
sl@0: // which accompanies this distribution, and is available
sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: //
sl@0: // Initial Contributors:
sl@0: // Nokia Corporation - initial contribution.
sl@0: //
sl@0: // Contributors:
sl@0: //
sl@0: // Description:
sl@0: // mmrcserverphysicaladaptation.h
sl@0: // 
sl@0: //
sl@0: 
sl@0: #ifndef MMRCPHYSICALADAPTATION_H_
sl@0: #define MMRCPHYSICALADAPTATION_H_
sl@0: 
sl@0: #include <e32std.h>
sl@0: #include <e32base.h>
sl@0: #include <a3f/a3fbase.h>
sl@0: #include <a3f/a3f_trace_utils.h>
sl@0: #include "mmrcclientserver.h"
sl@0: #include "maudiostreamadaptationobserver.h"
sl@0: 
sl@0: class MLogicalChain;
sl@0: class MAudioContext;
sl@0: class CFourCCConvertor;
sl@0: class CMMRCServerSideAdaptationResponseAO;
sl@0: class CAudioStreamAdaptation;
sl@0: class CMMRCServerSession;
sl@0: 
sl@0: //------------------------------------------------------------------------------------
sl@0: // CMMRCClientSideServerRequestToAdaptationAO
sl@0: //------------------------------------------------------------------------------------
sl@0: 
sl@0: /**
sl@0: @internalComponent
sl@0: 
sl@0: This class implements the proxy to the Physical adaptation.
sl@0: The main purpose of this class is to communicate with the physical resource manager.
sl@0: */
sl@0: NONSHARABLE_CLASS( CMMRCClientSideServerRequestToAdaptationAO ): public CActive, public MAudioStreamAdaptationObserver
sl@0: 	{
sl@0: public:
sl@0: 	/**
sl@0: 	 * Constructs, and returns a pointer to, a new CMMRCClientSideServerRequestToAdaptationAO object.
sl@0: 	 * Leaves on failure.
sl@0: 	 * @param CMMRCServerController& A reference on the MMRC Server controller
sl@0: 	 * @return CMMRCClientSideServerRequestToAdaptationAO* A pointer to newly created utlitly object.
sl@0: 	 */
sl@0: 	IMPORT_C static CMMRCClientSideServerRequestToAdaptationAO* NewL( );
sl@0: 
sl@0: 	/**
sl@0: 	 * Destructor.
sl@0: 	 */
sl@0: 	~CMMRCClientSideServerRequestToAdaptationAO( );
sl@0: 
sl@0: public:
sl@0: 	void Initialize(CMMRCServerSession* aServerSession,
sl@0: 					CMMRCServerSideAdaptationResponseAO* aCallback,
sl@0: 					RThread* aClientThread,
sl@0: 					const CFourCCConvertor& aFourCCConvertor);
sl@0: 
sl@0: 	void Service(TUint aRequestType);
sl@0: 
sl@0: 	/**
sl@0: 	 * Callback in case of timeout
sl@0: 	 */
sl@0: 	void ResourceRequestAcknowledgmentTimeout( );
sl@0: 
sl@0: 	// from MAudioStreamAdaptationObserver
sl@0: 	void PhysicalAdaptationEvent(TPhysicalEvent aEvent, TInt aError);
sl@0: 	void StateEvent(TInt aReason, TAudioState aNewState);
sl@0: 	void AddProcessingUnitComplete(TUid aType, TInt aError);
sl@0: 	void RemoveProcessingUnitComplete(TUid aType, TInt aError);
sl@0: 	void ProcessingFinished();
sl@0: 	void FlushComplete(TInt aError);
sl@0: 
sl@0: 	//From CActive
sl@0: 	virtual void RunL();
sl@0: 	virtual void DoCancel();
sl@0: 
sl@0: private:
sl@0: 	/**
sl@0: 	 * By default Symbian 2nd phase constructor is private.
sl@0: 	 * @param CMMRCServerController& A reference on the MMRC Server controller
sl@0: 	 */
sl@0: 	CMMRCClientSideServerRequestToAdaptationAO( );
sl@0: 
sl@0: 	void TidyUp();
sl@0: 
sl@0: 	/**
sl@0: 	 * By default Symbian 2nd phase constructor is private.
sl@0: 	 */
sl@0: 	void ConstructL( );
sl@0: 
sl@0: private:
sl@0: 	//owned
sl@0: 	CAudioStreamAdaptation* iStreamAdaptation;
sl@0: 
sl@0: 	//not owned
sl@0: 	RThread* iClientThread;
sl@0: 	CMMRCServerSession* iServerSession;
sl@0: 	CMMRCServerSideAdaptationResponseAO* iMMRCServerSideAdaptationResponseAO;
sl@0: 
sl@0: 	MLogicalChain* iLogicalChainRequested;
sl@0: 	MLogicalChain* iLogicalChainLastCommited;
sl@0: 	MAudioContext* iAudioContext;
sl@0: 	TInt iRequestsProcessed;
sl@0: 	TUint iRequestType;
sl@0: 	};
sl@0: 
sl@0: //------------------------------------------------------------------------------------
sl@0: // CMMRCServerSideAdaptationResponseAO
sl@0: //------------------------------------------------------------------------------------
sl@0: 
sl@0: /**
sl@0: @internalComponent
sl@0: 
sl@0: */
sl@0: NONSHARABLE_CLASS( CMMRCServerSideAdaptationResponseAO ) : public CActive
sl@0: 	{
sl@0: public:
sl@0: 	~CMMRCServerSideAdaptationResponseAO();
sl@0: 	static CMMRCServerSideAdaptationResponseAO* NewL();
sl@0: 	void Initialize(CMMRCServerSession* aServerSession, RThread* iServerThread );
sl@0: 	void Service(TMMRCAdaptationToServerRequestResults aEvent, TInt aError);
sl@0: 	void StartAdaptationListening();
sl@0: private:
sl@0: 	CMMRCServerSideAdaptationResponseAO();
sl@0: 	void ConstructL( );
sl@0: 	void RunL( );
sl@0: 	void DoCancel( );
sl@0: 
sl@0: private:
sl@0: 	//not owned
sl@0: 	CMMRCServerSession* iMMRCServerSession;
sl@0: 	RThread* iServerThread;
sl@0: 
sl@0: 	TMMRCAdaptationToServerRequestResults iEvent;
sl@0: 	TInt iError;
sl@0: 	};
sl@0: 
sl@0: #endif /*MMRCPHYSICALADAPTATION_H_*/