accessoryservices/pluggeddisplay/pluggeddisplayengine/src/pdengine.cpp
changeset 0 4e1aa6a622a0
child 6 6bb05bdcbe09
--- /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 <AsyCmdTypes.h>
+
+// 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