--- a/devicediagnosticsfw/diagframework/inc/diagengineimpl.h Thu Aug 19 10:44:50 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,803 +0,0 @@
-/*
-* 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 declaration for CDiagEngineImpl
-*
-*/
-
-
-#ifndef DIAGENGINEIMPL_H
-#define DIAGENGINEIMPL_H
-
-
-// system includes
-#include <e32base.h> // CActive
-#include <DiagEngineCommon.h> // MDiagEngineCommon
-#include <DiagEngineObserver.h> // MDiagEngineObserver::TSuspendReason
-#include <DiagResultsDatabase.h> // RDiagResultsDatabase, RDiagResultsDatabaseRecord
-#include <DiagTestPlugin.h> // MDiagTestPlugin::TStopReason
-#include <DiagSuitePlugin.h> // MDiagSuitePlugin::TStopReason
-
-// user includes.
-#include "diagenginestatemachineobserver.h" // DiagFwInternal::MStateMachineObserver
-#include "diagenginestates.h" // DiagFwInternal::TState
-#include "diagengineevents.h" // DiagFwInternal::TEvent
-#include "diagenginecallhandlerobserver.h" // MDiagEngineCallHandlerObserver
-#include "diagexecplanentryimplobserver.h" // MDiagExecPlanEntryImplObserver
-#include "diagengineconfig.h" // TDiagEngineConfig
-
-
-// Forward declarations
-class MDiagTestPlugin;
-class MDiagSuitePlugin;
-class CDiagPluginPool;
-class CAknViewAppUi;
-class CDiagEngineCallHandler;
-class CDiagPluginExecPlanImpl;
-class CDiagExecPlanEntryImpl;
-class CDiagExecPlanEntryImplTest;
-
-namespace DiagFwInternal
- {
- class CStateMachine;
- class CEventBasic;
- class CEventCancel;
- class CEventSendCompletion;
- class CEventSuiteContinue;
- class CEventTestCompleted;
- class CEventTestProgress;
- class CEventWatchdog;
- }
-
-/**
-* Diagnostics Framework Engine Implementation
-*
-* This class is the actual class that implements CDiagEngine.
-* All actual work is done by CDiagEngineImpl class.
-*
-*/
-NONSHARABLE_CLASS( CDiagEngineImpl ) : public CActive,
- public MDiagEngineCommon,
- public MDiagExecPlanEntryImplObserver,
- public DiagFwInternal::MStateMachineObserver,
- public MDiagEngineCallHandlerObserver
- {
-public:
-
- /**
- * Two-phased constructor.
- * @param aViewAppUi View App Ui that is using this engine.
- * @param aObserver Engine observer.
- * @param aDbSession Session to RDiagResultDatabase to create record.
- * @param aPluginPool Initialized plug-in pool that holds plug-ins.
- * @param aDisableDependency if ETrue, plug-ins should execute
- * event if dependencies are not met.
- * @param aExecutionBatch - array of test uids to execute
- *
- * @return new instance of CDiagEngineImpl*
- */
- static CDiagEngineImpl* NewL( CAknViewAppUi& aViewAppUi,
- MDiagEngineObserver& aObserver,
- RDiagResultsDatabase& aDbSession,
- CDiagPluginPool& aPluginPool,
- TBool aDisableDependency,
- const RArray< TUid >& aExecutionBatch );
-
- /**
- * Two-phased constructor. This function is identical to NewL,
- * except that it pushs created object in clean up stack.
- *
- * @param aViewAppUi View App Ui that is using this engine.
- * @param aObserver Engine observer.
- * @param aDbSession Session to RDiagResultDatabase to create record.
- * @param aPluginPool Initialized plug-in pool that holds plug-ins.
- * @param aDisableDependency if ETrue, plug-ins should execute
- * event if dependencies are not met.
- * @param aExecutionBatch - array of test uids to execute
- *
- * @return new instance of CDiagEngineImpl*
- */
- static CDiagEngineImpl* NewLC( CAknViewAppUi& aViewAppUi,
- MDiagEngineObserver& aObserver,
- RDiagResultsDatabase& aDbSession,
- CDiagPluginPool& aPluginPool,
- TBool aDisableDependency,
- const RArray< TUid >& aExecutionBatch );
-
-
- /**
- * Two-phased constructor.
- * @param aViewAppUi View App Ui that is using this engine.
- * @param aObserver Engine observer.
- * @param aDbSession Session to RDiagResultDatabase to create record.
- * @param aPluginPool Initialized plug-in pool that holds plug-ins.
- * @param aIncompleteRecordUid - Uid to the record to resume.
- *
- * @return new instance of CDiagEngineImpl*
- */
- static CDiagEngineImpl* NewL( CAknViewAppUi& aViewAppUi,
- MDiagEngineObserver& aObserver,
- RDiagResultsDatabase& aDbSession,
- CDiagPluginPool& aPluginPool,
- TUid aIncompleteRecordUid );
- /**
- * Two-phased constructor. This function is identical to NewL,
- * except that it pushs created object in clean up stack.
- *
- * @param aViewAppUi View App Ui that is using this engine.
- * @param aObserver Engine observer.
- * @param aDbSession Session to RDiagResultDatabase to create record.
- * @param aPluginPool Initialized plug-in pool that holds plug-ins.
- * @param aIncompleteRecordUid - Uid to the record to resume.
- *
- * @return new instance of CDiagEngineImpl*
- */
- static CDiagEngineImpl* NewLC( CAknViewAppUi& aViewAppUi,
- MDiagEngineObserver& aObserver,
- RDiagResultsDatabase& aDbSession,
- CDiagPluginPool& aPluginPool,
- TUid aIncompleteRecordUid );
-
-
- /**
- * Destructor.
- */
- virtual ~CDiagEngineImpl();
-
- /**
- * Execute tests. This implements CDiagEngine::ExecuteL
- *
- * @see CDiagEngine::ExecuteL
- */
- void ExecuteL();
-
- /**
- * Set custom execution parameter.
- *
- * @see CDiagEngine::SetCustomParam
- */
- void SetCustomParam( TAny* aCustomParams );
-
- /**
- * Suspend execution.
- *
- * @see CDiagEngine::SuspendL
- */
- void SuspendL();
-
- /**
- * Resume suspended execution. This implements CDiagEngine::ResumeL
- *
- * @see CDiagEngine::ResumeL
- */
- void ResumeL();
-
-public: // from MDiagEngineCommon
- /**
- * Returns current execution plan.
- *
- * @see MDiagEngineCommon::ExecutionPlanL
- */
- virtual const MDiagPluginExecPlan& ExecutionPlanL() const;
-
- /**
- * Stop current execution of tests.
- *
- * @see MDiagEngineCommon::ExecutionStopL
- */
- virtual void ExecutionStopL( TCancelMode aCancelMode );
-
- /**
- * Resets test execution watchdog timer.
- *
- * @see MDiagEngineCommon::ResetWatchdog
- */
- virtual void ResetWatchdog();
-
- /**
- * Resets test execution watchdog timer.
- * @see MDiagEngineCommon::ResetWatchdog
- */
- virtual void ResetWatchdog( TDiagEngineWatchdogTypes aWatchdogType );
-
- /**
- * Resets test execution watchdog timer.
- * @see MDiagEngineCommon::ResetWatchdog
- */
- virtual void ResetWatchdog( TTimeIntervalMicroSeconds32 aExpectedTimeToComplete );
-
- /**
- * Get App Ui reference that launched Diagnostics Engine.
- *
- * @see MDiagEngineCommon::ViewAppUi()
- */
- virtual CAknViewAppUi& ViewAppUi();
-
- /**
- * Get App Ui reference that launched Diagnostics Engine.
- *
- * @see MDiagEngineCommon::ViewAppUi()
- */
- virtual const CAknViewAppUi& ViewAppUi() const;
-
- /**
- * Get Database Subsession for record open for writing.
- *
- * @see MDiagEngineCommon::DbRecord
- */
- virtual RDiagResultsDatabaseRecord& DbRecord();
-
- /**
- * Get Database Subsession for record open for writing.
- *
- * @see MDiagEngineCommon::DbRecord
- */
- virtual const RDiagResultsDatabaseRecord& DbRecord() const;
-
- /**
- * Get reference to Plugin Pool
- *
- * @see MDiagEngineCommon::PluginPool
- */
- virtual CDiagPluginPool& PluginPool();
-
- /**
- * Get reference to Plugin Pool
- *
- * @see MDiagEngineCommon::PluginPool
- */
- virtual const CDiagPluginPool& PluginPool() const;
-
- /**
- * Add a text to configuraiton list option.
- *
- * @see MDiagEngineCommon::AddToConfigListL
- */
- virtual void AddToConfigListL( TConfigListType aListType, const TDesC& aText );
-
- /**
- * Remove a text from configuration list.
- *
- * @see MDiagEngineCommon::RemoveFromConfigListL
- */
- virtual void RemoveFromConfigListL( TConfigListType aListType, const TDesC& aText );
-
- /**
- * Create a common dialog.
- * @see MDiagEngineCommon::CreateCommonDialogL
- */
- virtual CAknDialog* CreateCommonDialogLC( TDiagCommonDialog aDialogType,
- TAny* aInitData );
-
- /**
- * Stop watchdog activity temporarily.
- * @see MDiagEngineCommon::StopWatchdogTemporarily
- */
- virtual void StopWatchdogTemporarily();
-
- /**
- * Check if current engine is being executed with dependency disabled.
- * @see MDiagEngineCommon::IsDependencyDisabled
- */
- virtual TBool IsDependencyDisabled() const;
-
- /**
- * Get custom execution parameter.
- * @see MDiagEngineCommon::CustomParam
- */
- virtual TAny* CustomParam() const;
-
- /**
- * Send a command to application.
- * @see MDiagEngineCommon::ExecuteAppCommandL
- */
- virtual void ExecuteAppCommandL( TDiagAppCommand aCommand,
- TAny* aParam1,
- TAny* aParam2 );
-
-private: // from MDiagExecPlanEntryImplObserver
- /**
- * Observe plugin execution progress
- * @see MDiagExecPlanEntryImplObserver::ExecPlanEntryProgressL
- */
- virtual void ExecPlanEntryProgressL( CDiagExecPlanEntryImpl& aSender,
- TUint aCurrentStep,
- TUint aTotalSteps );
- /**
- * Observe plugin execution completion
- * @see MDiagExecPlanEntryImplObserver::ExecPlanEntryExecutedL
- */
- virtual void ExecPlanEntryExecutedL( CDiagExecPlanEntryImpl& aSender );
-
- /**
- * Observer critical error from plug-in execution entry.
- * @see MDiagExecPlanEntryImplObserver::ExecPlanEntryCriticalError
- */
- virtual void ExecPlanEntryCriticalError( TInt aError );
-
-private: // from DiagFwInternal::MStateMachineObserver
- /**
- * Handle state transition
- *
- * @see MDiagEngineStateMachineObserver::HandleStateChangedL
- */
- virtual void HandleStateChangedL( DiagFwInternal::TState aPreviousState,
- DiagFwInternal::TState aCurrentState,
- const DiagFwInternal::CEventBasic& aEventPreview );
-
- /**
- * Handle event.
- *
- * @see MDiagEngineStateMachineObserver::HandleEventL
- */
- virtual void HandleEventL( DiagFwInternal::CEventBasic& aEvent );
-
- /**
- * Handle error.
- *
- * @see MDiagEngineStateMachineObserver::HandleError
- */
- virtual DiagFwInternal::TState HandleError( DiagFwInternal::TState aCurrentState,
- TInt aError );
-
-private: // From MDiagEngineCallHandlerObserver
- /**
- * Handle call handling state change.
- *
- * @see MDiagEngineCallHandlerObserver::CallHandlerStateChangedL
- */
- virtual void CallHandlerStateChangedL( TDiagEngineCallHandlerState aState );
-
-private: // from CActive
- /**
- * RunL from CActive
- *
- * @see CActive::RunL
- */
- virtual void RunL();
-
- /**
- * DoCancel from CActive
- *
- * @see CActive::DoCancel
- */
- virtual void DoCancel();
-
- /**
- * Handle error
- *
- * @see CActive::RunError
- */
- virtual TInt RunError( TInt aError );
-
-private: // Private Constructors
- /**
- * C++ Constrctor
- *
- * @param aViewAppUi - Reference to Appui.
- * @param aObserver - Reference to engine observer. (Generall app)
- * @param aDbSession - Session to the database.
- * @param aPluginPool - Reference to plug-in pool.
- * @param aDisableDependency - Whether to disable dependency check.
- * @param aIncompleteRecordUid - Uid to the record to resume.
- * If this UID is aIncompleteRecordUid == TUid::Null(), it will create
- * a new record.
- */
- CDiagEngineImpl( CAknViewAppUi& aViewAppUi,
- MDiagEngineObserver& aObserver,
- RDiagResultsDatabase& aDbSession,
- CDiagPluginPool& aPluginPool );
-
- /**
- * Second phase constructor for creating a new record.
- *
- * @param aDisableDependency - Whether to disable dependency check
- * @param aExecutionBatch - Array of plug-in uids to execute
- */
- void ConstructNewRecordL( TBool aDisableDependency,
- const RArray< TUid >& aExecutionBatch );
-
- /**
- * Second phase constructor for resuming incomplete record.
- *
- * @param aIncompleteRecordUid - Uid of DB record to resume from.
- */
- void ConstructIncompleteRecordL( TUid aIncompleteRecordUid );
-
- /**
- * Second phase constructor common.
- * Initializes items that are common to both new session and resuming session.
- */
- void ConstructCommonL();
-
-private: // Event handlers
- /**
- * State handler function for EStateCreatingPlan
- *
- * @param aEvent - Event to handle.
- */
- void HandleEventInCreatingPlanStateL( DiagFwInternal::CEventBasic& aEvent );
-
- /**
- * State handler function for EStateRunning
- *
- * @param aEvent - Event to handle.
- */
- void HandleEventInRunningStateL( DiagFwInternal::CEventBasic& aEvent );
-
- /**
- * State handler function for EStateCancelAll
- *
- * @param aEvent - Event to handle.
- */
- void HandleEventInCancelAllStateL( DiagFwInternal::CEventBasic& aEvent );
-
- /**
- * State handler function for EStateSuspended
- *
- * @param aEvent - Event to handle.
- */
- void HandleEventInSuspendedStateL( DiagFwInternal::CEventBasic& aEvent );
-
- /**
- * State handler function for EStateFinalizing
- *
- * @param aEvent - Event to handle.
- */
- void HandleEventInFinalizingStateL( DiagFwInternal::CEventBasic& aEvent );
-
- /**
- * State handler function for EStateStopped
- *
- * @param aEvent - Event to handle.
- */
- void HandleEventInStoppedStateL( DiagFwInternal::CEventBasic& aEvent );
-
-private: // Other private functions
- /**
- * Start creating execution plan
- */
- void StartCreateExecutionPlanL();
-
- /**
- * Handle Plan created event
- */
- void HandlePlanCreatedL();
-
- /**
- * Notify test progress event to engine observer
- *
- * @param aEvent - test progress event.
- */
- void NotifyTestProgressL( DiagFwInternal::CEventTestProgress& aEvent );
-
- /**
- * Report plug-in execution result to observer and continue to the next test.
- *
- * @param aError - Error code to report to observer.
- * @param aResult - result to report to observer.
- */
- void NotifyResultAndContinueL( TInt aError, CDiagResultsDatabaseItem* aResult );
-
- /**
- * Commit db record to DB.
- *
- */
- void CommitResultsToDb();
-
- /**
- * Notify observer that last plugin is completed and engine is now stopped.
- * This could also mean that execution has failed.
- *
- * @param aEvent - last completion event
- */
- void NotifyLastPluginCompletedL( DiagFwInternal::CEventSendCompletion& aEvent );
-
- /**
- * Execute next plugin in the plan
- *
- */
- void ExecuteNextPluginL();
-
- /**
- * Suspend engine
- *
- * @param aReason - Reason for suspending.
- */
- void DoSuspendL( MDiagEngineObserver::TSuspendReason aReason );
-
- /**
- * Add event to state machine.
- * This functions makes sure that correct resume event is added to
- * the state machine depending on the previous state.
- * @param aReason - Resume reason.
- */
- void AddResumeEventL( MDiagEngineObserver::TResumeReason aReason );
-
- /**
- * Resume engine
- *
- */
- void DoResumeL();
-
- /**
- * Handle Skip
- *
- */
- void HandleSkipL();
-
- /**
- * Handle cancelling of all plug-ins
- *
- */
- void HandleCancelAllL();
-
- /**
- * Start delay timer for test plugin
- *
- * @param aPlanEntry - test plugin entry in plan to execute.
- */
- void StartTimerForDelayingTestL( CDiagExecPlanEntryImpl& aPlanEntry );
-
- /**
- * Start Executing a test plug-in
- *
- * @param aPlanEntry - test plugin entry in plan to execute.
- */
- void DoExecuteTestPluginL( CDiagExecPlanEntryImpl& aPlanEntry );
-
- /**
- * Start Executing a suite plug-in
- *
- * @param aPlanEntry - suite plugin entry in plan to execute.
- */
- void DoExecuteSuitePluginL( CDiagExecPlanEntryImpl& aPlanEntry );
-
- /**
- * Callback function for plugin delay timer expiration.
- *
- * @param aPtr - pointer to "this"
- */
- static TInt PluginDelayTimerExpiredL( TAny* aPtr );
-
- /**
- * Callback function for watchdog timer expiration.
- *
- * @param aPtr - pointer to "this"
- */
- static TInt WatchdogTimerExpiredL( TAny* aPtr );
-
- /**
- * Handle watchdog time expiration.
- *
- * @param aEvent - Watchdog event.
- */
- void HandleWatchdogTimeoutL( DiagFwInternal::CEventWatchdog& aEvent );
-
- /**
- * Function to stop currently executing plugin
- *
- * @param aStopMode - Reason for stopping the execution.
- * @param aIsWatchdog - ETrue if this is because of watchdog timeout.
- * @return Test Result. NULL if plug-in was a suite. Ownership transferred
- * to caller.
- */
- CDiagResultsDatabaseItem* StopCurrentPluginL( TCancelMode aStopMode,
- TBool aIsWatchdog );
-
- /**
- * Function to stop currently executing test plugin
- *
- * @param aStopMode - Reason for stopping the execution.
- * @param aIsWatchdog - ETrue if this is because of watchdog timeout.
- * @return Test Result. NULL if plug-in was a suite. Ownership transferred
- * to caller.
- */
- CDiagResultsDatabaseItem* StopCurrentTestPluginL( TCancelMode aStopMode,
- TBool aIsWatchdog );
-
- /**
- * Function to stop currently executing suite plugin
- *
- * @param aStopMode - Reason for stopping the execution.
- * @param aIsWatchdog - ETrue if this is because of watchdog timeout.
- */
- void StopCurrentSuitePluginL( TCancelMode aStopMode, TBool aIsWatchdog );
-
- /**
- * Function to create test stop reason based on input parameter
- *
- * @param aStopMode - Reason for stopping the execution.
- * @param aIsWatchdog - ETrue if this is because of watchdog timeout.
- * @return Test stop reason
- */
- MDiagTestPlugin::TStopReason TranslateTestStopReason( TCancelMode aStopMode,
- TBool aIsWatchdog );
-
- /**
- * Function to create suite stop reason based on input parameter
- *
- * @param aStopMode - Reason for stopping the execution.
- * @param aIsWatchdog - ETrue if this is because of watchdog timeout.
- * @return Suite stop reason
- */
- MDiagSuitePlugin::TStopReason TranslateSuiteStopReason( TCancelMode aStopMode,
- TBool aIsWatchdog );
-
- /**
- * Function to create database result type based on input parameter
- *
- * @param aStopMode - Reason for stopping the execution.
- * @param aIsWatchdog - ETrue if this is because of watchdog timeout.
- * @return Database result type.
- */
- CDiagResultsDatabaseItem::TResult ConvertToDbResult( TCancelMode aStopMode,
- TBool aIsWatchdog );
-
- /**
- * Create database result item with just result.
- *
- * @param aCurrentItem - Currently executing item
- * @param aResult - Result type
- * @return Database result item. Ownership transferred to caller.
- */
- CDiagResultsDatabaseItem* CreateDbItemL(
- CDiagExecPlanEntryImpl& aCurrentItem,
- CDiagResultsDatabaseItem::TResult aResultType ) const;
-
- /**
- * Call TestSessionEndL on all plug-ins.
- *
- */
- void NotifyPluginsOfTestSessionEnd();
-
- /**
- * Stops all active requests
- */
- void StopAllRequests();
-
- /**
- * Cleans up incomplete test session during engine destruction.
- * This function should be called only from destructor.
- */
- void CleanupIncompleteTestSession();
-
- /**
- * Finalizes test session. This will notify plug-ins, finalize DB record and
- * notify application.
- */
- void FinalizeTestSessionL();
-
-private: // private data
- /**
- * iViewAppUi - Reference to View App Ui. Passed to plug-ins to allow
- * view switching.
- */
- CAknViewAppUi& iViewAppUi;
-
- /**
- * iObserver - reference to engine observer.
- */
- MDiagEngineObserver& iObserver;
-
- /**
- * iDbSession - Database session.
- */
- RDiagResultsDatabase& iDbSession;
-
- /**
- * iDbRecord - New record created for current test session.
- */
- RDiagResultsDatabaseRecord iDbRecord;
-
- /**
- * iRecordId - New record id created for current test session.
- */
- TUid iRecordId;
-
- /**
- * iPluginPool - Reference to the plug-in pool.
- */
- CDiagPluginPool& iPluginPool;
-
- /**
- * iCustomParam - Custom parameter.
- * Ownership - Client.
- */
- TAny* iCustomParam;
-
- /**
- * iBatch - list of items to execute.
- * Ownership - Individual elements are owned by plug-in pool.
- */
- RPointerArray< MDiagPlugin > iBatch;
-
- /**
- * iWatchdogTimer - Timer for watchdog.
- * Ownership - this
- */
- CPeriodic* iWatchdogTimer;
-
- /**
- * iLastWatchdogValue - Last watchdog value set.
- * This will be used when ResetWatchdog() is called without
- * any value specified.
- */
- TInt iLastWatchdogValue;
-
- /**
- * iPlan - Execution plan
- * Ownership - this
- */
- CDiagPluginExecPlanImpl* iPlan;
-
- /**
- * iStateMachine - State machine.
- * Ownership - this
- */
- DiagFwInternal::CStateMachine* iStateMachine;
-
- /**
- * iSuspendedPrevState - previous state just before suspended.
- * This is used to resume to correct state.
- */
- DiagFwInternal::TState iSuspendedPrevState;
-
- /**
- * iSuspendReason - Reason why engine was suspended.
- */
- MDiagEngineObserver::TSuspendReason iSuspendReason;
-
- /**
- * iResumeReason - Reason why engine is resumed.
- */
- MDiagEngineObserver::TResumeReason iResumeReason;
-
- /**
- * iSuspendedResult - Temporary result from test plug-in when engine is
- * suspended. When test is suspended just before being able to save the
- * test result, its result is saved here, so that when resumed
- * it will use this result instead of re-executing.
- * Ownership - this
- */
- CDiagResultsDatabaseItem* iSuspendedResult;
-
- /**
- * iCallHandler - Handles call states
- * Ownership - this
- */
- CDiagEngineCallHandler* iCallHandler;
-
- /**
- * iContinueIncompleteRecord - Indicates whether engine is supposed to
- * continue from an incomplete record.
- * ETrue if engine is working with incomplete record.
- * EFalse if engine is working with a new record.
- */
- TBool iContinueIncompleteRecord;
-
- /**
- * iEngineConfig - Confiugration information about engine.
- */
- TDiagEngineConfig iEngineConfig;
-
- /**
- * iEngineError - Error code of engine.
- */
- TInt iEngineError;
- };
-
-#endif // DIAGENGINEIMPL_H
-
-// End of File
-