blob: 71b78c0b4a668543b5376dee91a6f48b2df4a50d [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2019 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Module: EPTF_CLL_ExecCtrl_PhaseFunctions
//
// Purpose:
// This module contains functions for EPTF_CLL_ExecCtrl phase
// handling implementation.
//
// Module depends on:
// <EPTF_CLL_Common_Definitions>
// <EPTF_CLL_ExecCtrl_Definitions>
// <EPTF_CLL_ExecCtrl_PhaseDefinitions>
// <EPTF_CLL_HashMapStr2Int_Functions>
// <EPTF_CLL_FBQ_Functions>
// <EPTF_CLL_ExecCtrl_LoggingFunctions>
// <EPTF_CLL_ExecCtrl_ScenarioFunctions>
// <EPTF_CLL_Base_Functions>
// <EPTF_CLL_Variable_Functions>
// <EPTF_CLL_LGenBase_PhaseDefinitions>
// <EPTF_CLL_LGenBase_PhaseFunctions>
//
// Module Parameters:
// -
//
// Current Owner:
// Antal Wu-Hen-Chang (EANTWUH)
//
// Last Review Date:
// 2008-11-24
//
// Detailed Comments:
// This module contains functions for EPTF_CLL_ExecCtrl phase
// handling implementation.
//
// Public functions:
// <f_EPTF_ExecCtrl_ScenarioGroup_get_byScIndex>
// <f_EPTF_ExecCtrl_ScenarioGroup_getIdx>
// <f_EPTF_ExecCtrl_registerScenarioGroupPhaseChangedCallback>
// <f_EPTF_ExecCtrl_ScenarioGroup_start>
// <f_EPTF_ExecCtrl_ScenarioGroup_stop>
// <f_EPTF_ExecCtrl_getScenarioGroupInstanceName>
//
///////////////////////////////////////////////////////////////////////////////
module EPTF_CLL_ExecCtrl_PhaseFunctions
{
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_ExecCtrl_Definitions all;
import from EPTF_CLL_ExecCtrl_PhaseDefinitions all;
import from EPTF_CLL_HashMapStr2Int_Functions all;
import from EPTF_CLL_FBQ_Functions all;
import from EPTF_CLL_ExecCtrl_LoggingFunctions all;
import from EPTF_CLL_ExecCtrl_ScenarioFunctions all;
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_Variable_Functions all;
import from EPTF_CLL_LGenBase_PhaseDefinitions all;
import from EPTF_CLL_LGenBase_PhaseFunctions all;
friend module EPTF_CLL_ExecCtrlClient_Functions, EPTF_CLL_ExecCtrl_Functions;
friend module EPTF_CLL_ExecCtrlUIHandler_Functions, EPTF_CLL_ExecCtrl_DSFunctions;
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_Phase_init
//
// Purpose:
// Initilaizes the phase aspect of the EPTF_CLL_ExecCtrl feature
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// Inits the databases and reads in the phase list declarators
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_Phase_init() runs on EPTF_ExecCtrl_CT
{
f_EPTF_FBQ_initFreeBusyQueue(v_ExecCtrl_PhaseListDeclaratorDB.queue);
v_ExecCtrl_PhaseListDeclaratorDB.data :={}
v_ExecCtrl_PhaseListDeclaratorDB.hashRef := f_EPTF_str2int_HashMap_New(c_EPTF_ExecCtrl_PhaseListDeclaratorDB_HashName);
f_EPTF_FBQ_initFreeBusyQueue(v_ExecCtrl_ScenarioGroupInstanceDB.queue);
v_ExecCtrl_ScenarioGroupInstanceDB.data :={}
v_ExecCtrl_ScenarioGroupInstanceDB.hashRef := f_EPTF_str2int_HashMap_New(c_EPTF_ExecCtrl_ScenarioGroupInstanceDB_HashName);
// Storing phase lists
for (var integer i:=0; i<sizeof(v_EPTF_ExecCtrl_PhaseList_Declarators); i:=i+1)
{
if(f_EPTF_ExecCtrl_PhaseList_store(v_EPTF_ExecCtrl_PhaseList_Declarators[i]) == -1)
{
f_EPTF_ExecCtrl_warning
(log2str("ExecCtrl_Phase: Couldn't store phase list: ", v_EPTF_ExecCtrl_PhaseList_Declarators[i], " at declarator index: ", i));
f_EPTF_ExecCtrl_warning
(log2str(("ExecCtrl_Phase: Possible name collision in v_EPTF_ExecCtrl_PhaseList_Declarators")));
}
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_Phase_createScenarioGroups
//
// Purpose:
// Processes the scenario group declarators
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// Reads in the scenario group declaratores and produces the scenario group
// instances that will be stored in the v_ExecCtrl_ScenarioGroups component
// variable.
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_Phase_createScenarioGroups()
runs on EPTF_ExecCtrl_CT
{
for (var integer i:=0; i<sizeof(v_EPTF_ExecCtrl_ScenarioGroup_Declarators); i:=i+1)
{
var EPTF_ExecCtrl_ScenarioGroup_Instance vl_sgInstance;
if (f_EPTF_ExecCtrl_ScenarioGroup_createInstance(v_EPTF_ExecCtrl_ScenarioGroup_Declarators[i], vl_sgInstance))
{
if (f_EPTF_ExecCtrl_ScenarioGroup_storeInstance(vl_sgInstance) == -1)
{
f_EPTF_ExecCtrl_warning
(log2str("ExecCtrl_Phase: Couldn't store scenario instance: ", vl_sgInstance, " at declarator index: ", i, ". A scenario with that name already exist."));
}
}
else
{
f_EPTF_ExecCtrl_error
(log2str(%definitionId&": Couldn't create scenario group instance: ", v_EPTF_ExecCtrl_ScenarioGroup_Declarators[i], " at declarator index: ", i,
" : One or more scenarios in the scenarioNames does not exist."));
}
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_Phase_cleanUp
//
// Purpose:
// Clean up function for the ExecCtrl phase aspect.
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_Phase_cleanUp()
runs on EPTF_ExecCtrl_CT
{
f_EPTF_FBQ_initFreeBusyQueue(v_ExecCtrl_PhaseListDeclaratorDB.queue);
//v_ExecCtrl_PhaseListDeclaratorDB.data :={}
//v_ExecCtrl_PhaseListDeclaratorDB.hashRef := -1;
if (v_ExecCtrl_PhaseListDeclaratorDB.hashRef != -1) {
f_EPTF_str2int_HashMap_Delete(c_EPTF_ExecCtrl_PhaseListDeclaratorDB_HashName);
v_ExecCtrl_PhaseListDeclaratorDB.hashRef := -1;
}
v_ExecCtrl_PhaseListDeclaratorDB := c_ExecCtrl_PhaseListDeclaratorDB_initValue;
f_EPTF_FBQ_initFreeBusyQueue(v_ExecCtrl_ScenarioGroupInstanceDB.queue);
//v_ExecCtrl_ScenarioGroupInstanceDB.data :={}
//v_ExecCtrl_ScenarioGroupInstanceDB.hashRef := -1;
if (v_ExecCtrl_ScenarioGroupInstanceDB.hashRef != -1) {
f_EPTF_str2int_HashMap_Delete(c_EPTF_ExecCtrl_ScenarioGroupInstanceDB_HashName);
v_ExecCtrl_ScenarioGroupInstanceDB.hashRef := -1;
}
v_ExecCtrl_ScenarioGroupInstanceDB := c_ExecCtrl_ScenarioGroupInstanceDB_initValue;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_store
//
// Purpose:
// Stores a phase list declarator in the internal database
// (v_ExecCtrl_PhaseListDeclaratorDB)
//
// Parameters:
// - p_declarator - in <EPTF_LGenBase_PhaseList_Declarator> - phase list
// declarator to be stored
//
// Return Value:
// - integer index of the stored declarator in the database, or -1 in case of
// error
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_store
(
in EPTF_LGenBase_PhaseList_Declarator p_declarator
)
runs on EPTF_ExecCtrl_CT
return integer
{
var integer vl_plIdx := -1;
var integer vl_key := -1;
if (not f_EPTF_str2int_HashMap_Find(v_ExecCtrl_PhaseListDeclaratorDB.hashRef, p_declarator.name, vl_key))
{
vl_plIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_ExecCtrl_PhaseListDeclaratorDB.queue);
v_ExecCtrl_PhaseListDeclaratorDB.data[vl_plIdx] := p_declarator;
f_EPTF_FBQ_moveFromFreeHeadToBusyTail(v_ExecCtrl_PhaseListDeclaratorDB.queue);
f_EPTF_str2int_HashMap_Insert(v_ExecCtrl_PhaseListDeclaratorDB.hashRef, p_declarator.name, vl_plIdx);
}
return vl_plIdx;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_get_byIndex
//
// Purpose:
// Returns a phase list declarator from the internal database by using its index
//
// Parameters:
// - p_idx - in *integer* - index of the phase list in the DB
// - p_declarator - inout <EPTF_LGenBase_PhaseList_Declarator> - the returned
// declarator
//
// Return Value:
// - *boolean*: false in case of error, otherwise true
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_get_byIndex
(
in integer p_idx,
inout EPTF_LGenBase_PhaseList_Declarator p_declarator
)
runs on EPTF_ExecCtrl_CT
return boolean
{
if (p_idx > -1 and p_idx < sizeof(v_ExecCtrl_PhaseListDeclaratorDB.data))
{
p_declarator := v_ExecCtrl_PhaseListDeclaratorDB.data[p_idx];
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_get_byName
//
// Purpose:
// Returns a phase list declarator from the internal database by using its name
//
// Parameters:
// - p_name - in *charstring* - name of the phase list in the DB
// - p_declarator - inout <EPTF_LGenBase_PhaseList_Declarator> - the returned declarator
//
// Return Value:
// - *boolean*: false in case of error, otherwise true
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_get_byName
(
in charstring p_name,
inout EPTF_LGenBase_PhaseList_Declarator p_declarator
)
runs on EPTF_ExecCtrl_CT
return boolean
{
var integer vl_key := -1;
if (f_EPTF_str2int_HashMap_Find(v_ExecCtrl_PhaseListDeclaratorDB.hashRef, p_name, vl_key))
{
if (f_EPTF_ExecCtrl_PhaseList_get_byIndex(vl_key, p_declarator))
{
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_createInstance_byDeclarator
//
// Purpose:
// Returns a phase list instance based on the declarator passed as parameter
//
// Parameters:
// - p_declarator - in <EPTF_LGenBase_PhaseList_Declarator> - name of the phase list in the DB
// - p_instance - inout <EPTF_ExecCtrl_PhaseList_Instance> - the returned instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_createInstance_byDeclarator
(
in EPTF_LGenBase_PhaseList_Declarator p_declarator,
inout EPTF_ExecCtrl_PhaseList_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
{
p_instance := c_EPTF_ExecCtrl_PhaseList_Instance_empty;
p_instance.name := p_declarator.name;
for (var integer i:=0; i<sizeof(p_declarator.phases); i:=i+1)
{
p_instance.phases[i] :=
{
name := p_declarator.phases[i].name,
enabled := p_declarator.phases[i].enabled,
state := IDLE
}
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_createInstance_byName
//
// Purpose:
// Returns a phase list instance by using the name of the declarator
//
// Parameters:
// - p_declarator - in *charstring* - name of the declared phase list
// - p_instance - inout <EPTF_ExecCtrl_PhaseList_Instance> - the returned instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_createInstance_byName
(
in charstring p_name,
inout EPTF_ExecCtrl_PhaseList_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
return boolean
{
var integer vl_key := -1;
if (f_EPTF_str2int_HashMap_Find(v_ExecCtrl_PhaseListDeclaratorDB.hashRef, p_name, vl_key))
{
f_EPTF_ExecCtrl_PhaseList_createInstance_byDeclarator(v_ExecCtrl_PhaseListDeclaratorDB.data[vl_key], p_instance);
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_resetPhaseStates
//
// Purpose:
// Resets the phase states of a phase list instance.
//
// Parameters:
// - p_pl - inout <EPTF_ExecCtrl_PhaseList_Instance> - the modified instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_resetPhaseStates
(
inout EPTF_ExecCtrl_PhaseList_Instance p_pl
)
{
p_pl.actualPhaseIndex := 0;
for (var integer i:=0; i<sizeof(p_pl.phases); i:=i+1)
{
p_pl.phases[i].state := IDLE;
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_setNextState
//
// Purpose:
// Sets the next state of aphase list instance if possible
//
// Parameters:
// - p_pl - inout <EPTF_ExecCtrl_PhaseList_Instance> - the modified instance
//
// Return Value:
// - boolean: false in case of error (e.g. phase list is neither IDLE nor FINISHED)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_setNextState
(
inout EPTF_ExecCtrl_PhaseList_Instance p_pl
)
runs on EPTF_ExecCtrl_CT
return boolean
{
if (p_pl.phases[p_pl.actualPhaseIndex].state == FINISHED or
p_pl.phases[p_pl.actualPhaseIndex].state == IDLE)
{
if (p_pl.actualPhaseIndex < sizeof(p_pl.phases)-1)
{
p_pl.actualPhaseIndex := p_pl.actualPhaseIndex + 1;
}
else
{
p_pl.actualPhaseIndex := 0;
}
p_pl.phases[p_pl.actualPhaseIndex].state := IDLE;
return true;
}
else
{
f_EPTF_ExecCtrl_warning
(log2str("Cannot set next state, current state is still running!"));
return false;
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_isValidPhase
//
// Purpose:
// Returns the index of the given phase name in the phase list
//
// Parameters:
// - p_pl - inout <EPTF_ExecCtrl_PhaseList_Instance> - phase list instance
// - pl_phaseName - in *charstring* - name of the phase
//
// Return Value:
// - integer: -1 in case of error (e.g. phase doesn't exist in the list)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_PhaseList_isValidPhase
(
inout EPTF_ExecCtrl_PhaseList_Instance p_pl,
in charstring pl_phaseName
)
runs on EPTF_ExecCtrl_CT
return integer
{
for (var integer i:=0; i<sizeof(p_pl.phases); i:=i+1)
{
if (p_pl.phases[i].name == pl_phaseName)
{
return i;
}
}
return -1;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_setPhase
//
// Purpose:
// Sets the phase in a phase list instance if possible
//
// Parameters:
// - p_pl - inout <EPTF_ExecCtrl_PhaseList_Instance> - phase list instance
// - pl_phaseName - in *charstring* - name of the phase
//
// Return Value:
// - boolean: false in case of error (e.g. phase list is not IDLE)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_setPhase
(
inout EPTF_ExecCtrl_PhaseList_Instance p_pl,
in charstring p_phaseName
)
runs on EPTF_ExecCtrl_CT
return boolean
{
if (p_pl.phases[p_pl.actualPhaseIndex].state == FINISHED or
p_pl.phases[p_pl.actualPhaseIndex].state == IDLE)
{
var integer vl_phaseIdx := f_EPTF_ExecCtrl_PhaseList_isValidPhase(p_pl, p_phaseName);
if (vl_phaseIdx > -1)
{
p_pl.actualPhaseIndex := vl_phaseIdx;
p_pl.phases[p_pl.actualPhaseIndex].state := IDLE;
return true;
}
}
f_EPTF_ExecCtrl_warning
(log2str("Couldn't set state: ",p_phaseName," for ",p_pl));
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_reset
//
// Purpose:
// Resets the phase phase list and moves it to its first phase
//
// Parameters:
// - p_pl - inout <EPTF_ExecCtrl_PhaseList_Instance> - phase list instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_reset
(
inout EPTF_ExecCtrl_PhaseList_Instance p_pl
)
{
f_EPTF_ExecCtrl_PhaseList_resetPhaseStates(p_pl);
if (sizeof(p_pl.phases)>0)
{
p_pl.actualPhaseIndex := 0;
}
else
{
p_pl.actualPhaseIndex := -1;
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_PhaseList_setStateFromSubPhaseLists
//
// Purpose:
// Sets the phase in a phase list instance if possible
//
// Parameters:
// - p_main - inout <EPTF_ExecCtrl_PhaseList_Instance> - main phase list instance
// - p_subs - inout <EPTF_ExecCtrl_PhaseList_Instance_List> - phase lists which the main phase list is depending on
//
// Return Value:
// - boolean: false in case of error (e.g. the sub phase lists' states are contradictory)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_PhaseList_setStateFromSubPhaseLists
(
inout EPTF_ExecCtrl_PhaseList_Instance p_main,
inout EPTF_ExecCtrl_PhaseList_Instance_List p_subs
)
runs on EPTF_ExecCtrl_CT
return boolean
{
var integer vl_idle := 0;
var integer vl_running := 0;
var integer vl_skipping := 0;
var integer vl_stopping := 0;
var integer vl_finished := 0;
var integer vl_total := sizeof(p_subs);
var integer vl_actPhase := p_main.actualPhaseIndex;
for (var integer i:=0; i<vl_total; i:=i+1)
{
if (p_subs[i].actualPhaseIndex == vl_actPhase)
{
if (p_subs[i].phases[vl_actPhase].state == IDLE)
{
vl_idle := vl_idle + 1;
}
else if (p_subs[i].phases[vl_actPhase].state == RUNNING)
{
vl_running := vl_running + 1;
}
else if (p_subs[i].phases[vl_actPhase].state == SKIPPING)
{
vl_skipping := vl_skipping + 1;
}
else if (p_subs[i].phases[vl_actPhase].state == STOPPING)
{
vl_stopping := vl_stopping + 1;
}
else if (p_subs[i].phases[vl_actPhase].state == FINISHED)
{
vl_finished := vl_finished + 1;
}
}
else
{
f_EPTF_ExecCtrl_warning
(log2str("Phase mismatch in ",p_main," at the ",i," element of ", p_subs));
return false
}
}
if (vl_idle == vl_total)
{
p_main.phases[vl_actPhase].state := IDLE;
}
else if (vl_finished == vl_total)
{
p_main.phases[vl_actPhase].state := FINISHED;
}
else if (vl_stopping > 0)
{
p_main.phases[vl_actPhase].state := STOPPING;
}
else if (vl_running > 0)
{
p_main.phases[vl_actPhase].state := RUNNING;
}
else if (vl_skipping > 0)
{
p_main.phases[vl_actPhase].state := SKIPPING;
}
else
{
f_EPTF_ExecCtrl_warning(log2str("Can't determine phase in ",p_main," from ", p_subs));
f_EPTF_ExecCtrl_debug(log2str("Statistics: "));
f_EPTF_ExecCtrl_debug(log2str("idle: ", vl_idle));
f_EPTF_ExecCtrl_debug(log2str("running: ", vl_running));
f_EPTF_ExecCtrl_debug(log2str("skipping: ", vl_skipping));
f_EPTF_ExecCtrl_debug(log2str("finished: ", vl_finished));
return false;
}
return true;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_isValidExecMode
//
// Purpose:
// Checks whether an execution mode name is valid or not and returns the
// corresponding enumerated value.
//
// Parameters:
// - p_str - in *charstring* - main phase list instance
// - p_exec - out <EPTF_ExecCtrl_ScenarioGroup_ExecMode> - returned enum value
//
// Return Value:
// - boolean: false in case of error (e.g. exec mode name doesn't exist)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_ScenarioGroup_isValidExecMode
(
in charstring p_str,
out EPTF_ExecCtrl_ScenarioGroup_ExecMode p_exec
)
return boolean
{
if (p_str == "AUTOMATIC" or p_str == "automatic")
{
p_exec := AUTOMATIC;
return true;
}
else if (p_str == "MANUAL" or p_str == "manual")
{
p_exec := MANUAL;
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_createInstance
//
// Purpose:
// Creates a scenario group instance based on the given declarator.
//
// Parameters:
// - p_declarator - in <EPTF_ExecCtrl_ScenarioGroup_Declarator> - declarator
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - returned instance
//
// Return Value:
// - boolean: false in case of error (e.g. declarator refers to not existing scenarios or entity groups)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_createInstance
(
in EPTF_ExecCtrl_ScenarioGroup_Declarator p_declarator,
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
return boolean
{
var EPTF_ExecCtrl_PhaseList_Instance p_pl := c_EPTF_ExecCtrl_PhaseList_Instance_empty;
if (f_EPTF_ExecCtrl_PhaseList_createInstance_byName(p_declarator.phaseListName, p_pl))
{
p_instance := c_EPTF_ExecCtrl_ScenarioGroup_Instance_empty;
p_instance.name := p_declarator.name;
p_instance.execMode := p_declarator.execMode;
p_instance.groupPhaseList := p_pl;
for (var integer i:=0; i<sizeof(p_declarator.scenarioNames); i:=i+1)
{
var integer vl_scIdx := f_EPTF_ExecCtrl_getScenarioIdxByInstanceName(p_declarator.scenarioNames[i]);
if (vl_scIdx==-1) {
f_EPTF_ExecCtrl_warning(%definitionId&": Scenario "&p_declarator.scenarioNames[i]&" not found in scenario group "&p_declarator.name);
return false; // createInstance not successful
}
var integer vl_eGroupIdx := -1;
var EPTF_IntegerList vl_lgens := {};
var EPTF_ExecCtrl_PhaseList_Instance_List vl_lgenPhaseList := {};
// this is done in f_EPTF_ExecCtrl_ScenarioGroup_deployInstance
// // TODO: FIXME inside this if :-)
// if (vl_scIdx != -1)
// {
// vl_eGroupIdx := v_ExecCtrl_scenarios[vl_scIdx].eGroupIdx;
// if (vl_eGroupIdx != -1)
// {
// for (var integer j:=0; j<sizeof(v_ExecCtrl_entityGroups[vl_eGroupIdx].lgenList); j:=j+1)
// {
// vl_lgens[sizeof(vl_lgens)] := v_ExecCtrl_entityGroups[vl_eGroupIdx].lgenList[j].lgenIdx;
// vl_lgenPhaseList[sizeof(vl_lgenPhaseList)] := p_pl;
// }
// if (sizeof(v_ExecCtrl_entityGroups[vl_eGroupIdx].lgenList)==0)
// {
// action("There are no LGens for ", p_declarator.scenarioNames[i]);
// action(v_ExecCtrl_entityGroups[vl_eGroupIdx]);
// }
// }
// else
// {
// action("Entity Group not found for ", p_declarator.scenarioNames[i]);
// }
// }
// else
// {
// action("Scenario instance not found for ", p_declarator.scenarioNames[i]);
// }
p_instance.scenarios[i] :=
{
name := p_declarator.scenarioNames[i],
idx := vl_scIdx,
lgenIndexes := vl_lgens,
lgenPhaseLists := vl_lgenPhaseList
};
p_instance.scenarioPhaseLists[i] := p_pl;
}
return true
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_Phase_deployScenarioGroups
//
// Purpose:
// Deploys scenario groups to LGens
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// Reads in the scenario group instances and deploys them on LGens.
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_Phase_deployScenarioGroups()
runs on EPTF_ExecCtrl_CT
{
for (var integer i:=0; i<sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data); i:=i+1)
{
var EPTF_ExecCtrl_ScenarioGroup_Instance vl_sgInstance;
if (not f_EPTF_ExecCtrl_ScenarioGroup_deployInstance(v_ExecCtrl_ScenarioGroupInstanceDB.data[i]))
{
f_EPTF_ExecCtrl_warning
(log2str("ExecCtrl_Phase: Couldn't deploy scenario instance to LGens: ", v_ExecCtrl_ScenarioGroupInstanceDB.data[i], " with instance index: ", i));
}
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_deployInstance
//
// Purpose:
// Deploys a scenario group instance to LGens.
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - returned instance
//
// Return Value:
// - boolean: false in case of error (e.g. declarator refers to not existing scenarios or entity groups)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_deployInstance
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
return boolean
{
for (var integer i:=0; i<sizeof(p_instance.scenarios); i:=i+1)
{
var integer vl_scIdx := p_instance.scenarios[i].idx;
var integer vl_eGroupIdx := -1;
var EPTF_IntegerList vl_lgens := {};
var EPTF_ExecCtrl_PhaseList_Instance_List vl_lgenPhaseList := {};
// TODO: FIXME inside this if :-)
if (vl_scIdx != -1)
{
vl_eGroupIdx := v_ExecCtrl_scenarios[vl_scIdx].eGroupIdx;
if (vl_eGroupIdx != -1)
{
for (var integer j:=0; j<sizeof(v_ExecCtrl_entityGroups[vl_eGroupIdx].lgenList); j:=j+1)
{
vl_lgens[sizeof(vl_lgens)] := v_ExecCtrl_entityGroups[vl_eGroupIdx].lgenList[j].lgenIdx;
vl_lgenPhaseList[sizeof(vl_lgenPhaseList)] := p_instance.groupPhaseList;
}
if (sizeof(v_ExecCtrl_entityGroups[vl_eGroupIdx].lgenList)==0)
{
f_EPTF_ExecCtrl_debug(log2str("There are no LGens for ", p_instance.scenarios[i].name));
f_EPTF_ExecCtrl_debug(log2str(v_ExecCtrl_entityGroups[vl_eGroupIdx]));
}
}
else
{
f_EPTF_ExecCtrl_debug(log2str("Entity Group not found for ", p_instance.scenarios[i].name));
}
}
else
{
f_EPTF_ExecCtrl_debug(log2str("Scenario instance not found for ", p_instance.scenarios[i].name));
}
p_instance.scenarios[i] :=
{
name := p_instance.scenarios[i].name,
idx := vl_scIdx,
lgenIndexes := vl_lgens,
lgenPhaseLists := vl_lgenPhaseList
};
}
return true
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_storeInstance
//
// Purpose:
// Stores the given scenario group instance in the component variable database.
//
// Parameters:
// - p_sg_inst - in <EPTF_ExecCtrl_ScenarioGroup_Instance> - scenario group instance
//
// Return Value:
// - integer: index of the stored instance in the database, -1 in case of an
// error (e.g. an instance with this scenario group name is already stored)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_storeInstance
(
in EPTF_ExecCtrl_ScenarioGroup_Instance p_sg_inst
)
runs on EPTF_ExecCtrl_CT
return integer
{
var integer vl_key := -1;
var integer vl_sgIdx := -1;
if (not f_EPTF_str2int_HashMap_Find(v_ExecCtrl_ScenarioGroupInstanceDB.hashRef, p_sg_inst.name, vl_key))
{
vl_sgIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_ExecCtrl_ScenarioGroupInstanceDB.queue);
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx] := p_sg_inst;
f_EPTF_ExecCtrl_ScenarioGroup_registerInstanceId2ScenariosDB(vl_sgIdx);
f_EPTF_FBQ_moveFromFreeHeadToBusyTail(v_ExecCtrl_ScenarioGroupInstanceDB.queue);
f_EPTF_str2int_HashMap_Insert(v_ExecCtrl_ScenarioGroupInstanceDB.hashRef, p_sg_inst.name, vl_sgIdx);
}
return vl_sgIdx;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_registerInstanceId2ScenariosDB
//
// Purpose:
// Updates the scenario instance DB with the scenario group index to which
// the scenario is added.
//
// Parameters:
// - pl_sgIdx - in integer - scenario group instance idx
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_registerInstanceId2ScenariosDB(in integer pl_sgIdx) runs on EPTF_ExecCtrl_CT {
for(var integer sc:=0; sc<sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_sgIdx].scenarios); sc:=sc+1) {
var integer vl_scIdx := v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_sgIdx].scenarios[sc].idx;
v_ExecCtrl_scenarios[vl_scIdx].scGrpIdx := pl_sgIdx;
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_get_byScIndex
//
// Purpose:
// Returns a scenario group instance idx from the database
// to which the scenario with instance idx is added
//
// Parameters:
// - p_scIdx - in *integer* - scenario instance index
//
// Return Value:
// - integer: the scenario group instance index (-1 if not found)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
public function f_EPTF_ExecCtrl_ScenarioGroup_get_byScIndex
(
in integer p_scIdx
)
runs on EPTF_ExecCtrl_CT
return integer
{
if (p_scIdx < 0 or p_scIdx >= sizeof(v_ExecCtrl_scenarios))
{
return -1;
}
return v_ExecCtrl_scenarios[p_scIdx].scGrpIdx;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_get_byIndex
//
// Purpose:
// Returns a scenario group instance from the database using its index
//
// Parameters:
// - p_idx - in *integer* - scenario group instance index in the database
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the
// returned instance
//
// Return Value:
// - boolean: false in case of an error (e.g. index is not valid)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_get_byIndex
(
in integer p_idx,
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
return boolean
{
if (p_idx > -1 and p_idx < sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data))
{
p_instance := v_ExecCtrl_ScenarioGroupInstanceDB.data[p_idx];
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_get_byName
//
// Purpose:
// Returns a scenario group instance from the database using its name
//
// Parameters:
// - p_name - in *charstring* - scenario group instance name in the database
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the
// returned instance
//
// Return Value:
// - boolean: false in case of an error (e.g. name is not valid)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_get_byName
(
in charstring p_name,
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
return boolean
{
var integer vl_key := -1;
if (f_EPTF_str2int_HashMap_Find(v_ExecCtrl_ScenarioGroupInstanceDB.hashRef, p_name, vl_key))
{
if (f_EPTF_ExecCtrl_ScenarioGroup_get_byIndex(vl_key, p_instance))
{
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_getIdx
//
// Purpose:
// Returns the index of a scenario group instance in the database using its name
//
// Parameters:
// - p_name - in *charstring* - scenario group instance name in the database
//
// Return Value:
// - integer: -1 in case of an error (e.g. name is not valid)
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
public function f_EPTF_ExecCtrl_ScenarioGroup_getIdx
(
in charstring p_name
)
runs on EPTF_ExecCtrl_CT
return integer
{
var integer vl_key := -1;
if (not f_EPTF_str2int_HashMap_Find(v_ExecCtrl_ScenarioGroupInstanceDB.hashRef, p_name, vl_key)) {
return -1;
};
return vl_key;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_resetScenarios
//
// Purpose:
// Resets the scenarios of the scenario group
//
// Parameters:
// - p_instance - in <EPTF_ExecCtrl_ScenarioGroup_Instance> - the modified scenario group instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_resetScenarios
(
in EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
) runs on EPTF_ExecCtrl_CT
{
for(var integer i:=0; i<sizeof(p_instance.scenarios); i:=i+1) {
f_EPTF_ExecCtrl_resetScenarioOnLGens_private(p_instance.scenarios[i].idx);
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_resetPhaseStates
//
// Purpose:
// Resets the phase states of the phase list instance of the scenario group
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the modified scenario group instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_resetPhaseStates
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
) runs on EPTF_ExecCtrl_CT
{
f_EPTF_ExecCtrl_PhaseList_resetPhaseStates(p_instance.groupPhaseList);
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
f_EPTF_ExecCtrl_PhaseList_resetPhaseStates(p_instance.scenarioPhaseLists[i]);
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
f_EPTF_ExecCtrl_PhaseList_resetPhaseStates(p_instance.scenarios[i].lgenPhaseLists[j]);
}
}
// call phaseChangedCallBacks:
f_EPTF_ExecCtrl_callScenarioGroupPhaseChangedCallbacks(p_instance.name,p_instance.groupPhaseList.actualPhaseIndex);
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_setPhase
//
// Purpose:
// Sets the actual phase for a scenario group instance (affects the phase list instances
// of the scenario group instance)
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the modified scenario group instance
// - p_phaseName - in *charstring* - the name of the phase to be set
//
// Return Value:
// - boolean: false in case of error
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_ScenarioGroup_setPhase
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance,
in charstring p_phaseName
)
runs on EPTF_ExecCtrl_CT
return boolean
{
if (f_EPTF_ExecCtrl_PhaseList_setPhase(p_instance.groupPhaseList, p_phaseName))
{
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
if(not f_EPTF_ExecCtrl_PhaseList_setPhase(p_instance.scenarioPhaseLists[i], p_phaseName)) {/*cannot happen*/};
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
if(not f_EPTF_ExecCtrl_PhaseList_setPhase(p_instance.scenarios[i].lgenPhaseLists[j], p_phaseName)) {/*cannot happen*/};
}
}
// call phaseChangedCallBacks:
f_EPTF_ExecCtrl_callScenarioGroupPhaseChangedCallbacks(p_instance.name,p_instance.groupPhaseList.actualPhaseIndex);
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_resetPhaseLists
//
// Purpose:
// Resets the phase states of the phase list instance of the scenario group
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the modified scenario group instance
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_resetPhaseLists
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
{
f_EPTF_ExecCtrl_PhaseList_reset(p_instance.groupPhaseList);
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
f_EPTF_ExecCtrl_PhaseList_reset(p_instance.scenarioPhaseLists[i]);
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
f_EPTF_ExecCtrl_PhaseList_reset(p_instance.scenarios[i].lgenPhaseLists[j]);
}
}
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_registerScenarioGroupPhaseChangedCallback
//
// Purpose:
// Register a scenarioGroup phaseChange callback function, that is called when the phase of the scenarioGroup changes
//
// Parameters:
// - pl_scenarioStateChangedCallback - *in* <EPTF_ExecCtrl_ScenarioStateChangedCallbackFn> - reference to the callback function
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
//
//
///////////////////////////////////////////////////////////
public function f_EPTF_ExecCtrl_registerScenarioGroupPhaseChangedCallback(in EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFn pl_scenarioGroupPhaseChangedCallback) runs on EPTF_ExecCtrl_CT {
v_EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFns[sizeof(v_EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFns)] := pl_scenarioGroupPhaseChangedCallback;
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_callScenarioGroupPhaseChangedCallbacks
//
// Purpose:
// Calls all scenarioGroupPhaseChange callback functions
//
// Parameters:
// - pl_sgName - *in charstring* - name of the scenario group
// - pl_actualPhaseIdx - *in integer* - index of the actual phase of the scenarioGroup
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
//
//
///////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_callScenarioGroupPhaseChangedCallbacks(in charstring pl_sgName, in integer pl_actualPhaseIdx) runs on EPTF_ExecCtrl_CT {
//var integer vl_sgIdx := f_EPTF_ExecCtrl_ScenarioGroup_getIdx(pl_sgName);
for(var integer i:=0; i<sizeof(v_EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFns);i:=i+1) {
if(c_EPTF_Common_debugSwitch) {
f_EPTF_ExecCtrl_debug(log2str("ExecCtrl: scenarioGroupPhaseChangedCallback: ", v_EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFns[i], " called"));
f_EPTF_ExecCtrl_debug(log2str("Args: pl_sgName: ", pl_sgName, " pl_actualPhaseIdx: ",pl_actualPhaseIdx))
}
v_EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFns[i].apply(pl_sgName,pl_actualPhaseIdx);
if(c_EPTF_Common_debugSwitch) {
f_EPTF_ExecCtrl_debug(log2str("ExecCtrl: scenarioGroupPhaseChangedCallback: ", v_EPTF_ExecCtrl_ScenarioGroupPhaseChangedCallbackFns[i], " done"));
}
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_startActualPhase
//
// Purpose:
// Starts the actual phase of the given scenario group
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the scenario group instance to be started
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_startActualPhase
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_sgIdx := f_EPTF_ExecCtrl_ScenarioGroup_getIdx(p_instance.name);
var integer vl_phaseIdx := p_instance.groupPhaseList.actualPhaseIndex;
if (p_instance.groupPhaseList.phases[vl_phaseIdx].state == IDLE)
{
var EPTF_ExecCtrl_Phase_States vl_groupState := RUNNING;
if (not p_instance.groupPhaseList.phases[vl_phaseIdx].enabled) { vl_groupState := SKIPPING }
p_instance.groupPhaseList.phases[vl_phaseIdx].state := vl_groupState;
f_EPTF_ExecCtrl_debug
(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phaseIdx].name&" starting."));
f_EPTF_ExecCtrl_debug(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phaseIdx].name&" starting."));
// for each scenario
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
var EPTF_ExecCtrl_Phase_States vl_scenState := vl_groupState;
if (not p_instance.scenarioPhaseLists[i].phases[vl_phaseIdx].enabled) { vl_scenState := SKIPPING }
p_instance.scenarioPhaseLists[i].phases[vl_phaseIdx].state := vl_scenState;
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
p_instance.scenarios[i].lgenPhaseLists[j].phases[vl_phaseIdx].state := vl_scenState;
var integer vl_eGrpIdx := v_ExecCtrl_scenarios[p_instance.scenarios[i].idx].eGroupIdx;
var integer vl_lgenIdx := p_instance.scenarios[i].lgenIndexes[j];
var integer vl_lgenIdxInEGrp := f_EPTF_ExecCtrl_getLGenIdxInEGrpForLGenAndEgrp(vl_lgenIdx,vl_eGrpIdx);
if (v_ExecCtrl_entityGroups[vl_eGrpIdx].lgenList[vl_lgenIdxInEGrp].eCount == 0) {
continue; // do not send packet to LGen if there is no entity on the LGen
}
f_EPTF_ExecCtrl_sendPhaseStartReq
(EPTF_ExecCtrl_PhaseStartReq:
{
phaseName := p_instance.groupPhaseList.phases[vl_phaseIdx].name,
entityGroupName := v_ExecCtrl_entityGroups[vl_eGrpIdx].name,
scenarioInstanceName := f_EPTF_ExecCtrl_getScenarioName(p_instance.scenarios[i].idx),
state := vl_scenState,
msgID :=
{
vl_sgIdx,
i,
j,
vl_phaseIdx
}
},
p_instance.scenarios[i].lgenIndexes[j]
);
}
}
}
else
{
f_EPTF_ExecCtrl_warning
(log2str("Actual phase is not idle, cannot start: ", p_instance.groupPhaseList));
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_stopActualPhase
//
// Purpose:
// Stops the actual phase of the given scenario group
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the scenario group instance to be stopped
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_stopActualPhase
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_sgIdx := f_EPTF_ExecCtrl_ScenarioGroup_getIdx(p_instance.name);
var integer vl_phaseIdx := p_instance.groupPhaseList.actualPhaseIndex;
if (p_instance.groupPhaseList.phases[vl_phaseIdx].state == RUNNING or
p_instance.groupPhaseList.phases[vl_phaseIdx].state == SKIPPING
)
{
f_EPTF_ExecCtrl_debug(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phaseIdx].name&" stopping."));
p_instance.groupPhaseList.phases[vl_phaseIdx].state := STOPPING;
// for each scenario
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
p_instance.scenarioPhaseLists[i].phases[vl_phaseIdx].state := STOPPING;
var integer vl_eGrpIdx := v_ExecCtrl_scenarios[p_instance.scenarios[i].idx].eGroupIdx;
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
var integer vl_lgenIdx := p_instance.scenarios[i].lgenIndexes[j];
var integer vl_lgenIdxInEGrp := f_EPTF_ExecCtrl_getLGenIdxInEGrpForLGenAndEgrp(vl_lgenIdx,vl_eGrpIdx);
if (v_ExecCtrl_entityGroups[vl_eGrpIdx].lgenList[vl_lgenIdxInEGrp].eCount == 0) {
continue; // do not send packet to LGen if there is no entity on the LGen
}
p_instance.scenarios[i].lgenPhaseLists[j].phases[vl_phaseIdx].state := STOPPING;
f_EPTF_ExecCtrl_sendPhaseStopReq
(EPTF_ExecCtrl_PhaseStopReq:
{
phaseName := p_instance.groupPhaseList.phases[vl_phaseIdx].name,
entityGroupName := v_ExecCtrl_entityGroups[vl_eGrpIdx].name,
scenarioInstanceName := f_EPTF_ExecCtrl_getScenarioName(p_instance.scenarios[i].idx),
state := STOPPING,
msgID :=
{
vl_sgIdx,
i,
j,
vl_phaseIdx
}
},
p_instance.scenarios[i].lgenIndexes[j]
);
}
}
}
else
{
action
(log2str("Actual phase is not running/skipping, cannot stop: ", p_instance.groupPhaseList));
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_stopExecutionForSCGrp
//
// Purpose:
// Stops the actual phase and the test for the given scenario group
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the scenario group instance to be stopped
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// The current phase is stopped (state is set to IDLE)
// and the next phase will not be started.
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_stopExecutionForSCGrp
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_sgIdx := f_EPTF_ExecCtrl_ScenarioGroup_getIdx(p_instance.name);
var integer vl_phaseIdx := p_instance.groupPhaseList.actualPhaseIndex;
if (p_instance.groupPhaseList.phases[vl_phaseIdx].state != IDLE)
{
f_EPTF_ExecCtrl_debug
(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phaseIdx].name&" stopping test."));
p_instance.groupPhaseList.phases[vl_phaseIdx].state := IDLE;
// for each scenario
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
p_instance.scenarioPhaseLists[i].phases[vl_phaseIdx].state := IDLE;
var integer vl_eGrpIdx := v_ExecCtrl_scenarios[p_instance.scenarios[i].idx].eGroupIdx;
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
var integer vl_lgenIdx := p_instance.scenarios[i].lgenIndexes[j];
var integer vl_lgenIdxInEGrp := f_EPTF_ExecCtrl_getLGenIdxInEGrpForLGenAndEgrp(vl_lgenIdx,vl_eGrpIdx);
if (v_ExecCtrl_entityGroups[vl_eGrpIdx].lgenList[vl_lgenIdxInEGrp].eCount == 0) {
continue; // do not send packet to LGen if there is no entity on the LGen
}
p_instance.scenarios[i].lgenPhaseLists[j].phases[vl_phaseIdx].state := IDLE;
f_EPTF_ExecCtrl_sendPhaseStopTestReq
(EPTF_ExecCtrl_PhaseStopTestReq:
{
phaseName := p_instance.groupPhaseList.phases[vl_phaseIdx].name,
entityGroupName := v_ExecCtrl_entityGroups[vl_eGrpIdx].name,
scenarioInstanceName := f_EPTF_ExecCtrl_getScenarioName(p_instance.scenarios[i].idx),
state := IDLE,
msgID :=
{
vl_sgIdx,
i,
j,
vl_phaseIdx
}
},
p_instance.scenarios[i].lgenIndexes[j]
);
}
}
}
else
{
action
(log2str("Actual phase is not running/skipping, cannot stop: ", p_instance.groupPhaseList));
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_setNextPhase
//
// Purpose:
// Sets the next phase of the given scenario group
//
// Parameters:
// - p_instance - inout <EPTF_ExecCtrl_ScenarioGroup_Instance> - the scenario group instance to be modified
//
// Return Value:
// - boolean: false in case of error
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_ScenarioGroup_setNextPhase
(
inout EPTF_ExecCtrl_ScenarioGroup_Instance p_instance
)
runs on EPTF_ExecCtrl_CT
return boolean
{
var boolean l_ret := true;
if (f_EPTF_ExecCtrl_PhaseList_setNextState(p_instance.groupPhaseList))
{
for (var integer i:=0; i<sizeof(p_instance.scenarioPhaseLists); i:=i+1)
{
if (not f_EPTF_ExecCtrl_PhaseList_setNextState(p_instance.scenarioPhaseLists[i]))
{
f_EPTF_ExecCtrl_warning(log2str("Couldn't set next state for scenario", p_instance.scenarioPhaseLists[i], " at ",i));
l_ret := false;
}
for (var integer j:=0; j<sizeof(p_instance.scenarios[i].lgenPhaseLists); j:=j+1)
{
if (not f_EPTF_ExecCtrl_PhaseList_setNextState(p_instance.scenarios[i].lgenPhaseLists[j]))
{
f_EPTF_ExecCtrl_warning
(log2str("Couldn't set next state for lgen", p_instance.scenarios[i].lgenPhaseLists[j], " at ",i,",",j));
l_ret := false;
}
}
}
}
// call phaseChangedCallBacks:
f_EPTF_ExecCtrl_callScenarioGroupPhaseChangedCallbacks(p_instance.name,p_instance.groupPhaseList.actualPhaseIndex);
return l_ret;
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_start
//
// Purpose:
// Starts the scenario group
//
// Parameters:
// - pl_scenarioGroupIdx - in integer - the scenario group instance index to be started
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
public function f_EPTF_ExecCtrl_ScenarioGroup_start
(
in integer pl_scenarioGroupIdx
)
runs on EPTF_ExecCtrl_CT
{
f_EPTF_ExecCtrl_ScenarioGroup_resetScenarios(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]);
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.phases[v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.actualPhaseIndex].state == IDLE)
{
f_EPTF_ExecCtrl_ScenarioGroup_startActualPhase(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]);
}
else
{
f_EPTF_ExecCtrl_warning
(log2str("Cannot start scenario group, because it is already running:", v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]));
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_stop
//
// Purpose:
// Stops the actual phase in the scenario group
//
// Parameters:
// - pl_scenarioGroupIdx - in integer - the scenario group instance index to be stopped
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
public function f_EPTF_ExecCtrl_ScenarioGroup_stop
(
in integer pl_scenarioGroupIdx
)
runs on EPTF_ExecCtrl_CT
{
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.phases[v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.actualPhaseIndex].state == RUNNING)
{
f_EPTF_ExecCtrl_ScenarioGroup_stopActualPhase(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]);
}
else
{
action
(log2str("Cannot stop scenario group, because it is not running:", v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]));
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_stopExecution
//
// Purpose:
// Stops the scenario group execution
//
// Parameters:
// - pl_scenarioGroupIdx - in integer - the scenario group instance index to be stopped
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_ScenarioGroup_stopExecution
(
in integer pl_scenarioGroupIdx
)
runs on EPTF_ExecCtrl_CT
{
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.phases[v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.actualPhaseIndex].state != IDLE)
{
f_EPTF_ExecCtrl_ScenarioGroup_stopExecutionForSCGrp(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]);
}
else
{
action
(log2str("Cannot stop scenario group, because it is already IDLE:", v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]));
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_ScenarioGroup_reset
//
// Purpose:
// Stops the scenario group
//
// Parameters:
// - pl_scenarioGroupIdx - in integer - the scenario group instance index to be reset
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend function f_EPTF_ExecCtrl_ScenarioGroup_reset
(
in integer pl_scenarioGroupIdx
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_sgIdx := f_EPTF_ExecCtrl_ScenarioGroup_getIdx(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].name);
var integer vl_phaseIdx := v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.actualPhaseIndex;
// No check, reset immediately
f_EPTF_ExecCtrl_debug
(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phaseIdx].name&" reset."));
f_EPTF_ExecCtrl_debug(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phaseIdx].name&" reset."));
f_EPTF_ExecCtrl_ScenarioGroup_resetPhaseLists(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx]);
// call phaseChangedCallBacks:
f_EPTF_ExecCtrl_callScenarioGroupPhaseChangedCallbacks(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].name,v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.actualPhaseIndex);
// for each scenario
for (var integer i:=0; i<sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarioPhaseLists); i:=i+1)
{
var integer vl_eGrpIdx := v_ExecCtrl_scenarios[v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarios[i].idx].eGroupIdx;
//f_EPTF_ExecCtrl_resetScenarioOnLGens(p_instance.scenarios[i].idx); <- would be circular import,
// => only groupFinish data is reset. Hope that EPTF_ExecCtrl_PhaseResetReq resets scenarios on the LGen
f_EPTF_ExecCtrl_resetGroupFinishDataForSc(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarios[i].idx);
for (var integer j:=0; j<sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarios[i].lgenPhaseLists); j:=j+1)
{
var integer vl_lgenIdx := v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarios[i].lgenIndexes[j];
var integer vl_lgenIdxInEGrp := f_EPTF_ExecCtrl_getLGenIdxInEGrpForLGenAndEgrp(vl_lgenIdx,vl_eGrpIdx);
if (v_ExecCtrl_entityGroups[vl_eGrpIdx].lgenList[vl_lgenIdxInEGrp].eCount == 0) {
continue; // do not send packet to LGen if there is no entity on the LGen
}
f_EPTF_ExecCtrl_sendPhaseResetReq
(EPTF_ExecCtrl_PhaseResetReq:
{
phaseName := v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].groupPhaseList.phases[vl_phaseIdx].name,
entityGroupName := v_ExecCtrl_entityGroups[vl_eGrpIdx].name,
scenarioInstanceName := f_EPTF_ExecCtrl_getScenarioName(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarios[i].idx),
state := IDLE,
msgID :=
{
vl_sgIdx,
i,
j,
vl_phaseIdx
}
},
v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scenarioGroupIdx].scenarios[i].lgenIndexes[j]
);
}
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_sendPhaseStartReq
//
// Purpose:
// Sends a start phase request PDU to the LGen appointed by index (which points
// into the v_ExecCtrl_lgens database.
//
// Parameters:
// - p_req - in <EPTF_ExecCtrl_PhaseStartReq> - the request to be sent
// - p_toLgenIdx - in *integer* - the database index of the LGen.
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_sendPhaseStartReq
(
in EPTF_ExecCtrl_PhaseStartReq p_req,
in integer p_toLgenIdx
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_to := -1;
if (p_toLgenIdx < sizeof(v_ExecCtrl_lgens))
{
vl_to := v_ExecCtrl_lgens[p_toLgenIdx].lgenCompRef;
}
else { return }
if (vl_to!=-1) {
ExecCtrl_MgmtIf_CP.send(p_req) to f_EPTF_Base_downcast(vl_to);
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_sendPhaseStopReq
//
// Purpose:
// Sends a stop phase request PDU to the LGen appointed by index (which points
// into the v_ExecCtrl_lgens database.
//
// Parameters:
// - p_req - in <EPTF_ExecCtrl_PhaseStopReq> - the request to be sent
// - p_toLgenIdx - in *integer* - the database index of the LGen.
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_sendPhaseStopReq
(
in EPTF_ExecCtrl_PhaseStopReq p_req,
in integer p_toLgenIdx
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_to := -1;
if (p_toLgenIdx < sizeof(v_ExecCtrl_lgens))
{
vl_to := v_ExecCtrl_lgens[p_toLgenIdx].lgenCompRef;
}
else { return }
if (vl_to!=-1) {
ExecCtrl_MgmtIf_CP.send(p_req) to f_EPTF_Base_downcast(vl_to);
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_sendPhaseStopTestReq
//
// Purpose:
// Sends a stop phase request PDU to the LGen appointed by index (which points
// into the v_ExecCtrl_lgens database.
//
// Parameters:
// - p_req - in <EPTF_ExecCtrl_PhaseStopReq> - the request to be sent
// - p_toLgenIdx - in *integer* - the database index of the LGen.
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_sendPhaseStopTestReq
(
in EPTF_ExecCtrl_PhaseStopTestReq p_req,
in integer p_toLgenIdx
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_to := -1;
if (p_toLgenIdx < sizeof(v_ExecCtrl_lgens))
{
vl_to := v_ExecCtrl_lgens[p_toLgenIdx].lgenCompRef;
}
else { return }
if (vl_to!=-1) {
ExecCtrl_MgmtIf_CP.send(p_req) to f_EPTF_Base_downcast(vl_to);
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_sendPhaseResetReq
//
// Purpose:
// Sends a reset phase request PDU to the LGen appointed by index (which points
// into the v_ExecCtrl_lgens database.
//
// Parameters:
// - p_req - in <EPTF_ExecCtrl_PhaseStopReq> - the request to be sent
// - p_toLgenIdx - in *integer* - the database index of the LGen.
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_sendPhaseResetReq
(
in EPTF_ExecCtrl_PhaseResetReq p_req,
in integer p_toLgenIdx
)
runs on EPTF_ExecCtrl_CT
{
var integer vl_to := -1;
if (p_toLgenIdx < sizeof(v_ExecCtrl_lgens))
{
vl_to := v_ExecCtrl_lgens[p_toLgenIdx].lgenCompRef;
}
else { return }
if (vl_to!=-1) {
ExecCtrl_MgmtIf_CP.send(p_req) to f_EPTF_Base_downcast(vl_to);
}
}
///////////////////////////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_handlePhaseStatusRsp
//
// Purpose:
// Phase Status Response PDU handler. Sets the appropriate phase list states
// of the scenario groups.
//
// Parameters:
// - p_rsp - in <EPTF_ExecCtrl_PhaseStatusRsp> - the response to be processed
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// - the msgID field of the incoming response must contain the following
// indices respectively: scenario group index, scenario index, LGen index, phase index
//
///////////////////////////////////////////////////////////////////////////////
private function f_EPTF_ExecCtrl_handlePhaseStatusRsp
(
in EPTF_ExecCtrl_PhaseStatusRsp p_rsp
)
runs on EPTF_ExecCtrl_CT
{
if (p_rsp.state == FINISHED)
{
var integer vl_sgIdx := p_rsp.msgID[0];
var integer vl_scIdx := p_rsp.msgID[1];
var integer vl_lgIdx := p_rsp.msgID[2];
var integer vl_phIdx := p_rsp.msgID[3];
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].scenarios[vl_scIdx].lgenPhaseLists[vl_lgIdx].phases[vl_phIdx].state := FINISHED;
if(not f_EPTF_ExecCtrl_PhaseList_setStateFromSubPhaseLists
(
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].scenarioPhaseLists[vl_scIdx],
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].scenarios[vl_scIdx].lgenPhaseLists
)) {/*cannot happen*/};
if(not f_EPTF_ExecCtrl_PhaseList_setStateFromSubPhaseLists
(
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList,
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].scenarioPhaseLists
)) {/*cannot happen*/};
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phIdx].state == FINISHED)
{
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].phaseFinishAction != null)
{
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].phaseFinishAction.apply
(
vl_sgIdx,
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phIdx].name
);
}
f_EPTF_ExecCtrl_debug
(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phIdx].name&" finished."));
f_EPTF_ExecCtrl_debug(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&
" phase: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases[vl_phIdx].name&" finished."))
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.actualPhaseIndex ==
sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.phases)-1)
{
f_EPTF_ExecCtrl_debug
(log2str("SceanrioGroup "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&" finished"));
f_EPTF_ExecCtrl_debug(log2str("ScenarioGroup: "&v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].name&" finished"));
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].isRunningVarIdx != -1)
{
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].internalAdjust := true;
f_EPTF_Var_adjustContent(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].isRunningVarIdx, {boolVal := false});
}
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupFinishAction != null)
{
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupFinishAction.apply(vl_sgIdx, "");
}
f_EPTF_ExecCtrl_ScenarioGroup_resetPhaseStates(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx]);
}
else
{
f_EPTF_ExecCtrl_debug
(log2str("Setting next phase"));
if (f_EPTF_ExecCtrl_ScenarioGroup_setNextPhase(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx]))
{
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].execMode == AUTOMATIC)
{
f_EPTF_ExecCtrl_debug
(log2str("Starting next phase"));
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].isRunningVarIdx != -1)
{
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].internalAdjust := true;
f_EPTF_Var_adjustContent(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].isRunningVarIdx, {boolVal := true});
}
if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].groupPhaseList.actualPhaseIndex != 0)
{
f_EPTF_ExecCtrl_ScenarioGroup_startActualPhase(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx]);
}
}
else if (v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].isRunningVarIdx != -1)
{
v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].internalAdjust := true;
f_EPTF_Var_adjustContent(v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx].isRunningVarIdx, {boolVal := false});
}
}
}
}
f_EPTF_ExecCtrl_debug
(log2str("# DEBUG:", v_ExecCtrl_ScenarioGroupInstanceDB.data[vl_sgIdx]));
}
else
{
f_EPTF_ExecCtrl_warning(log2str("PhaseStatusRsp not handled: dropping ", p_rsp));
}
}
///////////////////////////////////////////////////////////////////////////////
// Altstep: as_EPTF_ExecCtrl_MgmtIf_handlePhaseMsgs
//
// Purpose:
// Altstep for handling the incoming phase PDUs at the ExecCtrl component
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend altstep as_EPTF_ExecCtrl_MgmtIf_handlePhaseMsgs()
runs on EPTF_ExecCtrl_CT
{
[] ExecCtrl_MgmtIf_CP.receive(EPTF_ExecCtrl_PhaseStatusRsp:?) -> value v_ExecCtrl_PhasePDU.phaseStatusRsp
{
f_EPTF_ExecCtrl_handlePhaseStatusRsp(v_ExecCtrl_PhasePDU.phaseStatusRsp);
repeat;
}
}
///////////////////////////////////////////////////////////////////////////////
// Altstep: as_EPTF_ExecCtrlClient_MgmtIf_handlePhaseMsgs
//
// Purpose:
// Altstep for handling the incoming phase PDUs at the ExecCtrlClient component
//
// Parameters:
// -
//
// Return Value:
// -
//
// Errors & assertions:
// -
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////////////////////
friend altstep as_EPTF_ExecCtrlClient_MgmtIf_handlePhaseMsgs()
runs on EPTF_ExecCtrlClient_CT
{
[] ExecCtrlClient_MgmtIf_CP.receive(EPTF_ExecCtrl_PhaseStatusRsp:?) -> value v_ExecCtrlClient_PhasePDU.phaseStatusRsp
{
f_EPTF_ExecCtrlClient_warning(log2str("Unexpected phase status response message was recevied: dropping: ", v_ExecCtrlClient_PhasePDU.phaseStatusRsp))
repeat;
}
[] ExecCtrlClient_MgmtIf_CP.receive(EPTF_ExecCtrl_PhaseStartReq:?) -> value v_ExecCtrlClient_PhasePDU.phaseStartReq
{
var boolean vl_couldStart := false;
if (v_ExecCtrlClient_PhasePDU.phaseStartReq.state == RUNNING)
{
vl_couldStart := f_EPTF_LGenBase_startPhase
(
v_ExecCtrlClient_PhasePDU.phaseStartReq.entityGroupName,
v_ExecCtrlClient_PhasePDU.phaseStartReq.scenarioInstanceName,
v_ExecCtrlClient_PhasePDU.phaseStartReq.phaseName,
refers(f_EPTF_ExecCtrlClient_handlePhaseFinished),
v_ExecCtrlClient_PhasePDU.phaseStartReq.msgID
);
}
else if (v_ExecCtrlClient_PhasePDU.phaseStartReq.state == SKIPPING)
{
vl_couldStart := f_EPTF_LGenBase_skipPhase
(
v_ExecCtrlClient_PhasePDU.phaseStartReq.entityGroupName,
v_ExecCtrlClient_PhasePDU.phaseStartReq.scenarioInstanceName,
v_ExecCtrlClient_PhasePDU.phaseStartReq.phaseName,
refers(f_EPTF_ExecCtrlClient_handlePhaseFinished),
v_ExecCtrlClient_PhasePDU.phaseStartReq.msgID
);
}
if (not vl_couldStart)
{
f_EPTF_ExecCtrlClient_warning(log2str("Couldn't execute phase start request message: ", v_ExecCtrlClient_PhasePDU.phaseStartReq));
var EPTF_ExecCtrl_PhaseStatusRsp vl_resp :=
{
phaseName := v_ExecCtrlClient_PhasePDU.phaseStartReq.entityGroupName,
entityGroupName := v_ExecCtrlClient_PhasePDU.phaseStartReq.scenarioInstanceName,
scenarioInstanceName := v_ExecCtrlClient_PhasePDU.phaseStartReq.scenarioInstanceName,
state := FINISHED,
msgID := v_ExecCtrlClient_PhasePDU.phaseStartReq.msgID
}
ExecCtrlClient_MgmtIf_CP.send(vl_resp);
}
repeat;
}
[] ExecCtrlClient_MgmtIf_CP.receive(EPTF_ExecCtrl_PhaseStopReq:?) -> value v_ExecCtrlClient_PhasePDU.phaseStopReq
{
var boolean vl_couldStop := false;
if (v_ExecCtrlClient_PhasePDU.phaseStopReq.state == STOPPING)
{
vl_couldStop := f_EPTF_LGenBase_stopPhase
(
v_ExecCtrlClient_PhasePDU.phaseStopReq.entityGroupName,
v_ExecCtrlClient_PhasePDU.phaseStopReq.scenarioInstanceName,
v_ExecCtrlClient_PhasePDU.phaseStopReq.phaseName
);
}
if (not vl_couldStop)
{
f_EPTF_ExecCtrlClient_warning(log2str("Couldn't execute phase stop request message: ", v_ExecCtrlClient_PhasePDU.phaseStopReq));
var EPTF_ExecCtrl_PhaseStatusRsp vl_resp :=
{
phaseName := v_ExecCtrlClient_PhasePDU.phaseStopReq.entityGroupName,
entityGroupName := v_ExecCtrlClient_PhasePDU.phaseStopReq.scenarioInstanceName,
scenarioInstanceName := v_ExecCtrlClient_PhasePDU.phaseStopReq.scenarioInstanceName,
state := FINISHED,
msgID := v_ExecCtrlClient_PhasePDU.phaseStopReq.msgID
}
ExecCtrlClient_MgmtIf_CP.send(vl_resp);
}
repeat;
}
[] ExecCtrlClient_MgmtIf_CP.receive(EPTF_ExecCtrl_PhaseStopTestReq:?) -> value v_ExecCtrlClient_PhasePDU.phaseStopTestReq
{
f_EPTF_LGenBase_stopPhaseTest
(
v_ExecCtrlClient_PhasePDU.phaseStopTestReq.entityGroupName,
v_ExecCtrlClient_PhasePDU.phaseStopTestReq.scenarioInstanceName,
v_ExecCtrlClient_PhasePDU.phaseStopTestReq.phaseName
);
repeat;
}
[] ExecCtrlClient_MgmtIf_CP.receive(EPTF_ExecCtrl_PhaseResetReq:?) -> value v_ExecCtrlClient_PhasePDU.phaseResetReq
{
if(not f_EPTF_LGenBase_resetPhase
(
v_ExecCtrlClient_PhasePDU.phaseResetReq.entityGroupName,
v_ExecCtrlClient_PhasePDU.phaseResetReq.scenarioInstanceName,
v_ExecCtrlClient_PhasePDU.phaseResetReq.phaseName
)) {/*should not happen*/};
repeat;
}
}
private function f_EPTF_ExecCtrlClient_handlePhaseFinished(
in charstring pl_eGrpName,
in charstring pl_scName,
in charstring pl_phase,
in EPTF_IntegerList pl_args)
runs on EPTF_ExecCtrlClient_CT
{
var EPTF_ExecCtrl_PhaseStatusRsp vl_resp :=
{
phaseName := pl_phase,
entityGroupName := pl_eGrpName,
scenarioInstanceName := pl_scName,
state := FINISHED,
msgID := pl_args
}
ExecCtrlClient_MgmtIf_CP.send(vl_resp);
}
//get/set functions for v_ExecCtrl_ScenarioGroupInstanceDB
friend function f_EPTF_ExecCtrl_getScenarioGroupInstance(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return EPTF_ExecCtrl_ScenarioGroup_Instance {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx];
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_ExecCtrl_getScenarioGroupInstanceName
//
// Purpose:
// Returns the scenario group instance name
//
// Parameters:
// pl_scGrpIdx - *in integer* - the idx of the scenario group instance
//
// Return Value:
// charstring - the instance name of the scenario group
//
///////////////////////////////////////////////////////////
public function f_EPTF_ExecCtrl_getScenarioGroupInstanceName(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].name;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceInternalAdjust(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return boolean {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].internalAdjust;
}
friend function f_EPTF_ExecCtrl_setScenarioGroupInstanceInternalAdjust(in integer pl_scGrpIdx, in boolean pl_internalAdjust)
runs on EPTF_ExecCtrl_CT {
v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].internalAdjust := pl_internalAdjust;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceIsRunningVarIdx(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return integer {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].isRunningVarIdx;
}
friend function f_EPTF_ExecCtrl_setScenarioGroupInstanceIsRunningVarIdx(in integer pl_scGrpIdx, in integer pl_isRunningVarIdx)
runs on EPTF_ExecCtrl_CT {
v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].isRunningVarIdx := pl_isRunningVarIdx;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstancePhaseNum(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.phases);
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceGroupPhaseList(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return EPTF_ExecCtrl_PhaseList_Instance {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceGroupPhaseListName(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.name;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceGroupPhaseListPhasesNum(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.phases);
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceGroupPhaseListPhaseName(in integer pl_scGrpIdx, in integer pl_phIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.phases[pl_phIdx].name;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceActualPhaseName(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return charstring {
var integer vl_currentPhaseIdx := v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.actualPhaseIndex;
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.phases[vl_currentPhaseIdx].name;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceActualPhaseIndex(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return integer {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.actualPhaseIndex;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceDataNum()
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data);
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceExecMode(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return EPTF_ExecCtrl_ScenarioGroup_ExecMode {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].execMode;
}
friend function f_EPTF_ExecCtrl_setScenarioGroupInstanceExecMode(in integer pl_scGrpIdx, in EPTF_ExecCtrl_ScenarioGroup_ExecMode pl_execMode)
runs on EPTF_ExecCtrl_CT {
v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].execMode := pl_execMode;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceScenarioNum(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarios);
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceScenarioName(in integer pl_scGrpIdx, in integer pl_scOfSCGrpIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarios[pl_scOfSCGrpIdx].name;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceScenarioLGenIndexNum(in integer pl_scGrpIdx, in integer pl_scOfSCGrpIdx)
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarios[pl_scOfSCGrpIdx].lgenIndexes);
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceScenarioPhaseList(in integer pl_scGrpIdx, in integer pl_scOfSCGrpIdx)
runs on EPTF_ExecCtrl_CT return EPTF_ExecCtrl_PhaseList_Instance {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarioPhaseLists[pl_scOfSCGrpIdx];
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceScenarioPhaseListPhaseName(in integer pl_scGrpIdx, in integer pl_scOfSCGrpIdx, in integer pl_phIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarioPhaseLists[pl_scOfSCGrpIdx].phases[pl_phIdx].name;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceScenarioPhaseListPhaseEnabled(in integer pl_scGrpIdx, in integer pl_scOfSCGrpIdx, in integer pl_phIdx)
runs on EPTF_ExecCtrl_CT return boolean {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarioPhaseLists[pl_scOfSCGrpIdx].phases[pl_phIdx].enabled;
}
friend function f_EPTF_ExecCtrl_setScenarioGroupInstanceScenarioPhaseListPhaseEnabled(in integer pl_scGrpIdx, in integer pl_scOfSCGrpIdx, in integer pl_phIdx, in boolean pl_enabled)
runs on EPTF_ExecCtrl_CT {
v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].scenarioPhaseLists[pl_scOfSCGrpIdx].phases[pl_phIdx].enabled := pl_enabled;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceIsValidPhase(in integer pl_scGrpIdx, in charstring pl_phaseName)
runs on EPTF_ExecCtrl_CT return integer {
return f_EPTF_ExecCtrl_PhaseList_isValidPhase(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList, pl_phaseName);
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceGroupPhaseListActualPhaseState(in integer pl_scGrpIdx)
runs on EPTF_ExecCtrl_CT return EPTF_ExecCtrl_Phase_States {
var integer vl_currentPhaseIdx := v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.actualPhaseIndex;
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.phases[vl_currentPhaseIdx].state;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceGroupPhaseListPhaseState(in integer pl_scGrpIdx, in integer pl_phIdx)
runs on EPTF_ExecCtrl_CT return EPTF_ExecCtrl_Phase_States {
return v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx].groupPhaseList.phases[pl_phIdx].state;
}
friend function f_EPTF_ExecCtrl_getScenarioGroupInstanceSetPhase(in integer pl_scGrpIdx, in charstring pl_phaseName)
runs on EPTF_ExecCtrl_CT return boolean {
return f_EPTF_ExecCtrl_ScenarioGroup_setPhase(v_ExecCtrl_ScenarioGroupInstanceDB.data[pl_scGrpIdx], pl_phaseName);
}
//get/set functions for v_ExecCtrl_PhaseListDeclaratorDB
friend function f_EPTF_ExecCtrl_getPhaseListDeclaratorDataNum()
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_PhaseListDeclaratorDB.data);
}
friend function f_EPTF_ExecCtrl_getPhaseListDeclaratorName(in integer pl_declaratorIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_PhaseListDeclaratorDB.data[pl_declaratorIdx].name;
}
friend function f_EPTF_ExecCtrl_getPhaseListDeclaratorPhasesNum(in integer pl_declaratorIdx)
runs on EPTF_ExecCtrl_CT return integer {
return sizeof(v_ExecCtrl_PhaseListDeclaratorDB.data[pl_declaratorIdx].phases);
}
friend function f_EPTF_ExecCtrl_getPhaseListDeclaratorPhaseName(in integer pl_declaratorIdx, in integer pl_phaseIdx)
runs on EPTF_ExecCtrl_CT return charstring {
return v_ExecCtrl_PhaseListDeclaratorDB.data[pl_declaratorIdx].phases[pl_phaseIdx].name;
}
friend function f_EPTF_ExecCtrl_getPhaseListDeclaratorPhaseEnabled(in integer pl_declaratorIdx, in integer pl_phaseIdx)
runs on EPTF_ExecCtrl_CT return boolean {
return v_ExecCtrl_PhaseListDeclaratorDB.data[pl_declaratorIdx].phases[pl_phaseIdx].enabled;
}
friend function f_EPTF_ExecCtrl_setPhaseListDeclaratorPhaseEnabled(in integer pl_declaratorIdx, in integer pl_phaseIdx, in boolean pl_enabled)
runs on EPTF_ExecCtrl_CT {
v_ExecCtrl_PhaseListDeclaratorDB.data[pl_declaratorIdx].phases[pl_phaseIdx].enabled := pl_enabled;
}
} // module