resourcemgmt/hwresourcesmgr/server/inc/HWRMFmTxService.h
changeset 0 4e1aa6a622a0
child 78 3f0699f2e14c
--- /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 <e32base.h>
+#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