///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_TPE_Test_Definitions
// 
//  Purpose:
//    This module contains the type definitions of generic EPTF TimeProfileEditor test.
// 
//  Module depends on:
//   <EPTF_CLL_ExecCtrlTimeProfile_Definitions> 
//   <EPTF_CLL_Base_Definitions>
//   <EPTF_CLL_TransportIPL4_Definitions>
//   <ttcn_ericsson_se_protocolModules_xtdp_xtdp>
//
//  Current Owner:
//    Janos Zoltan Svaner (ejnosvn)
// 
//  Last Review Date:
//    2007-xx-xx
//
//  Detailed Comments:
//    -
//
///////////////////////////////////////////////////////////////
module EPTF_TPE_Test_Definitions {

import from EPTF_CLL_ExecCtrlTimeProfile_Definitions all;
import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_TransportIPL4_Definitions all;
import from ttcn_ericsson_se_protocolModules_xtdp_xtdp all;

const charstring c_GUISIM_LGenType := "GUISIM_LGEN"

type component MTC extends EPTF_Base_CT{}

///////////////////////////////////////////////////////////
//  Type: f_GUIBehaviour_send_CT
// 
//  Purpose:
//   General function type of the sender guibehaviour functions
// 
//  Elements:
//    -
// 
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
type function f_GUIBehaviour_send_CT() runs on  EPTF_DummyGui_CT;

///////////////////////////////////////////////////////////
//  Type: f_GUIBehaviour_receive_CT
// 
//  Purpose:
//   General function type of the receiver guibehaviour functions
// 
//  Elements:
//    -
// 
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
type function f_GUIBehaviour_receive_CT(in XTDP_Message pl_message) runs on  EPTF_DummyGui_CT;

///////////////////////////////////////////////////////////
//  Type: EPTF_DummyGui_CT
// 
//  Purpose:
//   General component of the gui behaviour
// 
//  Elements:
//    -
// 
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
type component EPTF_DummyGui_CT extends EPTF_Base_CT, EPTF_TransportIPL4_CT {
  var integer connectionId := -1;
  var integer v_msgCounter := 0;
  var integer v_initMsgs := 1000; //infinity
  var charstring v_changedItem;

  var charstring v_timeSequenceName := tsp_EPTF_ExecCtrl_TimeProfileDescrList[0].name;
  var charstring v_profileName := tsp_EPTF_ExecCtrl_TimeProfileList[0].name;
  var charstring v_timeSequenceProperties := int2str(float2int(tsp_EPTF_ExecCtrl_TimeProfileDescrList[0].timeProfileData[0].time)) & "*" & int2str(float2int(tsp_EPTF_ExecCtrl_TimeProfileDescrList[0].timeProfileData[0].targetValue));
  var charstring v_profileProperties := tsp_EPTF_ExecCtrl_TimeProfileList[0].timeProfileList[0].timeProfileDescrName & "*" & float2str(tsp_EPTF_ExecCtrl_TimeProfileList[0].timeProfileList[0].startTime) & "*" & float2str(tsp_EPTF_ExecCtrl_TimeProfileList[0].timeProfileList[0].periodOfRepetition) & "*" & int2str(tsp_EPTF_ExecCtrl_TimeProfileList[0].timeProfileList[0].nofRepetition);
  var f_GUIBehaviour_receive_CT v_receiveFunction := null
  var f_GUIBehaviour_send_CT v_sendFunction := null;
}

}
