--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/server/inc/HWRMPolicy.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,271 @@
+/*
+* 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 HWRMPOLICY_H
+#define HWRMPOLICY_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h> // For RFs
+
+// CONSTANTS
+const TInt KHighestPriority( 1 );
+const TInt KLowestPriority( 1000 );
+// If no 'ALL' client exists in file this is the default priority
+const TInt KDefaultNormalPriority( 500 );
+// HWRM Lights policy
+_LIT( KLightsPolicyFilename, "HWRMLightsPolicy.ini" );
+// HWRM Vibra policy
+_LIT( KVibraPolicyFilename, "HWRMVibraPolicy.ini" );
+// HWRM FM Tx policy
+_LIT( KFmTxPolicyFilename, "HWRMFmTxPolicy.ini" );
+// Customer policy filename prefix
+_LIT( KCustomerPolicyPrefix, "Customer" );
+// Product policy filename prefix
+_LIT( KProductPolicyPrefix, "Product" );
+
+// Drive used to store policy files
+_LIT( KDrivename, "Z:" );
+
+
+// CLASS DECLARATION
+
+/**
+* This class is intended to parse the associated priority text file and
+* provide an API to return the clients priority.
+*
+*/
+class CHWRMPolicy : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aFilename Filename of policy file, filename should not
+ * include the path as the file is stored in
+ * the private directory.
+ */
+ static CHWRMPolicy* NewL( const TDesC& aFilename );
+
+ /**
+ * Two-phased constructor.
+ * Leaves instance on the cleanup stack.
+ * @param aFilename Filename of policy file, filename should not
+ * include the path as the file is stored in
+ * the private directory.
+ */
+ static CHWRMPolicy* NewLC( const TDesC& aFilename );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CHWRMPolicy();
+
+ public: // New functions
+
+ /**
+ * Method to retrieve the priority of a client with the given ID.
+ * This ID can be the UID or SID defined in the policy file.
+ * @param aMsg Message from client, used to obtain SID
+ * @param aTrusted Returns ETrue if client is trusted, i.e.
+ * explicitly specified in policy file.
+ * @return Priority of client.
+ * If client does not exist default priority defined
+ * by client ALL.
+ * Method to return indication of feedback client
+ * @param aSid Clients SID
+ * @return ETrue if feedback client, otherwise EFalse
+ */
+ TInt GetPriority( const TSecureId aSid, TBool& aTrusted ) const;
+
+ /**
+ * Method to return indication of feedback client
+ * @param aSid Clients SID
+ * @return ETrue if feedback client, otherwise EFalse
+ */
+ TBool FeedbackClient(TSecureId aSid) const;
+
+ private: // New functions
+
+ /**
+ * C++ constructor.
+ */
+ CHWRMPolicy();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param aFilename Filename of policy file, filename should not
+ * include the path as the file is stored in
+ * the private directory.
+ */
+ void ConstructL( const TDesC& aFilename );
+
+ /**
+ * Method constructs the array of policy clients from the
+ * given stream (usually an RFileReadStream)
+ * @param aFs File server session
+ * @param aFilename Filename to read
+ */
+ void ParsePriorityFileL( RFs& aFs, const TDesC& aFilename );
+
+ /**
+ * Helper method to convert and validate SID from a descriptor.
+ * @param aSidDes The Sid to be converted
+ * @param aSid Reference that will contain the SID
+ * @return KErrNone if successful, KErrCorrupt if invalid
+ */
+ TInt ConvertId( const TDesC8& aSidDes, TSecureId& aSid ) const;
+
+ /**
+ * Adds a policy client to the array, first checks that no other
+ * client has been registered with the identical id. If one already
+ * exists KErrAlreadyExists is returned.
+ * @param aPriority Clients priorty
+ * @param aSid Clients SID or KAllPolicySid
+ * @param aFeedbackClient Indication whether feedback client
+ * @param aAppName Clients application name
+ * @return KErrNone if successful
+ * KErrAlreadyExists if client id already exists
+ */
+ TInt AddPolicyClientL( const TInt aPriority, const TSecureId& aSid,
+ const TBool aFeedbackClient, const TDesC8& aAppName );
+
+ /**
+ * Searches for client with the given id
+ * @param aId Clients SID or KAllPolicySid
+ * @return Client position in iClientArray
+ * KErrNotFound if client does not exist
+ */
+ TInt FindClient( const TSecureId& aSid ) const;
+
+ private: // Data
+
+ /**
+ * Embedded class to contain policy client data intended
+ * to be read from the policy file.
+ *
+ */
+ class CPolicyClient : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aPriority Clients priorty
+ * @param aSid Clients SID or KAllPolicySid
+ * @param aFeedbackClient Indication whether feedback client
+ * @param aAppName Clients application name
+ */
+ static CPolicyClient* NewL( const TInt aPriority,
+ const TSecureId& aSid,
+ const TBool aFeedbackClient,
+ const TDesC8& aAppName );
+
+ /**
+ * Two-phased constructor.
+ * Leaves instance on the cleanup stack.
+ * @param aPriority Clients priorty
+ * @param aFeedbackClient Indication whether feedback client
+ * @param aAppName Clients application name
+ */
+ static CPolicyClient* NewLC( const TInt aPriority,
+ const TSecureId& aSid,
+ const TBool aFeedbackClient,
+ const TDesC8& aAppName );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPolicyClient();
+
+ public: // New functions
+
+ /**
+ * Method to return the clients priority
+ * @return Priority of client
+ */
+ TInt Priority() const;
+
+ /**
+ * Method to returns the clients SID
+ * @return SID of client
+ */
+ TSecureId Sid() const;
+
+ /**
+ * Method to return indication whether feedback client
+ * @return ETrue if feedback client, otherwise EFalse
+ */
+ TBool FeedbackClient() const;
+
+ /**
+ * Method to returns the client application name
+ * @return Application name of the client
+ */
+ const TDesC& AppName() const;
+
+
+
+ private: // New functions
+
+ /**
+ * C++ constructor.
+ * @param aPriority Clients priorty
+ * @param aFeedbackClient Indication whether feedback client
+ */
+ CPolicyClient( const TInt aPriority, const TSecureId& aSid,
+ const TBool aFeedbackClient );
+
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param aAppName Clients application name
+ */
+ void ConstructL( const TDesC8& aAppName );
+
+ private: // Data
+
+ // priority of client
+ TInt iPriority;
+ // the sid of client
+ TSecureId iSid;
+ // boolean indicating whether tactile feedback client
+ TBool iFeedbackClient;
+ // clients app name
+ HBufC* iAppName;
+
+ };
+
+ // Array of objects representing each client from the policy file.
+ RPointerArray<CPolicyClient> iClientArray;
+
+ // Default policy for 'ALL' client, not stored in array for efficiency
+ CPolicyClient* iAllPolicyClient;
+ };
+
+
+#endif // HWRMPOLICY_H
+
+// End of File