diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/common_tsy/commontsy/src/mmtsy/ChargingStatusObserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/common_tsy/commontsy/src/mmtsy/ChargingStatusObserver.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,136 @@ +/* +* Copyright (c) 2007-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 "ChargingStatusObserver.h" +#include + +// ======== MEMBER FUNCTIONS ======== + +CChargingStatusObserver* CChargingStatusObserver::NewL( + MChargingStatusNotifier& aChargingStatusNotifier ) + { + CChargingStatusObserver* self = CChargingStatusObserver::NewLC( aChargingStatusNotifier ); + CleanupStack::Pop(self); + return self; + } + +CChargingStatusObserver* CChargingStatusObserver::NewLC( + MChargingStatusNotifier& aChargingStatusNotifier ) + { + CChargingStatusObserver* self = new ( ELeave ) CChargingStatusObserver( + aChargingStatusNotifier ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CChargingStatusObserver::~CChargingStatusObserver() + { + Cancel(); + iChargingStatus.Close(); + } + +void CChargingStatusObserver::ConstructL() + { + User::LeaveIfError( iChargingStatus.Attach( KPSUidHWRMPowerState, + KHWRMChargingStatus ) ); + RunL(); + } + +CChargingStatusObserver::CChargingStatusObserver( + MChargingStatusNotifier& aChargingStatusNotifier ) : + CActive(EPriorityStandard), + iChargingStatusNotifier( aChargingStatusNotifier ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CChargingStatusObserver::RunL +// Handles CChargingStatusObserver::GetBatteryInfo request completion event. +// +// ----------------------------------------------------------------------------- +// +void CChargingStatusObserver::RunL() + { + RMobilePhone::TMobilePhoneBatteryInfoV1 batteryInfo; + batteryInfo.iStatus = RMobilePhone::EPowerStatusUnknown; + + TInt errorStatus( iStatus.Int() ); + + // resubscribe before processing new value to prevent missing updates + iChargingStatus.Subscribe( iStatus ); + SetActive(); + + if ( KErrNone != errorStatus ) + { +TFLOGSTRING2("TSY: CChargingStatusObserver::RunL - iStatus: %d", errorStatus ); + iChargingStatusNotifier.NotifyChargingStatus( errorStatus, + batteryInfo ); + return; + } + + // property updated, get new value + TInt level( 0 ); + TInt error = iChargingStatus.Get( level ); +TFLOGSTRING2("TSY: CChargingStatusObserver::RunL error: %d", error); + + if ( KErrNone == error ) + { + EPSHWRMChargingStatus chargingStatus = (EPSHWRMChargingStatus)level; + + switch ( chargingStatus ) + { + case EChargingStatusNotConnected: + batteryInfo.iStatus = RMobilePhone::EPoweredByBattery; + break; + + case EChargingStatusAlmostComplete: + case EChargingStatusChargingComplete: + case EChargingStatusCharging: + batteryInfo.iStatus = + RMobilePhone::EBatteryConnectedButExternallyPowered; + break; + + case EChargingStatusNotCharging: + batteryInfo.iStatus = RMobilePhone::EPoweredByBattery; + break; + + case EChargingStatusError: + default: + batteryInfo.iStatus = RMobilePhone::EPowerStatusUnknown; + break; + } + } + iChargingStatusNotifier.NotifyChargingStatus( error, batteryInfo ); + } + +// ----------------------------------------------------------------------------- +// CChargingStatusObserver::DoCancel +// Cancellation of an outstanding request +// +// ----------------------------------------------------------------------------- +// +void CChargingStatusObserver::DoCancel() + { + iChargingStatus.Cancel(); + } + +// End of File