kernel/eka/include/d32resmanus.h
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:29:07 +0100
changeset 30 8aab599e3476
parent 0 a41df078684a
permissions -rw-r--r--
Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h) Have multiple extension sections in the bld.inf, one for each version of the compiler. The RVCT version building the tools will build the runtime libraries for its version, but make sure we extract all the other versions from zip archives. Also add the archive for RVCT4.

// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "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:
// e32\include\d32resmanus.h
// 
//

/**
 @file
 @publishedPartner
 @released
*/


#ifndef __D32RESMANUS_H__
#define __D32RESMANUS_H__
#include <e32cmn.h>
#include <e32ver.h>

#include <drivers/resource_category.h>

// Name lengths repesent byte length (2 bytes per character for Unicode)
#define MAX_RESOURCE_NAME_LENGTH	32 // 8-bit operation
#define MAX_NAME_LENGTH_IN_RESMAN	32 // Maximum length of 8-bit name in Resource Controller
#define MAX_CLIENT_NAME_LENGTH		256 // 8-bit operation

#ifdef RESOURCE_MANAGER_SIMULATED_PSL
#define LEVEL_GAP_REQUIRED_FOR_ASYNC_TESTING 10  // Semi-arbitrary
#define LEVEL_GAP_REQUIRED_FOR_SHARED_TESTING 3  // Semi-arbitrary
#endif

//Structure to pass the dependency information
#ifndef __KERNEL_MODE__
struct SResourceDependencyInfo
	{
	TUint iResourceId;
	TUint8 iDependencyPriority;
	};
#endif

struct TCapsDevResManUs
    {
    /**
     * The device version
     */
    TVersion version;
    };

struct TResourceInfo
	{
	TBuf8<MAX_RESOURCE_NAME_LENGTH>iName;
	TUint iId;
	TResourceClass iClass;
	TResourceType iType;
	TResourceUsage iUsage;
	TResourceSense iSense;
	TInt iMinLevel;
	TInt iMaxLevel;
	};
typedef TPckgBuf<TResourceInfo> TResourceInfoBuf;


typedef TBuf8<MAX_NAME_LENGTH_IN_RESMAN> TClientName;

struct TClientInfo
	{
	TClientName iName;
	TUint iId;
	};

typedef TPckgBuf<TClientInfo> TClientInfoBuf;

template <class T>
class RSimplePointerArray : private RPointerArrayBase
	{
	public:
	inline RSimplePointerArray();
	inline explicit RSimplePointerArray(TInt aGranularity);

	inline void Close() {RPointerArrayBase::Close();};
	inline TInt Count() const {return RPointerArrayBase::Count();};
	inline T* const& operator[](TInt anIndex) const {return (T* const&)At(anIndex);};
	inline T*& operator[](TInt anIndex) {return (T*&)At(anIndex);};
	inline TInt Append(const T* anEntry) {return RPointerArrayBase::Append(anEntry);};
	inline TInt Insert(const T* anEntry, TInt aPos) {return RPointerArrayBase::Insert(anEntry,aPos);};
	inline void Remove(TInt anIndex){RPointerArrayBase::Remove(anIndex);};

	inline T** Entries() {return (T**)(RPointerArrayBase::Entries());};
	};

template <class T>
inline RSimplePointerArray<T>::RSimplePointerArray()
	: RPointerArrayBase()
	{}

template <class T>
inline RSimplePointerArray<T>::RSimplePointerArray(TInt aGranularity)
     : RPointerArrayBase(aGranularity)
     {}


#ifdef RESOURCE_MANAGER_SIMULATED_PSL
#ifdef PRM_ENABLE_EXTENDED_VERSION2
	_LIT(KLddRootName, "resourcecontrollerextendedcore");
#elif defined (PRM_ENABLE_EXTENDED_VERSION)
	_LIT(KLddRootName,"resourcecontrollerextended"); // To support testing of the Extended version
#else
	_LIT(KLddRootName,"resourcecontroller");		 // To support testing of the basic version
#endif
#else
#ifdef PRM_ENABLE_EXTENDED_VERSION2
	_LIT(KLddRootName, "resmanextendedcore");
	_LIT(KLddName, "resmanextendedcore.ldd");
#elif defined(PRM_ENABLE_EXTENDED_VERSION)
	_LIT(KLddRootName,"resmanextended");					// To enable operation with both the basic and Extended PDD 
	_LIT(KLddName, "resmanextended.ldd");					// LDD will support the Extended funcitonality
#else
	_LIT(KLddRootName,"ResMan");					// To enable operation with both the basic and Extended PDD 
	_LIT(KLddName, "ResMan.ldd");					// LDD will support the Extended funcitonality
#endif
#endif

