///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_StatCapture_Test_Definitions
// 
//  Purpose:
//    This module contains a test application for the Statistics Capture Control feature.
//
/////////////////////////////////////////////////////////////// 
module EPTF_StatCapture_Test_Definitions { 

import from EPTF_CLL_Variable_Definitions all;
// import from EPTF_CLL_Variable_Functions all;
import from EPTF_CLL_StatMeasure_Definitions all;
import from EPTF_CLL_StatMeasure_Functions all;
// import from EPTF_CLL_Scheduler_Definitions all;
// import from EPTF_CLL_RBTScheduler_Functions all;
// import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_StatCapture_Definitions all;
import from EPTF_CLL_Logging_Definitions all;
// import from EPTF_CLL_StatCapture_Functions all;
// import from TCCFileIO_Functions all;
// import from EPTF_CLL_Definitions all;

///////////////////////////////////////////////////////////
//  Type: SyncPort
// 
//  Purpose: Port to communicate internally between client and server
//    
//
///////////////////////////////////////////////////////////
type port SyncPort message{
  inout charstring
} with { extension "internal"}

///////////////////////////////////////////////////////////
//  Type: EPTF_StatCapture_Test_CT
// 
//  Purpose:
//    
//
///////////////////////////////////////////////////////////
type component EPTF_StatCapture_Test_CT extends EPTF_StatCapture_CT, EPTF_Logging_CT {

  var EPTF_StatCapture_CaptureGroups v_StatCapture_Test_captureGroups := {};
  var charstring v_StatCapture_Test_selfName;
  var boolean v_StatCapture_Test_initialized := false;
  //var default v_StatCapture_Test_def:=null;
  port SyncPort sync_PCO;
}

///////////////////////////////////////////////////////////
//  Type: EPTF_StatCaptureClient_Test_CT
// 
//  Purpose:
//    Client component type in the client - server tests.
//
///////////////////////////////////////////////////////////
type component EPTF_StatCaptureClient_Test_CT extends EPTF_StatCaptureClient_CT, EPTF_Logging_CT, EPTF_StatMeasure_CT {

  var EPTF_StatCapture_CaptureGroups v_StatCapture_Test_captureGroups := {};
  var charstring v_StatCapture_Test_selfName;
  var boolean v_StatCapture_Test_initialized := false;
  port SyncPort sync_PCO;
}

///////////////////////////////////////////////////////////
//  Type: EPTF_StatCaptureClient_Test_openNewStatLogFile_CT
// 
//  Purpose:
//    Client component type in the client - server tests.
//
///////////////////////////////////////////////////////////
type component EPTF_StatCaptureClient_Test_openNewStatLogFile_CT extends EPTF_StatCapture_CT, EPTF_Logging_CT, EPTF_StatMeasure_CT {

}

type record of EPTF_Var_DirectContent EPTF_StatCapture_Test_DcList;
type record of EPTF_StatCapture_Test_DcList EPTF_StatCapture_Test_DcArray;

}//module
