diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/multimodetsy/Multimode/Mbattery.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/multimodetsy/Multimode/Mbattery.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,214 @@ +// Copyright (c) 1997-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: +// GBATTERY.CPP +// Queries the ME battery. Retrieves charge level and battery status +// +// + +#include +#include "Mbattery.h" +#include "mSLOGGER.H" +#include "ATIO.H" +#include "Matstd.h" + +CATGetBattery* CATGetBattery::NewL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals) + { + CATGetBattery* battery = new(ELeave) CATGetBattery(aIo, aTelObject, aInit, aPhoneGlobals); + CleanupStack::PushL(battery); + battery->ConstructL(); + CleanupStack::Pop(); + return battery; + } + +CATGetBattery::CATGetBattery(CATIO* aIo, CTelObject* aTelObject, CATInit* aInit,CPhoneGlobals* aPhoneGlobals) +: CATCommands(aIo,aTelObject,aInit,aPhoneGlobals),iPhoneGlobals(aPhoneGlobals) +{} + +void CATGetBattery::ConstructL() + { + CATCommands::ConstructL(); + } + +CATGetBattery::~CATGetBattery() + { + iIo->RemoveExpectStrings(this); + iOKExpectString=NULL; + iErrorExpectString=NULL; + } + +void CATGetBattery::Start(TTsyReqHandle aTsyReqHandle,TAny* aParams) + { + LOGTEXT(_L8("MMTsy:\tCATGetBattery:\tStarting ME Battery query.")); + iReqHandle = aTsyReqHandle; + iBatteryInfo = (RMobilePhone::TMobilePhoneBatteryInfoV1*) aParams; + iTxBuffer.Format(KGetBatteryChargeCommand); + iIo->Write(this, iTxBuffer); + iIo->SetTimeOut(this, 5000); + iState=EATBatteryWaitForWriteComplete; + } + +void CATGetBattery::EventSignal(TEventSource aSource) + { + if (aSource==ETimeOutCompletion) + { + LOGTEXT(_L8("MMTsy:\tCATGetBattery:\tTimeout Error during battery-strength query")); + RemoveStdExpectStrings(); + Complete(KErrTimedOut,aSource); + return; + } + + switch(iState) + { + case EATBatteryWaitForWriteComplete: + __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected)); + { + iIo->WriteAndTimerCancel(this); + StandardWriteCompletionHandler(aSource, 5); + iState=EATBatteryReadComplete; + } + break; + + case EATBatteryReadComplete: + __ASSERT_ALWAYS(aSource==EReadCompletion,Panic(EATCommand_IllegalCompletionReadExpected)); + { + iIo->WriteAndTimerCancel(this); + TInt ret(ValidateExpectString()); + RemoveStdExpectStrings(); + if (ret) + { + iBatteryInfo->iStatus = RMobilePhone::EPowerStatusUnknown; + Complete(ret,aSource); + return; + } + TRAP(ret,ParseBatteryResponseL()); + Complete(ret,aSource); + } + break; + + default: + break; + }//switch + }//EventSignal + +void CATGetBattery::Stop(TTsyReqHandle aTsyReqHandle) + { + __ASSERT_ALWAYS(aTsyReqHandle == iReqHandle, Panic(EIllegalTsyReqHandle)); + LOGTEXT2(_L8("CATGetBattery::Stop - Cancelling from state %d"), iState); + + if (iState==EATBatteryWaitForWriteComplete) + { + Complete(KErrCancel, EReadCompletion); + } + // else do nothing because we have already sent the AT command + // or have not actually started doing anything! + } + +void CATGetBattery::Complete(TInt aError,TEventSource aSource) + { + iIo->WriteAndTimerCancel(this); + iIo->RemoveExpectStrings(this); + iOKExpectString = NULL; + iErrorExpectString = NULL; + + CATCommands::Complete(aError,aSource); + iTelObject->ReqCompleted(iReqHandle, aError); + + LOGTEXT2(_L8("MMTsy:CATGetBattery:\tCATGetBattery completed with error code : %d"), aError); + iState = EATNotInProgress; + } + +void CATGetBattery::CompleteWithIOError(TEventSource /*aSource*/,TInt aStatus) + { + if (iState!=EATNotInProgress) + { + iIo->WriteAndTimerCancel(this); + iTelObject->ReqCompleted(iReqHandle, aStatus); + iState = EATNotInProgress; + } + } + +void CATGetBattery::ParseBatteryResponseL() + { + ParseBufferLC(); + CATParamListEntry* entry; + TDblQueIter iter(iRxResults); + TBool first = ETrue; + TUint iCounter = 0; + TInt ret; + + while (entry = iter++, entry != NULL) + { + if (first) + { + first = EFalse; + while (entry->iResultPtr != KCBCResponseString) + { + entry->Deque(); + delete entry; + entry = iter++; + if (entry == NULL) + { + CleanupStack::PopAndDestroy(); + User::Leave(KErrNotFound); + } + } //while + LOGTEXT(_L8("MMTsy:\tCATGetBattery:\tFound +CBC string!")); + iCounter = 1; + } + else + { + TLex8 aLex((entry->iResultPtr).Ptr()); + if (iCounter == 1) + { + TInt batteryStatus; + ret = aLex.Val(batteryStatus); + if (ret == KErrNone) + // Have to convert the answer from the AT command format + // to multimode representation. + iBatteryInfo->iStatus = ConvertBatteryStatus(batteryStatus); + + } + else if (iCounter == 2) + ret = aLex.Val(iBatteryInfo->iChargeLevel); + iCounter++; + }//else + entry->Deque(); + delete entry; + }//while + CleanupStack::PopAndDestroy(); + }//ParseBatteryResponseL + +RMobilePhone::TMobilePhoneBatteryStatus CATGetBattery::ConvertBatteryStatus(TInt aBatteryStatus) + +/** * Converts the batterey status from ETSI standard to multimode representation * + * This method returns the proper multimode representation for the battery status. + * @param aBatteryStatus points to a value representing the battery status the ETSI way(0 - 3, ). + * @return Returns the battery status in multimode representation. +*/ + + { + switch (aBatteryStatus) + { + case 0: + return RMobilePhone::EPoweredByBattery; // equal to 1 + case 1: + return RMobilePhone::EBatteryConnectedButExternallyPowered; // equal to 2 + case 2: + return RMobilePhone::ENoBatteryConnected; // equal to 3 + case 3: + return RMobilePhone::EPowerFault; // equal to 4 + default: + return RMobilePhone::EPowerStatusUnknown; //equal to 0 + } + }