class RBusDevResManUs : public RBusLogicalChannel
	{
	enum TVer {EMajorVersionNumber=1,EMinorVersionNumber=0,EBuildVersionNumber=KE32BuildVersionNumber};

	public:
    /**
     * Control requests
     */
    enum TControl
		{
		EInitialise,						/**< Specify resource requirement and register			*/
        EGetNoOfResources,					/**< Read the total number of resources					*/
        EGetAllResourcesInfo,				/**< Read the info for all resources into a buffer		*/
        EGetNoOfClients,					/**< Read the total number of (Rsource Manager) clients	*/
        EGetNamesAllClients,				/**< Read the names of all clients into a buffer		*/
        EGetNumClientsUsingResource,		/**< Read the number of clients for specified resource  */
        EGetInfoOnClientsUsingResource,		/**< Read the info for clients for specified resource	*/
        EGetNumResourcesInUseByClient,		/**< Read the number of resources registered by a client*/
        EGetInfoOnResourcesInUseByClient,	/**< Read the info for all resources registered by the 
												 named client into a buffer							*/
        EGetResourceIdByName,				/**< Read the ID for a named resource					*/
        EGetResourceInfo,					/**< Read the info for specified resource to a buffer	*/
        ECancelChangeResourceStateRequests,	/**< Cancel all change state requests for a resource	*/
        ECancelGetResourceStateRequests,	/**< Cancel all get state requests for a resource		*/
        ECancelChangeNotificationRequests,	/**< Cancel all notification requests for a resource	*/
        ECancelChangeResourceState,			/**< Cancel a specific change state request				*/
        ECancelGetResourceState,			/**< Cancel a specific get state request				*/
        ECancelRequestChangeNotification,	/**< Cancel a specific notification request				*/
		EGetResourceControllerVersion,		/**< Read the version of the Resource Controller		*/
		EGetNumDependentsForResource,		/**< Read the number of dependents for a resource		*/
		EGetDependentsIdForResource			/**< Read the dependency information for a resource		*/
#ifdef RESOURCE_MANAGER_SIMULATED_PSL
		,
		// Requests to support testing
		EGetNumCandidateAsyncResources,
		EGetCandidateAsyncResourceId,
		EGetNumCandidateSharedResources,
		EGetCandidateSharedResourceId
#endif
		};

    /**
     * Asynchronous requests
     */
    enum TRequest
		{
		EChangeResourceState,				/**< Change the state of a resource							*/
        EGetResourceState,					/**< Get the state of a resource							*/
        ERequestChangeNotification,			/**< Register for resource change notifications				*/
        ERequestQualifiedChangeNotification /**< Register for qualified resource change notifications	*/
		};

#ifndef __KERNEL_MODE__
    public:

	inline TInt Open(TDesC8& aClientName);
	inline TInt Initialise(const TUint8 aNumGetStateRes, const TUint8 aNumSetStateRes, const TUint8 aNumListenableRes);
	inline TVersion VersionRequired() const;

	// Synchronous requests
	inline TInt GetNoOfResources(TUint& aNumResources, const TBool aInfoRead=ETrue);	
	inline TInt GetAllResourcesInfo(RSimplePointerArray<TResourceInfoBuf>* aInfoPtrs, TUint& aNumResources, const TBool aRefresh=EFalse);
	inline TInt GetNoOfClients(TUint& aNumClients,const TBool aIncludeKern,const TBool aInfoRead=ETrue);
	inline TInt GetNamesAllClients(RSimplePointerArray<TClientName>* aInfoPtrs, TUint& aNumClients, const TBool aIncludeKern, const TBool aRefresh=EFalse);
	inline TInt GetNumClientsUsingResource(const TUint aResourceId, TUint& aNumClients, const TBool aIncludeKern,const TBool aInfoRead=ETrue);
	inline TInt GetInfoOnClientsUsingResource(const TUint aResourceId, TUint& aNumClients, RSimplePointerArray<TClientInfoBuf>* aInfoPtrs, const TBool aIncludeKern, const TBool aRefresh=EFalse);
	inline TInt GetNumResourcesInUseByClient(TDesC8& aClientName, TUint &aNumResources,const TBool aInfoRead=ETrue);
	inline TInt GetInfoOnResourcesInUseByClient(TDesC8& aClientName, TUint &aNumResources, RSimplePointerArray<TResourceInfoBuf>* aInfoPtrs, const TBool aRefresh=EFalse);

	inline TInt GetResourceIdByName(TDesC8& aResourceName, TUint& aResourceId);
	inline TInt GetResourceInfo(const TUint aResourceId, TResourceInfoBuf* aInfo);
	inline TInt GetResourceControllerVersion(TUint& aVer);
	inline TInt GetNumDependentsForResource(const TUint aResourceId, TUint* aNumDependents, const TBool aInfoRead=ETrue);
	inline TInt GetDependentsIdForResource(const TUint aResourceId, TDes8& aResIdArray, TUint* aNumDepResources, const TBool aRefresh=EFalse);
	// Asynchronous requests
	inline void ChangeResourceState(TRequestStatus& aStatus, const TUint aResourceId, const TInt aNewState);
	inline void GetResourceState(TRequestStatus& aStatus, const TUint aResourceId, const TBool aCached, TInt* aState, TInt *aLevelOwnerId);
	inline void RequestNotification(TRequestStatus& aStatus, const TUint aResourceId);
	inline void RequestNotification(TRequestStatus& aStatus, const TUint aResourceId, const TInt aThreshold, const TBool aDirection);

	// Cancel requests
	inline TInt CancelChangeResourceStateRequests(const TUint aResourceId);
	inline TInt CancelGetResourceStateRequests(const TUint aResourceId);
	inline TInt CancelNotificationRequests(const TUint aResourceId);
	//
	inline TInt CancelChangeResourceState(TRequestStatus& aStatus);
	inline TInt CancelGetResourceState(TRequestStatus& aStatus);
	inline TInt CancelRequestNotification(TRequestStatus& aStatus);
	//
	inline void CancelAsyncOperation(TRequestStatus* aStatus);

#ifdef RESOURCE_MANAGER_SIMULATED_PSL
	// Requests to support testing
	inline	TInt GetNumCandidateAsyncResources(TUint& aNumResources);
	inline	TInt GetCandidateAsyncResourceId(TUint aIndex, TUint& aResourceId);
	inline	TInt GetNumCandidateSharedResources(TUint& aNumResources);
	inline	TInt GetCandidateSharedResourceId(TUint aIndex, TUint& aResourceId);
#endif

#endif
	};


#ifndef __KERNEL_MODE__
#include <d32resmanus.inl>
#endif


#endif