diff -r 000000000000 -r a41df078684a kerneltest/e32test/resourceman/d_rescontrolcli.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/resourceman/d_rescontrolcli.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,631 @@ +// Copyright (c) 2007-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: +// e32test\resourceman\d_rescontrolcli.h +// +// + +#ifndef __D_RESCONTROLCLI_H__ +#define __D_RESCONTROLCLI_H__ + +#include +#include +#ifndef __KERNEL_MODE__ +#include +#endif + +#ifndef __KERNEL_MODE__ +//Structure to pass the dependency information +struct SResourceDependencyInfo + { + TUint iResourceId; + TUint8 iDependencyPriority; + }; +#endif + +#define MAX_CLIENTS 50 //Maximum clients allowed + +#ifndef PRM_ENABLE_EXTENDED_VERSION +_LIT(KLddName, "D_RESCONTROLCLI.LDD"); +#else +_LIT(KLddName, "D_EXTENDEDRESCONTROLCLI.LDD"); +#endif + +/** Struture for passing information between user and kernel side.*/ +struct TParameterListInfo + { + TUint iClientId; + TAny* iPtr1; + TAny* iPtr2; + TAny* iPtr3; + TAny* iPtr4; + TAny* iPtr5; + }; + +/** User side logical channel */ +class RTestResMan : public RBusLogicalChannel + { +public: + // Structure for holding driver capabilities information + class TCaps + { + public: + TVersion iVersion; + }; + +private: + enum TControl //Request types for synchronous operation. + { + ERegisterClient, + EDeRegisterClient, + EGetClientName, + EGetClientId, + EGetResourceId, + EGetResourceInfo, + EGetNumResourcesInUseByClient, + EGetInfoOnResourcesInUseByClient, + EGetNumClientsUsingResource, + EGetInfoOnClientsUsingResource, + EAllocReserve, + ECheckNotifications, + EChangeResourceStateSync, + EGetResourceStateSync, + ERegisterForIdleResourcesInfo, + EGetIdleResourcesInfo, + EDeRegisterClientLevelFromResource, + ERequestNotificationCond, + ERequestNotificationUncond, + ECheckPostBootLevelNotifications, + ECancelNotification, + EGetControllerVersion, +#ifdef PRM_ENABLE_EXTENDED_VERSION + ERegisterDynamicResource, + EDeRegisterDynamicResource, + ERegisterResourceDependency, + EDeRegisterResourceDependency, + EGetNumDependentsForResource, + EGetDependentsIdForResource, +#endif //PRM_ENABLE_EXTENDED_VERSION + EMaxControl, + }; + enum TRequest //Request types for asynchronous operation + { + EChangeResourceStateAsync = EMaxControl + 1, + EGetResourceStateAsync, +#ifdef PRM_ENABLE_EXTENDED_VERSION + EChangeResStateAndDeregisterDynamicRes, + ECheckParallelExecutionForChangeResState +#endif + }; + friend class DTestResManLdd; +public: + TInt Open(); + TInt RegisterClient(TUint& aClientId, const TDesC* aClientName, TOwnerType aType=EOwnerProcess); + TInt DeRegisterClient(TUint aClientId); + TInt GetClientName(TUint aClientId, TUint aTargetClientId, TDes8* aClientName); + TInt GetClientId(TUint aClientId, TDesC8& aClientName, TUint& aTargetClientId); + TInt GetResourceId(TUint aClientId, TDesC8& aResourceName, TUint& aResourceId); + TInt GetResourceInfo(TUint aClientId, TUint aResourceId, TAny* aBuf); + TInt GetNumResourcesInUseByClient(TUint aClientId, TUint aTargetClientId,TUint& aNumResources); + TInt GetInfoOnResourcesInUseByClient(TUint aClientId, TUint aTargetClientId, TUint& aNumResources, TAny* info); + TInt GetNumClientsUsingResource(TUint aClientId, TUint aResourceId, TUint& aNumClients); + TInt GetInfoOnClientsUsingResource(TUint aClientId, TUint aResourceId, TUint& aNumClients, TAny* info); + TInt AllocReserve(TUint aClientId, TUint8 aNumClientLevels, TUint8 aNumResources); + TInt CheckNotifications(TUint aResourceId, TUint aUnconNoti, TUint aCondNoti); + TInt ChangeResourceStateSync(TUint aClientId, TUint aResourceId, TInt aNewState); + void ChangeResourceStateAsync(TUint aClientId, TUint aResourceId, TInt& aState, TRequestStatus& aStatus, TBool aReqCancel = EFalse); + TInt GetResourceStateSync(TUint aClientId, TUint aResourceId, TBool aCached, TInt& aNewState, TInt& aLevelOwnerId); + void GetResourceStateAsync(TUint aClientId, TUint aResourceId, TBool aCached, TRequestStatus& aStatus, TInt& aState, TInt& aLevelOwnerId, TBool aReqCancel = EFalse); + TInt RequestNotification(TUint aClientId, TUint aResourceId); + TInt RequestNotification(TUint aClientId, TUint aResourceId, TInt aDirection, TInt aThreshold); + TInt CancelNotification(TUint aClientId, TUint aResourceId, TBool aType); + TInt RegisterForIdleResourcesInfo(TUint aPowerControllerId, TUint aResourceNum); + TInt GetIdleResourcesInfo(TUint aResourceNum, TAny* info); + TInt DeRegisterClientLevelFromResource(TInt aClientId, TUint aResId); + TInt CheckPostBootLevelNotifications(); + TInt GetResourceControllerVersion(TUint aClientId, TUint& aVersion); +#ifdef PRM_ENABLE_EXTENDED_VERSION + TInt RegisterDynamicResource(TUint aClientId, TUint& aResourceId); + TInt DeRegisterDynamicResource(TUint aClientId, TUint aResourceId, TInt *aLevel); + TInt RegisterResourceDependency(TUint aClientId, SResourceDependencyInfo aInfo1, SResourceDependencyInfo aInfo2); + TInt DeRegisterResourceDependency(TUint aClientId, TUint aResourceId1, TUint aResourceId2); + void ChangeResStateAndDeRegisterDynamicRes(TUint aClientId, TUint aResourceId, TInt &aLevel, TRequestStatus& aStatus); + TInt GetNumDependentsForResource(TUint aClientId, TUint aResourceId, TUint& aNumDepResource); + TInt GetDependentsIdForResource(TUint aClientId, TUint aResourceId, TAny* aResIdArray, TUint& aNumDepResources); + void CheckParallelExecutionForChangeResState(TUint aClientId, TUint aDepResId, TInt& aDepLevel, TUint aResId, TInt aLevel, TRequestStatus& aStatus); +#endif //PRM_ENABLE_EXTENDED_VERSION + inline static TVersion VersionRequired(); + }; + +inline TVersion RTestResMan::VersionRequired() + { + const TInt KMajorVersionNumber=1; + const TInt KMinorVersionNumber=0; + const TInt KBuildVersionNumber=KE32BuildVersionNumber; + return TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber); + } + +#ifndef __KERNEL_MODE__ + +/** Open a channel for the driver.This driver does not allow more than one channel open at a time. */ +TInt RTestResMan::Open() + { + return DoCreate(KLddName, VersionRequired(),KNullUnit,NULL,NULL); + } + +/** Request to register a client with resource manager + @Param - aClientId, On Success with be updated with a valid unique clientID, + - aClientName, Name of the client to register with RM, + - aType, Defines ownership, can be either process relative or thread relative + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::RegisterClient(TUint& aClientId, const TDesC* aClientName, TOwnerType aType) + { + TParameterListInfo anInfo; + anInfo.iPtr1 = (TAny*)&aClientId; + anInfo.iPtr2 = (TAny*)aClientName; + anInfo.iPtr3 = (TAny*)aType; + return DoControl(ERegisterClient, (TAny*)&anInfo); + } + +/** Request to deregister a client from RM. + @Param - aClientID, The ID of the Client to deregister + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::DeRegisterClient(TUint aClientId) + { + return DoControl(EDeRegisterClient, (TAny*)aClientId); + } + +/** Request to obtain the name of the specified client of the RM + @Param - aClientId, Requesting ClientId + - aTargetClientId, Id of the client whose name is requested. + - aClientName, On Success returned with client name. + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetClientName(TUint aClientId, TUint aTargetClientId, TDes8* aClientName) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aTargetClientId; + anInfo.iPtr2 = (TAny*)aClientName; + return DoControl(EGetClientName, (TAny*)&anInfo); + } + +/** Request to obtain the ID of the specified client of the RM + @Param - aClientId, Requesting ClientId, + - aClientName, Client Name whose Id is being requested, + - aTargetClientId, On Success with be updated with requested client Id + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetClientId(TUint aClientId, TDesC8& aClientName, TUint& aTargetClientId) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)&aClientName; + anInfo.iPtr2 = (TAny*)&aTargetClientId; + return DoControl(EGetClientId, (TAny*)&anInfo); + } + +/** Request to obtain the ID of the specified resource of the RM + @Param - aClientId, Requesting ClientId, + - aResourceName, Resource name whose ID is being requested + - aResourceId, On Success returned with resource id. + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetResourceId(TUint aClientId, TDesC8& aResourceName, TUint& aResourceId) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)&aResourceName; + anInfo.iPtr2 = (TAny*)&aResourceId; + return DoControl(EGetResourceId, (TAny*)&anInfo); + } + +/** Request to obtain the information of the specified resource + @Param - aClientId, Requesting ClientId, + - aResourceId, Resource Id whose information is requested + - aBuf, On Success filled with resource information + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetResourceInfo(TUint aClientId, TUint aResourceId, TAny* aBuf) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = aBuf; + return DoControl(EGetResourceInfo, (TAny*)&anInfo); + } + +/** Request to obtain the number of resources the specified client has requirement on resource level. + @Param - aClientId, Requesting ClientId, + - aTargetClientId, ClientId, the number of resources on which it has requirement is requested. + - aNumResources, On Success contains the number of resources the client has requirement + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetNumResourcesInUseByClient(TUint aClientId, TUint aTargetClientId,TUint& aNumResources) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*) aTargetClientId; + anInfo.iPtr2 = (TAny*)&aNumResources; + return DoControl(EGetNumResourcesInUseByClient, (TAny*)&anInfo); + } + +/** Request to obtain the information on resources + @Param - aClientId, Requesting ClientId, + - aTargetClientId, ClientId, information on all the resources on which it has requirement is requested + - aNumResources, Number of resources whose information needs to be filled (size of info) + - info, On sucess will be filled with resources information. + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetInfoOnResourcesInUseByClient(TUint aClientId, TUint aTargetClientId, TUint& aNumResources, TAny* info) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aTargetClientId; + anInfo.iPtr2 = (TAny*)&aNumResources; + anInfo.iPtr3 = info; + return DoControl(EGetInfoOnResourcesInUseByClient, (TAny*)&anInfo); + } + +/** Request to obtain the number of clients holding the specified resource. + @Param - aClientId, Requesting ClientId, + - aResourceId, ID of the resource. + - aNumClients, On Success contains the number of clients holding requirement on specified resource + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetNumClientsUsingResource(TUint aClientId, TUint aResourceId, TUint& aNumClients) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)&aNumClients; + return DoControl(EGetNumClientsUsingResource, (TAny*)&anInfo); + } + +/** Request to obtain the information on clients + @Param - aClientId, Requesting ClientId, + - aResourceId, Id of the resource + - aNumClients, Number of Clients whose information needs to be filled (size of info) + - info, On sucess will be filled with client information. + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetInfoOnClientsUsingResource(TUint aClientId, TUint aResourceId, TUint& aNumClients, TAny* info) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)&aNumClients; + anInfo.iPtr3 = info; + return DoControl(EGetInfoOnClientsUsingResource, (TAny*)&anInfo); + } + +/** Request to preallocate the clientlevel and requests RM internal structures. + @Param - aClientId, Requesting ClientId, + - aNumClientLevels, Client Level objects to preallocate + - aNumRequests, Request level objects to preallocate + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::AllocReserve(TUint aClientId, TUint8 aNumClientLevels, TUint8 aNumRequests) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aNumClientLevels; + anInfo.iPtr2 = (TAny*)aNumRequests; + return DoControl(EAllocReserve, (TAny*)&anInfo); + } + +/** Function to verify the notification sent for the earlier resource state change. + @Param - aResourceId, Id of the resource whose notifications are verified. + - aUncondNoti, Number of expected unconditional notification + - aCondNoti, Number of expected conditional notification + @return- KErrNone on Sucess or KErrUnderflow + */ +TInt RTestResMan::CheckNotifications(TUint aResourceId, TUint aUncondNoti, TUint aCondNoti) + { + TParameterListInfo anInfo; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aUncondNoti; + anInfo.iPtr3 = (TAny*)aCondNoti; + return DoControl(ECheckNotifications, (TAny*)&anInfo); + } + +/** Request to change the state of the resource synchronously + @Param - aClientId, Requesting clientId + - aResourceId, Id of the resource whose state change is requested. + - aNewState, Requested new state + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::ChangeResourceStateSync(TUint aClientId, TUint aResourceId, TInt aNewState) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aNewState; + return DoControl(EChangeResourceStateSync, (TAny*)&anInfo); + } + +/** Request to change the state of the resource asynchronously + @Param - aClientId, Requesting clientId + - aResourceId, Id of the resource whose state change is requested. + - aState, Requested new state + - aStatus, TRequestStatus object to indicate completion of operation + - aReqCancel, If true CancelAsyncOperation API of RM is called immediately after asynchronos request operation + */ +void RTestResMan::ChangeResourceStateAsync(TUint aClientId, TUint aResourceId, TInt& aState, TRequestStatus& aStatus, TBool aReqCancel) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)&aState; + anInfo.iPtr3 = (TAny*)aReqCancel; + DoRequest(EChangeResourceStateAsync, aStatus, (TAny*)&anInfo); + } + +/** Request to obtain the state of the resource synchronously + @Param - aClientId, Requesting clientId + - aResourceId, Id of the resource whose state change is requested. + - aCached, if true requesting for cached value + - aNewState, On success returns the new state + - aLevelOwnerId, On success returns the Id of the client currently holding the resource. + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetResourceStateSync(TUint aClientId, TUint aResourceId, TBool aCached, TInt& aNewState, TInt& aLevelOwnerId) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aCached; + anInfo.iPtr3 = (TAny*)&aNewState; + anInfo.iPtr4 = (TAny*)&aLevelOwnerId; + return DoControl(EGetResourceStateSync, (TAny*)&anInfo); + } + +/** Request to obtain the state of the resource asynchronously + @Param - aClientId, Requesting clientId + - aResourceId, Id of the resource whose state change is requested. + - aCached, if true requesting for cached value + - aStatus, TRequestStatus object to indicate completion of operation + - aReqCancel, If true CancelAsyncOperation API of RM is called immediately after asynchronos request operation + */ +void RTestResMan::GetResourceStateAsync(TUint aClientId, TUint aResourceId, TBool aCached, TRequestStatus& aStatus, TInt& aState, TInt& aLevelOwnerId, TBool aReqCancel) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aCached; + anInfo.iPtr3 = (TAny*)aReqCancel; + anInfo.iPtr4 = (TAny*)&aState; + anInfo.iPtr5 = (TAny*)&aLevelOwnerId; + DoRequest(EGetResourceStateAsync, aStatus, (TAny*)&anInfo); + } + +/** Request to notify when the state of the specified resource changes + @Param - aClientId, Requesting clientId, + - aResourceId, ID of the resource + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::RequestNotification(TUint aClientId, TUint aResourceId) + { + return DoControl(ERequestNotificationUncond, (TAny*)aClientId, (TAny*)aResourceId); + } + +/** Request to notify when the state of the specified resource change crosses the threshold in the specified direction + @Param - aClientId, Requesting clientId, + - aResourceId, ID of the resource, + - aDirection, Direction of change of the resource state that will trigger the notification + - aThreshold, Level of resource state that will trigger the notifications when reached. + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::RequestNotification(TUint aClientId, TUint aResourceId, TInt aDirection, TInt aThreshold) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aThreshold; + anInfo.iPtr3 = (TAny*)aDirection; + return DoControl(ERequestNotificationCond, (TAny*)&anInfo); + } + +/** Request to cancel the previously requested notification + @Param - aClientId, Requesting clientId + - aResourceId, ID of the resource + - aType, ETrue Conditional + @return- KErrCancel on Sucess or one of system wide errors. + */ +TInt RTestResMan::CancelNotification(TUint aClientId, TUint aResourceId, TBool aType) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aType; + return DoControl(ECancelNotification, (TAny*)&anInfo); + } + +/** Request to register the specified number of resources to RM to keep the list updated with the + cached value of the resources and owner of the resources. This is used for testing of the API. + @Param - aResourceNum - Number of resource, whose information needs to be cached + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::RegisterForIdleResourcesInfo(TUint aPowerControllerId, TUint aResourceNum) + { + return DoControl(ERegisterForIdleResourcesInfo, (TAny*)aPowerControllerId, (TAny*)aResourceNum); + } + +/** Request to Deregister client level from resource. + @Param - aClientId - ID of the client requesting deregistration. + @Param - aResId - ID of the resource from which to deregister the client level of requested client. + @return KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::DeRegisterClientLevelFromResource(TInt aClientId, TUint aResId) + { + return DoControl(EDeRegisterClientLevelFromResource, (TAny*)aClientId, (TAny*)aResId); + } + + +/** Request to get the information of the all the resources cached by RM as requested by + RegisterForIdleResourcesInfo API + @Param - aResourceNum - Number of resources (size of info) + - info, On success returns with resource infomations + @return- KErrNone on Sucess or one of system wide errors. + */ +TInt RTestResMan::GetIdleResourcesInfo(TUint aResourceNum, TAny* info) + { + return DoControl(EGetIdleResourcesInfo, (TAny*)aResourceNum, (TAny*)info); + } + +/** Request to check the notifications recieved as a result of postboot level setting. + @return KErrNone on success or one of system wide errors. + */ +TInt RTestResMan::CheckPostBootLevelNotifications() + { + return DoControl(ECheckPostBootLevelNotifications, (TAny*)NULL, (TAny*)NULL); + } + +/** Get the version of Resource Controller + @Param - aClientId - Id of the client requesting version information + @Param - aVersion - Version will be updated. 0 - Basic, 1- extended version + @return KErrNone on success or one of system wide errors. + */ +TInt RTestResMan::GetResourceControllerVersion(TUint aClientId, TUint& aVersion) + { + return DoControl(EGetControllerVersion, (TAny*)aClientId, (TAny*)&aVersion); + } + +#ifdef PRM_ENABLE_EXTENDED_VERSION +/** Register dynamic resource. + @Param - aClientId - Id of the client that is registering the dynamic resource + @Param - aResourceId - On success will be updated with the resource id allocated for this resource + @return KErrNone on success or one of system wide errors. + */ +TInt RTestResMan::RegisterDynamicResource(TUint aClientId, TUint& aResourceId) + { + return DoControl(ERegisterDynamicResource, (TAny*)aClientId, (TAny*)&aResourceId); + } + +/** Deregister dynamic resource. + @Param - aClientId - Id of the client that is deregistering the dynamic resource + @Param - aResourceId - Id of the dynamic resource to deregister + @Param - aLevel - Pointer to the required final state. + @return KErrNone on success or one of system wide errors. + */ +TInt RTestResMan::DeRegisterDynamicResource(TUint aClientId, TUint aResourceId, TInt *aLevel) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aLevel; + return DoControl(EDeRegisterDynamicResource, (TAny*)&anInfo); + } + +/** Change the resource state asynchronously and immediately try to deregister dynamic resource. + @Param - aClientId - Id of the client that is requesting the resource state change. + @Param - aResourceId - Id of the resource whose state change is requested. + @Param - aLevel - Requested new state + @Param - aStatus, TRequestStatus object to indicate completion of operation + @return KErrNone on success or one of system wide errors. + */ +void RTestResMan::ChangeResStateAndDeRegisterDynamicRes(TUint aClientId, TUint aResourceId, TInt &aLevel, TRequestStatus &aStatus) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)&aLevel; + DoRequest(EChangeResStateAndDeregisterDynamicRes, aStatus, (TAny*)&anInfo); + } + +/** Register depedency between resources. + @Param - aClientId - Id of the client that is establishing the dependency. + @Param - aInfo1 - Infomation about the first resource in the dependency link. + @Param - aInfo2 - Information about the second resource in the dependency link. + @return KErrNone on success or one of the system wide errors. + */ +TInt RTestResMan::RegisterResourceDependency(TUint aClientId, SResourceDependencyInfo aInfo1, SResourceDependencyInfo aInfo2) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)&aInfo1; + anInfo.iPtr2 = (TAny*)&aInfo2; + return DoControl(ERegisterResourceDependency, (TAny*)&anInfo); + } + +/** Deregister dependency between resources. + @Param - aClientId - Id of the client that is deregistering the resource dependency + @Param - aResourceId1 - Id of the first resource in the dependency link that is being deregistered. + @Param - aResourceId2 - Id of the second resource in the dependency link that is being deregistered. + @return KErrNone on success or one of the system wide errors. + */ +TInt RTestResMan::DeRegisterResourceDependency(TUint aClientId, TUint aResourceId1, TUint aResourceId2) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId1; + anInfo.iPtr2 = (TAny*)aResourceId2; + return DoControl(EDeRegisterResourceDependency, (TAny*)&anInfo); + } + +/** Get number of dependents for the specified resource + @Param - aClientId - Id of the client that is requesting dependents count + @Param - aResourceId - Id of the resource whose number of dependents is requested. + @Param - aNumDepResource - On success will be updated with number of dependents. + @return KErrNone on success or one of the system wide errors. + */ +TInt RTestResMan::GetNumDependentsForResource(TUint aClientId, TUint aResourceId, TUint& aNumDepResource) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)&aNumDepResource; + return DoControl(EGetNumDependentsForResource, (TAny*)&anInfo); + } + +/** Get dependent resource id's for the specified resource + @Param - aClientId - Id of the client that is requesting the dependent id list. + @Param - aResIdArray - On success will be updated with dependent resource id. + @Param - aNumDepResources - Will be updated with actual number of dependents. + @return KErrNone on success or one of the system wide errors. + */ +TInt RTestResMan::GetDependentsIdForResource(TUint aClientId, TUint aResourceId, TAny* aResIdArray, TUint& aNumDepResources) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aResourceId; + anInfo.iPtr2 = (TAny*)aResIdArray; + anInfo.iPtr3 = (TAny*)&aNumDepResources; + return DoControl(EGetDependentsIdForResource, (TAny*)&anInfo); + } +/** Checks for state change of dependency resource while deregistering the non-dependency resource. + @Param - aClientId - Id of the client that is requesting this operation + @Param - aDepResInfo - Embeds resource id, level and status for dependency resource + @Param - aDepLevel - the level to which the dependency resource is moved to. + @Param - aResId - Id of the static resource. + @Param - aLevel - the level to which the static resource is moved to. + @Param - aStatus - to recieve the status of asynchronous operation. + @return KErrNone on success or one of the system wide errors. + */ +void RTestResMan::CheckParallelExecutionForChangeResState(TUint aClientId, TUint aDepResId, TInt& aDepLevel, + TUint aResId, TInt aLevel, TRequestStatus& aStatus) + { + TParameterListInfo anInfo; + anInfo.iClientId = aClientId; + anInfo.iPtr1 = (TAny*)aDepResId; + anInfo.iPtr2 = (TAny*)&aDepLevel; + anInfo.iPtr3 = (TAny*)aResId; + anInfo.iPtr4 = (TAny*)aLevel; + DoRequest(ECheckParallelExecutionForChangeResState, aStatus, (TAny*)&anInfo); + } +#endif //PRM_ENABLE_EXTENDED_VERSION + +#endif //__KERNEL_MODE__ +#endif //__D_RESCONTROLCLI_H__