diff -r 000000000000 -r 4e1aa6a622a0 resourcemgmt/hwresourcesmgr/server/inc/HWRMFmTxService.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/resourcemgmt/hwresourcesmgr/server/inc/HWRMFmTxService.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,327 @@ +/* +* 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 HWRMFMTXSERVICE_H +#define HWRMFMTXSERVICE_H + +// INCLUDES +#include +#include "HWRMGenericTimer.h" +#include "HWRMFmTxCommands.h" +#include "HWRMFmTxData.h" +#include "HWRMService.h" +#include "HWRMFmTxCommonData.h" + +// CONSTANTS +// None +// Frequency ranges as of May 2007: +// 88.1-107.9 MHz for rest of the world (FCC lower limit) +// 88.1 - 90 MHz for Japan (we still cannot go lower than FCC lower limit) +const TInt KHWRMFmTxBackupMinFreq = 88100; // kHz +const TInt KHWRMFmTxBackupMaxFreq = 107900; // kHz +const TInt KHWRMFmTxBackupStepSize = 50; // kHz + +// MACROS +// None + +// DATA TYPES +// None + +// FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +class CHWRMFmTxCommonData; +class CHWRMPluginHandler; +class CHWRMReservationHandler; +class CHWRMFmTxRdsTextConverter; + +// CLASS DECLARATION + +/** +* Data storage class for FM Tx plug-in requests +*/ +class THWRMFmTxPluginRequestData : public THWRMPluginRequestData + { + public: + TInt iArg; // Generic integer param + + /** + * Convenience constructor + */ + THWRMFmTxPluginRequestData(TInt aArg, + const RMessage2& aRequestMessage, + TUint8 aTransId, + TInt aCommandId, + TBool aSplitCommand) + : THWRMPluginRequestData(aRequestMessage, aTransId, aCommandId, aSplitCommand), + iArg(aArg) + { + }; + /** + * Virtual destructor. + */ + virtual ~THWRMFmTxPluginRequestData() + { + }; + }; + +/** +* Hardware Resource Manager server side service object for FmTx sessions. +*/ +class CHWRMFmTxService : public CHWRMService + { + public: // Constructors and Destructor + + /** + * Two-phased constructor. + * + * @param aPluginHandler The plugin handler to use with this service. + * @param aWatcherPluginHandler The watcher plugin handler to use with this service. + * @param aReservationHandler The reservation handler to use with this service. + * @param aFmTxCommonData Commmon data instance to use with this service. + * @param aRdsTextConverter Text converter instance to use with this service. + */ + static CHWRMFmTxService* NewL(CHWRMPluginHandler* aPluginHandler, + CHWRMPluginHandler& aWatcherPluginHandler, + CHWRMReservationHandler* aReservationHandler, + CHWRMFmTxCommonData& aFmTxCommonData, + CHWRMFmTxRdsTextConverter& aRdsTextConverter); + + /** + * Destructor. + */ + virtual ~CHWRMFmTxService(); + + public: // Base class methods + + // From CHWRMService + virtual TBool ExecuteMessageL( const RMessage2& aMessage ); + virtual void ProcessResponseL( TInt aCommandId, TUint8 aTransId, TDesC8& aData, TBool aTimeout ); + virtual void SuspendSubResource(TInt aSubResource); + virtual void ResumeSubResource(TInt aSubResource); + virtual void ActivateSubResource(TInt aSubResource, TBool aActivate); + + public: // Other methods + + /** + * Handles plug-in requests that are not client initiated + * Called by Common Data service instance + * + * @param aCommand the plug-in command to execute + */ + void ExecutePluginCommand(HWRMFmTxCommand::TFmTxCmd aCommand); + + /** + * Handles plug-in requests that are not client initiated + * Called by Common Data service instance + * + * @param aCommand the plug-in command to execute + * @param aSplitCommand ETrue if this command is split into multiple transactions + * @param aPckg Command package + */ + void ExecutePluginCommand(HWRMFmTxCommand::TFmTxCmd aCommand, + TBool aSplitCommand, + TDesC8& aPckg ); + + private: + + /** + * C++ default constructor. + */ + CHWRMFmTxService(CHWRMPluginHandler& aWatcherPluginHandler, + CHWRMFmTxCommonData& aFmTxCommonData, + CHWRMFmTxRdsTextConverter& aRdsTextConverter); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(CHWRMPluginHandler* aPluginHandler, + CHWRMReservationHandler* aReservationHandler); + + // Helpers for ProcessResponseL + + /** + * Checks the response data size + * + * @return ETrue if aData.Size() is correct + */ + TBool CheckResponseDataSize(TInt aCommandId, TDesC8& aData); + + // Helpers for ExecuteMessageL + + /** + * Handles EHWRMFmTxOn request + * + * @param aFrequency The requested initial Tx frequency + */ + void EnableL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxOff request + * @return ETrue if client request can be completed immediately + */ + TBool DisableL(const RMessage2& aMessage); + + /** + * Handles EGetTxFrequencyRangeCmdId request + */ + void GetFrequencyRangeL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxSetFreq request + * + * @return TBool ETrue if message can be completed immediately, on return + */ + TBool SetFrequencyL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxGetNextClearFreq requests. + * + * @param aClearFreqsRequired The number of clear frequencies requested + */ + void GetNextClearFrequencyL(const RMessage2& aMessage, + TUint aClearFreqsRequired); + + /** + * Handles EHWRMFmTxSetNextClearFreq requests + * + * @param aClearFreqsRequired The number of clear frequencies requested + */ + void SetNextClearFrequencyL(const RMessage2& aMessage, + TUint aClearFreqsRequired); + + /** + * Handles EHWRMFmTxSetRdsPty requests + */ + void SetRdsPtyL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxSetRdsPtyn requests + */ + void SetRdsPtynL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxSetRdsMs requests + */ + void SetRdsMsL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxSetRdsLanguageId requests + */ + void SetRdsLanguageIdL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxSetRadiotext requests + */ + void SetRadiotextL(const RMessage2& aMessage); + void SetRadiotextL(const RMessage2& aMessage, TRtPlusTag aTag); + void SetRadiotextL(const RMessage2& aMessage, TRtPlusTag aTag1, TRtPlusTag aTag2); + + /** + * Handles EHWRMFmTxClearRdsData requests + */ + void ClearRdsDataL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxClearRtData requests + */ + void ClearRadiotextDataL(const RMessage2& aMessage); + + /** + * Handles EHWRMFmTxRelease and EHWRMFmTxCleanup requests + */ + void DoRelease(); + + /** + * Leaves if another client has reserved FM Tx + */ + void LeaveIfOtherReservationL(); + + /** + * Leaves if FM Tx is not enabled + */ + void LeaveIfTransmitterOffL(); + + /** + * Leaves if RT plus tag is not valid + */ + void LeaveIfTagInvalidL( TRtPlusTag aTag ); + + /** + * Executes a plugin command and handles related transaction. + * + * @param aMessage Message related to this command. + * @param aCommandId Command ID of the command. + * @param aSplitCommand ETrue if this command is split into multiple transactions + */ + void ExecutePluginCommandL(const RMessage2& aMessage, + HWRMFmTxCommand::TFmTxCmd aCommandId, + TBool aSplitCommand ); + + /** + * Executes a plugin command and handles related transaction. + * + * @param aMessage Message related to this command. + * @param aCommandId Command ID of the command. + * @param aSplitCommand ETrue if this command is split into multiple transactions + * @param aPckg Command package + */ + void ExecutePluginCommandL(const RMessage2& aMessage, + HWRMFmTxCommand::TFmTxCmd aCommandId, + TBool aSplitCommand, + TDesC8& aPckg ); + + + /** + * Executes a plugin command and handles related transaction. + * + * @param aMessage Message related to this command. + * @param aCommandId Command ID of the command. + * @param aSplitCommand ETrue if this command is split into multiple transactions + * @param aPckg Command package + * @param aArg Generic integer parameter for THWRMFmTxPluginRequestData + */ + void ExecutePluginCommandL(const RMessage2& aMessage, + HWRMFmTxCommand::TFmTxCmd aCommandId, + TBool aSplitCommand, + TDesC8& aPckg, + TInt aArg ); + + /** + * Cancels a plugin command and handles the related transaction(s). + * + * @param aCommandId Command ID of the command. + */ + void CancelPluginCommandL(HWRMFmTxCommand::TFmTxCmd aCommandId); + + private: // data + + CHWRMPluginHandler& iWatcherPluginHandler; // Reference to watcher plugin handler. + CHWRMPluginTransactionList* iWatcherTransactionList; // List of open watcher transactions. Owned. + CHWRMFmTxCommonData& iFmTxCommonData; // Ref to FM Tx data object common to all sessions. Not owned. + CHWRMFmTxRdsTextConverter& iRdsTextConverter; // Ref to Unicode->RDS text converter. Not owned. + + TBool iSuspended; // Flag to indicate if this session is suspended. + TBool iReserved; // Flag to indicate if this session is reserved. + }; + +#endif // HWRMFMTXSERVICE_H + +// End of File