diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/pluggeddisplay/pluggeddisplayengine/src/pdengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/pdengine.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,275 @@ +/* + * Copyright (c) 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: + * CPDEngine class implementation. + * + */ + +// SYSTEM INCLUDES +#include + +// USER INCLUDES +#include "pdengine.h" +#include "compositecablestatusfsm.h" +#include "hdmicablestatusfsm.h" +#include "trace.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CPDEngine* CPDEngine::NewL( RAccessoryServer& aAccessoryServer ) + { + FUNC_LOG; + + CPDEngine* self = CPDEngine::NewLC( aAccessoryServer ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// Leaves pointer in the cleanup stack. +// --------------------------------------------------------------------------- +// +EXPORT_C CPDEngine* CPDEngine::NewLC( RAccessoryServer& aAccessoryServer ) + { + FUNC_LOG; + + CPDEngine* self = new ( ELeave ) CPDEngine(); + CleanupStack::PushL( self ); + self->ConstructL( aAccessoryServer ); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor. +// --------------------------------------------------------------------------- +// +CPDEngine::~CPDEngine() + { + FUNC_LOG; + // Delete FSM objects + for (TInt i = 0; i < EPDEFSMIdFirstUnused; i++ ) + { + delete iFSMPtr[i]; + } + } + +//------------------------------------------------------------------------------ +// CPDEngine::ProcessCommandL +//------------------------------------------------------------------------------ +// +EXPORT_C void CPDEngine::ProcessCommandL( const TProcessCmdId aCommand, + const TASYCmdParams& aCmdParams, + MPDAsyCmdHandler& aAsyCmdHandler ) + { + FUNC_LOG; + for (TInt i = 0; i < EPDEFSMIdFirstUnused; i++ ) + { + TBool commandHandled = iFSMPtr[i]->ProcessCommandL( + aCommand, + aCmdParams, + aAsyCmdHandler ); + if ( commandHandled ) + { + break; + } + } + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +TFSMState CPDEngine::CurrentStateID( TFSMId aFSMId ) + { + FUNC_LOG; + TFSMState currentStateId( 0 ); + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId )) + { + if (iFSMPtr[ aFSMId ]) + { + currentStateId = iFSMPtr[ aFSMId ]->CurrentStateID(); + } + } + INFO_1( "currentStateId %i", currentStateId ); + return currentStateId; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +void CPDEngine::Input( + TFSMId aFSMId, + TFSMInterfaceId aInterfaceId, + TFSMEventId aEvent ) + { + FUNC_LOG; + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId ) ) + { + if(EPDEFSMIdHDMICableStatus == aFSMId) + { + if( iFSMPtr[EPDEFSMIdCompositeCableStatus]->CurrentStateID() != ECompositeCableStateIdle ) + { + // Forcefully transit CompositeCable FSM to Idle state + ((CCompositeCableStatusFSM*)iFSMPtr[EPDEFSMIdCompositeCableStatus])->Transit(ECompositeCableStateIdle); + } + iFSMPtr[ aFSMId ]->Input( aInterfaceId, aEvent ); + } + else if( ( EPDEFSMIdCompositeCableStatus == aFSMId ) + && ( iFSMPtr[EPDEFSMIdHDMICableStatus]->CurrentStateID() != EHDMICableStateConnected ) ) + { + iFSMPtr[ aFSMId ]->Input( aInterfaceId, aEvent ); + } + } + return; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +MFSMState* CPDEngine::CurrentState( TFSMId aFSMId ) + { + FUNC_LOG; + MFSMState* currentState( NULL ); + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId )) + { + if (iFSMPtr[ aFSMId ]) + { + currentState = iFSMPtr[ aFSMId ]->CurrentState(); + } + } + return currentState; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +MFSMForBody* CPDEngine::GetFSM( TFSMId aFSMId ) + { + FUNC_LOG; + MFSMForBody* fsmPtr( NULL ); + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId )) + { + fsmPtr = iFSMPtr[ aFSMId ]; + } + return fsmPtr; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +TFSMMainAndSubState CPDEngine::CurrentMainAndSubstateIDs( TFSMId aFSMId ) + { + FUNC_LOG; + TFSMMainAndSubState states; + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId )) + { + states = iFSMPtr[ aFSMId ]->CurrentMainAndSubstateIDs(); + } + return states; + } + + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +TPtrC CPDEngine::CurrentStateName( TFSMId aFSMId ) + { + FUNC_LOG; + TPtrC currentStateName; + currentStateName.Set( KNullDesC ); + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId )) + { + if (iFSMPtr[ aFSMId ]) + { + currentStateName.Set( iFSMPtr[ aFSMId ]->CurrentStateName() ); + } + } + return currentStateName; + } + +// --------------------------------------------------------------------------- +// From MFSMBody. +// --------------------------------------------------------------------------- +// +void CPDEngine::Start() + { + FUNC_LOG; + // Start FSMs + for (TInt i = 0; i < EPDEFSMIdFirstUnused; i++ ) + { + if (iFSMPtr[i]) + { + iFSMPtr[i]->Start(); + } + } + return; + } + +// --------------------------------------------------------------------------- +// CPDEngine::GetUniqueID +// --------------------------------------------------------------------------- +// +TInt CPDEngine::GetAccPolGenericID( + TFSMId aFSMId, + TAccPolGenericID& aAccPolGenericID ) + { + FUNC_LOG; + TInt retVal( KErrNotFound ); + if ( ( 0 <= aFSMId ) && + ( EPDEFSMIdFirstUnused > aFSMId )) + { + retVal = iFSMPtr[ EPDEFSMIdHDMICableStatus ]->GetAccPolGenericID( aAccPolGenericID ); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CPDEngine::CPDEngine() + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CPDEngine::ConstructL( RAccessoryServer& aAccessoryServer ) + { + FUNC_LOG; + // Create FSM objects here. + iFSMPtr[ EPDEFSMIdHDMICableStatus ] = CHDMICableStatusFSM::NewL( aAccessoryServer, this ); + iFSMPtr[ EPDEFSMIdCompositeCableStatus ] = CCompositeCableStatusFSM::NewL( aAccessoryServer, this ); + Start(); + } + +// End of file