diff -r 000000000000 -r a41df078684a bsptemplate/asspandvariant/template_variant/inc/template_power.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bsptemplate/asspandvariant/template_variant/inc/template_power.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,177 @@ +// Copyright (c) 1998-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: +// template\template_variant\inc\template_power.h +// Template Power Management Header +// (see also assp.cpp for a discussion on Sleep modes and xyin.cpp for example +// of usage of Resource Manager and Peripheral self power down and interaction +// with Power Controller for Wakeup Events) +// +// + +#ifndef __PM_STD_H__ +#define __PM_STD_H__ +#include +#include "variant.h" + +// +// TO DO: (mandatory) +// +// Definition of the DPowerController derived class +// +NONSHARABLE_CLASS(DTemplatePowerController) : public DPowerController + { +public: // from DPowerController + void CpuIdle(); + void EnableWakeupEvents(); + void AbsoluteTimerExpired(); + void DisableWakeupEvents(); + void PowerDown(TTimeK aWakeupTime); +public: + DTemplatePowerController(); +private: + void DoStandby(TBool aTimed, TUint32 aWakeupRTC); +public: + TBool iWakeupEventsOn; + }; + +// +// TO DO: (optional) +// +// If you need to access to the Power Controller from Drivers/Extensions/Variant +// or access to Resource Manager then define an accessor class as below +// + +class TemplateResourceManager; + +class TTemplatePowerController + { +public: + // to allow Variant/Drivers/Extensions access to Resource Manager + IMPORT_C static TemplateResourceManager* ResourceManager(); + // used by drivers/extensions to signal a wakeup event to Power Controller + IMPORT_C static void WakeupEvent(); + + inline static void RegisterPowerController(DTemplatePowerController* aPowerController); +private: + static DTemplatePowerController* iPowerController; + }; + +NONSHARABLE_CLASS(SharedBinaryResource1) : public MPowerInput + { +public: // from MPowerInput + void Use(); + void Release(); +public: + TUint GetCount(); // gets current usage count +private: + TUint iCount; + }; + +// Prototype class for Multilevel resources + +class MSharedMultilevelResource // Multilevel Shared Input + { +public: + virtual void IncreaseToLevel(TUint aLevel, TInt aRequester) = 0; + virtual void ReduceToLevel(TUint aLevel, TInt aRequester) = 0; + virtual TUint GetResourceLevel() = 0; + }; + +// EXAMPLE ONLY +const TUint KSharers = 3; + +NONSHARABLE_CLASS(SharedMultilevelResource1) : public MSharedMultilevelResource + { +public: + enum TRequesterId + { + // + // Identify all possible users of this resource + // + ERequesterX = 0, + ERequesterY = 1, + ERequesterZ = 2 + }; + SharedMultilevelResource1(); +public: // from MSharedMultilevelResource + void IncreaseToLevel(TUint aLevel, TInt aRequester); + void ReduceToLevel(TUint aLevel, TInt aRequester); + TUint GetResourceLevel(); +private: + void FindMaxLevel(TUint* aLevel, TInt* aId); +private: + TUint Levels[KSharers]; // one element per user of resource + TUint iCurrentLevel; + TInt iCurrentLevelOwnerId; + }; + +// +// TO DO: (optional) +// +// The Resource Manager class +// +NONSHARABLE_CLASS(TemplateResourceManager) + { +public: + enum TResource // a list of controllable resources (e.g clocks, voltages, power lines) + { + SynchBinResourceUsedByZOnly, + AsynchBinResourceUsedByZOnly, + // ... other non-shared binary resources, synchronous or asynchronous + BinResourceSharedByZAndY, + // ... other shared binary resources, synchronous or asynchronous + SynchMlResourceUsedByXOnly, + AsynchMlResourceUsedByXOnly, + // ... other non-shared multilevel resources, synchronous or asynchronous + MlResourceSharedByXAndW, + // ... other shared multilevel resources, synchronous or asynchronous + }; + enum TSleepModes + { + Snooze, + // ... + Sleep, + // ... + DeepSleep, + // ... + Coma + }; + + void InitResources(); // initialises power Resources not initialised by Bootstrap + + inline TSleepModes MapSleepMode(TInt aSleepPeriod); + + // interface for non-shared shared resources + + inline void Modify(TResource aResource, TBool aOnOff); // for non-shared binary resources + inline void ModifyToLevel(TResource aResource, TInt aLevel); // for non-shared multilevel resources + // the following functions may be used by Drivers/Extensions or the Idle routine to + // determine what resources are On or Off or their levels + inline TBool GetResourceState(TResource aResource); // for non-shared binary resources + inline TUint GetResourceLevel(TResource aResource); // for non-shared multilevel resources +public: + // interface for shared resources + + SharedBinaryResource1 iSharedBResource1; + // ... other shared Binary resources, synchronous or asynchronous + inline SharedBinaryResource1* SharedBResource1(); + + SharedMultilevelResource1 iSharedMlResource1; + // ... other shared Multilevel resources + inline SharedMultilevelResource1* SharedMlResource1(); + }; + +#include "template_power.inl" + +#endif