telephonyserverplugins/simtsy/src/CSimBatteryCharger.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/simtsy/src/CSimBatteryCharger.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/simtsy/src/CSimBatteryCharger.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,312 +1,312 @@
-// Copyright (c) 2001-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:
-// Implements the functionality required to provide clients with
-// Battery charging information.
-// 
-//
-
-/**
- @file
-*/
-
-#include <testconfigfileparser.h>
-#include "CSimBatteryCharger.h"
-#include "CSimPhone.h"
-#include "Simlog.h"
-
-const TInt KChargerGranularity=5;		// < Granularity for Battery Charger list array
-
-
-CSimBatteryCharger* CSimBatteryCharger::NewL(CSimPhone* aPhone)
-/**
- * Standard two-phase constructor.
- * @param aPhone				The parent phone object.
- * @return CSimBatteryCharger		The new Ondicator class class.
- */
-	{
-	CSimBatteryCharger* self=new(ELeave) CSimBatteryCharger(aPhone);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop();
-	return self;
-	}
-
-CSimBatteryCharger::CSimBatteryCharger(CSimPhone* aPhone)
-		: iPhone(aPhone)
-/**
- * Trivial first phase construction.
- * @param aPhone				The parent phone object.
- */
-	{
-	}
-
-
-void CSimBatteryCharger::ConstructL()
-/**
- * Second phase construction.  Create instances of the necessary heap-based
- * objects and read in the Battery Charger information from the configuration file.
- * Finally, if any Battery Charger tags have been read, the initial values
- * will be loaded and the timer started.
- *
- * Entries in the configuration file will take the following format:
- * "BatteryCharger= <duration>, <Status> <battery level> <error code>"
- * A number of these entries may be included to create an battery charger profile
- * for the duration of the test.
- */
-	{
-	iTimer=CSimTimer::NewL(iPhone);
-	iBatteryChargerInfo=new(ELeave) CArrayFixFlat<TBatteryChargerInfo>(KChargerGranularity);
-
-	LOGMISC1("Starting to parse Battery Charger config parameters...");
-	TInt count=CfgFile()->ItemCount(KBatteryCharger);
-	const CTestConfigItem* item=NULL;
-	TInt ret=KErrNone;
-
-	TInt i;
-	for(i=0;i<count;i++)
-		{
-		item=CfgFile()->Item(KBatteryCharger,i);
-		if(!item)
-			break;
-
-		TInt duration, status, level, error;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,duration);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("duration",ret,0,&KBatteryCharger);
-			continue;
-			}
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,status);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("status",ret,1,&KBatteryCharger);
-			continue;
-			}
-		
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,level);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("level",ret,2,&KBatteryCharger);
-			continue;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,error);
-		if(ret!=KErrNone)
-			error = KErrNone;
-
-		TBatteryChargerInfo chargerInfo;
-		chargerInfo.iDuration=duration;
-		chargerInfo.iStatus = RMobilePhone::TMobilePhoneBatteryStatus(status);
-		chargerInfo.iChargeLevel = level;
-		chargerInfo.iError = error;
-		iBatteryChargerInfo->AppendL(chargerInfo);
-		}
-	
-	LOGMISC2("Finished parsing Battery Charger config parameters...%d items found",count);
-
-	if(iBatteryChargerInfo->Count()!=0)
-		{
-		iBatteryChargerIndex = 0;
-		iCurrentBatteryCharger = iBatteryChargerInfo->At(0).iChargeLevel;
-		iCurrentStatus = iBatteryChargerInfo->At(0).iStatus;
-		iCurrentErr = iBatteryChargerInfo->At(0).iError;
-		iTimer->Start(iBatteryChargerInfo->At(0).iDuration,this);
-		}
-	}
-
-
-
-
-CSimBatteryCharger::~CSimBatteryCharger()
-/**
- * Standard destructor.  Destroy the heap-based object owned by this object.
- */
-	{
-	if (iTimer)
-		delete iTimer;
-	
-	if (iBatteryChargerInfo)
-		{
-		iBatteryChargerInfo->Delete(0,iBatteryChargerInfo->Count());
-		delete iBatteryChargerInfo;//todo check ptr
-		}
-	}
-
-
-TInt CSimBatteryCharger::GetBatteryCaps(TTsyReqHandle aReqHandle,TDes8* aCaps)
-/**
- * Retrieve Battery Charger capability information.  This function completes the
- * client's request synchronously.  If the configuration file contains any 
- * indicator profile information, then it indicates support for indicator
- * requests, otherwise it does not.
- *
- * @param aReqHandle	The request handle associated with this request.
- * @param aPckg1		The first parameter package.  This will be populated with the action caps(methods supported)
- *						.
- * @param aPckg2		the second parameter package. This will be populated with the Indicator caps(wich indicator(s) are supported)
- * @return TInt			Standard error value.
- */
-	{
-	TPckg<TUint32>* batteryChargerCapsPckg=(TPckg<TUint32>*)aCaps;
-	TUint32& batteryChargerCaps=(*batteryChargerCapsPckg)();
-
-	if(iBatteryChargerInfo->Count()==0)
-		{
-		batteryChargerCaps=0;	
-		}
-	else if((iBatteryChargerInfo->Count()-1) <= iBatteryChargerIndex)
-		batteryChargerCaps= RMobilePhone::KCapsGetBatteryInfo;
-	else
-		{
-		batteryChargerCaps= RMobilePhone::KCapsGetBatteryInfo | RMobilePhone::KCapsNotifyBatteryInfoChange;
-		}
-	iPhone->ReqCompleted(aReqHandle,KErrNone);
-	return KErrNone;
-	}
-
-
-TInt CSimBatteryCharger::GetBatteryInfo(TTsyReqHandle aReqHandle, TDes8* aInfo)
-/**
- * Return the current Battery Charger information.  This function completes synchronously.
- * If the configuration file contains any Battery Charger profile information, the
- * request completes successfully, otherwise it completes with KErrNotSupported.
- *
- * @param aReqHandle	The request handle associated with this request.
- * @param aPckg1		This is populated with the Battery Charger flags.
- * @return TInt			Standard error value.
- */
-	{
-	LOGMISC1(">>CSimBatteryCharger::GetBatteryInfo");
-	TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>* batteryInfoPckg = (TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>*)aInfo;
-	RMobilePhone::TMobilePhoneBatteryInfoV1& batteryInfo = (*batteryInfoPckg)();
-
-	// Check that the data structure is supported by the simulated TSY version
-	TInt err = iPhone->CheckSimTsyVersion(batteryInfo);
-	if(err != KErrNone)
-		{
-		iPhone->ReqCompleted(aReqHandle, err);
-		return KErrNone;
-		}
-
-	if(iBatteryChargerInfo->Count()==0)
-		{
-		iPhone->ReqCompleted(aReqHandle,KErrNotSupported);
-		return KErrNone;
-		}
-
-	batteryInfo.iChargeLevel=iCurrentBatteryCharger;
-	batteryInfo.iStatus = iCurrentStatus;
-	LOGMISC3("<<CSimBatteryCharger::GetBatteryInfo with level=%d and status=%d",iCurrentBatteryCharger,iCurrentStatus);
-	iPhone->ReqCompleted(aReqHandle,iCurrentErr);
-	return KErrNone;
-	}
-
-TInt CSimBatteryCharger::NotifyBatteryInfoChange(TTsyReqHandle aReqHandle, TDes8* aInfo)
-/**
- * Register a client's interest in being notified when the Battery Charger change.
- * This function records the request's parameters and awaits a change in 
- * Battery Charger before completing.
- *
- * @param aPckg1		The first parameter package.  This is populated with the Battery Charger flags.
- * @return TInt			Standard error value.
- */
-	{
-	LOGMISC1(">>CSimBatteryCharger::NotifyBatteryInfoChange");
-	TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>* batteryInfoPckg=(TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>*)aInfo;
-	RMobilePhone::TMobilePhoneBatteryInfoV1& batteryInfo=(*batteryInfoPckg)();
-
-	// Check that the data structure is supported by the simulated TSY version
-	TInt err = iPhone->CheckSimTsyVersion(batteryInfo);
-	if(err != KErrNone)
-		{
-		iPhone->ReqCompleted(aReqHandle, err);
-		return KErrNone;
-		}
-
-	if(iBatteryChargerInfo->Count()==0)
-		{
-		iPhone->ReqCompleted(aReqHandle,KErrNotSupported);
-		return KErrNone;
-		}
-
-	__ASSERT_ALWAYS(!iBatteryChargerNotificationPending,SimPanic(ENotificationReqAlreadyOutstanding));
-	iBatteryChargerNotificationPending=ETrue;
-	iBatteryChargerNotificationReqHandle=aReqHandle;
-	iBatteryChargerNofificationValue=&batteryInfo;
-	return KErrNone;	
-	}
-
-void CSimBatteryCharger::NotifyBatteryInfoCancel()
-/**
- * Cancel a previous request to be notified of a change in Battery Charger.
- */
-	{
-	if(iBatteryChargerNotificationPending)
-		{
-		LOGMISC1("CSimBatteryCharger::NotifyBatteryInfoChange has been cancelled");
-		iBatteryChargerNotificationPending=EFalse;
-		iPhone->ReqCompleted(iBatteryChargerNotificationReqHandle,KErrCancel);
-		}
-	else
-		LOGMISC1("CSimBatteryCharger::NotifyBatteryInfoChange was not outstanding and hasn't been cancelled");
-	}
-
-
-
-void CSimBatteryCharger::TimerCallBack(TInt /*aId*/)
-/**
- * The timer callback function.  This function will be called when the timer
- * completes.  It indicates a change in Battery Charger.  So, the new
- * Battery Charger settings must be loaded into the member variables representing
- * the current settings and any pending Battery Charger notification requests must
- * be completed.  Finally, the next timer is started.
- *
- * @param aId	This parameter is unused.  It is only required for CSimXxx classes
- *				that have more than one timer instance and need to identify which
- *				timer has expired.
- */
-	{
-	iBatteryChargerIndex++;
-	if(iBatteryChargerInfo->Count()<=iBatteryChargerIndex)
-		return;
-
-	iCurrentBatteryCharger=iBatteryChargerInfo->At(iBatteryChargerIndex).iChargeLevel;
-	iCurrentStatus = iBatteryChargerInfo->At(iBatteryChargerIndex).iStatus;
-	iCurrentErr = iBatteryChargerInfo->At(iBatteryChargerIndex).iError;
-
-	// Ask phone to check if indicator notification needs to be triggered
-	iPhone->CheckIndicatorNotification();
-
-	if(iBatteryChargerNotificationPending)
-		{
-		iBatteryChargerNotificationPending=EFalse;
-		(*iBatteryChargerNofificationValue).iChargeLevel=iCurrentBatteryCharger;
-		(*iBatteryChargerNofificationValue).iStatus=iCurrentStatus;
-		LOGMISC3("<<CSimBatteryCharger::NotifyBatteryInfoChange with level=%d and status=%d",iCurrentBatteryCharger,iCurrentStatus);
-		iPhone->ReqCompleted(iBatteryChargerNotificationReqHandle,iCurrentErr);
-		}
-	iTimer->Start(iBatteryChargerInfo->At(iBatteryChargerIndex).iDuration,this);
-	}
-
-const CTestConfigSection* CSimBatteryCharger::CfgFile()
-/**
- * Returns a pointer to the current configuration file section.
- *
- * @return CTestConfigSection	A pointer to the current configuration file section.
- */
-	{
-	return iPhone->CfgFile();
-	}
-
+// Copyright (c) 2001-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:
+// Implements the functionality required to provide clients with
+// Battery charging information.
+// 
+//
+
+/**
+ @file
+*/
+
+#include <testconfigfileparser.h>
+#include "CSimBatteryCharger.h"
+#include "CSimPhone.h"
+#include "Simlog.h"
+
+const TInt KChargerGranularity=5;		// < Granularity for Battery Charger list array
+
+
+CSimBatteryCharger* CSimBatteryCharger::NewL(CSimPhone* aPhone)
+/**
+ * Standard two-phase constructor.
+ * @param aPhone				The parent phone object.
+ * @return CSimBatteryCharger		The new Ondicator class class.
+ */
+	{
+	CSimBatteryCharger* self=new(ELeave) CSimBatteryCharger(aPhone);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CSimBatteryCharger::CSimBatteryCharger(CSimPhone* aPhone)
+		: iPhone(aPhone)
+/**
+ * Trivial first phase construction.
+ * @param aPhone				The parent phone object.
+ */
+	{
+	}
+
+
+void CSimBatteryCharger::ConstructL()
+/**
+ * Second phase construction.  Create instances of the necessary heap-based
+ * objects and read in the Battery Charger information from the configuration file.
+ * Finally, if any Battery Charger tags have been read, the initial values
+ * will be loaded and the timer started.
+ *
+ * Entries in the configuration file will take the following format:
+ * "BatteryCharger= <duration>, <Status> <battery level> <error code>"
+ * A number of these entries may be included to create an battery charger profile
+ * for the duration of the test.
+ */
+	{
+	iTimer=CSimTimer::NewL(iPhone);
+	iBatteryChargerInfo=new(ELeave) CArrayFixFlat<TBatteryChargerInfo>(KChargerGranularity);
+
+	LOGMISC1("Starting to parse Battery Charger config parameters...");
+	TInt count=CfgFile()->ItemCount(KBatteryCharger);
+	const CTestConfigItem* item=NULL;
+	TInt ret=KErrNone;
+
+	TInt i;
+	for(i=0;i<count;i++)
+		{
+		item=CfgFile()->Item(KBatteryCharger,i);
+		if(!item)
+			break;
+
+		TInt duration, status, level, error;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,duration);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("duration",ret,0,&KBatteryCharger);
+			continue;
+			}
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,status);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("status",ret,1,&KBatteryCharger);
+			continue;
+			}
+		
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,level);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("level",ret,2,&KBatteryCharger);
+			continue;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,error);
+		if(ret!=KErrNone)
+			error = KErrNone;
+
+		TBatteryChargerInfo chargerInfo;
+		chargerInfo.iDuration=duration;
+		chargerInfo.iStatus = RMobilePhone::TMobilePhoneBatteryStatus(status);
+		chargerInfo.iChargeLevel = level;
+		chargerInfo.iError = error;
+		iBatteryChargerInfo->AppendL(chargerInfo);
+		}
+	
+	LOGMISC2("Finished parsing Battery Charger config parameters...%d items found",count);
+
+	if(iBatteryChargerInfo->Count()!=0)
+		{
+		iBatteryChargerIndex = 0;
+		iCurrentBatteryCharger = iBatteryChargerInfo->At(0).iChargeLevel;
+		iCurrentStatus = iBatteryChargerInfo->At(0).iStatus;
+		iCurrentErr = iBatteryChargerInfo->At(0).iError;
+		iTimer->Start(iBatteryChargerInfo->At(0).iDuration,this);
+		}
+	}
+
+
+
+
+CSimBatteryCharger::~CSimBatteryCharger()
+/**
+ * Standard destructor.  Destroy the heap-based object owned by this object.
+ */
+	{
+	if (iTimer)
+		delete iTimer;
+	
+	if (iBatteryChargerInfo)
+		{
+		iBatteryChargerInfo->Delete(0,iBatteryChargerInfo->Count());
+		delete iBatteryChargerInfo;//todo check ptr
+		}
+	}
+
+
+TInt CSimBatteryCharger::GetBatteryCaps(TTsyReqHandle aReqHandle,TDes8* aCaps)
+/**
+ * Retrieve Battery Charger capability information.  This function completes the
+ * client's request synchronously.  If the configuration file contains any 
+ * indicator profile information, then it indicates support for indicator
+ * requests, otherwise it does not.
+ *
+ * @param aReqHandle	The request handle associated with this request.
+ * @param aPckg1		The first parameter package.  This will be populated with the action caps(methods supported)
+ *						.
+ * @param aPckg2		the second parameter package. This will be populated with the Indicator caps(wich indicator(s) are supported)
+ * @return TInt			Standard error value.
+ */
+	{
+	TPckg<TUint32>* batteryChargerCapsPckg=(TPckg<TUint32>*)aCaps;
+	TUint32& batteryChargerCaps=(*batteryChargerCapsPckg)();
+
+	if(iBatteryChargerInfo->Count()==0)
+		{
+		batteryChargerCaps=0;	
+		}
+	else if((iBatteryChargerInfo->Count()-1) <= iBatteryChargerIndex)
+		batteryChargerCaps= RMobilePhone::KCapsGetBatteryInfo;
+	else
+		{
+		batteryChargerCaps= RMobilePhone::KCapsGetBatteryInfo | RMobilePhone::KCapsNotifyBatteryInfoChange;
+		}
+	iPhone->ReqCompleted(aReqHandle,KErrNone);
+	return KErrNone;
+	}
+
+
+TInt CSimBatteryCharger::GetBatteryInfo(TTsyReqHandle aReqHandle, TDes8* aInfo)
+/**
+ * Return the current Battery Charger information.  This function completes synchronously.
+ * If the configuration file contains any Battery Charger profile information, the
+ * request completes successfully, otherwise it completes with KErrNotSupported.
+ *
+ * @param aReqHandle	The request handle associated with this request.
+ * @param aPckg1		This is populated with the Battery Charger flags.
+ * @return TInt			Standard error value.
+ */
+	{
+	LOGMISC1(">>CSimBatteryCharger::GetBatteryInfo");
+	TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>* batteryInfoPckg = (TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>*)aInfo;
+	RMobilePhone::TMobilePhoneBatteryInfoV1& batteryInfo = (*batteryInfoPckg)();
+
+	// Check that the data structure is supported by the simulated TSY version
+	TInt err = iPhone->CheckSimTsyVersion(batteryInfo);
+	if(err != KErrNone)
+		{
+		iPhone->ReqCompleted(aReqHandle, err);
+		return KErrNone;
+		}
+
+	if(iBatteryChargerInfo->Count()==0)
+		{
+		iPhone->ReqCompleted(aReqHandle,KErrNotSupported);
+		return KErrNone;
+		}
+
+	batteryInfo.iChargeLevel=iCurrentBatteryCharger;
+	batteryInfo.iStatus = iCurrentStatus;
+	LOGMISC3("<<CSimBatteryCharger::GetBatteryInfo with level=%d and status=%d",iCurrentBatteryCharger,iCurrentStatus);
+	iPhone->ReqCompleted(aReqHandle,iCurrentErr);
+	return KErrNone;
+	}
+
+TInt CSimBatteryCharger::NotifyBatteryInfoChange(TTsyReqHandle aReqHandle, TDes8* aInfo)
+/**
+ * Register a client's interest in being notified when the Battery Charger change.
+ * This function records the request's parameters and awaits a change in 
+ * Battery Charger before completing.
+ *
+ * @param aPckg1		The first parameter package.  This is populated with the Battery Charger flags.
+ * @return TInt			Standard error value.
+ */
+	{
+	LOGMISC1(">>CSimBatteryCharger::NotifyBatteryInfoChange");
+	TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>* batteryInfoPckg=(TPckg<RMobilePhone::TMobilePhoneBatteryInfoV1>*)aInfo;
+	RMobilePhone::TMobilePhoneBatteryInfoV1& batteryInfo=(*batteryInfoPckg)();
+
+	// Check that the data structure is supported by the simulated TSY version
+	TInt err = iPhone->CheckSimTsyVersion(batteryInfo);
+	if(err != KErrNone)
+		{
+		iPhone->ReqCompleted(aReqHandle, err);
+		return KErrNone;
+		}
+
+	if(iBatteryChargerInfo->Count()==0)
+		{
+		iPhone->ReqCompleted(aReqHandle,KErrNotSupported);
+		return KErrNone;
+		}
+
+	__ASSERT_ALWAYS(!iBatteryChargerNotificationPending,SimPanic(ENotificationReqAlreadyOutstanding));
+	iBatteryChargerNotificationPending=ETrue;
+	iBatteryChargerNotificationReqHandle=aReqHandle;
+	iBatteryChargerNofificationValue=&batteryInfo;
+	return KErrNone;	
+	}
+
+void CSimBatteryCharger::NotifyBatteryInfoCancel()
+/**
+ * Cancel a previous request to be notified of a change in Battery Charger.
+ */
+	{
+	if(iBatteryChargerNotificationPending)
+		{
+		LOGMISC1("CSimBatteryCharger::NotifyBatteryInfoChange has been cancelled");
+		iBatteryChargerNotificationPending=EFalse;
+		iPhone->ReqCompleted(iBatteryChargerNotificationReqHandle,KErrCancel);
+		}
+	else
+		LOGMISC1("CSimBatteryCharger::NotifyBatteryInfoChange was not outstanding and hasn't been cancelled");
+	}
+
+
+
+void CSimBatteryCharger::TimerCallBack(TInt /*aId*/)
+/**
+ * The timer callback function.  This function will be called when the timer
+ * completes.  It indicates a change in Battery Charger.  So, the new
+ * Battery Charger settings must be loaded into the member variables representing
+ * the current settings and any pending Battery Charger notification requests must
+ * be completed.  Finally, the next timer is started.
+ *
+ * @param aId	This parameter is unused.  It is only required for CSimXxx classes
+ *				that have more than one timer instance and need to identify which
+ *				timer has expired.
+ */
+	{
+	iBatteryChargerIndex++;
+	if(iBatteryChargerInfo->Count()<=iBatteryChargerIndex)
+		return;
+
+	iCurrentBatteryCharger=iBatteryChargerInfo->At(iBatteryChargerIndex).iChargeLevel;
+	iCurrentStatus = iBatteryChargerInfo->At(iBatteryChargerIndex).iStatus;
+	iCurrentErr = iBatteryChargerInfo->At(iBatteryChargerIndex).iError;
+
+	// Ask phone to check if indicator notification needs to be triggered
+	iPhone->CheckIndicatorNotification();
+
+	if(iBatteryChargerNotificationPending)
+		{
+		iBatteryChargerNotificationPending=EFalse;
+		(*iBatteryChargerNofificationValue).iChargeLevel=iCurrentBatteryCharger;
+		(*iBatteryChargerNofificationValue).iStatus=iCurrentStatus;
+		LOGMISC3("<<CSimBatteryCharger::NotifyBatteryInfoChange with level=%d and status=%d",iCurrentBatteryCharger,iCurrentStatus);
+		iPhone->ReqCompleted(iBatteryChargerNotificationReqHandle,iCurrentErr);
+		}
+	iTimer->Start(iBatteryChargerInfo->At(iBatteryChargerIndex).iDuration,this);
+	}
+
+const CTestConfigSection* CSimBatteryCharger::CfgFile()
+/**
+ * Returns a pointer to the current configuration file section.
+ *
+ * @return CTestConfigSection	A pointer to the current configuration file section.
+ */
+	{
+	return iPhone->CfgFile();
+	}
+