bsptemplate/asspandvariant/template_variant/inc/template_power.inl
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 14:17:14 +0300
changeset 139 95f71bcdcdb7
parent 0 a41df078684a
permissions -rw-r--r--
Revision: 201021 Kit: 2010121

// 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.inl
// Template Power Management Inline file
// -/-/-/-/-/-/-/-/-/ class TTemplatePowerController /-/-/-/-/-/-/-/-/-/
// 
//

inline void TTemplatePowerController::RegisterPowerController(DTemplatePowerController* aPowerController)
	{iPowerController = aPowerController;}

//-/-/-/-/-/-/-/-/-/ class TemplateResourceManager /-/-/-/-/-/-/-/-/-/

inline TemplateResourceManager::TSleepModes TemplateResourceManager::MapSleepMode(TInt aSleepPeriod)
	{
	//
	// TO DO: (optional)
	//
	// Investigate what resources are On or Off, or used at what level and with the expected duration
	// of Sleep map this to platform-specific Sleep mode
	//
	return Snooze;
	}

inline void TemplateResourceManager::Modify(TResource aResource, TBool aOnOff)
	{
	//
	// TO DO: (optional)
	//
	// This function is used to modify non-shared binary resources 
	// The following is an EXAMPLE ONLY:
	//
	switch(aResource)
		{
	case SynchBinResourceUsedByZOnly:
		NKern::Lock();
		//
		// TO DO: (optional)
		//
		// Modify hardware register bit or bits to switch the resource On or Off as defined by aOnOff
		// If the resource is only accessed by a driver and not from an ISR, there's no need to stop
		// preemption. If it can be accessed from an ISR need to disable/enable interrupts around it.
		//
		NKern::Unlock();
		break;

	case AsynchBinResourceUsedByZOnly:
		//
		// TO DO: (optional)
		//
		// Modify hardware register bit or bits to switch the resource On or Off as defined by aOnOff
		// and then wait until it has been modified.
		// If the waits is only a few uS you could consider spinning, If it is considerable larger then
		// you may need to use Kern::PollingWait passing a polling function, a pointer to a owning
		// object a poll period in milliseconds and a maximum number of attempts. This will sleep
		// the driver thread so if your driver is multithreaded and the resource can be accessed
		// from more than one thread you may need to lock accesses to it with a fast Mutex.
		// The completion of the change may be indicated by an interrupt: you still need to guarantee
		// that the resource is not accessed until the change takes place.
		//
		break;
	default:
		break;
		}
	}

inline void TemplateResourceManager::ModifyToLevel(TResource aResource, TInt aLevel)
	{
	//
	// TO DO: (optional)
	//
	// This function is used to modify non-shared multilevel resources
	// The following is an EXAMPLE ONLY:
	//
	switch(aResource)
		{
	case SynchMlResourceUsedByXOnly:
		NKern::Lock();
		//
		// TO DO: (optional)
		//
		// Modify hardware register bits to set the level of the resource to aLevel
		// If the resource is only accessed by a driver and not from an ISR, there's no need to stop
		// preemption. If it can be accessed from an ISR need to disable/enable interrupts around it.
		//
		NKern::Unlock();
		break;

	case AsynchMlResourceUsedByXOnly:
		//
		// TO DO: (optional)
		//
		// Modify hardware register bits to set the level of the resource to aLevel
		// and then wait until it has been modified.
		// If the waits is only a few uS you could consider spinning, If it is considerable larger then
		// you may need to use Kern::PollingWait passing a polling function, a pointer to a owning
		// object a poll period in milliseconds and a maximum number of attempts. This will sleep
		// the driver thread so if your driver is multithreaded and the resource can be accessed
		// from more than one thread you may need to lock accesses to it with a fast Mutex.
		// The completion of the change may be indicated by an interrupt: you still need to guarantee
		// that the resource is not accessed until the change takes place.
		//
		break;
	default:
		break;
		}
	}

inline TBool TemplateResourceManager::GetResourceState(TResource aResource)
	{
	//
	// TO DO: (optional)
	//
	// Read from hardware (or from follower variable) and return the state of non-shared binary resource
	// EXAMPLE ONLY
	//
	return(EFalse);
	}


inline TUint TemplateResourceManager::GetResourceLevel(TResource aResource)
	{
	//
	// TO DO: (optional)
	//
	// Read from hardware (or from follower variable) and return the level of non-shared multilevel resource
	//
	// EXAMPLE ONLY
	//
	return(0);
	}

inline SharedBinaryResource1* TemplateResourceManager::SharedBResource1()
	{return &iSharedBResource1;}

inline SharedMultilevelResource1* TemplateResourceManager::SharedMlResource1()
	{return &iSharedMlResource1;}