devicediagnosticsfw/diagframework/inc/diagexecplanentryimpl.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devicediagnosticsfw/diagframework/inc/diagexecplanentryimpl.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,297 @@
+/*
+* 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 CDiagExecPlanEntryImpl
+*
+*/
+
+
+#ifndef DIAGEXECPLANENTRYIMPL_H
+#define DIAGEXECPLANENTRYIMPL_H
+
+// SYSTEM INCLUDE FILES
+#include <e32base.h>                // CBase
+#include <DiagExecPlanEntry.h>      // MDiagExecPlanEntry
+#include <DiagEngineCommon.h>       // MDiagEngineCommon::TCancelMode
+
+class MDiagExecPlanEntryImplObserver;
+class TDiagEngineConfig;
+
+/**
+* Diagnostics Plug-in Execution Plan Entry Implementation.
+*
+* This class implements MDiagExecPlanEntry. It is meant to be private
+*   to Diagnostics Framework and not exported.
+*
+* @since S60 v5.0
+*
+*/
+NONSHARABLE_CLASS( CDiagExecPlanEntryImpl ) :  public CActive,
+                                               public MDiagExecPlanEntry
+    {
+public:     // Data Types
+    /**
+    * TType - Execution plan entry type. 
+    *   ETypeTestExec           - Test plugin execution.
+    *   ETypeSuitePrepare       - Suite prepare execution
+    *   ETypeSuiteFinalize      - Suite finalize execution
+    *   ETypeSuiteUnexpanded    - Suite before being expanded into 
+    *                               ETypeSuitePrepare or ETypeSuiteFinalize
+    */
+    enum TType
+        {
+        ETypeTestExec = 0,      
+        ETypeSuitePrepare,      
+        ETypeSuiteFinalize,     
+        ETypeSuiteUnexpanded,   
+        };
+
+public:     // Public API
+    /**
+    * C++ destructor 
+    */
+    virtual ~CDiagExecPlanEntryImpl();
+
+    /**
+    * Plugin associated with the entry
+    *   @return Reference to the plugin.
+    */
+    MDiagPlugin& Plugin();      //lint !e1411  This is proper overload
+
+    /**
+    * Get item type
+    *   @return current item type
+    */
+    TType Type() const;
+
+    /**
+    * Update item type
+    *   @param aType - new type.
+    */
+    void SetType( TType aType );
+
+    /**
+    * Update dependency
+    *   @param aAsDependency - ETrue if item is being executed to satisfy 
+    *       dependency. EFalse otherwise.
+    */
+    void SetAsDependency( TBool aAsDependency );
+
+    /**
+    * Handle cancel execution by client. Calling this will case IsStoppedByClient()
+    * to return ETrue.
+    *
+    * @param aCancelMode - Cancellation mode.
+    */
+    void StopExecutionByClientL( MDiagEngineCommon::TCancelMode aCancelMode );
+
+    /**
+    * Check if test was stopped by client.
+    *
+    * @return ETrue if it was stopped by StopExecutionByClientL call. 
+    *   EFalse otherwise.
+    */
+    TBool IsStoppedByClient() const;
+
+    /**
+    * Reset Watchdog to last known value.  
+    * If watchdog was suspended, it will resume. 
+    * If watchdog was not running, this does nothing.
+    */
+    void ResetWatchdog();
+
+    /**
+    * Reset Watchdog to one of the default based on watchdog type
+    * If watchdog was suspended, it will resume. 
+    * If watchdog was not running, this does nothing.
+    * @param aWatchdogType - type of watchdog to use.
+    */
+    void ResetWatchdog( TDiagEngineWatchdogTypes aWatchdogType );
+
+    /**
+    * Reset watchdog to a specific value.
+    * If watchdog was suspended, it will resume. 
+    * If watchdog was not running, this does nothing.
+    * @param aTimer value - watchdog timer value. 
+    */
+    void ResetWatchdog( TTimeIntervalMicroSeconds32 aWatchdogValue );
+
+    /**
+    * Stop watchdog temporarily.
+    */
+    void StopWatchdogTemporarily();
+
+public:     // APIs to be implemented by derived class
+    /**
+    * Execute plan entry. To cancel request, call Cancel()
+    */
+    virtual void ExecuteL() = 0;
+
+    /**
+    * Suspend execution.
+    */
+    virtual void SuspendL() = 0;
+
+    /**
+    * Resume suspended execution.
+    */
+    virtual void ResumeL() = 0;
+
+public:    // From MDiagExecPlanEntry
+    /**
+    * Plugin associated with the entry
+    *   @see MDiagExecPlanEntry::Plugin
+    */
+    const MDiagPlugin& Plugin() const;
+
+    /**
+    * Returns whether item is being executed to satisfy dependency or not.
+    *   @see MDiagExecPlanEntry::AsDepndent
+    */
+    TBool AsDependency() const;
+
+    /**
+    * Item State
+    *   @see MDiagExecPlanEntry::State
+    */
+    TState State() const;
+
+
+protected:  // API for derived class
+    /**
+    * C++ Constructor
+    *   This is protected since it should not be created directly.
+    *   Use one of the derived class version.
+    *
+    *   @param aEngine - Reference to the engine.
+    *   @param aEngineConifg - Reference to the engine configuration.
+    *   @param aPlugin - Reference to the plug-in.
+    *   @param aAsDependent - Whether it is being executed as dependent test.
+    *   @param aType - Type of entry. @see CDiagExecPlanEntryImpl::TType
+    */
+    CDiagExecPlanEntryImpl( MDiagEngineCommon& aEngine,
+                            const TDiagEngineConfig& aEngineConfig,
+                            MDiagExecPlanEntryImplObserver& aObserver,
+                            MDiagPlugin& aPlugin,
+                            TBool aAsDependency,
+                            TType aType );
+
+    /**
+    * Get Engine reference
+    * 
+    * @return reference to engine.
+    */
+    MDiagEngineCommon& Engine();
+
+    /**
+    * Get Engine configuration reference
+    * 
+    * @return Reference to engine configuration.
+    */
+    const TDiagEngineConfig& EngineConfig() const;
+
+    /**
+    * Get observer.
+    * 
+    * @return Reference to plan entry observer.
+    */
+    MDiagExecPlanEntryImplObserver& Observer();
+
+    /**
+    * Change current state to a new state.  
+    *   @param aState - new state to set to.
+    */
+    void ChangeStateL( TState aState );
+
+protected:  // API to be implemented by derived class.
+    /**
+    * Handle cancel execution by client.
+    *
+    * @param aCancelMode - Cancellation mode.
+    */
+    virtual void DoStopExecutionByClientL( MDiagEngineCommon::TCancelMode aCancelMode ) = 0;
+
+    /**
+    * Watchdog timeout stop.
+    */
+    virtual void StopExecutionByWatchdogL() = 0;
+
+
+private:    // private methods
+    /**
+    * Watchdog timer timeout handler.
+    * @param aPtr - pointer to *this* object.
+    */
+    static TInt WatchdogTimerExpiredL( TAny* aPtr );
+
+private:    // Private data
+    /**
+    * Engine
+    */
+    MDiagEngineCommon& iEngine;
+
+    /**
+    * Engine Configuration.
+    */
+    const TDiagEngineConfig& iEngineConfig;
+
+    /**
+    * Observer
+    */
+    MDiagExecPlanEntryImplObserver& iObserver;
+
+    /**
+    * Plug-in
+    */
+    MDiagPlugin& iPlugin;
+
+    /**
+    * Indicates whether it is being executed as dependent test.
+    */
+    TBool iAsDependency;
+
+    /**
+    * Indicates whether execution is stopped by client.
+    */
+    TBool iStoppedByClient;
+
+    /**
+    * Current item state
+    *   @see MDiagExecPlanEntry::TState
+    */
+    TState iState;
+
+    /**
+    * Current item type
+    *   @see CDiagExecPlanEntryImpl::TType
+    */
+    TType iType;
+    
+    /**
+    * Watchdog timer value. It is a microsecond value to be used with 
+    * watchdog timer.
+    */
+    TTimeIntervalMicroSeconds32 iWatchdogValue;
+
+    /**
+    * Watchdog timer
+    * Owership: this.
+    */
+    CPeriodic* iWatchdogTimer;
+
+    };
+
+#endif // DIAGEXECPLANENTRY_H
+
+// End of File
+