diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackScriptEng.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackScriptEng.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,132 @@ +// Copyright (c) 1997-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: +// This file contains the classes and enumerations necessary to drive the scripting engine. The +// allowed scripting commands, events, and actual script line structure are defined in this file. +// Note that the actual scripts are NOT defined in this file. +// See ScriptLanguage.htm for more information. +// Scripting Engine to execute command scripts +// +// + +/** + @file + @internalComponent +*/ + +#ifndef __SCRIPTENG_H__ +#define __SCRIPTENG_H__ + +#include "Te_LoopBackSLOGGER.H" +#include "Te_LoopBackATBASE.H" +#include "Te_LoopBackATIO.H" + +// Valid commands for the ETel Regression Test scripting "Language" +enum TScriptCommands + { + ETxString, //< Transmit ASCII String; CR/LF automatically appended + ETxStringWithoutCrLf, //< Transmit ASCII String; No CR or LF. + ETxStringOK, //< Transmit the string "OK" including CR/LF. + ERxString, //< Expect String which the script engine will wait for + EIfRxStringJmp, //< A Conditional Branch, if the specified string is received, it branches. + EIfRxStringRelativeJmp, //< A Conditional Branch, if the specified string is received, it branches. + EWait, //< Delay specified time before continuing script; care must be used because of timing considerations + //< NOTE: failures can occur if an EWait command is used before ERxEvent events. + //< NOTE: safest place to use an EWait command is between ETxEvent events. + EExecuteSpecial, //< Asks script engine to call an algorithm specific to test scenario + EComplete, //< Informs script engine the script is complete + ESignalMark, //< Sets signal(s) + ESignalSpace //< Clears signal(s) + }; + +// The completion event codes here drive when the script engine can proceed to the next line +// of the script. Note that these values are bit flags and thus can be combined. For example, +// the combination of ETxEvent | EFailIfTimeOut means that if a tx event complete is received go +// to the next step in the script. If a time-out occurs, fail the script. +enum TCompletionEvent + { + ETxEvent= 0x1, //< Progress to next script element if tx complete event is received + ERxEvent= 0x2, //< Progress to next script element if rx complete event is received + ETimeOutEvent= 0x4, //< Progress to next script element if time-out event occurs + EFailIfTimeOut= 0x8, //< If a time-out event occurs, fail the script + EKeepExpectStrings =0x10 //< Allow expect string to be persistent even after it has been received + }; + +// The TScript structure represents one line of a script. Note that the iParam member has +// specific meaning depending on the command. +struct TScript + { + TInt iCommand; //< Command + TText8* iText; //< Text related to Command + TInt iParam; //< Parameter related to Command, often a time-out. + //< NOTE: for an EWait, an iParam value of -1 is only applicable to specific test scripts. + //< This indicates the timeout is specified by the delay parameter entered by the operator + //< or a test specific default value. + TInt iCompletionEvent; //< Flags to indicate the conditions for moving onto the + //< next state. + }; + +/** + * The CATScriptEng base derives from the CATBase. In turn, the emulator side of the specific + * tests all derive from CATScriptEng. This class drives the scripting engine for the Modem + * emulator. It is used to implement the ETel Regression Test Harness "Language". + */ +class CRestartSignal; +class CATScriptEng : public CATBase + { +public: + // Called in StartScriptL in the Responder Thread. Implemented by each specific test case. + virtual TInt Start()=0; + + // Called in ProcessScriptLine in the Responder Thread when an EExecuteSpecial + // command is in the script. Implemented by each specific test case. + + virtual void SpecificAlgorithmL(TInt aParam)=0; + // Called in the Responder Thread for various reasons. It is called when the script + // completes either by running to completion, timeout (if timeouts + // force a failure), or because of another error. + + virtual void Complete(TInt aError)=0; + void StartRestart(TRequestStatus** aStatus); + void Restart(); + TInt iReturnValue; +protected: + CATScriptEng(); + CATScriptEng(TInt aVarDelay); + ~CATScriptEng(); + void ConstructL(); + TInt StartScript(const TScript* aScript); + // virtual function inherited from CATBase + virtual void EventSignal(TEventSource aEventSource); + +private: + void ProcessMultipleScriptLines(); + TInt ProcessScriptLine(); + + const TScript* iStartScriptPnt; //< Pointer to the beginning of the script in memory. + const TScript* iScriptPnt; //< Pointer into the current script being executed used + //< to increment through script. + TScript iCurrentScriptLine; //< A copy of the current script line be processed. + //< Used by line processing code. + TInt iDelay; //< Variable delay value to be used as timeout by script + //< processing engine when iParam value is -1 in a TScript + //< script whose iCommand is an EWait. +// Variables to handle conditional Jump + CCommChatString* iJmpChatString; //< Used to compare incoming string vs. expected for + //< conditional jump + TUint iJmpAbsolute; //< Used to store the target absolute script line number + //< for conditional jumping + CRestartSignal* iRestartSignal; //< Pointer to the Restart Signal class. + }; + +#endif