resourcemgmt/hwresourcesmgr/server/src/HWRMPowerCommonData.cpp
changeset 0 4e1aa6a622a0
child 41 c87e5f80c17d
child 56 1ddbe54d0645
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/server/src/HWRMPowerCommonData.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,1293 @@
+// 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:
+//
+
+
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include "HWRMtrace.h"
+#include "HWRMPowerCommonData.h"
+#include "HWRMClientServer.h"
+#include "HWRMPowerDomainCRKeys.h"
+#include "HWRMPrivateCRKeys.h"
+#include "HWRMConfiguration.h"
+#include "HWRMPowerService.h"
+#include "HWRMPower.h"
+#include "HWRMPowerService.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES  
+// None
+
+// CONSTANTS
+const TInt KMilliToMicroSeconds = 1000;
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CHWRMPowerCommonData::CHWRMPowerCommonData
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CHWRMPowerCommonData::CHWRMPowerCommonData()
+	:iBatteryInfoQue(_FOFF(TBatteryInfoData,iSglQueLink)),
+	iBatteryInfoIter(iBatteryInfoQue),
+	iBatteryVoltageInfoQue(_FOFF(TBatteryInfoData,iSglQueLink)),
+	iBatteryVoltageInfoIter(iBatteryVoltageInfoQue)
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO 
+	,iChargerTypeInfoQue(_FOFF(TBatteryInfoData,iSglQueLink)),
+	iChargerTypeInfoIter(iChargerTypeInfoQue)
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    {
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CHWRMPowerCommonData()" ) );
+    
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CHWRMPowerCommonData - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMPowerCommonData::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CHWRMPowerCommonData::ConstructL(CHWRMPluginHandler* aPluginHandler)
+    {    
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::ConstructL()" ) );
+
+    // Get read only values from cenrep
+    iRepository = CRepository::NewL(KCRUidPowerSettings);
+
+    iMaxReportingPeriodNotifyHandler = CCenRepListener::NewL(*this, 
+                                                *iRepository, 
+                                                KPowerMaxReportingPeriod);
+    iMaxReportingPeriodNotifyHandler->StartListeningL();
+
+    TInt value(0);
+    User::LeaveIfError(iRepository->Get(KPowerBaseTimeInterval, value));
+    if ( value < 1 )
+        {
+        User::Leave(KErrArgument);
+        }
+    iBaseTimeInterval = value * 1000;  // milliseconds to microseconds 
+
+   	COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPowerCommonData::ConstructL - iBaseTimeInterval: %d" ), iBaseTimeInterval );
+    
+    User::LeaveIfError(iRepository->Get(KPowerMaxReportingPeriod, value));
+    if ( value < 1 )
+        {
+        User::Leave(KErrArgument);
+        }
+    iMaximumReportingPeriod = value * KMilliToMicroSeconds;  // milliseconds to microseconds 
+
+    COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPowerCommonData::ConstructL - iMaximumReportingPeriod: %d" ), iMaximumReportingPeriod );
+
+    // Register for indications from HWRM plugin.
+    aPluginHandler->RegisterForIndications(this);
+    
+    iPowerService = CHWRMPowerService::NewL(aPluginHandler, *this);
+
+    iPowerReportMeasurementsTimer = CHWRMGenericTimer::NewL(*this, iMaximumReportingPeriod, EPowerReportClientsId);    
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+    iChargingCurrentMeasurementsTimer = CHWRMGenericTimer::NewL(*this, iMaximumReportingPeriod, EChargingCurrentClientsId);
+    
+    //Timer should not be started for charging time measurements. So pass KHWRMGenericTimerMaxTime.
+    iChargingTimeMeasurementsTimer = CHWRMGenericTimer::NewL(*this, KHWRMGenericTimerMaxTime, EChargingTimeClientsId);
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    
+    iPowerReportClientsData = CClientsData::NewL(*iPowerReportMeasurementsTimer);
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+    iChargingCurrentClientsData = CClientsData::NewL(*iChargingCurrentMeasurementsTimer);
+    iChargingTimeClientsData = CClientsData::NewL(*iChargingTimeMeasurementsTimer);
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    		
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::ConstructL - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMPowerCommonData::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHWRMPowerCommonData* CHWRMPowerCommonData::NewL(CHWRMPluginHandler* aPluginHandler)
+    {
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::NewL()" ) );
+
+    CHWRMPowerCommonData* self = new( ELeave ) CHWRMPowerCommonData();
+    
+    CleanupStack::PushL( self );
+    self->ConstructL(aPluginHandler);
+    CleanupStack::Pop();
+
+    COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPowerCommonData::NewL - return 0x%x" ), self );
+    
+    return self;
+    }
+   
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CHWRMPowerCommonData::~CHWRMPowerCommonData()
+    {
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::~CHWRMPowerCommonData()" ) );
+    
+    delete iPowerService;
+    iPowerService = NULL;
+    
+    iMaxReportingPeriodNotifyHandler->StopListening();
+    delete iMaxReportingPeriodNotifyHandler;
+    iMaxReportingPeriodNotifyHandler =  NULL;
+
+    delete iRepository;  
+    iRepository = NULL;
+    
+    delete iPowerReportClientsData;
+    iPowerReportClientsData = NULL;
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+    
+    delete iChargingCurrentClientsData;
+    iChargingCurrentClientsData = NULL;
+    
+    delete iChargingTimeClientsData;
+    iChargingTimeClientsData = NULL;
+    
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    
+    if (iPowerReportMeasurementsTimer)
+        {
+        iPowerReportMeasurementsTimer->Cancel();
+        delete iPowerReportMeasurementsTimer;
+        iPowerReportMeasurementsTimer = NULL;
+        }
+    
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+
+    if(iChargingCurrentMeasurementsTimer)
+        {
+        iChargingCurrentMeasurementsTimer->Cancel();
+        delete iChargingCurrentMeasurementsTimer;
+        iChargingCurrentMeasurementsTimer = NULL;
+        }
+
+    if (iChargingTimeMeasurementsTimer)
+        {
+        iChargingTimeMeasurementsTimer->Cancel();
+        delete iChargingTimeMeasurementsTimer;
+        iChargingTimeMeasurementsTimer = NULL;
+        }
+    
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    
+	TBatteryInfoData*  batteryInfoData;
+	
+	iBatteryInfoIter.SetToFirst();
+	
+    while((batteryInfoData = iBatteryInfoIter++) != NULL)
+        {
+        iBatteryInfoQue.Remove(*batteryInfoData);
+        delete batteryInfoData;
+        }
+	
+	iBatteryVoltageInfoIter.SetToFirst();
+	
+    while((batteryInfoData = iBatteryVoltageInfoIter++) != NULL)
+        {
+        iBatteryVoltageInfoQue.Remove(*batteryInfoData);
+        delete batteryInfoData;
+        }
+    
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+    
+    iChargerTypeInfoIter.SetToFirst();
+    
+    while((batteryInfoData = iChargerTypeInfoIter++) != NULL)
+        {
+        iChargerTypeInfoQue.Remove(*batteryInfoData);
+        delete batteryInfoData;
+        }
+    
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    
+    
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::~CHWRMPowerCommonData - return" ) );
+    }
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::ProcessIndicationL
+// Callback function From MHWRMIndicationHandler
+// Called by the plugin handler to indicate that a new 
+// measurement report is ready
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::ProcessIndicationL( const TUint32 aId, TDesC8& aData )
+	{
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::ProcessIndicationL()" ) );
+
+	switch (aId)
+		{
+        case HWRMPowerCommand::EAverageBatteryPowerIndicationId:
+			{
+			if (iPowerReportClientsData->IsMeasuringOn())
+				{
+				HWRMPowerCommand::TBatteryPowerReportPackage batteryPowerReportPckg;
+				batteryPowerReportPckg.Copy(aData);
+				HWRMPowerCommand::TBatteryPowerReport batteryPowerReport = batteryPowerReportPckg();
+				
+				if (batteryPowerReport.iErrorCode == KErrNone)
+					{					
+					iPowerReportClientsData->BatteryMeasurementIndicationL(batteryPowerReportPckg);
+					}
+				}
+			}
+		break;
+
+		#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+        
+        case HWRMPowerCommand::EAverageBatteryChargingCurrentIndicationId:
+			{
+			if (iChargingCurrentClientsData->IsMeasuringOn())
+				{
+				HWRMPowerCommand::TBatteryChargingCurrentReportPackage batteryChargeCurrentReportPckg;
+				batteryChargeCurrentReportPckg.Copy(aData);
+				HWRMPowerCommand::TBatteryChargeCurrentReport batteryChargeCurrentReport= batteryChargeCurrentReportPckg();
+				
+				if (batteryChargeCurrentReport.iErrorCode == KErrNone)
+					{
+					iChargingCurrentClientsData->BatteryMeasurementIndicationL(batteryChargeCurrentReportPckg);
+					}
+				}
+			}
+		break;
+
+        case HWRMPowerCommand::EBatteryFullChargingTimeIndicationId:
+            {
+			if (iChargingTimeClientsData->IsMeasuringOn())
+				{
+				HWRMPowerCommand::TBatteryFullChargingTimeReportPackage batteryChargeTimePckg;
+				batteryChargeTimePckg.Copy(aData);
+				HWRMPowerCommand::TBatteryFullChargingTimeReport batteryChargeTimeReport= batteryChargeTimePckg();
+				
+				if (batteryChargeTimeReport.iErrorCode == KErrNone)
+					{
+					iChargingTimeClientsData->BatteryMeasurementIndicationL(batteryChargeTimePckg);
+					}
+				}
+			}
+        break;
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+        
+		}	
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::EventIndicationL - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::GenericTimerFired
+// Callback function From MHWRMGenericTimerCallback
+// Called when the timer is fired. The PowerCommonData
+// hold two of them one for Voltage, one for Consumption 
+// Measurements. Informs clients, cleans up and stops the 
+// plugin.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::GenericTimerFired(TInt aTimerId, TBool /*aCutOff*/)
+	{
+	TInt err(KErrNone);
+	
+    COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::GenericTimerFired()" ) );
+    
+	switch(aTimerId)
+		{
+        case EPowerReportClientsId:
+			{
+			iPowerReportClientsData->MaxReportingPeriodReached();
+			TRAP(err, DoStopPowerMeasurementsL());
+			break;
+			}
+       
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+        
+        case EChargingCurrentClientsId:
+            {
+            iChargingCurrentClientsData->MaxReportingPeriodReached();
+            TRAP(err,DoStopChargingCurrentMeasurementsL());
+            break;
+            }
+        
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+		}
+	
+	if (err != KErrNone)
+		{
+		// All the pending batch request have been completed now.
+		// Also plugin will not send any more measurements.
+		COMPONENT_TRACE3(_L( "HWRM Server - CHWRMPowerCommonData::GenericTimerFired(%d) - Stopping measurement failed: %d" ), aTimerId, err );
+		}
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::GenericTimerFired - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoStopPowerMeasurementsL
+// Issues a plugin command to stop the Power measurements.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::DoStopPowerMeasurementsL()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoStopPowerMeasurementsL()" ) );
+	
+	iPowerService->StopPowerMeasurementsL();
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoStopPowerMeasurementsL - return" ) );
+	}
+
+
+
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoStopChargingCurrentMeasurementsL
+// Issues a plugin command to stop the Charging current measurements.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::DoStopChargingCurrentMeasurementsL()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoStopChargingCurrentMeasurementsL()" ) );
+	
+	iPowerService->StopChargingCurrentMeasurementsL();
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoStopChargingCurrentMeasurementsL - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoStopChargingTimeMeasurementsL
+// Issues a plugin command to stop BatteryFull charging time measurement.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::DoStopChargingTimeMeasurementsL()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoStopChargingTimeMeasurementsL()" ) );
+	
+	iPowerService->StopChargingTimeMeasurementsL();
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoStopChargingTimeMeasurementsL - return" ) );
+	}
+
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoMaxReportingValueChanged
+// Handles the max reporting period cenrep value changes for all measurements.
+// ---------------------------------------------------------
+void CHWRMPowerCommonData::MaxPeriodChangedL(TTimeIntervalMicroSeconds32& aNewMaxPeriod,
+                           TTimeIntervalMicroSeconds32& aOldMaxPeriod)
+    {
+    
+    DoMaxReportingValueChangedL(iPowerReportMeasurementsTimer, aNewMaxPeriod, aOldMaxPeriod);
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+    DoMaxReportingValueChangedL(iChargingCurrentMeasurementsTimer, aNewMaxPeriod, aOldMaxPeriod);
+    DoMaxReportingValueChangedL(iChargingTimeMeasurementsTimer, aNewMaxPeriod, aOldMaxPeriod);
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+    }
+
+
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoMaxReportingValueChangedL
+// Handles the max reporting period cenrep value changes.
+// ---------------------------------------------------------
+
+
+void CHWRMPowerCommonData::DoMaxReportingValueChangedL(CHWRMGenericTimer* aTimer, 
+                                                      TTimeIntervalMicroSeconds32& aNewMaxPeriod,
+                                                      TTimeIntervalMicroSeconds32& aOldMaxPeriod)
+    {    
+    /*
+    * Timer Usage:
+    * aTimer->IsActive()  : Checks if timer is running(active, which means measurement is going on.)
+    * aTimer->Freeze()    : Stop the timer.
+    * aTimer->GetTimerId(): Get the measurement(power,charging,..) corresponding to timer.
+    * aTimer->RunL()      : Calls CHWRMPowerCommonData::GenericTimerFired, which stops the measurements.
+    *
+    * - If new max reporting period is negative, complete pending measurement with KErrGeneral and stop the measurements.
+    * - If timer is not running, just set the timer.
+    * - If new max reporting period is zero, stop the timer if running and measurements will go on for infinite duration.
+    * - If new max reporting period is more than elapsed time, stop current time and start for remaining time(Max-elapsed).
+    * - If new max reporting period is less than elapsed time, complete pending measurement with KErrTimedOut and stop the measurements.
+    */
+    #ifdef _DEBUG
+    _LIT(KHWRMPowerCommonDataPanic,"CHWRMPowerCommonData");
+    #endif      
+    __ASSERT_DEBUG((aTimer)!=NULL, User::Panic(KHWRMPowerCommonDataPanic,KErrBadHandle));
+   
+    if(aNewMaxPeriod.Int() < 0)
+        {
+        if(aTimer->IsActive())
+            {
+            //Cenrep value is negative, Inform client that timer has expired.
+            aTimer->Freeze();
+            
+            switch(aTimer->GetTimerId())
+                {
+                case EPowerReportClientsId:
+            		{
+            		iPowerReportClientsData->MaxReportingPeriodReached(KErrGeneral);
+            		break;
+            		}
+                
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+                
+                case EChargingCurrentClientsId:
+                    {
+                    iChargingCurrentClientsData->MaxReportingPeriodReached(KErrGeneral);
+                    break;
+                    }
+                
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+                }
+            aTimer->RunL();
+            }
+        }
+    else
+        {
+        iMaximumReportingPeriod = aNewMaxPeriod.Int();
+        
+        aTimer->SetMaximumTime(aNewMaxPeriod);
+        
+        if(aOldMaxPeriod.Int() == 0)
+            {
+            aTimer->Set(aNewMaxPeriod);
+            }
+    	else if(aTimer->IsActive())
+    		{
+    		if(aNewMaxPeriod.Int() == 0)
+    			{
+    			//Stop Timer and don't Start Timer
+    			aTimer->Freeze();
+    			}
+    		else
+    			{
+    			//Ex: If aOldMaxPeriod=8sec, aNewMaxPeriod=10sec, 
+    			// elapsedTime=4sec, start timer with 6sec.
+    
+                //Freeze will stop the timer and return remaining time.
+    			TTimeIntervalMicroSeconds32 remainingTime = aTimer->Freeze();
+    			TTimeIntervalMicroSeconds32 elapsedTime;
+    			elapsedTime = aOldMaxPeriod.Int() - remainingTime.Int();
+    			if(aNewMaxPeriod > elapsedTime)
+    				{
+    				//Start a new Timer.
+    				aTimer->Set((aNewMaxPeriod.Int() - elapsedTime.Int()));
+    				}
+                else
+                    {
+                    //Inform Client that Timer has expired.
+                    aTimer->Freeze();
+                    aTimer->RunL();
+                    }
+    			}
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMPowerCommonData::HandleNotifyInt
+// -----------------------------------------------------------------------------
+//
+void CHWRMPowerCommonData::HandleNotifyInt(TUint32 aId, TInt aNewValue)
+    {
+    COMPONENT_TRACE3(_L("HWRM Server - CHWRMPowerCommonData::HandleNotifyInt(0x%x, 0x%x)"), aId, aNewValue) ; 
+
+    switch(aId)
+        {
+        case KPowerMaxReportingPeriod:
+            {
+            TTimeIntervalMicroSeconds32 oldMaxPeriod = iMaximumReportingPeriod;
+            TTimeIntervalMicroSeconds32 newMaxPeriod = aNewValue*KMilliToMicroSeconds;
+            
+            if(oldMaxPeriod.Int() != newMaxPeriod.Int())
+                {
+                TRAP_IGNORE(MaxPeriodChangedL(newMaxPeriod, oldMaxPeriod));
+                }
+            break;
+            }
+       default:
+            COMPONENT_TRACE2(_L("HWRM Server - CHWRMPowerCommonData::HandleNotifyInt Cannot handle(0x%x)"), aId);
+            break;
+
+        }
+
+    COMPONENT_TRACE1(_L("HWRM Server - CHWRMPowerCommonData::HandleNotifyInt - return") ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMPowerCommonData::HandleNotifyError
+// -----------------------------------------------------------------------------
+//
+#if  defined(COMPONENT_TRACE_FLAG) && defined(_DEBUG)
+void CHWRMPowerCommonData::HandleNotifyError(TUint32 aId, TInt error, CCenRepListener* aHandler)
+#else
+void CHWRMPowerCommonData::HandleNotifyError(TUint32 /*aId*/, TInt /*error*/, CCenRepListener* /*aHandler*/)
+#endif
+    {
+    COMPONENT_TRACE4(_L("HWRM Server - CHWRMPowerCommonData::HandleNotifyError(0x%x, 0x%x, 0x%x)"), aId, error, aHandler); 
+    
+
+    COMPONENT_TRACE1(_L("HWRM Server - CHWRMPowerCommonData::HandleNotifyError - return") ); 
+    }
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoSetPluginIntervalMultipleL
+// Issues a plugin command to set the plugin interval. 
+// Used by charging current reporting.
+// ---------------------------------------------------------
+//
+void  CHWRMPowerCommonData::DoSetPluginIntervalMultipleL(HWRMPowerCommand::TPowerCmd aCommand,
+											  		   TUint aIntervalMultiple)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoSetPluginIntervalMultipleL()" ) );
+	
+	iPowerService->SetPluginIntervalMultipleL(aCommand, aIntervalMultiple);
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoSetPluginIntervalMultipleL - return" ) );
+	}
+
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoGetBatteryInfoL
+// Issues a plugin command to get Battery Info. If there is
+// an outstanding plugin request there isn't a new
+// one issued but the appropriate data are
+// stored in a queue. This data are used later to complete
+// or cancel the client.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::DoGetBatteryInfoL(const RMessage2& aMessage, const CHWRMPowerService& aPowerService)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoGetBatteryInfoL()" ) );
+
+	TBatteryInfoData* batteryInfoData = new(ELeave) TBatteryInfoData(aPowerService, aMessage);
+	
+	if (iBatteryInfoQue.IsEmpty())
+		{
+		CleanupStack::PushL(batteryInfoData);
+		
+		RMessage2 dummy;
+	    iPowerService->GetBatteryInfoL(dummy);
+	    
+		CleanupStack::Pop(batteryInfoData);
+		}
+	iBatteryInfoQue.AddFirst(*batteryInfoData);    
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoGetBatteryInfoL - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoGetBatteryVoltageInfoL
+// Issues a plugin command to get Battery Voltage Info. If there is
+// an outstanding plugin request there isn't a new
+// one issued but the appropriate data are
+// stored in a queue. This data are used later to complete
+// or cancel the client.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::DoGetBatteryVoltageInfoL(const RMessage2& aMessage, const CHWRMPowerService& aPowerService)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoGetBatteryVoltageInfoL()" ) );
+
+	TBatteryInfoData* batteryVoltageInfoData = new(ELeave) TBatteryInfoData(aPowerService, aMessage);
+	
+	if (iBatteryVoltageInfoQue.IsEmpty())
+		{
+		CleanupStack::PushL(batteryVoltageInfoData);
+		
+		RMessage2 dummy;
+	    iPowerService->GetBatteryVoltageInfoL(dummy);
+	    
+		CleanupStack::Pop(batteryVoltageInfoData);
+		}
+	iBatteryVoltageInfoQue.AddFirst(*batteryVoltageInfoData);    
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoGetBatteryVoltageInfoL - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::CompletePendingGetBatteryInfo
+// Completes and removes from the respective list any pending 
+// GetBatteryInfo requests.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::CompletePendingGetBatteryInfo(TInt aReason, TPckg<CHWRMPower::TBatteryConsumptionData> &aDataPckg)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CompletePendingGetBatteryInfo()" ) );
+	
+	TBatteryInfoData* batteryInfoData;
+	TInt error;
+	
+	//inform everybody
+	iBatteryInfoIter.SetToFirst();
+	while((batteryInfoData = iBatteryInfoIter++) != NULL)
+		{
+		error = aReason;
+		if (error == KErrNone)
+			{
+			error = batteryInfoData->iRequestedMessage.Write(0,aDataPckg);
+			}
+		batteryInfoData->iRequestedMessage.Complete(error);
+		iBatteryInfoQue.Remove(*batteryInfoData);
+		
+		delete batteryInfoData;
+		}             
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CompletePendingGetBatteryInfo - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::CompletePendingGetBatteryVoltageInfo
+// Completes and removes from the respective list any pending 
+// GetBatteryVoltageInfo requests.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::CompletePendingGetBatteryVoltageInfo(TInt aReason, TPckg<CHWRMPower::TBatteryVoltageData> &aDataPckg)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CompletePendingGetBatteryVoltageInfo()" ) );
+	
+	TBatteryInfoData* batteryVoltageInfoData;
+	TInt error;
+	
+	//inform everybody
+	iBatteryVoltageInfoIter.SetToFirst();
+	while((batteryVoltageInfoData = iBatteryVoltageInfoIter++) != NULL)
+		{
+		error = aReason;
+		if (error == KErrNone)
+			{
+			error = batteryVoltageInfoData->iRequestedMessage.Write(0,aDataPckg);
+			}
+		batteryVoltageInfoData->iRequestedMessage.Complete(error);
+		iBatteryVoltageInfoQue.Remove(*batteryVoltageInfoData);
+		
+		delete batteryVoltageInfoData;
+		}             
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CompletePendingGetBatteryVoltageInfo - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::CancelPendingGetBatteryInfo
+// Cancels and removes from the respective list any pending 
+// GetBatteryInfo requests.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::CancelPendingGetBatteryInfo(CHWRMPowerService& aPowerService)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CancelPendingGetBatteryInfo()" ) );
+	
+	TBatteryInfoData* batteryInfoData;
+	
+	//inform everybody
+	iBatteryInfoIter.SetToFirst();
+	while((batteryInfoData = iBatteryInfoIter++) != NULL)
+		{
+		if ( &(batteryInfoData->iPowerClientService) == &aPowerService)
+			{
+			batteryInfoData->iRequestedMessage.Complete(KErrCancel);
+			iBatteryInfoQue.Remove(*batteryInfoData);
+			
+			delete batteryInfoData;
+			}
+		}             
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CancelPendingGetBatteryInfo - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::CancelPendingGetBatteryVoltageInfo
+// Cancels and removes from the respective list any pending 
+// GetBatteryVoltageInfo requests.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::CancelPendingGetBatteryVoltageInfo(CHWRMPowerService& aPowerService)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CancelPendingGetBatteryVoltageInfo()" ) );
+	
+	TBatteryInfoData* batteryVoltageInfoData;
+	
+	//inform everybody
+	iBatteryVoltageInfoIter.SetToFirst();
+	while((batteryVoltageInfoData = iBatteryVoltageInfoIter++) != NULL)
+		{
+		if ( &(batteryVoltageInfoData->iPowerClientService) == &aPowerService)
+			{
+			batteryVoltageInfoData->iRequestedMessage.Complete(KErrCancel);
+			iBatteryVoltageInfoQue.Remove(*batteryVoltageInfoData);
+			
+			delete batteryVoltageInfoData;
+			}
+		}    
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CancelPendingGetBatteryVoltageInfo - return" ) );
+	}
+#ifdef SYMBIAN_HWRM_EXTPOWERINFO
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::DoGetChargerTypeL
+// Issues a plugin command to get charger type. If there is
+// an outstanding plugin request there isn't a new
+// one issued but the appropriate data are
+// stored in a queue. This data are used later to complete
+// the request.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::DoGetChargerTypeL(const RMessage2& aMessage, const CHWRMPowerService& aPowerService)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoGetChargerTypeL()" ) );
+
+	TBatteryInfoData* batteryInfoData = new(ELeave) TBatteryInfoData(aPowerService, aMessage);
+	
+	if (iChargerTypeInfoQue.IsEmpty())
+		{
+		CleanupStack::PushL(batteryInfoData);
+		
+		RMessage2 dummy;
+	    iPowerService->GetChargerTypeL(dummy);
+	    
+		CleanupStack::Pop(batteryInfoData);
+		}
+	iChargerTypeInfoQue.AddFirst(*batteryInfoData);    
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::DoGetChargerTypeL - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::CompletePendingGetChargerType
+// Completes and removes from the respective list any pending 
+// GetChargerType requests.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::CompletePendingGetChargerType(TInt aReason, TPckg<CHWRMPower::TBatteryChargerType> &aDataPckg)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CompletePendingGetChargerType()" ) );
+	
+	TBatteryInfoData* batteryInfoData;
+	TInt error;
+	
+	//inform everybody
+	iChargerTypeInfoIter.SetToFirst();
+	while((batteryInfoData = iChargerTypeInfoIter++) != NULL)
+		{
+		error = aReason;
+		if (error == KErrNone)
+			{
+			error = batteryInfoData->iRequestedMessage.Write(0,aDataPckg);
+			}
+		batteryInfoData->iRequestedMessage.Complete(error);
+		iChargerTypeInfoQue.Remove(*batteryInfoData);
+		
+		delete batteryInfoData;
+		}             
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CompletePendingGetChargerType - return" ) );
+	}
+
+// ---------------------------------------------------------
+// CHWRMPowerCommonData::CancelPendingGetChargerType
+// Cancels and removes from the respective list any pending 
+// GetChargerType requests.
+// ---------------------------------------------------------
+//
+void CHWRMPowerCommonData::CancelPendingGetChargerType(CHWRMPowerService& aPowerService)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CancelPendingGetChargerType()" ) );
+	
+	TBatteryInfoData* batteryInfoData;
+	
+	//inform everybody
+	iChargerTypeInfoIter.SetToFirst();
+	while((batteryInfoData = iChargerTypeInfoIter++) != NULL)
+		{
+		if ( &(batteryInfoData->iPowerClientService) == &aPowerService)
+			{
+			batteryInfoData->iRequestedMessage.Complete(KErrCancel);
+			iChargerTypeInfoQue.Remove(*batteryInfoData);
+			
+			delete batteryInfoData;
+			}
+		}             
+    
+	COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPowerCommonData::CancelPendingGetChargerType - return" ) );
+	}
+
+#endif //SYMBIAN_HWRM_EXTPOWERINFO
+
+// ---------------------------------------------------------
+// CClientsData::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CClientsData* CClientsData::NewL(CHWRMGenericTimer& aMeasurementsTimer)
+	{
+    COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::NewL(()" ) );
+
+    CClientsData* self = new( ELeave ) CClientsData(aMeasurementsTimer);
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    COMPONENT_TRACE2(_L( "HWRM Server - CClientsData::NewL( - return 0x%x" ), self );
+    
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::CClientsData
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CClientsData::CClientsData(CHWRMGenericTimer& aMeasurementsTimer)
+	:iMeasurementsTimer(aMeasurementsTimer),
+	iClientsQue(_FOFF(TClientData,iSglQueLink)),
+	iClientsQueIter(iClientsQue)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::CClientsData()" ) );
+	
+	iMeasuring = EFalse;
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::CClientsData - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::ConstructL()
+	{    
+    COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::ConstructL()" ) );
+    
+    COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::ConstructL - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CClientsData::GenericTimerFired
+// Called when the generic timer expires or reaches the MaxPeriod.
+// Completes any pending client-sever messages and resets the 
+// data (Held by the service) of each client. The list is then emptied
+// -----------------------------------------------------------------------------
+//
+void CClientsData::MaxReportingPeriodReached(TInt aReason)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::MaxReportingPeriodReached()" ) );
+	
+	TClientData* clientData;
+	
+	//inform everybody
+	iClientsQueIter.SetToFirst();
+	while((clientData = iClientsQueIter++) != NULL)
+		{
+		clientData->iPowerMeasurementsClientData.CompleteGetMeasurementsMessage(aReason);				
+		clientData->iPowerMeasurementsClientData.Reset();
+		}
+	
+	//reset the measurements data
+	CleanUpMeasurementsData();
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::MaxReportingPeriodReached - return" ) );
+	}
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CClientsData::~CClientsData()
+    {
+    COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::~CClientsData()" ) );
+    
+    CleanUpMeasurementsData();
+    
+    COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::~CClientsData - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CClientsData::EmptyClientsQue
+// Deletes all the items of the delts queue and empties it.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::EmptyClientsQue()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::EmptyClientsQue()" ) );
+	
+	TClientData*  clientData;
+	
+	iClientsQueIter.SetToFirst();
+	
+    while((clientData = iClientsQueIter++) != NULL)
+        {
+        iClientsQue.Remove(*clientData);
+        delete clientData;
+        }
+    
+    COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::EmptyClientsQue - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::FindClient
+// Finds the clientthat correspond to the aPowerMeasurementsClientData.
+// -----------------------------------------------------------------------------
+//
+TClientData* CClientsData::FindClient(TPowerMeasurementsClientData* aPowerMeasurementsClientData)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::FindClient()" ) );
+	
+    TBool found(EFalse);    
+    TClientData* clientData;
+	
+    iClientsQueIter.SetToFirst();
+
+	while( found == EFalse && ((clientData = iClientsQueIter++) != NULL))
+        {
+        if (&(clientData->iPowerMeasurementsClientData) == aPowerMeasurementsClientData)
+        	{
+        	found = ETrue;
+        	}
+        }
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::FindClient - return" ) );
+	
+	return clientData;
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::RecalculatePluginInterval
+// Adjusts the interval used by the plugin when a new client requests 
+// measurement with a time interval that changes the GCD.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::RecalculatePluginInterval(TUint &aIntervalMultiple)
+	{	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::RecalculatePluginInterval()" ) );
+	
+	TClientData* clientData;
+	
+	iClientsQueIter.SetToFirst();
+	
+	clientData = iClientsQueIter++;
+	TUint newGCD = clientData->iPowerMeasurementsClientData.iRequestedIntervalMultiple;
+	
+	while((clientData = iClientsQueIter++) != NULL)
+		{
+	    newGCD = CalculateGCD(clientData->iPowerMeasurementsClientData.iRequestedIntervalMultiple,newGCD);
+		}
+	aIntervalMultiple = newGCD;
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::RecalculatePluginInterval - return" ) );
+	}		
+
+// -----------------------------------------------------------------------------
+// CClientsData::GetPluginIntervalMultiple
+// Getter for the plugin's interval multiple.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::GetPluginIntervalMultiple(TUint &aIntervalMultiple)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::GetPluginIntervalMultiple()" ) );
+	
+	aIntervalMultiple = iPluginIntervalMultiple;
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::GetPluginIntervalMultiple - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::UpdatePluginIntervalMultiple
+// Setter for the plugin's time interval.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::UpdatePluginIntervalMultiple(TUint aIntervalMultiple)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::UpdatePluginIntervalMultiple()" ) );
+	
+	iPluginIntervalMultiple = aIntervalMultiple;
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::UpdatePluginIntervalMultiple - return" ) );
+	}
+ 
+// -----------------------------------------------------------------------------
+// CClientsData::IsClientsQueEmpty
+// Cheks if the Clients Queue is empty
+// -----------------------------------------------------------------------------
+// 
+TBool CClientsData::IsClientsQueEmpty()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::IsClientsQueEmpty()" ) );
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::IsClientsQueEmpty - return" ) );
+	
+	return iClientsQue.IsEmpty();
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::CalculateGCD
+// Computes the Greatest Common Divisor of num1 and num2.
+// -----------------------------------------------------------------------------
+//
+TUint CClientsData::CalculateGCD(TUint num1, TUint num2)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::CalculateGCD()" ) );
+	
+    if (num2 == 0)
+    	{
+    	return num1;
+    	}
+    else 
+    	{
+    	return CalculateGCD(num2, num1 % num2);
+    	}
+ 	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::AddMeasurementsClientL
+// Creates and adds to the list a data structure containing all the 
+// appropriate client data.
+// -----------------------------------------------------------------------------
+// 
+void CClientsData::AddMeasurementsClientL(TPowerMeasurementsClientData& aPowerMeasurementsClientData)
+	{ 	     
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::AddMeasurementsClientL()" ) );
+	
+	TClientData* clientData = new(ELeave) TClientData(aPowerMeasurementsClientData);
+	
+	iClientsQue.AddFirst(*clientData);
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::AddMeasurementsClientL - return" ) );
+ 	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::RemoveMeasurementsClientData
+// Deletes all the data relevant to the client whose PowerService holds
+// aPowerMeasurementsClientData.
+// -----------------------------------------------------------------------------
+// 
+void CClientsData::RemoveMeasurementsClientData(TPowerMeasurementsClientData* aPowerMeasurementsClientData)
+	{	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::RemoveMeasurementsClientData()" ) );
+	
+    TClientData* clientData;
+    clientData = FindClient(aPowerMeasurementsClientData);
+     
+    if (clientData)
+    	{
+    	iClientsQue.Remove(*clientData);    	
+	    delete clientData;
+	    
+	    if (iClientsQue.IsEmpty())
+	    	{
+	    	SetMeasuringOff();
+	    	}
+    	}
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::RemoveMeasurementsClientData - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::RemoveMeasurementsClientL
+// Deletes all the data relevant to the client whose PowerService holds
+// aPowerMeasurementsClientData. Leaves in the case the client is not found.
+// -----------------------------------------------------------------------------
+// 
+void CClientsData::RemoveMeasurementsClientL(TPowerMeasurementsClientData* aPowerMeasurementsClientData)
+ 	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::RemoveMeasurementsClientL()" ) );
+	
+    TClientData* clientData;
+    clientData = FindClient(aPowerMeasurementsClientData);
+     
+    if (clientData == NULL)
+    	{
+    	User::Leave(KErrNotFound);
+    	}
+    
+    iClientsQue.Remove(*clientData);
+    delete clientData;
+    
+    if (iClientsQue.IsEmpty())
+    	{
+    	SetMeasuringOff();
+    	}
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::RemoveMeasurementsClientL - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::NeedPluginIntervalAdjustment
+// Checks if a adjustement is needed for the interval used by the plugin. 
+// The Interval Multiple requested by the new client is passed
+// -----------------------------------------------------------------------------
+// 
+
+TBool CClientsData::NeedPluginIntervalAdjustment(TUint aIntervalMultiple)
+ 	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::NeedPluginIntervalAdjustment()" ) );
+	
+ 	TBool needAdjustment; 	
+ 	
+ 	if (iClientsQue.IsEmpty())
+ 		{
+ 		needAdjustment =  EFalse; 		
+ 		}
+ 	else
+ 		{
+	 	TUint currentPluginIntervalMultiple;
+	 	GetPluginIntervalMultiple(currentPluginIntervalMultiple);
+	 	TUint currentGCD = currentPluginIntervalMultiple;
+	 	TUint newInterval = aIntervalMultiple;
+
+	 	if( (newInterval % currentGCD) == 0)
+	 		{
+	 		needAdjustment = EFalse;
+	 		}
+	 	else
+	 		{
+	 		needAdjustment = ETrue;	
+	 		}
+ 		}
+ 	
+	COMPONENT_TRACE2(_L( "HWRM Server - CClientsData::NeedPluginIntervalAdjustment( - return 0x%x" ), needAdjustment );
+	
+	return needAdjustment;
+ 	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::CleanUpMeasurementsData
+// Deletes all the measurement related data. Used at destruction time.
+// -----------------------------------------------------------------------------
+// 
+void CClientsData::CleanUpMeasurementsData()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::CleanUpMeasurementsData()" ) );
+	
+	EmptyClientsQue();
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::CleanUpMeasurementsData - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CClientsData::BatteryMeasurementIndicationL
+// Handles a measurement callback indication from the plugin.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::BatteryMeasurementIndicationL(TDesC8& aValue)
+	{		
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::BatteryMeasurementIndicationL()" ) );
+	
+	TClientData* clientData;
+	
+    iClientsQueIter.SetToFirst();
+
+	while((clientData = iClientsQueIter++) != NULL)
+		{
+		clientData->iPowerMeasurementsClientData.NewBatteryMeasurementL(aValue, iPluginIntervalMultiple);
+		}
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::BatteryMeasurementIndicationL - return" ) );
+	}
+ 
+
+// -----------------------------------------------------------------------------
+// TPowerMeasurementsClientData::IsMeasuringOn
+// Check if plugin measuring is on.
+// -----------------------------------------------------------------------------
+//
+TBool CClientsData::IsMeasuringOn()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::IsMeasuringOn()" ) );
+	
+	COMPONENT_TRACE2(_L( "HWRM Server - CClientsData::IsMeasuringOn( - return 0x%x" ), iMeasuring );
+	
+	return iMeasuring;
+	}
+
+// -----------------------------------------------------------------------------
+// TPowerMeasurementsClientData::SetMeasuringOn
+// Set the plugin measuring flag on.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::SetMeasuringOn()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::SetMeasuringOn()" ) );
+	
+	iMeasuring = ETrue;
+	iMeasurementsTimer.Set(0);
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::SetMeasuringOn - return" ) );
+	}
+
+// -----------------------------------------------------------------------------
+// TPowerMeasurementsClientData::SetMeasuringOff
+// Set the plugin measuring flag off.
+// -----------------------------------------------------------------------------
+//
+void CClientsData::SetMeasuringOff()
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::SetMeasuringOff()" ) );
+	
+	iMeasuring = EFalse;
+	iMeasurementsTimer.Cancel();
+	
+	TClientData* clientData;
+	iClientsQueIter.SetToFirst();
+	while((clientData = iClientsQueIter++) != NULL)
+		{
+		clientData->iPowerMeasurementsClientData.SetMeasuringOff();
+		}
+	
+	COMPONENT_TRACE1(_L( "HWRM Server - CClientsData::SetMeasuringOff - return" ) );
+	}
+
+TClientData::TClientData(TPowerMeasurementsClientData& aPowerMeasurementsClientData)
+	:iPowerMeasurementsClientData(aPowerMeasurementsClientData)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - TClientData::TClientData()" ) );
+	COMPONENT_TRACE1(_L( "HWRM Server - TClientData::TClientData - return" ) );
+	}
+	
+TBatteryInfoData::TBatteryInfoData(const CHWRMPowerService& aPowerClientService, const RMessage2& aRequestedMessage)
+	:iPowerClientService(aPowerClientService),
+	iRequestedMessage(aRequestedMessage)
+	{
+	COMPONENT_TRACE1(_L( "HWRM Server - TBatteryInfoData::TBatteryInfoData()" ) );
+	COMPONENT_TRACE1(_L( "HWRM Server - TBatteryInfoData::TBatteryInfoData - return" ) );
+	}
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+//  End of File