--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/aristatemachine/src/aristatemachine.cpp Fri Jul 23 16:58:44 2010 +0100
@@ -0,0 +1,381 @@
+ /*
+* Copyright (c) 2009 Aricent and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* Aricent - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* State machine for all video hwdevice plugins.
+*
+*/
+
+//User includes
+#include "aristatemachine.h"
+
+//---------------------------------------------------------------------------
+//Default Constrcutor.
+//---------------------------------------------------------------------------
+//
+CStateMachine::CStateMachine():iState( EUnInitialized )
+ {
+ PRINT_ENTRY;
+ // Initailization
+ for ( TInt i = 0; i < KNumOfStates; i++ )
+ {
+ for ( TInt j = 0; j < KNumOfCommands; j++ )
+ {
+ iStateChanges [i][j] = EInvalidState;
+ }
+ }
+
+ // set the valid transition states in the table
+
+ // valid state changes from Uninitailize
+ iStateChanges [EUnInitialized][EInitializeCommand] = EInitialized;
+ iStateChanges [EUnInitialized][EInitializingCommand] = EInitializing;
+ iStateChanges [EUnInitialized][EDeadStateCommand]
+ = ENonInitializedDeadState;
+
+
+ // valid state changes from Initailize
+ iStateChanges [EInitialized][EStartCommand] = EStart;
+ iStateChanges [EInitialized][EPauseCommand] = EPause;
+ iStateChanges [EInitialized][EResumeCommand] = EStart;
+ iStateChanges [EInitialized][EInputEndCommand] = EInitializedInStopping;
+ iStateChanges [EInitialized][EStopCommand] = EStop;
+ iStateChanges [EInitialized][EDeadStateCommand] = EInitializedDeadState;
+
+ iStateChanges [EInitializing][EDeadStateCommand] = EInitializedDeadState;
+ iStateChanges [EInitializing][EInitializeCommand] = EInitialized;
+
+ // valid state changes from Start
+ iStateChanges [EStart][EStartCommand] = EStart;
+ iStateChanges [EStart][EPauseCommand] = EPause;
+ iStateChanges [EStart][EInputEndCommand] = EStopping;
+ iStateChanges [EStart][EStopCommand] = EStop;
+ iStateChanges [EStart][EDeadStateCommand] = ENonInitializedDeadState;
+
+ // valid State changes from pause
+ iStateChanges [EPause][EPauseCommand] = EPause;
+ iStateChanges [EPause][EResumeCommand] = EStart;
+ iStateChanges [EPause][EInputEndCommand] = EPauseInStopping;
+ iStateChanges [EPause][EStopCommand] = EStop;
+ iStateChanges [EPause][EDeadStateCommand] = ENonInitializedDeadState;
+
+ // valid state changes from Stop
+ iStateChanges [EStop][EStartCommand] = EStart;
+ iStateChanges [EStop][EInputEndCommand] = EStopInInputEnd;
+ iStateChanges [EStop][EStopCommand] = EStop;
+ iStateChanges [EStop][EDeadStateCommand]= ENonInitializedDeadState;
+
+ // valid state changes from InitailizeInStopping
+ iStateChanges [EInitializedInStopping][EStartCommand] = EStopping;
+ iStateChanges [EInitializedInStopping][EDeadStateCommand]
+ = ENonInitializedDeadState;
+
+ // valid State Changes from EStopping
+ iStateChanges [EStopping][EPauseCommand] = EPauseInStopping;
+ iStateChanges [EStopping][EStopCommand] = EStop;
+ iStateChanges [EStopping][EDeadStateCommand] = ENonInitializedDeadState;
+
+ // valid state changes from PauseInStopping
+ iStateChanges [EPauseInStopping][EResumeCommand] = EStopping;
+ iStateChanges [EPauseInStopping][EStopCommand] = EStop;
+ iStateChanges [EPauseInStopping][EDeadStateCommand]
+ = ENonInitializedDeadState;
+
+ // valid state changes frm StopInInputEnd
+ iStateChanges [EStopInInputEnd][EStartCommand] = EStopping;
+ iStateChanges [EStopInInputEnd][EStopCommand] = EStop;
+ iStateChanges [EStopInInputEnd][EDeadStateCommand]
+ = ENonInitializedDeadState;
+ }
+
+//---------------------------------------------------------------------------
+//Constrcutor.
+//---------------------------------------------------------------------------
+//
+EXPORT_C CStateMachine* CStateMachine::NewL()
+ {
+ PRINT_ENTRY;
+ CStateMachine* self = new ( ELeave ) CStateMachine();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ PRINT_EXIT;
+ return( self );
+ }
+
+//---------------------------------------------------------------------------
+//Symbian 2nd Phase Constrcutor.
+//---------------------------------------------------------------------------
+//
+void CStateMachine::ConstructL()
+ {
+ PRINT_ENTRY;
+ PRINT_EXIT;
+ }
+
+//---------------------------------------------------------------------------
+//Checks whether transition to new state is possible or not.
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsTransitionValid( TCommand aCommand )
+ {
+ PRINT_ENTRY;
+
+ if ( iStateChanges[iState][aCommand] != EInvalidState )
+ {
+ PRINT_EXIT;
+ return( ETrue );
+ }
+ else
+ {
+ PRINT_EXIT;
+ return( EFalse );
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Transits to new state. If transition cann't be done, object will remain in
+//the previous state.
+//---------------------------------------------------------------------------
+//
+EXPORT_C TInt CStateMachine::Transit( TCommand aCommand )
+ {
+ PRINT_ENTRY;
+ if ( !IsTransitionValid ( aCommand ) )
+ {
+ return KErrGeneral;
+ }
+ iState = iStateChanges[iState][aCommand];
+ PRINT_EXIT;
+ return KErrNone;
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether the state is initialized or not. Here initilized means if the
+//state is in any state other than EUnInitialized
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsInitialized()
+ {
+ PRINT_ENTRY;
+ if ( iState != EUnInitialized )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether the state is exactly in EInitialized state or not.
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsInInitializedState()
+ {
+ PRINT_ENTRY;
+ if ( iState == EInitialized )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether the state is initializing or not.
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsInitializing()
+ {
+ PRINT_ENTRY;
+ if ( iState == EInitializing )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether the state is in any one of the input ending
+//states i.e
+//EInitializedInStopping,
+//EStopping,
+//EPauseInStopping,
+//EStopInInputEnd
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsInputEndPending()
+ {
+ PRINT_ENTRY;
+ if ( iState == EInitializedInStopping ||
+ iState == EStopping ||
+ iState == EPauseInStopping ||
+ iState == EStopInInputEnd )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether state is in EStart state
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsStarted()
+ {
+ PRINT_ENTRY;
+ if ( iState == EStart )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether stae is in EPlaying state
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsPlaying()
+ {
+ PRINT_ENTRY;
+ if ( iState == EStart || iState == EStopping )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether state is in EPause state
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsPaused()
+ {
+ PRINT_ENTRY;
+ if ( ( iState == EPause ) || ( iState == EPauseInStopping ) )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether stae is in EStop state
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsStopped()
+ {
+ PRINT_ENTRY;
+ if ( iState == EStop )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Tells whether stae is in EInitailize or not
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IfIsStateInInitailize()
+ {
+ PRINT_ENTRY;
+ if ( iState == EInitialized )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Resets the state machine to EUnInitialized state.
+//---------------------------------------------------------------------------
+//
+EXPORT_C void CStateMachine::Reset()
+ {
+ PRINT_ENTRY;
+ iState = EUnInitialized;
+ PRINT_EXIT;
+ }
+
+
+
+//---------------------------------------------------------------------------
+//Tells whether stae is in EDeadState state
+//---------------------------------------------------------------------------
+//
+EXPORT_C TBool CStateMachine::IsInDeadState()
+ {
+ PRINT_ENTRY;
+ if ( ( iState == EInitializedDeadState ) ||
+ ( iState == ENonInitializedDeadState ) )
+ {
+ PRINT_EXIT;
+ return ETrue;
+ }
+ else
+ {
+ PRINT_EXIT;
+ return EFalse;
+ }
+ }
+
+//---------------------------------------------------------------------------
+//Destructor for StateMachine
+//---------------------------------------------------------------------------
+//
+CStateMachine::~CStateMachine()
+ {}