--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devicediagnosticsfw/diagframework/src/diagexecplanentryimpl.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,332 @@
+/*
+* Copyright (c) 2007 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: Class definition of CDiagExecPlanEntryImpl
+*
+*/
+
+
+// CLASS DECLARATION
+#include "diagexecplanentryimpl.h"
+
+// SYSTEM INCLUDE FILES
+#include <DiagFrameworkDebug.h> // LOGSTRING
+
+// USER INCLUDE FILES
+#include "diagengineconfig.h" // TDiagEngineConfig
+#include "diagframework.pan" // Panic Codes
+
+// DATA
+
+// MACROS
+
+// LOCAL DATA TYPES
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::CDiagExecPlanEntryImpl
+// ---------------------------------------------------------------------------
+//
+CDiagExecPlanEntryImpl::CDiagExecPlanEntryImpl(
+ MDiagEngineCommon& aEngine,
+ const TDiagEngineConfig& aEngineConfig,
+ MDiagExecPlanEntryImplObserver& aObserver,
+ MDiagPlugin& aPlugin,
+ TBool aAsDependency,
+ TType aType )
+ : CActive( EPriorityStandard ),
+ iEngine( aEngine ),
+ iEngineConfig( aEngineConfig ),
+ iObserver( aObserver ),
+ iPlugin( aPlugin ),
+ iAsDependency( aAsDependency ),
+ iState ( EStateQueued ),
+ iType ( aType )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::~CDiagExecPlanEntryImpl
+// ---------------------------------------------------------------------------
+//
+CDiagExecPlanEntryImpl::~CDiagExecPlanEntryImpl()
+ {
+ if ( iWatchdogTimer )
+ {
+ iWatchdogTimer->Cancel();
+ delete iWatchdogTimer;
+ iWatchdogTimer = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::Plugin
+// ---------------------------------------------------------------------------
+//
+MDiagPlugin& CDiagExecPlanEntryImpl::Plugin()
+ {
+ return iPlugin;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::Plugin
+// ---------------------------------------------------------------------------
+//
+const MDiagPlugin& CDiagExecPlanEntryImpl::Plugin() const
+ {
+ return iPlugin;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::State
+// ---------------------------------------------------------------------------
+//
+MDiagExecPlanEntry::TState CDiagExecPlanEntryImpl::State() const
+ {
+ return iState;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::ChangeStateL
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::ChangeStateL( TState aState )
+ {
+ iState = aState;
+
+ TBool watchdogNeeded = EFalse;
+
+ // determine if we need a watchdog or not.
+ switch( aState )
+ {
+ case EStateRunning:
+ case EStateStopped:
+ watchdogNeeded = ETrue;
+ break;
+
+ case EStateQueued:
+ case EStateInitDelay:
+ case EStateCompleted:
+ case EStateSuspended:
+ default:
+ watchdogNeeded = EFalse;
+ break;
+ }
+
+ if ( watchdogNeeded )
+ {
+ if ( iWatchdogTimer == NULL )
+ {
+ LOGSTRING( "CDiagExecPlanEntryImpl::ChangeStateL() Create watchdog timer" )
+ iWatchdogTimer = CPeriodic::NewL( EPriorityStandard );
+ }
+ ResetWatchdog();
+ }
+ else
+ {
+ if ( iWatchdogTimer )
+ {
+ LOGSTRING( "CDiagExecPlanEntryImpl::ChangeStateL() delete watchdog timer" )
+ iWatchdogTimer->Cancel();
+ delete iWatchdogTimer;
+ iWatchdogTimer = NULL;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::Type
+// ---------------------------------------------------------------------------
+//
+CDiagExecPlanEntryImpl::TType CDiagExecPlanEntryImpl::Type() const
+ {
+ return iType;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::SetType
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::SetType( TType aType )
+ {
+ iType = aType;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::AsDependency
+// ---------------------------------------------------------------------------
+//
+TBool CDiagExecPlanEntryImpl::AsDependency() const
+ {
+ return iAsDependency;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::SetAsDependency
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::SetAsDependency( TBool aAsDependency )
+ {
+ iAsDependency = aAsDependency;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::IsStoppedByClient
+// ---------------------------------------------------------------------------
+//
+TBool CDiagExecPlanEntryImpl::IsStoppedByClient() const
+ {
+ return iStoppedByClient;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::Engine
+// ---------------------------------------------------------------------------
+//
+MDiagEngineCommon& CDiagExecPlanEntryImpl::Engine()
+ {
+ return iEngine;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::EngineConfig
+// ---------------------------------------------------------------------------
+//
+const TDiagEngineConfig& CDiagExecPlanEntryImpl::EngineConfig() const
+ {
+ return iEngineConfig;
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::Observer
+// ---------------------------------------------------------------------------
+//
+MDiagExecPlanEntryImplObserver& CDiagExecPlanEntryImpl::Observer()
+ {
+ return iObserver;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::StopExecutionByClientL
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::StopExecutionByClientL(
+ MDiagEngineCommon::TCancelMode aCancelMode )
+ {
+ iStoppedByClient = ETrue;
+
+ DoStopExecutionByClientL( aCancelMode );
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::ResetWatchdog
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::ResetWatchdog()
+ {
+ if ( iWatchdogTimer )
+ {
+ LOGSTRING2( "CDiagExecPlanEntryImpl::ResetWatchdog() "
+ L"Timout Value = %d microseconds", iWatchdogValue.Int() )
+ iWatchdogTimer->Cancel();
+ iWatchdogTimer->Start( iWatchdogValue,
+ iWatchdogValue,
+ TCallBack( WatchdogTimerExpiredL, this ) );
+ }
+ else
+ {
+ LOGSTRING( "CDiagExecPlanEntryImpl::ResetWatchdog() "
+ L"Watchdog was not running. Reset request ignored." )
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::ResetWatchdog
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::ResetWatchdog( TDiagEngineWatchdogTypes aWatchdogType )
+ {
+ switch ( aWatchdogType )
+ {
+ case EDiagEngineWatchdogTypeAutomatic:
+ iWatchdogValue = iEngineConfig.WatchdogTimeoutValueAutomatic();
+ break;
+
+ case EDiagEngineWatchdogTypeInteractive:
+ iWatchdogValue = iEngineConfig.WatchdogTimeoutValueInteractive();
+ break;
+
+ default:
+ __ASSERT_ALWAYS( 0, Panic( EDiagFrameworkBadArgument ) );
+ break;
+ }
+
+ ResetWatchdog();
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::ResetWatchdog
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::ResetWatchdog( TTimeIntervalMicroSeconds32 aWatchdogValue )
+ {
+ iWatchdogValue = aWatchdogValue;
+ ResetWatchdog();
+ }
+
+// ---------------------------------------------------------------------------
+// CDiagExecPlanEntryImpl::StopWatchdogTemporarily
+// ---------------------------------------------------------------------------
+//
+void CDiagExecPlanEntryImpl::StopWatchdogTemporarily()
+ {
+ LOGSTRING( "CDiagExecPlanEntryImpl::StopWatchdogTemporarily() " )
+ if ( iWatchdogTimer )
+ {
+ iWatchdogTimer->Cancel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDiagEngineImpl::WatchdogTimerExpiredL
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDiagExecPlanEntryImpl::WatchdogTimerExpiredL( TAny* aPtr )
+ {
+ LOGSTRING( "CDiagExecPlanEntryImpl::WatchdogTimerExpiredL()" )
+
+ CDiagExecPlanEntryImpl* thisPtr = static_cast< CDiagExecPlanEntryImpl* >( aPtr );
+
+ // once watchdog expires, it should not be restarted, since it is end of test.
+ thisPtr->iWatchdogTimer->Cancel();
+ delete thisPtr->iWatchdogTimer;
+ thisPtr->iWatchdogTimer = NULL;
+
+ thisPtr->StopExecutionByWatchdogL();
+
+ return 0;
+ }
+
+
+
+// End of File
+