blob: 659709b54779478425ed90c5292b9192d962c7b0 [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_Variable_Definitions
//
// Purpose:
// This module contains type definitions for TTCN-3 EPTF_Variable implementation.
//
// Module Parameters:
// tsp_debugVerbose_PoolMgmt - *boolean* - enable debugging of the semaphore pool, default: false
// tsp_EPTF_Var_SyncInterval - *float* - the period of the sync timer. This is used to syncronize the contents of buffered subscribers, default:10.0 secs
// tsp_EPTF_Var_snapshotFilename - *charstring* - the default name of the snapshot file without the timestamp used by <f_EPTF_Var_save>
// tsp_EPTF_Var_snapshotTimestamp - *charstring* - the default timestamp format of the snapshot file used by <f_EPTF_Var_save>
// tsp_EPTF_Var_loggingComponentMask - *charstring* - component-type mask for logging, default value: "EPTF_Var"
//
// Module depends on:
// <EPTF_CLL_Base_Definitions>
// <EPTF_CLL_Common_Definitions>
// <EPTF_CLL_QueueMgmt_Definitions>
// <EPTF_CLL_QueueMgmt_Functions>
// <EPTF_CLL_Logging_Definitions>
// <EPTF_CLL_Scheduler_Definitions>
// <EPTF_CLL_RBTScheduler_Definitions>
// <EPTF_CLL_HashMap_Definitions>
//
// Current Owner:
// Jozsef Gyurusi (ethjgi)
//
// Last Review Date:
// 2010-06-24
//
// Detailed Comments:
// This module contains type definitions for TTCN-3 EPTF_Variable implementation.
//
///////////////////////////////////////////////////////////////
module EPTF_CLL_Variable_Definitions {
import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_Common_Definitions all; // EPTF_IntegerList
import from EPTF_CLL_Logging_Definitions all;
import from EPTF_CLL_Scheduler_Definitions all;
import from EPTF_CLL_RBTScheduler_Definitions all;
import from EPTF_CLL_HashMap_Definitions all;
/*
// THIS CODE GENERATES THE CODE BELOW:
// define POOL for EPTF_Var_adjustContentResp_handler
//#define EPTF_POOLTYPE EPTF_Var_adjustContentResp_handler
//#include "EPTF_CLL_PoolMgmt_Functions.ttcnin"
//#undef EPTF_POOLTYPE
//*/
//*
// GENERATED CODE, DO NOT EDIT THIS PART!!!!
//# 1 "EPTF_CLL_PoolMgmt_Functions.ttcnin" 1
//# 58 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
import from EPTF_CLL_FBQ_Definitions all;
import from EPTF_CLL_FBQ_Functions all;
//# 1 "EPTF_CLL_PoolMgmt_Definitions.ttcnin" 1
//# 91 "EPTF_CLL_PoolMgmt_Definitions.ttcnin"
type record EPTF_Var_adjustContentResp_handlerPool {EPTF_FreeBusyQueue order, EPTF_Var_adjustContentResp_handlerList userData}
//# 106 "EPTF_CLL_PoolMgmt_Definitions.ttcnin"
type record of EPTF_Var_adjustContentResp_handler EPTF_Var_adjustContentResp_handlerList;
//# 121 "EPTF_CLL_PoolMgmt_Definitions.ttcnin"
const EPTF_Var_adjustContentResp_handlerList c_EPTF_emptyEPTF_Var_adjustContentResp_handlerList := {};
//# 61 "EPTF_CLL_PoolMgmt_Functions.ttcnin" 2
//# 82 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
const EPTF_Var_adjustContentResp_handlerPool c_EPTF_emptyEPTF_Var_adjustContentResp_handlerPool := {order := c_EPTF_emptyFreeBusyQueue, userData := c_EPTF_emptyEPTF_Var_adjustContentResp_handlerList}
//# 104 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_initEPTF_Var_adjustContentResp_handlerPool(inout EPTF_Var_adjustContentResp_handlerPool pl_pool) { f_EPTF_FBQ_initFreeBusyQueue(pl_pool.order); pl_pool.userData := c_EPTF_emptyEPTF_Var_adjustContentResp_handlerList; }
//# 145 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getNewEPTF_Var_adjustContentResp_handler(inout EPTF_Var_adjustContentResp_handlerPool pl_pool) return integer { if (tsp_debugVerbose_PoolMgmt){ log("f_EPTF_getNew##EPTF_POOLTYPE has been called"); } var integer idx := f_EPTF_FBQ_getOrCreateFreeSlot(pl_pool.order); if (idx >= sizeof(pl_pool.userData)){ pl_pool.userData[idx]:=c_emptyEPTF_Var_adjustContentResp_handler; if (tsp_debugVerbose_PoolMgmt) { log("f_EPTF_getNew##EPTF_POOLTYPE needed to allocate new ##EPTF_POOLTYPE", " at idx:",idx, ", initialized to:",pl_pool.userData[idx]); } } return idx; }
//# 184 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_putBackEPTF_Var_adjustContentResp_handler(inout EPTF_Var_adjustContentResp_handlerPool pl_pool, in integer pl_qidx) return boolean { if (tsp_debugVerbose_PoolMgmt) { log("f_putBack##EPTF_POOLTYPE:", pl_qidx); } if (not f_EPTF_EPTF_Var_adjustContentResp_handlerIsBusy(pl_pool, pl_qidx)){ log("Error: f_EPTF_putBack##EPTF_POOLTYPE: clearing invalid pool item at pl_qidx:", pl_qidx); return false; } f_EPTF_FBQ_moveFromBusyToFreeHead(pl_qidx,pl_pool.order); return true; }
//# 219 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getFirstEPTF_Var_adjustContentResp_handlerIndex(in EPTF_Var_adjustContentResp_handlerPool pl_pool) return integer { if (tsp_debugVerbose_PoolMgmt) { log("f_EPTF_getFirst##EPTF_POOLTYPE##Index has been called"); } if (f_EPTF_EPTF_Var_adjustContentResp_handlerPoolIsEmpty(pl_pool)){ log("Error: f_EPTF_getFirst##EPTF_POOLTYPE##Index: busy chain is empty:"); return -1; } var integer vl_head; f_EPTF_FBQ_getBusyHeadIdx(vl_head,pl_pool.order);return vl_head; }
//# 250 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getNextEPTF_Var_adjustContentResp_handlerIndex(in EPTF_Var_adjustContentResp_handlerPool pl_pool,inout integer pl_idx) return boolean { if (f_EPTF_EPTF_Var_adjustContentResp_handlerIsBusy(pl_pool,pl_idx)) { return f_EPTF_FBQ_getFwdBusyItemIdx(pl_idx,pl_pool.order); } else { return false; } }
//# 286 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_EPTF_Var_adjustContentResp_handlerPoolIsEmpty(in EPTF_Var_adjustContentResp_handlerPool pl_pool) return boolean { if(f_EPTF_FBQ_getLengthOfBusyChain(pl_pool.order) <=0) { return true } else { return false }; }
//# 314 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_EPTF_Var_adjustContentResp_handlerIsBusy(in EPTF_Var_adjustContentResp_handlerPool pl_pool,in integer pl_idx) return boolean { return f_EPTF_FBQ_itemIsBusy(pl_idx,pl_pool.order); }
//# 350 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getEPTF_Var_adjustContentResp_handler(in EPTF_Var_adjustContentResp_handlerPool pl_pool,in integer pl_idx,out EPTF_Var_adjustContentResp_handler pl_poolItem) return boolean { if (not f_EPTF_EPTF_Var_adjustContentResp_handlerIsBusy(pl_pool, pl_idx)) { return false } else { pl_poolItem := pl_pool.userData[pl_idx]; return true; } }
//# 387 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_setEPTF_Var_adjustContentResp_handler(inout EPTF_Var_adjustContentResp_handlerPool pl_pool,in integer pl_idx,in EPTF_Var_adjustContentResp_handler pl_poolItem) return boolean { if (not f_EPTF_EPTF_Var_adjustContentResp_handlerIsBusy(pl_pool, pl_idx)) { pl_pool.userData[pl_idx] := pl_poolItem; f_EPTF_FBQ_moveFromFreeToBusyTail(pl_idx,pl_pool.order); return true; } else {return false } }
//# 427 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_setNewEPTF_Var_adjustContentResp_handler(inout EPTF_Var_adjustContentResp_handlerPool pl_pool,in EPTF_Var_adjustContentResp_handler pl_poolItem) return integer { var integer idx := f_EPTF_FBQ_getOrCreateFreeSlot(pl_pool.order); if (idx >= sizeof(pl_pool.userData)){ if (tsp_debugVerbose_PoolMgmt) { log("f_EPTF_setNew##EPTF_POOLTYPE needed to allocate new ##EPTF_POOLTYPE", " at idx:",idx, ", initialized to:",pl_poolItem); } } pl_pool.userData[idx] := pl_poolItem; f_EPTF_FBQ_moveFromFreeToBusyTail(idx,pl_pool.order); return idx; }
//# 466 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_deleteEPTF_Var_adjustContentResp_handler(inout EPTF_Var_adjustContentResp_handlerPool pl_pool, in integer pl_qidx) { if (tsp_debugVerbose_PoolMgmt) { log("f_delete##EPTF_POOLTYPE:", pl_qidx); } if (not f_EPTF_EPTF_Var_adjustContentResp_handlerIsBusy(pl_pool, pl_qidx)){ log("Warning: f_EPTF_delete##EPTF_POOLTYPE: clearing free/invalid pool item at pl_qidx:", pl_qidx); return; } f_EPTF_FBQ_moveFromBusyToFreeTail(pl_qidx,pl_pool.order); pl_pool.userData[pl_qidx] := c_emptyEPTF_Var_adjustContentResp_handler; return; }
//# 51 "EPTF_CLL_Variable_Definitions.ttcnpp" 2
//*/
const EPTF_Var_adjustContentResp_handler c_emptyEPTF_Var_adjustContentResp_handler := {null, {}};
modulepar boolean tsp_debugVerbose_PoolMgmt := false;
/*
// THE GENERATED CODE BELOW IS EQUIVALENT WITH THE FOLLOWING MACRO:
// define POOL for boolean
//#define EPTF_POOLTYPE boolean
//#include "EPTF_CLL_PoolMgmt_Functions.ttcnin"
//#undef EPTF_POOLTYPE
*/
//////////////////////// BEGINING OF CODE /////////////////////////
// GENERATED CODE, DO NOT EDIT BELOW!
//# 2 "tmp.ttcnpp"
//# 1 "EPTF_CLL_PoolMgmt_Functions.ttcnin" 1
//# 58 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
//import from EPTF_CLL_QueueMgmt_Definitions all;
//import from EPTF_CLL_QueueMgmt_Functions all;
//# 1 "EPTF_CLL_PoolMgmt_Definitions.ttcnin" 1
//# 91 "EPTF_CLL_PoolMgmt_Definitions.ttcnin"
type record booleanPool {EPTF_FreeBusyQueue order, booleanList userData}
//# 106 "EPTF_CLL_PoolMgmt_Definitions.ttcnin"
type record of boolean booleanList;
//# 121 "EPTF_CLL_PoolMgmt_Definitions.ttcnin"
const booleanList c_EPTF_emptybooleanList := {};
//# 61 "EPTF_CLL_PoolMgmt_Functions.ttcnin" 2
//# 82 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
const booleanPool c_EPTF_emptybooleanPool := {order := c_EPTF_emptyFreeBusyQueue, userData := c_EPTF_emptybooleanList}
//# 104 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_initbooleanPool(inout booleanPool pl_pool) { f_EPTF_FBQ_initFreeBusyQueue(pl_pool.order); pl_pool.userData := c_EPTF_emptybooleanList; }
//# 145 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getNewboolean(inout booleanPool pl_pool) return integer { if (tsp_debugVerbose_PoolMgmt){ log("f_EPTF_getNew##EPTF_POOLTYPE has been called"); } var integer idx := f_EPTF_FBQ_getOrCreateFreeSlot(pl_pool.order); if (idx >= sizeof(pl_pool.userData)){ pl_pool.userData[idx]:=c_emptyboolean; if (tsp_debugVerbose_PoolMgmt) { log("f_EPTF_getNew##EPTF_POOLTYPE needed to allocate new ##EPTF_POOLTYPE", " at idx:",idx, ", initialized to:",pl_pool.userData[idx]); } } return idx; }
//# 184 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_putBackboolean(inout booleanPool pl_pool, in integer pl_qidx) return boolean { if (tsp_debugVerbose_PoolMgmt) { log("f_putBack##EPTF_POOLTYPE:", pl_qidx); } if (not f_EPTF_booleanIsBusy(pl_pool, pl_qidx)){ log("Error: f_EPTF_putBack##EPTF_POOLTYPE: clearing invalid pool item at pl_qidx:", pl_qidx); return false; } f_EPTF_FBQ_moveFromBusyToFreeHead(pl_qidx,pl_pool.order); return true; }
//# 219 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getFirstbooleanIndex(in booleanPool pl_pool) return integer { if (tsp_debugVerbose_PoolMgmt) { log("f_EPTF_getFirst##EPTF_POOLTYPE##Index has been called"); } if (f_EPTF_booleanPoolIsEmpty(pl_pool)){ log("Error: f_EPTF_getFirst##EPTF_POOLTYPE##Index: busy chain is empty:"); return -1; } var integer vl_head; f_EPTF_FBQ_getBusyHeadIdx(vl_head,pl_pool.order);return vl_head; }
//# 250 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getNextbooleanIndex(in booleanPool pl_pool,inout integer pl_idx) return boolean { if (f_EPTF_booleanIsBusy(pl_pool,pl_idx)) { return f_EPTF_FBQ_getFwdBusyItemIdx(pl_idx,pl_pool.order); } else { return false; } }
//# 286 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_booleanPoolIsEmpty(in booleanPool pl_pool) return boolean { if(f_EPTF_FBQ_getLengthOfBusyChain(pl_pool.order) <=0) { return true } else { return false }; }
//# 314 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_booleanIsBusy(in booleanPool pl_pool,in integer pl_idx) return boolean { return f_EPTF_FBQ_itemIsBusy(pl_idx,pl_pool.order); }
//# 350 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getboolean(in booleanPool pl_pool,in integer pl_idx,out boolean pl_poolItem) return boolean { if (not f_EPTF_booleanIsBusy(pl_pool, pl_idx)) { return false } else { pl_poolItem := pl_pool.userData[pl_idx]; return true; } }
//# 387 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_setboolean(inout booleanPool pl_pool,in integer pl_idx,in boolean pl_poolItem) return boolean { if (not f_EPTF_booleanIsBusy(pl_pool, pl_idx)) { pl_pool.userData[pl_idx] := pl_poolItem; f_EPTF_FBQ_moveFromFreeToBusyTail(pl_idx,pl_pool.order); return true; } else {return false } }
//# 427 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_setNewboolean(inout booleanPool pl_pool,in boolean pl_poolItem) return integer { var integer idx := f_EPTF_FBQ_getOrCreateFreeSlot(pl_pool.order); if (idx >= sizeof(pl_pool.userData)){ if (tsp_debugVerbose_PoolMgmt) { log("f_EPTF_setNew##EPTF_POOLTYPE needed to allocate new ##EPTF_POOLTYPE", " at idx:",idx, ", initialized to:",pl_poolItem); } } pl_pool.userData[idx] := pl_poolItem; f_EPTF_FBQ_moveFromFreeToBusyTail(idx,pl_pool.order); return idx; }
//# 454 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_setValueboolean(inout booleanPool pl_pool,in integer pl_idx,in boolean pl_poolItem) { pl_pool.userData[pl_idx] := pl_poolItem; }
//# 479 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_getValueboolean(inout booleanPool pl_pool,in integer pl_idx) return boolean { return pl_pool.userData[pl_idx]; }
//# 519 "EPTF_CLL_PoolMgmt_Functions.ttcnin"
function f_EPTF_deleteboolean(inout booleanPool pl_pool, in integer pl_qidx) { if (tsp_debugVerbose_PoolMgmt) { log("f_delete##EPTF_POOLTYPE:", pl_qidx); } if (not f_EPTF_booleanIsBusy(pl_pool, pl_qidx)){ log("Warning: f_EPTF_delete##EPTF_POOLTYPE: clearing free/invalid pool item at pl_qidx:", pl_qidx,", pl_##EPTF_POOLTYPE##Pool.order.itemList[pl_qidx]:"); return; } f_EPTF_FBQ_moveFromBusyToFreeTail(pl_qidx,pl_pool.order); pl_pool.userData[pl_qidx] := c_emptyboolean; return; }
//# 6 "tmp.ttcnpp" 2
// DO NOT EDIT ABOVE THIS LINE!
//////////////////////////////////////////////////////////////
const boolean c_emptyboolean := false;
modulepar float tsp_EPTF_Var_SyncInterval := 10.0; // initial value of the syncIntervar
modulepar charstring tsp_EPTF_Var_snapshotFilename := "EPTF_Var_SnapshotFile";
modulepar charstring tsp_EPTF_Var_snapshotTimestamp := "_%Y-%m-%d_%H.%M.%S.cfg";
modulepar charstring tsp_EPTF_Var_loggingComponentMask := "EPTF_Var";
modulepar float tsp_EPTF_Var_refreshSubscribersPeriod := 1.0; // period of local subscriber refresh (0.0: shortest period, <0.0: no period, instant update)
modulepar integer tsp_EPTF_Var_Msg_maxBurstSize := 2; // increase this parameter to boost performance, decrease if you get "would block warnings"
modulepar integer tsp_EPTF_Var_maxNofPendingMsgs := 20; // increase this parameter to boost performance, decrease if you get "would block warnings"
///////////////////////////////////////////////////////////
// Type: EPTF_Var
//
// Purpose:
// The basic datatype for EPTF_Variables
//
// Elements:
// provider - <EPTF_Var_Provider> - the provider
// subscribers - <EPTF_Var_Subscribers> - subscriber list, who should be notified if the value of this var changes
// name - *charstring* - name of the variable
// content - <EPTF_Var_Content> - content (value or reference to a value) of the variable
// postProcFns - <EPTF_Var_GenericFns> - called by the library after the value of the EPTF Variable was changed
// guardFns - <EPTF_Var_GuardFns> - function pointers to the guard functions (they return true if the value is accepted, false if not)
// unsubscribeNotifyFns - <EPTF_Var_GenericFns> - functions called after the variable is unsubscribed from its provider (or when bye is received). Notifies the user about the unsubscribe
// timeLineBuffer - <EPTF_Var_TimeLineBuffer> - buffered timeLine for subscribers
// nofTimelineSubscribers- *integer* - the number of timeLine subscribers
//
// Detailed Comments:
// This record contains all information for an EPTF Variable
//
///////////////////////////////////////////////////////////
type record EPTF_Var {
EPTF_Var_Provider provider, // the provider
EPTF_Var_Subscribers subscribers, // subscriber list, who should be notified if the value of this var changes
charstring name, // name of the variable
boolean subsCanAdjust, // if false: subscribers cannot adjust the content
EPTF_Var_Content content, // content (value or reference to a value) of the variable
EPTF_Var_GenericFns postProcFns, // called by the library after the value of the EPTF Variable was changed
EPTF_Var_GuardFns guardFns, // function pointers to the guard functions (they return true if the value is accepted, false if not)
EPTF_Var_GenericFns unsubscribeNotifyFns, // functions called after the variable is unsubscribed from its provider (or when bye is received). Notifies the user about the unsubscribe
EPTF_Var_GenericFns subsCanAdjustNotifyFns, // called by the library after the value of subsCanAdjust of the EPTF Variable was changed
EPTF_Var_TimeLineBufferList timeLineBuffer, // buffered timeLine for subscribers for each refresh rate
integer nofTimelineSubscribers // the number of timeLine subscribers
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_InitialValue
//
// Purpose:
// Initial value definition
//
// Elements:
// name - *charstring* - name of the EPTF Variable
// initValue - <EPTF_Var_DirectContent> - initial value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_InitialValue {
charstring name,
EPTF_Var_DirectContent initValue
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_InitialValueList
//
// Purpose:
// List of initial values
//
// Elements:
//
// Detailed Comments:
// Used to define config data
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_InitialValue EPTF_Var_InitialValueList;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Provider
//
// Purpose:
// This union defines the EPTF_Var_Provider
//
// Elements:
// empty - <ETPF_Var_NullContent> - if the provider is not set
// local - <EPTF_Var_ProviderLocal> - local provider: whose values are used to calculate mine
// remote - <EPTF_Var_ProviderRemote> - remote provider: who delivers the value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type union EPTF_Var_Provider {
ETPF_Var_NullContent empty,
EPTF_Var_ProviderLocal local,
EPTF_Var_ProviderRemote remote
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_ProviderLocal
//
// Purpose:
// This record defines the Local Provider
//
// Elements:
// calcFn - <EPTF_Var_CalcFn> - function pointer to calculate the new value of the variable
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_ProviderLocal
{
EPTF_Var_CalcFn calcFn // function pointer to calculate the new value of the variable
}
//type EPTF_Var_CalcFn EPTF_Var_ProviderLocal;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Ref
//
// Purpose:
// This record defines the generic reference type for a remote variables
//
// Elements:
// compRef - <EPTF_Var_CT> - reference to the remote component (null means self)
// idx - *integer* - index of the EPTF_Var on the remote component
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Ref {
EPTF_Var_CT compRef, // reference to the remote component (null means self)
integer idx // idx of the EPTF_Var on the remote component
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SubscriptionMode
//
// Purpose:
// This enumerated defines the possible subscription modes
//
// Elements:
// realtime - real time subscription: subscriber is notified instantly
// sampled - the value of the EPTF variable is sampled periodically at the sync event, the buffer.timeLine contains only the last refreshed value (no refresh at sync)
// sampledAtSync - the value of the EPTF variable is sampled periodically at the sync event, but calcFn and postProc are called also,
// the buffer.timeLine contains only the value at the sync event
// (=sampled but the calcFn and postProc functions are also called at the sync event (refresh without notifying the subscribers))
// timeLine - all value changes are stored in the buffer.timeLine, at the sync event all values in the timeLine are sent (=realtime but buffered)
// pull - The value is sent to the subscriber when the subscriber accesses the value of the variable (it sends a request to the owner to get the new value)
//
// Detailed Comments:
// These modes define how and when the remote subscribers are notified about the refresh of the provider.
// In the realtime mode when the provider is refreshed the subscriber is notified instantly.
// For the pull subscription mode the subsciber only refreshed on request. For the other
// subscription modes the subscriber is only notified at the sync event. In timeline mode all refreshed values are buffered
// during the sync-interval and all of them are sent as a timeline to the subscriber. For sampled and sampledAtSync the timeline
// contains only one element. For sampled it is the last refreshed value (the last element of the timeline).
// However, for sampledAtSync the Variable is forced to refresh (but subscribers are not notified) at the sync event,
// This means that only the calcFn and postProc functions are called. The timeline will contain the value of the
// variable after the postProc functions are called. (The original value of the variable is restored at the end.)
// This is because the value of the Variable should not depend on the subscription mode of its subscribers.
//
///////////////////////////////////////////////////////////
type enumerated EPTF_Var_SubscriptionMode {
realtime,
sampled,
sampledAtSync,
timeLine,
pull
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_ProviderRemote
//
// Purpose:
// This record defines the remote provider of an EPTF Variable
//
// Elements:
// name - *charstring* - name of the provider variable (on the remote component)
// compRef - <EPTF_Var_CT> - reference to the remote component of the provider, where the provider variable with the given name is located
// varRef - <EPTF_Var_Ref> - remote reference to the variable (can be rerouted for pull-mode subscription, i.e. point to a different var than {name, compRef})
// subscriptionMode - <EPTF_Var_SubscriptionMode> - the subscription mode: if sampled or timeLine: values are also updated in the buffer.timeLine
// refreshRate - *integer* - rate of the refresh (refresh period is: refreshRate * minSyncInterval)
// topProviderType - <EPTF_TopProvider_Type> - // topProviderType - <EPTF_TopProvider_Type> - type of the top-provider (owner). Can only be: local/empty
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_ProviderRemote {
charstring name, // name of the provider variable (on the remote component)
EPTF_Var_CT compRef, // reference to the remote component of the provider, where the provider variable with the given name is located
EPTF_Var_Ref varRef, // remote reference to the variable (can be rerouted for pull-mode subscription, i.e. point to a different var than {name, compRef})
EPTF_Var_SubscriptionMode subscriptionMode, // the subscription mode: if sampled or timeLine: values are also updated in the buffer.timeLine
integer refreshRate, // rate of the refresh (refresh period is: refreshRate * minSyncInterval)
EPTF_TopProviderType topProviderType, // type of the top-provider (owner). Can only be: local/empty,
integer routeUpdateCounter // if subscriptionMode==pull and getContent is called 10 times, getRemoteContent is sent to the original provider {name,compRef} instead of varRef
}
const integer cg_EPTF_Var_routeUpdatePeriod := 10; // number of getContents and adjustContents after remote provider for pull mode subsription is used
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Subscribers
//
// Purpose:
// List of <EPTF_Var_Subscriber>-s
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_Subscriber EPTF_Var_Subscribers;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Subscriber
//
// Purpose:
// This union defines the subscriber of an EPTF Variable
//
// Elements:
// local - *integer* - local subscriber: gives the idx of the EPTF_Var
// remote - <EPTF_Var_ProviderRemote> - remote subscriber: same type as the EPTF_Var_ProviderRemote
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type union EPTF_Var_Subscriber {
integer local, // gives the idx of the EPTF_Var
EPTF_Var_SubscriberRemote remote // remote subscriber
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SubscriberRemote
//
// Purpose:
// This record defines the remote subscriber of an EPTF Variable
//
// Elements:
// name - *charstring* - name of the subscriber variable (on the remote component)
// varRef - <EPTF_Var_Ref> - remote reference to the variable
// subscriptionMode - <EPTF_Var_SubscriptionMode> - sets the subscription mode
// refreshRateId - *integer - Id of the refresh rate of the subscription in v_syncBuffer
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_SubscriberRemote {
charstring name, // name of the subscriber variable (on the remote component)
EPTF_Var_Ref varRef,
EPTF_Var_SubscriptionMode subscriptionMode, // sets the subscription mode,
integer refreshRateId // Id of the refresh rate of the subscription in v_syncBuffer
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLineDataItem
//
// Purpose:
// This record defines the item of the TimeLine Data
//
// Elements:
// timestamp - *float* - timestamp: when the value is calculated
// content - <EPTF_Var_DirectContent> - the value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_TimeLineDataItem {
float timestamp,
EPTF_Var_DirectContent content
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLineData
//
// Purpose:
// This record defines the item of the TimeLine Data
//
// Elements:
// timestamp - *float* - timestamp: when the value is calculated
// content - <EPTF_Var_DirectContent> - the value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_TimeLineDataItem EPTF_Var_TimeLineData
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLine
//
// Purpose:
// This record defines the TimeLine for each EPTF Variable
//
// Elements:
// size - *integer* - size of timeLineData
// timeLineData - <EPTF_Var_TimeLineData> - the timeLine data
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_TimeLine {
integer size, //length
EPTF_Var_TimeLineData timeLineData //the time serie
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLineBuffer
//
// Purpose:
// This record defines the TimeLine Buffer for each EPTF Variable
//
// Elements:
// refreshRateId - *integer* - id of the refreshRate in v_syncBuffer
// bufferNum - *integer* - number of buffers that contain references to this timeLine
// if == 0: variable not buffered, timeLine is not updated
// timeLine - <EPTF_Var_TimeLine> - the timeLine
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_TimeLineBuffer {
integer refreshRateId, // id of the refreshRate in v_syncBuffer
integer bufferNum, // number of buffers that contain references to this timeLine(variable) = number of different subscribed components
// if == 0: variable not buffered, timeLine is not updated
EPTF_Var_TimeLine timeLine // buffered timeLine for this variable
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_CompBufferDataItem
//
// Purpose:
// This record defines the data item in the CompBuffer
//
// Elements:
// localIdx - *integer* - which variable: index on the local component
// remoteIdx - *integer* - index of the variable on the remote component
// subscriptionMode - <EPTF_Var_SubscriptionMode> - subscription mode (sampled or timeLine)
// prevContent - <EPTF_DirectContent> *optional* - the previous content of the variable at localIdx (used in sampledAtSync mode)
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_CompBufferDataItem {
integer localIdx, // which variable: index on the local component
integer remoteIdx, // index of the variable on the remote component
EPTF_Var_SubscriptionMode subscriptionMode, // subscription mode (sampled or timeLine)
EPTF_Var_DirectContent prevContent optional // the previous content of the variable at localIdx (used in sampledAtSync mode)
// integer timeIdx //which timeLine item of that variable
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_CompBufferData
//
// Purpose:
// This record defines the EPTF_Var_CompBufferData
//
// Elements:
// -
//
// Detailed Comments:
// list of <EPTF_Var_CompBufferDataItem>
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_CompBufferDataItem EPTF_Var_CompBufferData;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_CompBuffer
//
// Purpose:
// This record defines the CompBuffer
//
// Elements:
// remoteCompRef - <EPTF_Var_CT> - component ref. The buffer will be sent to this component
// flushCounter - *integer* - number of buffer flushes so far (will be sent in the <EPTF_Var_Msg_RefreshTimeLines> message)
// compBufferData - <EPTF_Var_CompBufferData> - buffer for synch. update
//
// Detailed Comments:
// The content of the buffer is sent to the remoteCompRef component periodically
// In each period the buffer content is reset
//
///////////////////////////////////////////////////////////
type record EPTF_Var_CompBuffer {
EPTF_Var_CT remoteCompRef, // component ref. The buffer will be sent to this component
integer flushCounter, // number of buffer flushes so far
EPTF_Var_CompBufferData compBufferData //buffer for synch. update
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncBuffer
//
// Purpose:
// This record defines the EPTF_Var_SyncBuffer
//
// Elements:
// -
//
// Detailed Comments:
// List of <EPTF_Var_CompBuffer>: CompBuffer for all connected components
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_CompBuffer EPTF_Var_SyncBuffer;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLineBufferList
//
// Purpose:
// This record defines the type of timeLineBuffer
//
// Elements:
// -
//
// Detailed Comments:
// List of <EPTF_Var_TimeLineBuffer>: TimeLineBuffer for different refresh rates
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_TimeLineBuffer EPTF_Var_TimeLineBufferList;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncGroupItem
//
// Purpose:
// This record defines the item type of the syncBuffer
//
// Elements:
// refreshRate - *integer* - refresh rate of the subscription (refresh period is: refreshRate * minSyncInterval)
// eventIdx - *integer* - the index of the event scheduled to refresh with the given rate
// syncBuffer - <EPTF_Var_SyncBuffer> - the database for sending timeLines in buffered mode for this refresh rate
//
// Detailed Comments:
// The content of the buffer is sent to the remoteCompRef component periodically
// In each period the buffer content is reset
//
///////////////////////////////////////////////////////////
type record EPTF_Var_SyncGroupItem {
integer refreshRate,
integer eventIdx,
EPTF_Var_SyncBuffer syncBuffer
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncGroupList
//
// Purpose:
// This record defines the type of syncBuffer database for all refresh rates
//
// Elements:
// -
//
// Detailed Comments:
// List of <EPTF_Var_SyncGroupItem>: syncBuffer for different refresh rates
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_SyncGroupItem EPTF_Var_SyncGroupList;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Content
//
// Purpose:
// This union defines the Content type of the EPTF Variables
//
// Elements:
// invalid - <ETPF_Var_NullContent> - if the content is not set
// direct - <EPTF_Var_DirectContent> - direct value
// reference - <EPTF_Var_ReferencedContent> - reference to a value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type union EPTF_Var_Content {
ETPF_Var_NullContent invalid,
EPTF_Var_DirectContent direct,
EPTF_Var_ReferencedContent reference
}
///////////////////////////////////////////////////////////
// Type: ETPF_Var_NullContent
//
// Purpose:
// This is just a dummy record
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record ETPF_Var_NullContent {};
///////////////////////////////////////////////////////////
// Type: EPTF_Var_DirectContent
//
// Purpose:
// This union defines the Direct Content
//
// Elements:
// intVal - *integer* - integer value
// floatVal - *float* - float value
// boolVal - *boolean* - boolean value
// charstringVal - *charstring* - charstring value
// octetstringVal - *octetstring* - octetstring value
// hexstringVal - *hexstring* - hexstring value
// bitstringVal - *bitstring* - bitstring value
// integerlistVal - <EPTF_IntegerList> - EPTF_IntegerList value
// floatlistVal - <EPTF_FloatList> - EPTF_FloatList value
// charstringlistVal - <EPTF_CharstringList> - EPTF_CharstringList value
// statusLEDVal - <EPTF_StatusLED> - EPTF_StatusLED value
//
// ...
//
// unknownVal - <EPTF_Var_UnknownVal> - unknown value
//
//
// Detailed Comments:
// Only the types defined in this union can be used
// to create an EPTF Variable
//
// EPTF_Variable with unknownVal value cannot be created! This is
// used only in functions that pass arguments as EPTF_Var_DirectContent,
// but the value is unknown. This is a workaround for calling
// a function with omit value argument: f(omit), where f(in EPTF_Var_DirectContent).
// The unknownVal value is not used by EPTF_Var at all!
//
///////////////////////////////////////////////////////////
type union EPTF_Var_DirectContent {
// direct value:
integer intVal,
float floatVal,
boolean boolVal,
charstring charstringVal,
octetstring octetstringVal,
hexstring hexstringVal,
bitstring bitstringVal,
EPTF_IntegerList integerlistVal,
EPTF_FloatList floatlistVal,
EPTF_CharstringList charstringlistVal,
EPTF_StatusLED statusLEDVal,
//...
EPTF_Var_UnknownVal unknownVal
//anytype?
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_ReferencedContent
//
// Purpose:
// This record defines the Referenced Content
//
// Elements:
// refType - <EPTF_Var_RefType> - type of the value the reference points to
// valueRef - *octetstring* - the reference (i.e. the pointer) to the value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_ReferencedContent {
// reference:
EPTF_Var_RefType refType, //legyen ez egy enum...
octetstring valueRef
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_UnknownVal
//
// Purpose:
// This record defines the type for unknown DirectContent value
//
// Elements:
// dataType - <EPTF_Var_RefType> - optional, type of the value that is unknown.
// If the type is unknown too, omit should be used.
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_UnknownVal
{
EPTF_Var_RefType dataType optional
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_RefType
//
// Purpose:
// This enumerated defines the Reference type of a Referenced Content variable
//
// Elements:
// intType - integer type
// floatType - float type
// boolType - boolean type
// charstringType - charstring type
// octetstringType - octetstring type
// hexstringType - hexstring type
// bitstringType - bitstring type
// integerlistType - EPTF_IntegerList type
// floatlistType - EPTF_FloatList type
// charstringlistType - EPTF_CharstringList type
// statusLEDType - EPTF_StatusLED type
//
// ...
//
// Detailed Comments:
// Only the types defined in this enum can be used
// to create a referenced-type EPTF Variable
//
///////////////////////////////////////////////////////////
type enumerated EPTF_Var_RefType {
intType,
floatType,
boolType,
charstringType,
octetstringType,
hexstringType,
bitstringType,
integerlistType,
floatlistType,
charstringlistType,
statusLEDType
//...
}
// other enum for anyType?
///////////////////////////////////////////////////////////
// Type: EPTF_Var_CalcFn
//
// Purpose:
// This record defines the CalcFn function with its arguments
//
// Elements:
// funcRef - <EPTF_Var_fcb_CalcFn> - reference to the CalcFn function
// argList - <EPTF_IntegerList> - list of local EPTF Variable indexes used by the CalcFn function
// This list defines also the local providers of the EPTF Variable: if they are refreshed, the current Variable will also be refreshed (i.e. its calcFn will be called)
// nonVarArgList - <EPTF_IntegerList> - list of any other indexes used by the CalcFn function. They do not have to be EPTF Variable indexes.
//
// Detailed Comments:
// This function is used to calculate the value of an EPTF Variable (if it has a local provider)
//
///////////////////////////////////////////////////////////
type record EPTF_Var_CalcFn {
EPTF_Var_fcb_CalcFn funcRef,
EPTF_IntegerList argList,
EPTF_IntegerList nonVarArgList
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_GenericFn
//
// Purpose:
// This record defines a generic function with its argList
//
// Elements:
// funcRef - <EPTF_Var_fcb_GenericFn> - reference to the function
// argList - <EPTF_IntegerList> - list of indexes used by the function. This arglist will be passed to funcRef as its arguments
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_GenericFn {
EPTF_Var_fcb_GenericFn funcRef,
EPTF_IntegerList argList
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_GuardFn
//
// Purpose:
// This record defines the Guard function with its argList
//
// Elements:
// funcRef - <EPTF_Var_fcb_GuardFn> - reference to the Guard function
// argList - <EPTF_IntegerList> - list of local EPTF Variable indexes used by the Guard function
//
// Detailed Comments:
// Called by the library before the value of the EPTF Variable is changed, to check the new value
// before it is written into the content
//
///////////////////////////////////////////////////////////
type record EPTF_Var_GuardFn {
EPTF_Var_fcb_GuardFn funcRef,
EPTF_IntegerList argList
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncState
//
// Purpose:
// The possible syncStates
//
// Elements:
// c_EPTF_Var_syncBegin - before the timelines are sent
// c_EPTF_Var_syncEnd - after the timelines are sent
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type enumerated EPTF_Var_SyncState {
c_EPTF_Var_syncBegin,
c_EPTF_Var_syncEnd
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncCallbackFn
//
// Purpose:
// This record defines a syncCallback function with its argList
//
// Elements:
// funcRef - <EPTF_Var_fcb_SyncCallbackFn> - reference to the function
// argList - <EPTF_IntegerList> - list of indexes used by the function. This arglist will be passed to funcRef as its arguments
// syncState - <EPTF_Var_SyncState> - the function is called only at this syncState. Can be only c_EPTF_Var_syncBegin, or c_EPTF_Var_syncEnd
//
// Detailed Comments:
// These functions are called at the beginning of the sync event used to send timelines.
//
///////////////////////////////////////////////////////////
type record EPTF_Var_SyncCallbackFn {
EPTF_Var_fcb_SyncCallbackFn funcRef,
EPTF_IntegerList argList,
EPTF_Var_SyncState syncState
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncCallbackFnList
//
// Purpose:
// List of SyncCallback functions <EPTF_Var_SyncCallbackFn>
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_SyncCallbackFn EPTF_Var_SyncCallbackFnList;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_SyncCallbackFns
//
// Purpose:
// List of SyncCallback functions <EPTF_Var_SyncCallbackFnList>
// for each refresh rate
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_SyncCallbackFnList EPTF_Var_SyncCallbackFns;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_GenericFns
//
// Purpose:
// List of functions <EPTF_Var_GenericFn>
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_GenericFn EPTF_Var_GenericFns;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_GuardFns
//
// Purpose:
// List of Guard functions <EPTF_Var_GuardFn>
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_GuardFn EPTF_Var_GuardFns;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_fcb_CalcFn
//
// Purpose:
// Function type for the CalcFn function
//
// Elements:
// -
//
// Detailed Comments:
// parameters:
// pl_idx - *integer* - index of the EPTF Variable,
// pl_argList - *in* <EPTF_IntegerList> - the arguments: list of integers that should be EPTF Variable indexes (these Variables are set to the local providers)
// pl_nonVarArgList - *in* <EPTF_IntegerList> - list of any other indexes used by the CalcFn function. They do not have to be EPTF Variable indexes.
// pl_retVal - *inout* <EPTF_Var_DirectContent> - the return value
// When called pl_retVal will contain the current value of the ETPF_Var
// Before the function exits it should set the new value into pl_retVal
//
///////////////////////////////////////////////////////////
type function EPTF_Var_fcb_CalcFn(in integer pl_idx, in EPTF_IntegerList pl_argList, in EPTF_IntegerList pl_nonVarArgList, inout EPTF_Var_DirectContent pl_retVal) runs on self;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_fcb_GenericFn
//
// Purpose:
// Function type for generic function
//
// Elements:
// -
//
// Detailed Comments:
// parameters:
// pl_idx - *integer* - index of the EPTF Variable,
// pl_argList - <EPTF_IntegerList> - the arguments
//
///////////////////////////////////////////////////////////
type function EPTF_Var_fcb_GenericFn(in integer pl_idx, in EPTF_IntegerList pl_argList) runs on self;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_fcb_GuardFn
//
// Purpose:
// Function type for the Guard function
//
// Elements:
// -
//
// Detailed Comments:
// parameters:
// pl_idx - *integer* - index of the EPTF Variable,
// pl_argList - <EPTF_IntegerList> - the arguments
// pl_newContent - <EPTF_Var_DirectContent> - the new value to be checked
// It returns true if new value is allowed, false if not.
//
///////////////////////////////////////////////////////////
type function EPTF_Var_fcb_GuardFn(in integer pl_idx, in EPTF_IntegerList pl_argList, in EPTF_Var_DirectContent pl_newContent) runs on self return boolean;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_fcb_SyncCallbackFn
//
// Purpose:
// Function type for syncCallback function
//
// Elements:
// -
//
// Detailed Comments:
// parameters:
// pl_argList - <EPTF_IntegerList> - the arguments
//
///////////////////////////////////////////////////////////
type function EPTF_Var_fcb_SyncCallbackFn(in EPTF_IntegerList pl_argList) runs on self;
///////////////////////////////////////////////////////////
// Type: EPTF_Vars
//
// Purpose:
// List of all EPTF Variables <EPTF_Var>
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var EPTF_Vars;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_MgmtMsg
//
// Purpose:
// This union defines the management message type sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// isPresentRemote - <EPTF_Var_Msg_IsPresentRemote> - isPresentRemote message: sent to a remote component to check if a variable exits there
// isPresentRemoteResp - <EPTF_Var_Msg_IsPresentRemoteResp> - isPresentRemoteResp message: response to the isPresentRemote from the remote component
// subscribe - <EPTF_Var_Msg_Subscribe> - subscribe message: sent by the subscriber to the provider
// subscribeResp - <EPTF_Var_Msg_SubscribeResp> - subscribeResp message: response to the subscribe from the provider for the subscriber
// unsubscribe - <EPTF_Var_Msg_Unsubscribe> - unsubscribe message: sent by the subscriber to the provider
// setSubsCanAdjust - <EPTF_Var_Msg_SetSubsCanAdjust> - notify message sent for the subscribers with the new content of the setSubsCanAdjust flag
// refreshContent - <EPTF_Var_Msg_RefreshContent> - refreshContent message: notify message sent for the subscribers with the new content
// adjustContent - <EPTF_Var_Msg_AdjustContent> - adjustContent message: notify message sent for the remote provider with the new content
// adjustContentResp - <EPTF_Var_Msg_AdjustContentResp> - adjustContentNack message: notify message sent for the subscriber with the original content if adjust is rejected or not by the guards
// getRemoteContent - <EPTF_Var_Msg_GetRemoteContent> - getRemoteContent message: request the content of a remote EPTF Variable (without subscription)
// getRemoteContentResp - <EPTF_Var_Msg_GetRemoteContentResp> - getRemoteContentResp message: response for the getRemoteContent containing the content
// adjustRemoteContent - <EPTF_Var_Msg_AdjustRemoteContent> - adjustRemoteContent message: adjust the value of an EPTF Variable on a remote component (without subscription)
// adjustRemoteContentResp - <EPTF_Var_Msg_AdjustRemoteContentResp> - adjustRemoteContentResp message: negative response to the adjustRemoteContent message containing the original content
// hello - <EPTF_Var_Msg_Hello> - hello message: notification sent to a component to initiate a connection
// helloAck - <EPTF_Var_Msg_HelloAck> - helloAck message: acknowledge the hello message
// bye - <EPTF_Var_Msg_Bye> - bye message: notification sent to a connected component before termination
// byeAck - <EPTF_Var_Msg_ByeAck> - byeAck message: acknowledge the bye message
// refreshTimeLines - <EPTF_Var_Msg_RefreshTimeLines> - refreshTimeLines message: timeLines sent to the connected components when t_syncTimer expires
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type union EPTF_Var_MgmtMsg {
EPTF_Var_Msg_IsPresentRemote isPresentRemote, // sent to a remote component to check if a variable exits there
EPTF_Var_Msg_IsPresentRemoteResp isPresentRemoteResp, // response to the isPresentRemote from the remote component
EPTF_Var_Msg_Subscribe subscribe, // sent by the subscriber to the provider
EPTF_Var_Msg_SubscribeResp subscribeResp, // response to the subscribe from the provider for the subscriber
EPTF_Var_Msg_Unsubscribe unsubscribe, // sent by the subscriber to the provider
EPTF_Var_Msg_SetSubsCanAdjust setSubsCanAdjust, // notify message sent for the subscribers with the new content of the setSubsCanAdjust flag
EPTF_Var_Msg_RefreshContent refreshContent, // notify message sent for the subscribers with the new content
EPTF_Var_Msg_AdjustContent adjustContent, // notify message sent for the remote provider with the new content
EPTF_Var_Msg_AdjustContentResp adjustContentResp, // notify message sent for the subscriber with the original content if adjust is rejected or not by the guards
EPTF_Var_Msg_GetRemoteContent getRemoteContent, // request the content of a remote EPTF Variable (without subscription)
EPTF_Var_Msg_GetRemoteContentResp getRemoteContentResp, // response for the getRemoteContent containing the content
EPTF_Var_Msg_AdjustRemoteContent adjustRemoteContent, // adjust the value of an EPTF Variable on a remote component (without subscription)
EPTF_Var_Msg_AdjustRemoteContentResp adjustRemoteContentResp, // negative response to the adjustRemoteContent message containing the original content
EPTF_Var_Msg_Hello hello, // notification sent to a component to initiate a connection
EPTF_Var_Msg_HelloAck helloAck, // acknowledge the hello message
EPTF_Var_Msg_Bye bye, // notification sent to a connected component before termination
EPTF_Var_Msg_ByeAck byeAck, // acknowledge the bye message
EPTF_Var_Msg_RefreshTimeLines refreshTimeLines // timeLines sent to the connected components when t_syncTimer expires
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_IsPresentRemote
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_IsPresentRemote sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// remoteVarName - *charstring* - name of the variable to check on the remote component
// blockingFlagIdx - *integer* - the index of the blocking flag
// responseIdx - *integer* - the index of the response data in the boolean pool
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_IsPresentRemote {
charstring remoteVarName, // name of the remote variable
integer blockingFlagIdx, // the index of the blocking flag
integer responseIdx // the index of the response data in the boolean pool
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_Subscribe
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_IsPresentRemoteResp sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// remoteVarName - *charstring* - name of the variable to check on the remote component
// blockingFlagIdx - *integer* - the index of the blocking flag
// responseIdx - *integer* - the index of the response data in the boolean pool
// isPresent - *boolean* - the return value
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_IsPresentRemoteResp {
charstring remoteVarName, // name of the remote variable
integer blockingFlagIdx, // the index of the blocking flag
integer responseIdx, // the index of the response data in the boolean pool
boolean isPresent // true if present, false if not
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_Subscribe
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_Subscribe sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// subscriberVarName - *charstring* - name of the subscriber variable ("" can be used to request the provider to assign the name automatically)
// subscriber - <EPTF_Var_Ref> - the subscriber variable (sender)
// providerVarName - *charstring* - name of the the provider variable (on the provider component)
// subscriptionMode - <EPTF_Var_SubscriptionMode> - sets the subscription mode: if sampled or timeLine, values are also updated in the buffer.timeLine
// refreshRate - *integer* - rate of the refresh (0 for default syncInterval, >0 for multiple times of minSyncInterval)
// blockingFlagIdx - *integer* - the index of the blocking flag (-1 for no block)
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_Subscribe {
charstring subscriberVarName, // name of the subscriber variable ("" can be used to request the provider to assign the name automatically)
EPTF_Var_Ref subscriber, // the subscriber variable (sender)
charstring providerVarName, // name of the the provider variable (on the provider component)
EPTF_Var_SubscriptionMode subscriptionMode, // sets the subscription mode: if sampled or timeLine, values are also updated in the buffer.timeLine
integer refreshRate, // rate of the refresh (0 for default, >0 for multiple times of minSyncInterval)
integer blockingFlagIdx // the index of the blocking flag (-1 for no block)
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_Unsubscribe
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_Unsubscribe sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// subscriber - <EPTF_Var_Ref> - the subscriber variable (sender)
// provider - <EPTF_Var_Ref> - the provider variable (receiver)
// subscriptionMode - <EPTF_Var_SubscriptionMode> - subscription mode
// refreshRate - *integer* - rate of the refresh (0 for default syncInterval, >0 for multiple times of minSyncInterval)
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_Unsubscribe {
EPTF_Var_Ref subscriber,
EPTF_Var_Ref provider,
EPTF_Var_SubscriptionMode subscriptionMode, // subscription mode
integer refreshRate
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_SetSubsCanAdjust
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_SetSubsCanAdjust sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// subscriber - <EPTF_Var_Ref> - the subscriber variable (sender)
// subsCanAdjust - *boolean* - false: disables adjustContent in the subscriber
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_SetSubsCanAdjust {
EPTF_Var_Ref subscriber,
boolean subsCanAdjust
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_SubscribeResp
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_SubscribeResp sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// subscriberVarName - *charstring* - name of the subscriber variable (if a "" was sent to the provider this is where the automatically generated name is returned)
// subscriber - <EPTF_Var_Ref> - the subscriber variable (receiver)
// provider - <EPTF_Var_Ref> - the provider variable (sender), (the provider.idx<0 if subscribe failed)
// timestamp - *float* - the time of the content (for non-realtime subscriptions)
// content - <EPTF_Var_DirectContent> - value of the provider variable (sender) (omit if subscribe failed)
// topProviderType - <EPTF_TopProviderType> - type of the top-provider (owner). Can only be: local/empty (omit if subscribe failed)
// blockingFlagIdx - *integer* - the index of the blocking flag (-1 for no block)
// subsCanAdjust - *boolean* - if false: subscribers cannot adjust the content
//
// Detailed Comments:
// This message is the response for the <EPTF_Var_Msg_Subscribe>
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_SubscribeResp {
charstring subscriberVarName, // name of the subscriber variable (if a "" was sent to the provider this is where the automatically generated name is returned)
EPTF_Var_Ref subscriber, // the subscriber variable (receiver)
EPTF_Var_Ref provider, // the provider variable (sender), (the provider.idx<0 if subscribe failed for non-pull subscription)
float timestamp, // the time of the content (for non-realtime subscriptions)
EPTF_Var_DirectContent content optional, // value of the provider variable (sender) (omit if subscribe failed)
EPTF_TopProviderType topProviderType, // type of the top-provider (owner). Can only be: local/empty (empty if subscribe failed)
integer blockingFlagIdx, // the index of the blocking flag (-1 for no block)
boolean subsCanAdjust // if false: subscribers cannot adjust the content
}
///////////////////////////////////////////////////////////
// Type: EPTF_TopProviderType
//
// Purpose:
// This enum defines the possible types of the top-provider
//
// Elements:
// empty
// local
//
// Detailed Comments:
// Type of the top-provider (owner). Can only be: local/empty
//
///////////////////////////////////////////////////////////
type enumerated EPTF_TopProviderType {
local,
empty
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_RefreshContent
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_RefreshContent sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// subscriber - <EPTF_Var_Ref> - the subscriber variable (receiver)
// content - <EPTF_Var_DirectContent> - value of the provider variable (sender)
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_RefreshContent {
EPTF_Var_Ref subscriber,
EPTF_Var_DirectContent content
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Ref_List
//
// Purpose:
// List of <EPTF_Var_Ref>
//
// Elements:
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_Ref EPTF_Var_Ref_List;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_MessageRoute
//
// Purpose:
// This record defines the route to the remote owner as an EPTF Variable list
//
// Elements:
// varList - <EPTF_Var_Ref_List> - route to the owner
// lastIdx - *integer* - points to the last route element
//
// Detailed Comments:
// Used by the Adjust content mechanism
//
///////////////////////////////////////////////////////////
type record EPTF_Var_MessageRoute {
EPTF_Var_Ref_List varList,
integer lastIdx
}
///////////////////////////////////////////////////////////
// Type: fcb_EPTF_Var_adjustContentNack_handler
//
// Purpose:
// This callback function type defines the type of the function to handle the adjustContentNack
//
// Parameters:
// pl_idx - *integer* - the idx of the EPTF Variable for which the handler is called
// pl_content - <EPTF_Var_DirectContent> - the content that was requested to adjust
// pl_result - *boolean* - result of adjust: true if success, false if failed
// pl_argList - <EPTF_IntegerList> - arguments for the callback function
//
// Detailed Comments:
// This function is called if the adjust for the EPTF Variable with the given content failed
//
///////////////////////////////////////////////////////////
type function fcb_EPTF_Var_adjustContentNack_handler(in integer pl_idx, in EPTF_Var_DirectContent pl_content,in boolean pl_result, in EPTF_IntegerList pl_argList) runs on self;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_adjustContentNack_handler
//
// Purpose:
// This callback function type defines the type of the function to handle the adjustContentNack
//
// Elements:
// handlerFn - <fcb_EPTF_Var_adjustContentNack_handler> - reference to the handler function
// pl_argList - <EPTF_IntegerList> - arguments for the callback function
//
// Detailed Comments:
//
//
///////////////////////////////////////////////////////////
type record EPTF_Var_adjustContentResp_handler {
fcb_EPTF_Var_adjustContentNack_handler handlerFn,
EPTF_IntegerList argList
}
///////////////////////////////////////////////////////////
// Type: fcb_EPTF_Var_resubscribeRemoteResp_handler
//
// Purpose:
// This callback function type defines the type of the function to handle the resubscribeRemoteResp
//
// Parameters:
// pl_idx - *integer* - the idx of the EPTF Variable for which the handler is called
// pl_result - *boolean* - result of subscribe: true if success, false if failed
// pl_argList - <EPTF_IntegerList> - arguments for the callback function
//
// Detailed Comments:
//
//
///////////////////////////////////////////////////////////
type function fcb_EPTF_Var_resubscribeRemoteResp_handler(in integer pl_idx, in boolean pl_result, in EPTF_IntegerList pl_argList) runs on self;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_resubscribeRemoteResp_handler
//
// Purpose:
// It stores the callback function and its arguments
//
// Elements:
// handlerFn - <fcb_EPTF_Var_resubscribeRemoteResp_handler> - reference to the handler function
// pl_argList - <EPTF_IntegerList> - arguments for the callback function
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_resubscribeRemoteResp_handler {
fcb_EPTF_Var_resubscribeRemoteResp_handler handlerFn,
EPTF_IntegerList argList
}
const EPTF_Var_resubscribeRemoteResp_handler cg_EPTF_Var_resubscribeRemoteResp_handler_null := {null,{}}
type record of EPTF_Var_resubscribeRemoteResp_handler EPTF_Var_resubscribeRemoteResp_handler_DB;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_AdjustContent
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_AdjustContent sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// subscribers - <EPTF_Var_MessageRoute> - the list of subscribers from the sender to the owner
// provider - <EPTF_Var_Ref> - the provider variable (receiver)
// content - <EPTF_Var_DirectContent> - the new value to be set
// respHandlerId - *integer* - the Idx in the handler pool of the user handler to call if adjustResp arrives (-1 if no handler should be called)
//
// Detailed Comments:
// This message is a request to adjust the value of an EPTF Variable,
// but which is a remote subscriber
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_AdjustContent {
EPTF_Var_MessageRoute subscribers, // route to sender
EPTF_Var_Ref provider, // receiver
EPTF_Var_DirectContent content,
integer respHandlerId // the Idx in the handler pool of the user handler to call if adjustResp arrives (-1 if no handler should be called)
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_AdjustContentResp
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_AdjustContentResp sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// result - *boolean* - result of adjust: true if adjust succeeded, false if failed
// subscribers - <EPTF_Var_MessageRoute> - the list of subscribers from the sender of the adjust to the owner
// content - <EPTF_Var_DirectContent> - the new value to be set
// respHandlerId - *integer* - the Idx in the handler pool of the user handler to call if adjustResp arrives (-1 if no handler should be called)
//
// Detailed Comments:
// This message is the response to the <EPTF_Var_Msg_AdjustContent> message.
// The original value of an EPTF Variable is returned to the remote subscriber together with the respHandler
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_AdjustContentResp {
boolean result, // result of adjust: true if adjust succeeded, false if failed
EPTF_Var_MessageRoute subscribers, // route to sender
EPTF_Var_DirectContent content,
integer respHandlerId // the Idx in the handler pool of the user handler to call if adjustResp arrives (-1 if no handler should be called)
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_VarId
//
// Purpose:
// This union defines the name or idx of the variable
//
// Elements:
// name - *charstring* - name of the variable on the remote component to the get the value from
// idx - *integer* - the index of the variable
//
// Detailed Comments:
// This union can be used to specify either the name or the idx of a variable
//
///////////////////////////////////////////////////////////
type union EPTF_Var_VarId {
charstring name,
integer idx
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_GetRemoteContent
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_GetRemoteContent sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// name - *charstring* - name of the variable on the remote component to the get the value from
// blockingFlagIdx - *integer* - the index of the blocking flag
// responseIdx - *integer* - the index of the response data in the boolean pool
//
// Detailed Comments:
// This message is a request to query the content of an.
// EPTF Variable on a remote component
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_GetRemoteContent {
EPTF_Var_VarId varId, // name or idx of the variable on the remote component to the get the value from
integer blockingFlagIdx, // the index of the blocking flag
integer responseIdx // the index of the response data in the boolean pool
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_GetRemoteContentResp
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_GetRemoteContentResp sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// content - <EPTF_Var_DirectContent> - the requested content of the EPTF Variable on the remote component (if not available: omit)
// blockingFlagIdx - *integer* - the index of the blocking flag
// responseIdx - *integer* - the index of the response data in the boolean pool
//
// Detailed Comments:
// This message is a response to the <EPTF_Var_Msg_GetRemoteContent> message
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_GetRemoteContentResp {
EPTF_Var_Ref provider optional, // if present it contains the re-routed provider
EPTF_Var_DirectContent content optional, // the requested content of the EPTF Variable on the remote component (if not available: omit)
boolean subsCanAdjust optional, // subsCanAdjust flag (if not available: omit)
integer blockingFlagIdx, // the index of the blocking flag
integer responseIdx // the index of the response data in the boolean pool
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_AdjustRemoteContent
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_AdjustRemoteContent sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// name - *charstring* - name of the variable on the remote component to the adjust the value of
// content - <EPTF_Var_DirectContent> - the new value to be set
// respHandlerId - *integer* - the Idx in the handler pool of the user handler to call if adjustResp arrives (-1 if no handler should be called)
// blockingFlagIdx - *integer* - the index of the blocking flag
// responseIdx - *integer* - the index of the response data in the boolean pool
//
// Detailed Comments:
// This message is a request to adjust the value of an EPTF Variable
// on a remote component without subscription
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_AdjustRemoteContent {
EPTF_Var_VarId varId, // name or idx of the variable on the remote component to the adjust the value of
EPTF_Var_DirectContent content, // the new value to be set
integer respHandlerId, // the Idx in the handler pool of the user handler to call if adjustResp arrives (-1 if no handler should be called)
integer blockingFlagIdx, // the index of the blocking flag
integer responseIdx // the index of the response data in the boolean pool
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_AdjustRemoteContentResp
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_AdjustRemoteContentResp sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// adjust - <EPTF_Var_Msg_AdjustRemoteContent> - the original adjust message
// result - *boolean* - true if success, false if adjust failed
//
// Detailed Comments:
// This message is a response to the <EPTF_Var_Msg_AdjustRemoteContent> message.
// The adjusted value of an EPTF Variable is returned to the sender
// If remote content not available content set to omit.
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_AdjustRemoteContentResp {
EPTF_Var_Msg_AdjustRemoteContent adjust, // the original adjust message
boolean result // true if success, false if adjust failed
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_Hello
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_Hello sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// trId - *integer* - transaction ID
//
// Detailed Comments:
// This message is sent to an EPTF_Var_CT component
// to establish new connection towards another EPTF_Var_CT component
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_Hello {
integer trId
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_HelloAck
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_HelloAck sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// -
//
// Detailed Comments:
// This message is a response to the <EPTF_Var_Msg_HelloAck> message
//
///////////////////////////////////////////////////////////
type EPTF_Var_Msg_Hello EPTF_Var_Msg_HelloAck;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_Bye
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_Bye sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// -
//
// Detailed Comments:
// This message is sent to all connected EPTF_Var_CT components
// before the EPTF_Var_CT component terminates
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_Bye {
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_ByeAck
//
// Purpose:
// This record defines the management message EPTF_Var_Msg_ByeAck sent/received by the <EPTF_Var_Mgmt_PT>
//
// Elements:
// -
//
// Detailed Comments:
// This message is a response to the <EPTF_Var_Msg_ByeAck> message
//
///////////////////////////////////////////////////////////
type EPTF_Var_Msg_Bye EPTF_Var_Msg_ByeAck;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLineItem
//
// Purpose:
// This record defines one item in the <EPTF_Var_Msg_RefreshTimeLines>
//
// Elements:
// idx - *integer* - index of the variable at the remote component
// timeLine - <EPTF_Var_TimeLine> - timeLine of the variable
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_TimeLineItem {
integer idx, // index of the variable at the remote component
EPTF_Var_TimeLine timeLine // timeLine of the variable
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_TimeLineList
//
// Purpose:
// List of <EPTF_Var_TimeLineItem>
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_TimeLineItem EPTF_Var_TimeLineList;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Msg_RefreshTimeLines
//
// Purpose:
// The message type for sending buffered timeLines to component periodically
//
// Elements:
// refreshRate - *integer* - refresh rate
// flushCounter - *integer* - number of refreshes
// timeLineList - <EPTF_Var_TimeLineList> - timeLine of variables
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type record EPTF_Var_Msg_RefreshTimeLines
{
integer refreshRate,
integer flushCounter,
EPTF_Var_TimeLineList timeLineList
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_GetRemoteContentResultList
//
// Purpose:
// List of <EPTF_Var_GetRemoteContentResult>
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_GetRemoteContentResult EPTF_Var_GetRemoteContentResultList;
type record EPTF_Var_GetRemoteContentResult {
EPTF_Var_Ref provider,
EPTF_Var_DirectContent content,
boolean subsCanAdjust
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Mgmt_PT
//
// Purpose:
// The management port of EPTF Variable component
//
// Elements:
// -
//
// Detailed Comments:
//
///////////////////////////////////////////////////////////
type port EPTF_Var_Mgmt_PT message {
inout EPTF_Var_MgmtMsg;
} with {extension "internal"}
type record EPTF_Var_Msg_BufferItem {
EPTF_Var_MgmtMsg msg,
EPTF_Var_CT destinationCompRef
}
type record of EPTF_Var_Msg_BufferItem EPTF_Var_Msg_Buffer;
type record of EPTF_Var_Msg_Buffer EPTF_Var_Msg_Buffer_DB;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_ConnectionState
//
// Purpose:
// This enum defines the possible types of connections
//
// Elements:
// idle - there is no connection to the remote component
// connected - connected to the remote component
// terminated - the remote component has terminated, no more interaction with the remote component is possible
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
type enumerated EPTF_Var_ConnectionState {
idle, // there is no connection to the remote component
connected, // connected to the remote component
terminated // the remote component has terminated, no more interaction with the remote component is possible
}
///////////////////////////////////////////////////////////
// Type: EPTF_Var_Connections
//
// Purpose:
// List of <EPTF_Var_ConnectionState>
//
///////////////////////////////////////////////////////////
type record of EPTF_Var_ConnectionState EPTF_Var_Connections;
///////////////////////////////////////////////////////////
// Type: EPTF_Var_CT
//
// Purpose:
// The component that implements the EPTF Variable feature
//
// Elements:
// EPTF_Var_MgmtIf - <EPTF_Var_Mgmt_PT> - the management port
// v_initialized - *boolean* - prevents multiple init by calling <f_EPTF_Var_init_CT> several times
//
// v_EPTF_Var_enableName2Id - *boolean* - if true hashmap database is maintained to get the id from a variable name
// v_EPTF_Var_enableCompRef2Id - *boolean* - if true hashmap database is maintained to get the id from a component variable
// v_EPTF_Var_Hashmap_Name2Id - *integer* - the id of the Name2Id hashmap
// v_EPTF_Var_Hashmap_CompRef2Id - *integer* - the id of the CompRef2Id hashmap
// v_EPTF_Var_Hashmap_Provider2Id - *integer* - the id of the Provider2Id hashmap
//
// v_EPTF_Var_Hashmap_SyncBuffer - *integer* - the id of the SyncBuffer hashmap to speed up f_EPTF_Var_registerBufferedVar function
//
// v_EPTF_Vars - <EPTF_Vars> - the database of EPTF Variables
// v_syncBuffer - <EPTF_Var_SyncGroupList> - the database for sending timeLines in buffered mode for each refreshRate
// v_syncInterval - *float* - the period of sending the timeLines
// v_minSyncInterval - *float* - the minimal period of sending the timeLines
// v_Var_maxWaitTime - *float* - maximal waiting time for responses
// v_EPTF_Var_syncCallbackFns - <EPTF_Var_SyncCallbackFns> - list of syncCallback functions that are called at the sync event
// v_EPTF_Var_varsToSave - <EPTF_CharstringList> - list of variable names that will be saved
// v_Var_loggingMaskId - *integer* - logging component mask ID
// v_EPTF_Var_pendingByeNum - *integer* - number of pending bye messages
// v_EPTF_Var_getRemoteContentResultList - <EPTF_Var_GetRemoteContentResultList> - stores the response of the getRemoteContent (indexed by responseIdx)
//
// v_EPTF_Var_varsToUpdate - <EPTF_IntegerList> - ordered list of variables that should be updated during refresh
// v_EPTF_Var_refreshSubscribersPeriod - *float* - component var to store the tsp_EPTF_Var_refreshSubscribersPeriod
// t_EPTF_Var_refreshSubscribers - *timer* - the event timer for updating variables in the varsToUpdate list
//
// v_EPTF_Var_numPendingHellos - *integer* - number of pending hello messages
// v_EPTF_Var_maxWaitTimeForByeAck - *float* - the maximum waiting time for ByeAck messages during cleanup (default: 10.5)
//
// Detailed Comments:
// To use the EPTF Varibles, extend your component with <EPTF_Var_CT>
//
///////////////////////////////////////////////////////////
type component EPTF_Var_CT extends EPTF_Base_CT, EPTF_Logging_CT, EPTF_Scheduler_CT, EPTF_HashMap_CT, EPTF_FBQ_CT {
private port EPTF_Var_Mgmt_PT EPTF_Var_MgmtIf; // management interface of EPTF_Var_CT
private var boolean v_EPTF_Var_initialized := false; // prevents multiple init by calling <f_EPTF_Var_init_CT> several times
private var boolean v_EPTF_Var_enableName2Id := false; // if true hashmap database is maintained to get the id from a variable name
private var boolean v_EPTF_Var_enableCompRef2Id := false; // if true hashmap database is maintained to get the id from a component variable
private var integer v_EPTF_Var_Hashmap_Name2Id := -1; // the id of the Name2Id hashmap
private var integer v_EPTF_Var_Hashmap_CompRef2Id := -1; // the id of the CompRef2Id hashmap
private var integer v_EPTF_Var_Hashmap_Provider2Id := -1; // the id of the Provider2Id hashmap
private var integer v_EPTF_Var_Hashmap_SyncBuffer := -1; // the id of the SyncBuffer hashmap to speed up f_EPTF_Var_registerBufferedVar function
private var EPTF_Vars v_EPTF_Vars := {}; // list of all EPTF variables
private var EPTF_Var_SyncGroupList v_syncBuffer := {}; // contains the remote component data for each comp (timeLine references) for each refreshRate
private var float v_syncInterval := tsp_EPTF_Var_SyncInterval;
private var float v_minSyncInterval := tsp_EPTF_ELEMENTARY_TIMESTEP_PARAM;
private var float v_Var_maxWaitTime := 120.0;
private var default v_EPTF_Var_def; // the default altstep
private var EPTF_Var_adjustContentResp_handlerPool adjustContentResp_handler_ParamStack;// pool for EPTF_Var_adjustContentResp_handler param stack
private var booleanPool v_booleanPool; // pool for type boolean (contains the blocking semaphores)
private var EPTF_Var_SyncCallbackFns v_EPTF_Var_syncCallbackFns := {}; // list of syncCallback functions that are called at the sync event
private var EPTF_CharstringList v_EPTF_Var_varsToSave := {}; // list of variable names that will be saved
private var integer v_EPTF_Var_pendingByeNum := 0; // number of pending bye messages
private var EPTF_Var_GetRemoteContentResultList v_EPTF_Var_getRemoteContentResultList := {}; // stores the response of the getRemoteContent (indexed by responseIdx)
//refreshOptimization:
private var EPTF_IntegerList v_EPTF_Var_varsToUpdate := {}; // ordered list of variables that should be updated during refresh
private var float v_EPTF_Var_refreshSubscribersPeriod := tsp_EPTF_Var_refreshSubscribersPeriod; // component var to store the tsp_EPTF_Var_refreshSubscribersPeriod
private timer t_EPTF_Var_refreshSubscribers := 1.00; // the event timer for updating variables in the varsToUpdate list
private var integer v_EPTF_Var_numPendingHellos := 0; // number of pending hello messages
private var float v_EPTF_Var_maxWaitTimeForByeAck := 10.5; // the maximum waiting time for ByeAck messages during cleanup
// logging
private var integer v_Var_loggingMaskId := c_EPTF_Logging_invalidMaskId;
//message buffering:
private var EPTF_Var_Msg_Buffer v_EPTF_Var_Msg_Buffer := {}; // message buffer for Var messages
private timer t_EPTF_Var_Msg_Buffer_timer := 0.0; // timer for getData message buffer handling
private var integer v_EPTF_Var_Msg_BufferBurstSize := tsp_EPTF_Var_Msg_maxBurstSize;
private var integer v_EPTF_Var_nofPendingMsgs := 0; // pending msg request sent to other components
private var integer v_EPTF_Var_maxNofPendingMsgs := tsp_EPTF_Var_maxNofPendingMsgs; // if nof pending msgs reaches this threshold, no more msgs sent
private var integer v_EPTF_Var_Msg_BufferStartIdx := 0; // pointer to the start of the buffer
//connection DB:
private var EPTF_Var_Connections v_EPTF_Var_Connections := {}; // indexed by the remote component ref; shows the connection state
// database for resubscribe response handlers
private var EPTF_Var_resubscribeRemoteResp_handler_DB v_EPTF_Var_resubscribeRemoteResp_handler_DB := {};
// buffer to store messages until the HelloAck arrives
private var EPTF_Var_Msg_Buffer_DB v_EPTF_Var_msgBufferBeforeConnect := {};
// this flag indicates whether the f_EPTF_Var_connectCallback needs to be called in f_EPTF_Var_handle_HelloAck, true in case of nonblocking mode
private var EPTF_BooleanList v_EPTF_Var_nonBlockingEnabled := {};
}
const charstring c_EPTF_Var_whitespace := "[ \t]#(,)" // whitespace
const charstring c_EPTF_Var_anyWord := c_EPTF_Var_whitespace&"([^ \t]#(1,))"&c_EPTF_Var_whitespace; // pattern: " any_word "
const charstring c_EPTF_Var_everything := "(*)" // everything
const charstring c_EPTF_Var_integerNumber := "([+-]#(0,1)[0-9]#(1,))"; // integer number: "01230102", "+1122", "-0121"
const charstring c_EPTF_Var_floatNumber := "([+-]#(0,1)[0-9]#(1,)[.]#(0,1)[0-9]#(0,)([eE][-+]#(0,1)[0-9]#(1,))#(0,1))"; // float number: "12.354", "-1.23", "+1.254", "-1e-2", 2.32e+4 Contains 2 groups!!! The first is the float number itself, the second is the exponent
const charstring c_EPTF_Var_charstringValue := """"&"([^""]#(0,))"""; // charstring number: "\"abcd 123-+\""
const charstring c_EPTF_Var_bitstringNumber := "([01]#(,))"; // bitstring number: 0101
const charstring c_EPTF_Var_hexstringNumber := "([0-9a-fA-F]#(,))"; // hexstring number: 0123456789ABCDEF
const charstring c_EPTF_Var_octetstringNumber := "(([0-9a-fA-F]#(2,2))#(,))"; // octetstring number: 0123456789ABCDEF
///////////////////////////////////////////////////////////
// Constant: c_EPTF_Var_loggingEventClasses
//
// Purpose:
// list of logging event class names used on the Variable
//
// Detailed Comments:
// <EPTF_Logging_EventClassPrefixList> { "Warning", "Debug" }
///////////////////////////////////////////////////////////
const EPTF_Logging_EventClassPrefixList c_EPTF_Var_loggingEventClasses := { "Warning", "Debug" };
///////////////////////////////////////////////////////////
// Constant: c_EPTF_Var_loggingClassIdx_Warning
//
// Purpose:
// logging class index for Error
//
// Detailed Comments:
// *0*
///////////////////////////////////////////////////////////
const integer c_EPTF_Var_loggingClassIdx_Warning := 0;
///////////////////////////////////////////////////////////
// Constant: c_EPTF_Var_loggingClassIdx_Debug
//
// Purpose:
// logging class index for Error
//
// Detailed Comments:
// *1*
///////////////////////////////////////////////////////////
const integer c_EPTF_Var_loggingClassIdx_Debug := 1;
} // end of module