--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/server/inc/HWRMReservationHandler.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,227 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+
+#ifndef HWRMRESERVATIONHANDLER_H
+#define HWRMRESERVATIONHANDLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include "HWRMPolicy.h"
+
+// CONSTANTS
+const TInt KHWRMAllSubResources = 0;
+
+// MACROS
+// None
+
+// DATA TYPES
+// None
+
+// FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+class CHWRMService;
+
+// CLASS DECLARATION
+
+/**
+* Handles reservations of single resource.
+*
+*/
+class CHWRMReservationHandler : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aSubResourceCount Number of subresources this handler needs
+ * to be able to handle.
+ * @param aPolicyFilename Policy file name. Must not include path.
+ */
+ static CHWRMReservationHandler* NewL(TInt aSubResourceCount,
+ const TDesC& aPolicyFilename);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CHWRMReservationHandler();
+
+ public: // New functions
+
+ /**
+ * Reserve set of subresources
+ *
+ * @param aMessage Message pointer for identifying the reserving client
+ * @param aForceNoCCoeEnv Indicates if reservation is done in force CCoeEnv mode.
+ * @param aServiceCallback The callback of service requesting reservation check.
+ * @param aSubResourceMask Mask of subresources for which reservation check is done.
+ * Zero means the whole resource.
+ * @return SubresourceMask indicating subresources that were immediately suspended.
+ * @leave KErrAccessDenied if trying to force no CCoeEnv and client is not trusted.
+ */
+ TInt ReserveL(const RMessagePtr2& aMessage, TBool aForceNoCCoeEnv, CHWRMService* aServiceCallback, TInt aSubResourceMask = KHWRMAllSubResources);
+
+ /**
+ * Release set of subresources
+ *
+ * @param aServiceCallback The callback of service requesting release
+ * @param aSubResourceMask Mask of subresources for which release targets.
+ * Zero means the whole resource.
+ * @return SubresourceMask indicating subresources that do not have any more reservations.
+ * Note that this includes all unreserved subresources, not just ones among
+ * aSubResourceMask subresources.
+ */
+ TInt Release(CHWRMService* aServiceCallback, TInt aSubResourceMask = KHWRMAllSubResources);
+
+ /**
+ * Check if set of subresources is reserved. Suspended reservations are also checked.
+ *
+ * @param aServiceCallback The callback of service requesting reservation check.
+ * @param aSubResourceMask Mask of subresources for which reservation check is done.
+ * Zero means the whole resource.
+ * @return ETrue if (sub)resource is reserved for some other service than the requester.
+ */
+ TBool IsReserved(const CHWRMService* aServiceCallback, TInt aSubResourceMask = KHWRMAllSubResources) const;
+
+ /**
+ * Get unreserved targets mask
+ *
+ * @return target mask containing unreserved targets
+ */
+ TInt GetUnreservedTargets();
+
+ /**
+ * Updates active targets mask and notifies target activity state changes
+ * to sessions that have active reservations. However, activation is not
+ * notified to whichever session calls this method to avoid unnecessary
+ * transitory light state. Deactivation must be notified also to caller,
+ * if it has active reservation for that target.
+ *
+ * @param aOriginalTarget Original target before modification
+ * @param aModifiedTarget Target after modification was applied
+ * @param aUpdater Session from which the update request comes.
+ */
+ void UpdateActiveMask(TInt aOriginalTarget, TInt aModifiedTarget, CHWRMService* aUpdater);
+
+ /**
+ * Get the active reserver for specified target
+ *
+ * @param aTargetIndex Single target index for which to get the reserver info.
+ * @return Pointer to active reserver session or NULL.
+ */
+ CHWRMService* GetActiveReserver(TInt aTargetIndex);
+
+
+ /**
+ * Get policy instance
+ *
+ * @return Pointer to policy.
+ */
+ CHWRMPolicy* GetPolicy();
+ public: // Functions from base classes
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ private:
+
+ /**
+ * C++ default constructor.
+ *
+ * @param aSubResourceCount Number of subresources this handler needs
+ * to be able to handle.
+ */
+ CHWRMReservationHandler(TInt aSubResourceCount);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ *
+ * @param aPolicyFilename Policy file name. Must not include path.
+ */
+ void ConstructL(const TDesC& aPolicyFilename);
+
+ public: // Data
+
+ protected: // Data
+
+ private: // Data
+
+ /**
+ * Embedded class to contain reservation data.
+ * All data members are public as this is basically a struct.
+ *
+ */
+ class TReservationData
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ constructor to initialize defaults.
+ */
+ TReservationData()
+ : iCallback(NULL),
+ iPriority(KMaxTInt),
+ iSuspendedData(NULL)
+ {
+ };
+
+ // data
+
+ CHWRMService* iCallback; // Service callback of the reserver. Not owned.
+
+ TInt iPriority; // Priority of the reservation
+ TReservationData* iSuspendedData; // Link for first suspended data. Not owned.
+ };
+
+
+ TInt iSubResourceCount; // Number of subresources supported.
+ TInt iAllMask; // This subresource mask is used if 0 mask is specified.
+ // Cannot just use constant as number of subs varies.
+ CHWRMPolicy* iPolicy; // Pointer to policy. Owned.
+ RPointerArray<TReservationData> iReservations; // Pointers to reservation data objects.
+ // First reservation is the active one,
+ // Suspended reservations are linked via iSuspendedDatas.
+ // Suspended reservations naturally arrange in priority order
+ // NULL value indicates that
+ // selected subresource is not reserved.
+
+ TInt iActiveMask; // Mask of active targets (i.e. not removed by target modifier plugin)
+
+ public: // Friend classes
+
+ protected: // Friend classes
+
+ private: // Friend classes
+
+
+ };
+
+#endif // HWRMRESERVATIONHANDLER_H
+
+// End of File