accessoryservices/accessoryserver/src/ChargerContext/ChargingContextFSMBody.cpp
changeset 0 4e1aa6a622a0
child 7 1a73e8f1b64d
--- /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 <e32def.h>
+#include <e32cmn.h>
+#include <hwrmpowerstatesdkpskeys.h>
+
+
+#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 ========
+