diff -r 000000000000 -r 4e1aa6a622a0 resourcemgmt/hwresourcesmgr/server/inc/HWRMPluginHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/resourcemgmt/hwresourcesmgr/server/inc/HWRMPluginHandler.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,214 @@ +/* +* 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 HWRMPLUGINHANDLER_H +#define HWRMPLUGINHANDLER_H + +// INCLUDES +#include +#include "HWRMPluginService.h" +#include "HWRMPluginTransactionList.h" +#include "HWRMGenericTimer.h" + +// CONSTANTS +// None + +// MACROS +// None + +// DATA TYPES + +// FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +class CHWRMService; + +// CLASS DECLARATIONS + +/** + * Callback interface for the server side plugin handler + */ + class MHWRMIndicationHandler + { + public: + + /** + * Method to return events from plugin handler + * + * @param aId The indication ID + * @param aData Data associated with the indication + * + */ + virtual void ProcessIndicationL( const TUint32 aId, TDesC8& aData ) = 0; + }; + +/** +* This class contains ongoing plugin operation data. +* It is used as a struct. +*/ +class THWRMTransactionData : public THWRMPluginTransactionListItem + { + public: + + CHWRMService* iCompletionCallback; // Pointer to currently using service. Not owned. + TTime iObsoletionTime; // Time after which the transaction is obsolete + + /** + * Convenience constructor + */ + THWRMTransactionData(CHWRMService* aCompletionCallback, + TUint8 aTransId, + TInt aCommandId, + const TTime& aObsoletionTime) + : THWRMPluginTransactionListItem(aTransId, aCommandId), + iCompletionCallback(aCompletionCallback), + iObsoletionTime(aObsoletionTime) + { + }; + + /** + * Virtual destructor. + */ + virtual ~THWRMTransactionData() + { + // iCompletionCallback not owned so not cleaned. Just NULL it to make pc-lint happy. + iCompletionCallback = NULL; + }; + }; + +/** +* Hardware Resource Manager server side plugin +* handler implementation. +* +*/ +class CHWRMPluginHandler : public CBase, + public MHWRMPluginCallback, + public MHWRMGenericTimerCallback + + { + public: // Constructors and Destructor + + /** + * Constructor method for instance. + * + * @param aMatch Determines the API that the loaded plugin implements. + * @param aRequestTimeout Timeout in microseconds for requests + */ + static CHWRMPluginHandler* NewL(const TDesC8& aMatch, TInt aRequestTimeout); + + /** + * Destructor. + */ + virtual ~CHWRMPluginHandler(); + + public: // New functions + + /** + * Method to invoke a particular command in the plugin. + * Only one concurrent request is supported, will leave + * with KErrNotSupported if request is attempted while + * another is executing + * + * @param aCommandId Command ID + * @param aData Data associated with command + * @param aCompletionCallback Callback for completion. + * If NULL, no callback is attempted. + * @return Transaction ID (can be used later to cancel) + * Returns zero if transaction was already completed. + */ + TUint8 ProcessCommandL( TInt aCommandId, + TDesC8& aData, + CHWRMService* aCompletionCallback); + + /** + * Method to cancel currently executing command + */ + void CancelCommandL( TUint8 aTransId ); + + /** + * Registers a handler for receiving HWRM plug-in indications + * + * @param aCallback The indication handler to be registered + */ + void RegisterForIndications(MHWRMIndicationHandler* aCallback); + + /** + * Deregisters handlers for receiving HWRM plug-in indications + * + * @param aCallback The indication handler to be deregistered + */ + void DeregisterForIndications(MHWRMIndicationHandler* aCallback); + + // MHWRMPluginCallback callback methods + + /** + * Method to return data in response to a message from a HWRM plugin. + * + * @param aCommandId Command identifier + * @param aTransId Unique transcation identifier + * @param aData Data returned from call + * Since none of the commands require return value, + * this package contains standard TInt error code. + */ + void ProcessResponseL( TInt aCommandId, + TUint8 aTransId, + TDesC8& aData ); + /** + * Method to return indications from HWRM plugin. + * + * @param aIndId An indication ID + * @param aData Data associated with the event ID. + */ + void EventL( const TUint32 aIndId, TDesC8& aData ); + + // From MHWRMGenericTimerCallback + virtual void GenericTimerFired(TInt aTimerId, TBool aCutOff); + + private: + + /** + * C++ default constructor. + * @param aRequestTimeout Timeout in microseconds for requests + */ + CHWRMPluginHandler(TInt aRequestTimeout); + + /** + * This 2nd phase constructor. + * + * @param aMatch Matching parameter used to determine correct + * ECom implemetation + */ + void ConstructL( const TDesC8& aMatch ); + + private: // data + + CHWRMPluginService* iPlugin; // Reference to plugin + TUint8 iTransIdCounter; // Counter to create aTransIds + CHWRMPluginTransactionList* iTransactionList; // List of open transactions + CHWRMGenericTimer* iPluginTimer; // Plugin call timeout timer. + TTimeIntervalMicroSeconds32 iRequestTimeout; // Maximum time request can be open. + + RPointerArray iIndicationCallbacks; // elements not owned + }; + +#endif // HWRMPLUGINHANDLER_H + +// End of File