diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/accessoryserver/src/ChargerContext/ChargingContextFSMBody.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/accessoryserver/src/ChargerContext/ChargingContextFSMBody.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,290 @@ +/* +* Copyright (c) 2008-2008 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: Finite State Machine class for Charging Context Controller. +* +*/ + + + +#include +#include +#include + + +#include "ChargingContextFSMBody.h" +#include "ChargingContextStateWFCharger.h" +#include "ChargingContextStateCharging.h" +#include "ChargingContextStateMaintainActivity.h" +#include "acc_debug.h" + + +// ======== LOCAL FUNCTIONS ======== + + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// Symbian two-phased constructor +// --------------------------------------------------------------------------- +// +CChargingContextFSMBody* CChargingContextFSMBody::NewL( + CAccSrvChargingContextController* aChargingContextController ) + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::NewL()" ); + + CChargingContextFSMBody* self = new ( ELeave ) CChargingContextFSMBody(); + CleanupStack::PushL( self ); + self->ConstructL( aChargingContextController ); + CleanupStack::Pop( self ); + + COM_TRACE_1( "[AccFW:AccServer] CChargingContextFSMBody::NewL - return %p", self ); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CChargingContextFSMBody::~CChargingContextFSMBody() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::~CChargingContextFSMBody()" ); + iCurrentStateId = EChargerContextStateUndefined; + if ( NULL != iChargingContextController ) + { + if ( NULL != iChargingContextController->iDisplayOrientationChannelPtr ) + { + iChargingContextController->iDisplayOrientationChannelPtr->StopDataListening(); + iChargingContextController->iDisplayOrientationChannelPtr->CloseChannel(); + } + if ( NULL != iChargingContextController->iChargerStatusWatchPtr ) + { + if ( iChargingContextController->iChargerStatusWatchPtr->IsActive() ) + { + iChargingContextController->iChargerStatusWatchPtr->Cancel(); + } + } + } + // Delete state objects + for (TInt i = 1; i <= EChargerContextStateMaxValue; i++ ) + { + delete iStateArray[i]; + iStateArray[i] = NULL; + } + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::~CChargingContextFSMBody" ); + } + + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +void CChargingContextFSMBody::Start() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::Start()" ); + // Step to the initial state. + iCurrentStateId = EChargerContextStateWaitForCharger; + iStateArray[iCurrentStateId]->Enter(); + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::Start" ); + return; + } + + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +TBool CChargingContextFSMBody::Transit( TFSMState aNextState ) + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::Transit()" ); + TBool retVal(EFalse); + if ( ( EChargerContextStateUndefined < aNextState ) && + ( EChargerContextStateMaxValue >= aNextState ) ) + { + iCurrentStateId = aNextState; + if ( NULL != iStateArray[iCurrentStateId]) + { + retVal = ETrue; + iStateArray[iCurrentStateId]->Enter(); + } + } + if ( EFalse == retVal ) + { + //Something is wrong + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::Transit - incorrect nextstate"); + } + COM_TRACE_1( "[AccFW:AccServer] CChargingContextFSMBody::Transit - TBool retVal %i", retVal ); + return retVal; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +TFSMState CChargingContextFSMBody::CurrentStateID() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CurrentStateID()" ); + TFSMState currentState( EChargerContextStateUndefined ); + if ( ( EChargerContextStateUndefined < iCurrentStateId ) && + ( EChargerContextStateMaxValue >= iCurrentStateId )) + { + currentState = iCurrentStateId; + } + COM_TRACE_1( "[AccFW:AccServer] CChargingContextFSMBody::CurrentStateID - CurrentStateId %i", currentState ); + return currentState; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +void CChargingContextFSMBody::Input() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::Input()" ); + if ( EChargerContextStateUndefined != iCurrentStateId ) + { + if ( NULL != iStateArray[iCurrentStateId] ) + { + iStateArray[iCurrentStateId]->Input(); + } + } + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::Input" ); + return; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +MFSMState* CChargingContextFSMBody::CurrentState() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CurrentState()" ); + MFSMState* currentState( NULL ); + if ( ( EChargerContextStateUndefined < iCurrentStateId ) && + ( EChargerContextStateMaxValue >= iCurrentStateId )) + { + currentState = iStateArray[iCurrentStateId]; + } + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CurrentState" ); + return currentState; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +TPtrC CChargingContextFSMBody::CurrentStateName() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CurrentStateName()" ); + TPtrC currentStateName; + currentStateName.Set( KNullDesC ); + if ( ( EChargerContextStateUndefined < iCurrentStateId ) && + ( EChargerContextStateMaxValue >= iCurrentStateId )) + { + currentStateName.Set( iStateArray[iCurrentStateId]->Name() ); + } + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CurrentStateName" ); + return currentStateName; + } + +// --------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------- +// +CChargingContextFSMBody::CChargingContextFSMBody() + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CChargingContextFSMBody()" ); + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::CChargingContextFSMBody - return" ); + } + + +// --------------------------------------------------------- +// ConstructL +// --------------------------------------------------------- +// +void CChargingContextFSMBody::ConstructL( + CAccSrvChargingContextController* aChargingContextController ) + { + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::ConstructL()" ); + iChargingContextController = aChargingContextController; + // Create state objects here. + iStateArray[ EChargerContextStateWaitForCharger ] = CChargingContextStateWFCharger::NewL( this, aChargingContextController ); + iStateArray[ EChargerContextStateCharging ] = CChargingContextStateCharging::NewL( this, aChargingContextController ); + iStateArray[ EChargerContextStateMaintainActivity ] = CChargingContextStateMaintainActivity::NewL( this, aChargingContextController ); + +#ifdef __MODULE_TEST__ + aChargingContextController->iModuleTestOrientationWatchPtr = CAccSrvPSIntPropertyWatch::NewL( + aChargingContextController, + KModuleTestUid, + KModuleTestKeyOrientation, + EOwnerThread ); + aChargingContextController->iModuleTestOrientationWatchPtr->Watch(); + aChargingContextController->iModuleTestChargerWatchPtr = CAccSrvPSIntPropertyWatch::NewL( + aChargingContextController, + KModuleTestUid, + KModuleTestKeyCharger, + EOwnerThread ); + aChargingContextController->iModuleTestChargerWatchPtr->Watch(); +#endif //__MODULE_TEST__ + + // Create Charger status watcher. + aChargingContextController->iChargerStatusWatchPtr = CAccSrvPSIntPropertyWatch::NewL( + aChargingContextController, + KPSUidHWRMPowerState, + KHWRMChargingStatus, + EOwnerThread ); + aChargingContextController->GetCurrentChargerStatus(); + aChargingContextController->iChargerStatusWatchPtr->Watch(); + + // Create ResetInactivityTime timer. + aChargingContextController->iResetInactivityTimeTimerPtr = CAccSrvResetInactivityTimeTimer::NewL( + aChargingContextController ); + // Create channel finder watcher. + aChargingContextController->iChannelFinder = CSensrvChannelFinder::NewL(); + + //List of found channels. + RSensrvChannelInfoList channelInfoList; + CleanupClosePushL( channelInfoList ); + + //Create and fill channel search criteria. + //Here the device orientation channel is searched. + TSensrvChannelInfo channelInfo; + channelInfo.iChannelType = TSensrvOrientationData::KDataTypeId; + + //Find the orientation channel. + aChargingContextController->iChannelFinder->FindChannelsL( channelInfoList, channelInfo ); + + if( channelInfoList.Count() != 1 ) + { + //The device doesn’t support orientation channel or + //there are several orientation channels. + COM_TRACE_1( "[AccFW:AccServer] CChargingContextFSMBody::ConstructL - User::Leave( error ) %d", KErrNone ); + User::Leave( KErrNotFound); + } + + //Open the orientation channel. + //When the channel object is created the channel info object + //must be an object returned by CSensrvChannelFinder::FindChannelsL(). + aChargingContextController->iDisplayOrientationChannelPtr = CSensrvChannel::NewL( channelInfoList[ 0 ] ); + COM_TRACE_1( "[AccFW:AccServer] CChargingContextFSMBody::ConstructL - iDisplayOrientationChannelPtr %p", aChargingContextController->iDisplayOrientationChannelPtr ); + + CleanupStack::PopAndDestroy( &channelInfoList ); //Close() is being called on "channelInfoList" + + COM_TRACE_( "[AccFW:AccServer] CChargingContextFSMBody::ConstructL - return void" ); + return; + } + +// ======== GLOBAL FUNCTIONS ======== +