diff --git a/examples/server_example_service_tracking/server_example_service_tracking.c b/examples/server_example_service_tracking/server_example_service_tracking.c
index 89e2eabe..3d7fd414 100644
--- a/examples/server_example_service_tracking/server_example_service_tracking.c
+++ b/examples/server_example_service_tracking/server_example_service_tracking.c
@@ -25,6 +25,77 @@ sigint_handler(int signalId)
running = 0;
}
+typedef struct {
+ float strVal;
+ int opDlTmms;
+ int rsDlTmms;
+ int rstTms;
+} PTOC1Settings;
+
+static PTOC1Settings ptoc1Settings[] = {
+ {1.0f, 500, 500, 500},
+ {2.0f, 1500, 2500, 750},
+ {3.0f, 500, 1500, 750},
+ {3.5f, 1250, 1750, 500},
+ {3.75f, 1250, 1750, 750}
+};
+
+static void
+loadActiveSgValues (int actSG)
+{
+ IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_PTOC1_StrVal_setMag_f, ptoc1Settings[actSG - 1].strVal);
+ IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_PTOC1_OpDlTmms_setVal, ptoc1Settings[actSG - 1].opDlTmms);
+ IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_PTOC1_RsDlTmms_setVal, ptoc1Settings[actSG - 1].rsDlTmms);
+ IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_PTOC1_RstTms_setVal, ptoc1Settings[actSG - 1].rstTms);
+}
+
+static void
+loadEditSgValues (int editSG)
+{
+ IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_SE_GenericIO_PTOC1_StrVal_setMag_f, ptoc1Settings[editSG - 1].strVal);
+ IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_SE_GenericIO_PTOC1_OpDlTmms_setVal, ptoc1Settings[editSG - 1].opDlTmms);
+ IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_SE_GenericIO_PTOC1_RsDlTmms_setVal, ptoc1Settings[editSG - 1].rsDlTmms);
+ IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_SE_GenericIO_PTOC1_RstTms_setVal, ptoc1Settings[editSG - 1].rstTms);
+}
+
+static bool
+activeSgChangedHandler (void* parameter, SettingGroupControlBlock* sgcb,
+ uint8_t newActSg, ClientConnection connection)
+{
+ printf("Switch to setting group %i\n", (int) newActSg);
+
+ loadActiveSgValues(newActSg);
+
+ return true;
+}
+
+static bool
+editSgChangedHandler (void* parameter, SettingGroupControlBlock* sgcb,
+ uint8_t newEditSg, ClientConnection connection)
+{
+ printf("Set edit setting group to %i\n", (int) newEditSg);
+
+ loadEditSgValues(newEditSg);
+
+ return true;
+}
+
+static void
+editSgConfirmedHandler(void* parameter, SettingGroupControlBlock* sgcb,
+ uint8_t editSg)
+{
+ printf("Received edit sg confirm for sg %i\n", editSg);
+
+ ptoc1Settings[editSg - 1].strVal = MmsValue_toFloat(IEDMODEL_SE_GenericIO_PTOC1_StrVal_setMag_f->mmsValue);
+ ptoc1Settings[editSg - 1].opDlTmms = MmsValue_toInt32(IEDMODEL_SE_GenericIO_PTOC1_OpDlTmms_setVal->mmsValue);
+ ptoc1Settings[editSg - 1].rsDlTmms = MmsValue_toInt32(IEDMODEL_SE_GenericIO_PTOC1_RsDlTmms_setVal->mmsValue);
+ ptoc1Settings[editSg - 1].rstTms = MmsValue_toInt32(IEDMODEL_SE_GenericIO_PTOC1_RstTms_setVal->mmsValue);
+
+ if (IedServer_getActiveSettingGroup(iedServer, sgcb) == editSg) {
+ loadActiveSgValues(editSg);
+ }
+}
+
static ControlHandlerResult
controlHandlerForBinaryOutput(ControlAction action, void* parameter, MmsValue* value, bool test)
{
@@ -115,6 +186,14 @@ main(int argc, char** argv)
/* configuration object is no longer required */
IedServerConfig_destroy(config);
+ SettingGroupControlBlock* sgcb = LogicalDevice_getSettingGroupControlBlock(IEDMODEL_GenericIO);
+
+ loadActiveSgValues(sgcb->actSG);
+
+ IedServer_setActiveSettingGroupChangedHandler(iedServer, sgcb, activeSgChangedHandler, NULL);
+ IedServer_setEditSettingGroupChangedHandler(iedServer, sgcb, editSgChangedHandler, NULL);
+ IedServer_setEditSettingGroupConfirmationHandler(iedServer, sgcb, editSgConfirmedHandler, NULL);
+
if (argc > 1) {
char* ethernetIfcID = argv[1];
diff --git a/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd b/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd
index b1a31058..229ccbba 100644
--- a/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd
+++ b/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd
@@ -106,6 +106,8 @@
+
+
on
@@ -183,6 +185,7 @@
+
@@ -218,6 +221,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -227,7 +240,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -355,6 +386,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -564,5 +613,11 @@
TimeSynchronisation
InternalChange
+
+ unknown
+ forward
+ backward
+ both
+
diff --git a/examples/server_example_service_tracking/static_model.c b/examples/server_example_service_tracking/static_model.c
index 7a548eca..5b735ced 100644
--- a/examples/server_example_service_tracking/static_model.c
+++ b/examples/server_example_service_tracking/static_model.c
@@ -679,7 +679,7 @@ LogicalNode iedModel_GenericIO_GGIO1 = {
LogicalNodeModelType,
"GGIO1",
(ModelNode*) &iedModel_GenericIO,
- (ModelNode*) &iedModel_GenericIO_LTRK1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
(ModelNode*) &iedModel_GenericIO_GGIO1_Mod,
};
@@ -2088,6 +2088,398 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = {
NULL,
0};
+LogicalNode iedModel_GenericIO_PTOC1 = {
+ LogicalNodeModelType,
+ "PTOC1",
+ (ModelNode*) &iedModel_GenericIO,
+ (ModelNode*) &iedModel_GenericIO_LTRK1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod,
+};
+
+DataObject iedModel_GenericIO_PTOC1_Mod = {
+ DataObjectModelType,
+ "Mod",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod_stVal,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_Mod_stVal = {
+ DataAttributeModelType,
+ "stVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod_q,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_ENUMERATED,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Mod_q = {
+ DataAttributeModelType,
+ "q",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod_t,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_QUALITY,
+ 0 + TRG_OPT_QUALITY_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Mod_t = {
+ DataAttributeModelType,
+ "t",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod_ctlModel,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_TIMESTAMP,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Mod_ctlModel = {
+ DataAttributeModelType,
+ "ctlModel",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Mod,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_CF,
+ IEC61850_ENUMERATED,
+ 0,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_Beh = {
+ DataObjectModelType,
+ "Beh",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh_stVal,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_Beh_stVal = {
+ DataAttributeModelType,
+ "stVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh_q,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_ENUMERATED,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Beh_q = {
+ DataAttributeModelType,
+ "q",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh_t,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_QUALITY,
+ 0 + TRG_OPT_QUALITY_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Beh_t = {
+ DataAttributeModelType,
+ "t",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Beh,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_TIMESTAMP,
+ 0,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_Str = {
+ DataObjectModelType,
+ "Str",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str_general,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_Str_general = {
+ DataAttributeModelType,
+ "general",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str_dirGeneral,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_BOOLEAN,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Str_dirGeneral = {
+ DataAttributeModelType,
+ "dirGeneral",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str_q,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_ENUMERATED,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Str_q = {
+ DataAttributeModelType,
+ "q",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str_t,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_QUALITY,
+ 0 + TRG_OPT_QUALITY_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Str_t = {
+ DataAttributeModelType,
+ "t",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Str,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_TIMESTAMP,
+ 0,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_Op = {
+ DataObjectModelType,
+ "Op",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_StrVal,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op_general,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_Op_general = {
+ DataAttributeModelType,
+ "general",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op_q,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_BOOLEAN,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Op_q = {
+ DataAttributeModelType,
+ "q",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op_t,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_QUALITY,
+ 0 + TRG_OPT_QUALITY_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_Op_t = {
+ DataAttributeModelType,
+ "t",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_Op,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_ST,
+ IEC61850_TIMESTAMP,
+ 0,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_StrVal = {
+ DataObjectModelType,
+ "StrVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_OpDlTmms,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_StrVal_setMag,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_StrVal_setMag = {
+ DataAttributeModelType,
+ "setMag",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_StrVal,
+ (ModelNode*) &iedModel_SE_GenericIO_PTOC1_StrVal_setMag,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_StrVal_setMag_f,
+ 0,
+ IEC61850_FC_SG,
+ IEC61850_CONSTRUCTED,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_PTOC1_StrVal_setMag_f = {
+ DataAttributeModelType,
+ "f",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_StrVal_setMag,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_SG,
+ IEC61850_FLOAT32,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_SE_GenericIO_PTOC1_StrVal_setMag = {
+ DataAttributeModelType,
+ "setMag",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_StrVal,
+ NULL,
+ (ModelNode*) &iedModel_SE_GenericIO_PTOC1_StrVal_setMag_f,
+ 0,
+ IEC61850_FC_SE,
+ IEC61850_CONSTRUCTED,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_SE_GenericIO_PTOC1_StrVal_setMag_f = {
+ DataAttributeModelType,
+ "f",
+ (ModelNode*) &iedModel_SE_GenericIO_PTOC1_StrVal_setMag,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_SE,
+ IEC61850_FLOAT32,
+ 0,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_OpDlTmms = {
+ DataObjectModelType,
+ "OpDlTmms",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RsDlTmms,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_OpDlTmms_setVal,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_OpDlTmms_setVal = {
+ DataAttributeModelType,
+ "setVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_OpDlTmms,
+ (ModelNode*) &iedModel_SE_GenericIO_PTOC1_OpDlTmms_setVal,
+ NULL,
+ 0,
+ IEC61850_FC_SG,
+ IEC61850_INT32,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_SE_GenericIO_PTOC1_OpDlTmms_setVal = {
+ DataAttributeModelType,
+ "setVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_OpDlTmms,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_SE,
+ IEC61850_INT32,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_RsDlTmms = {
+ DataObjectModelType,
+ "RsDlTmms",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RstTms,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RsDlTmms_setVal,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_RsDlTmms_setVal = {
+ DataAttributeModelType,
+ "setVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RsDlTmms,
+ (ModelNode*) &iedModel_SE_GenericIO_PTOC1_RsDlTmms_setVal,
+ NULL,
+ 0,
+ IEC61850_FC_SG,
+ IEC61850_INT32,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_SE_GenericIO_PTOC1_RsDlTmms_setVal = {
+ DataAttributeModelType,
+ "setVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RsDlTmms,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_SE,
+ IEC61850_INT32,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataObject iedModel_GenericIO_PTOC1_RstTms = {
+ DataObjectModelType,
+ "RstTms",
+ (ModelNode*) &iedModel_GenericIO_PTOC1,
+ NULL,
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RstTms_setVal,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_PTOC1_RstTms_setVal = {
+ DataAttributeModelType,
+ "setVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RstTms,
+ (ModelNode*) &iedModel_SE_GenericIO_PTOC1_RstTms_setVal,
+ NULL,
+ 0,
+ IEC61850_FC_SG,
+ IEC61850_INT32,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
+DataAttribute iedModel_SE_GenericIO_PTOC1_RstTms_setVal = {
+ DataAttributeModelType,
+ "setVal",
+ (ModelNode*) &iedModel_GenericIO_PTOC1_RstTms,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_SE,
+ IEC61850_INT32,
+ 0 + TRG_OPT_DATA_CHANGED,
+ NULL,
+ 0};
+
LogicalNode iedModel_GenericIO_LTRK1 = {
LogicalNodeModelType,
"LTRK1",
@@ -3775,7 +4167,7 @@ DataObject iedModel_GenericIO_LTRK1_GocbTrk = {
DataObjectModelType,
"GocbTrk",
(ModelNode*) &iedModel_GenericIO_LTRK1,
- NULL,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
(ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_objRef,
0
};
@@ -3988,6 +4380,223 @@ DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dstAddress = {
NULL,
0};
+DataObject iedModel_GenericIO_LTRK1_SgcbTrk = {
+ DataObjectModelType,
+ "SgcbTrk",
+ (ModelNode*) &iedModel_GenericIO_LTRK1,
+ NULL,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_objRef,
+ 0
+};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_objRef = {
+ DataAttributeModelType,
+ "objRef",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_serviceType,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_VISIBLE_STRING_129,
+ 0 + TRG_OPT_DATA_UPDATE,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_serviceType = {
+ DataAttributeModelType,
+ "serviceType",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_errorCode,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_ENUMERATED,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_errorCode = {
+ DataAttributeModelType,
+ "errorCode",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_originatorID,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_ENUMERATED,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_originatorID = {
+ DataAttributeModelType,
+ "originatorID",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_t,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_OCTET_STRING_64,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_t = {
+ DataAttributeModelType,
+ "t",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_d,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_TIMESTAMP,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_d = {
+ DataAttributeModelType,
+ "d",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_dU,
+ NULL,
+ 0,
+ IEC61850_FC_DC,
+ IEC61850_VISIBLE_STRING_255,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_dU = {
+ DataAttributeModelType,
+ "dU",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_cdcNs,
+ NULL,
+ 0,
+ IEC61850_FC_DC,
+ IEC61850_UNICODE_STRING_255,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_cdcNs = {
+ DataAttributeModelType,
+ "cdcNs",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_cdcName,
+ NULL,
+ 0,
+ IEC61850_FC_EX,
+ IEC61850_VISIBLE_STRING_255,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_cdcName = {
+ DataAttributeModelType,
+ "cdcName",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_dataNs,
+ NULL,
+ 0,
+ IEC61850_FC_EX,
+ IEC61850_VISIBLE_STRING_255,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_dataNs = {
+ DataAttributeModelType,
+ "dataNs",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_numOfSG,
+ NULL,
+ 0,
+ IEC61850_FC_EX,
+ IEC61850_VISIBLE_STRING_255,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_numOfSG = {
+ DataAttributeModelType,
+ "numOfSG",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_actSG,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_INT8U,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_actSG = {
+ DataAttributeModelType,
+ "actSG",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_editSG,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_INT8U,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_editSG = {
+ DataAttributeModelType,
+ "editSG",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_cnfEdit,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_INT8U,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_cnfEdit = {
+ DataAttributeModelType,
+ "cnfEdit",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_lActTm,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_BOOLEAN,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_lActTm = {
+ DataAttributeModelType,
+ "lActTm",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk_resvTms,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_TIMESTAMP,
+ 0,
+ NULL,
+ 0};
+
+DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_resvTms = {
+ DataAttributeModelType,
+ "resvTms",
+ (ModelNode*) &iedModel_GenericIO_LTRK1_SgcbTrk,
+ NULL,
+ NULL,
+ 0,
+ IEC61850_FC_SR,
+ IEC61850_INT16U,
+ 0,
+ NULL,
+ 0};
+
extern ReportControlBlock iedModel_GenericIO_LLN0_report0;
extern ReportControlBlock iedModel_GenericIO_LLN0_report1;
extern ReportControlBlock iedModel_GenericIO_LLN0_report2;
@@ -4022,6 +4631,9 @@ static PhyComAddress iedModel_GenericIO_LLN0_gse0_address = {
GSEControlBlock iedModel_GenericIO_LLN0_gse0 = {&iedModel_GenericIO_LLN0, "gcbEvents", "events", "Events", 3, false, &iedModel_GenericIO_LLN0_gse0_address, 1000, 3000, NULL};
+extern SettingGroupControlBlock iedModel_GenericIO_LLN0_sgcb;
+
+SettingGroupControlBlock iedModel_GenericIO_LLN0_sgcb = {&iedModel_GenericIO_LLN0, 1, 5, 0, false, 0, 0, NULL};
@@ -4033,7 +4645,7 @@ IedModel iedModel = {
&iedModel_GenericIO_LLN0_report0,
&iedModel_GenericIO_LLN0_gse0,
NULL,
- NULL,
+ &iedModel_GenericIO_LLN0_sgcb,
NULL,
NULL,
initializeValues
diff --git a/examples/server_example_service_tracking/static_model.h b/examples/server_example_service_tracking/static_model.h
index f3f367ef..31868808 100644
--- a/examples/server_example_service_tracking/static_model.h
+++ b/examples/server_example_service_tracking/static_model.h
@@ -157,6 +157,39 @@ extern DataObject iedModel_GenericIO_GGIO1_Ind4;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t;
+extern LogicalNode iedModel_GenericIO_PTOC1;
+extern DataObject iedModel_GenericIO_PTOC1_Mod;
+extern DataAttribute iedModel_GenericIO_PTOC1_Mod_stVal;
+extern DataAttribute iedModel_GenericIO_PTOC1_Mod_q;
+extern DataAttribute iedModel_GenericIO_PTOC1_Mod_t;
+extern DataAttribute iedModel_GenericIO_PTOC1_Mod_ctlModel;
+extern DataObject iedModel_GenericIO_PTOC1_Beh;
+extern DataAttribute iedModel_GenericIO_PTOC1_Beh_stVal;
+extern DataAttribute iedModel_GenericIO_PTOC1_Beh_q;
+extern DataAttribute iedModel_GenericIO_PTOC1_Beh_t;
+extern DataObject iedModel_GenericIO_PTOC1_Str;
+extern DataAttribute iedModel_GenericIO_PTOC1_Str_general;
+extern DataAttribute iedModel_GenericIO_PTOC1_Str_dirGeneral;
+extern DataAttribute iedModel_GenericIO_PTOC1_Str_q;
+extern DataAttribute iedModel_GenericIO_PTOC1_Str_t;
+extern DataObject iedModel_GenericIO_PTOC1_Op;
+extern DataAttribute iedModel_GenericIO_PTOC1_Op_general;
+extern DataAttribute iedModel_GenericIO_PTOC1_Op_q;
+extern DataAttribute iedModel_GenericIO_PTOC1_Op_t;
+extern DataObject iedModel_GenericIO_PTOC1_StrVal;
+extern DataAttribute iedModel_GenericIO_PTOC1_StrVal_setMag;
+extern DataAttribute iedModel_GenericIO_PTOC1_StrVal_setMag_f;
+extern DataAttribute iedModel_SE_GenericIO_PTOC1_StrVal_setMag;
+extern DataAttribute iedModel_SE_GenericIO_PTOC1_StrVal_setMag_f;
+extern DataObject iedModel_GenericIO_PTOC1_OpDlTmms;
+extern DataAttribute iedModel_GenericIO_PTOC1_OpDlTmms_setVal;
+extern DataAttribute iedModel_SE_GenericIO_PTOC1_OpDlTmms_setVal;
+extern DataObject iedModel_GenericIO_PTOC1_RsDlTmms;
+extern DataAttribute iedModel_GenericIO_PTOC1_RsDlTmms_setVal;
+extern DataAttribute iedModel_SE_GenericIO_PTOC1_RsDlTmms_setVal;
+extern DataObject iedModel_GenericIO_PTOC1_RstTms;
+extern DataAttribute iedModel_GenericIO_PTOC1_RstTms_setVal;
+extern DataAttribute iedModel_SE_GenericIO_PTOC1_RstTms_setVal;
extern LogicalNode iedModel_GenericIO_LTRK1;
extern DataObject iedModel_GenericIO_LTRK1_Beh;
extern DataAttribute iedModel_GenericIO_LTRK1_Beh_stVal;
@@ -306,6 +339,23 @@ extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_datSet;
extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_confRev;
extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_ndsCom;
extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dstAddress;
+extern DataObject iedModel_GenericIO_LTRK1_SgcbTrk;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_objRef;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_serviceType;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_errorCode;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_originatorID;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_t;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_d;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_dU;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_cdcNs;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_cdcName;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_dataNs;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_numOfSG;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_actSG;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_editSG;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_cnfEdit;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_lActTm;
+extern DataAttribute iedModel_GenericIO_LTRK1_SgcbTrk_resvTms;
@@ -455,6 +505,39 @@ extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dstAddress;
#define IEDMODEL_GenericIO_GGIO1_Ind4_stVal (&iedModel_GenericIO_GGIO1_Ind4_stVal)
#define IEDMODEL_GenericIO_GGIO1_Ind4_q (&iedModel_GenericIO_GGIO1_Ind4_q)
#define IEDMODEL_GenericIO_GGIO1_Ind4_t (&iedModel_GenericIO_GGIO1_Ind4_t)
+#define IEDMODEL_GenericIO_PTOC1 (&iedModel_GenericIO_PTOC1)
+#define IEDMODEL_GenericIO_PTOC1_Mod (&iedModel_GenericIO_PTOC1_Mod)
+#define IEDMODEL_GenericIO_PTOC1_Mod_stVal (&iedModel_GenericIO_PTOC1_Mod_stVal)
+#define IEDMODEL_GenericIO_PTOC1_Mod_q (&iedModel_GenericIO_PTOC1_Mod_q)
+#define IEDMODEL_GenericIO_PTOC1_Mod_t (&iedModel_GenericIO_PTOC1_Mod_t)
+#define IEDMODEL_GenericIO_PTOC1_Mod_ctlModel (&iedModel_GenericIO_PTOC1_Mod_ctlModel)
+#define IEDMODEL_GenericIO_PTOC1_Beh (&iedModel_GenericIO_PTOC1_Beh)
+#define IEDMODEL_GenericIO_PTOC1_Beh_stVal (&iedModel_GenericIO_PTOC1_Beh_stVal)
+#define IEDMODEL_GenericIO_PTOC1_Beh_q (&iedModel_GenericIO_PTOC1_Beh_q)
+#define IEDMODEL_GenericIO_PTOC1_Beh_t (&iedModel_GenericIO_PTOC1_Beh_t)
+#define IEDMODEL_GenericIO_PTOC1_Str (&iedModel_GenericIO_PTOC1_Str)
+#define IEDMODEL_GenericIO_PTOC1_Str_general (&iedModel_GenericIO_PTOC1_Str_general)
+#define IEDMODEL_GenericIO_PTOC1_Str_dirGeneral (&iedModel_GenericIO_PTOC1_Str_dirGeneral)
+#define IEDMODEL_GenericIO_PTOC1_Str_q (&iedModel_GenericIO_PTOC1_Str_q)
+#define IEDMODEL_GenericIO_PTOC1_Str_t (&iedModel_GenericIO_PTOC1_Str_t)
+#define IEDMODEL_GenericIO_PTOC1_Op (&iedModel_GenericIO_PTOC1_Op)
+#define IEDMODEL_GenericIO_PTOC1_Op_general (&iedModel_GenericIO_PTOC1_Op_general)
+#define IEDMODEL_GenericIO_PTOC1_Op_q (&iedModel_GenericIO_PTOC1_Op_q)
+#define IEDMODEL_GenericIO_PTOC1_Op_t (&iedModel_GenericIO_PTOC1_Op_t)
+#define IEDMODEL_GenericIO_PTOC1_StrVal (&iedModel_GenericIO_PTOC1_StrVal)
+#define IEDMODEL_GenericIO_PTOC1_StrVal_setMag (&iedModel_GenericIO_PTOC1_StrVal_setMag)
+#define IEDMODEL_GenericIO_PTOC1_StrVal_setMag_f (&iedModel_GenericIO_PTOC1_StrVal_setMag_f)
+#define IEDMODEL_SE_GenericIO_PTOC1_StrVal_setMag (&iedModel_SE_GenericIO_PTOC1_StrVal_setMag)
+#define IEDMODEL_SE_GenericIO_PTOC1_StrVal_setMag_f (&iedModel_SE_GenericIO_PTOC1_StrVal_setMag_f)
+#define IEDMODEL_GenericIO_PTOC1_OpDlTmms (&iedModel_GenericIO_PTOC1_OpDlTmms)
+#define IEDMODEL_GenericIO_PTOC1_OpDlTmms_setVal (&iedModel_GenericIO_PTOC1_OpDlTmms_setVal)
+#define IEDMODEL_SE_GenericIO_PTOC1_OpDlTmms_setVal (&iedModel_SE_GenericIO_PTOC1_OpDlTmms_setVal)
+#define IEDMODEL_GenericIO_PTOC1_RsDlTmms (&iedModel_GenericIO_PTOC1_RsDlTmms)
+#define IEDMODEL_GenericIO_PTOC1_RsDlTmms_setVal (&iedModel_GenericIO_PTOC1_RsDlTmms_setVal)
+#define IEDMODEL_SE_GenericIO_PTOC1_RsDlTmms_setVal (&iedModel_SE_GenericIO_PTOC1_RsDlTmms_setVal)
+#define IEDMODEL_GenericIO_PTOC1_RstTms (&iedModel_GenericIO_PTOC1_RstTms)
+#define IEDMODEL_GenericIO_PTOC1_RstTms_setVal (&iedModel_GenericIO_PTOC1_RstTms_setVal)
+#define IEDMODEL_SE_GenericIO_PTOC1_RstTms_setVal (&iedModel_SE_GenericIO_PTOC1_RstTms_setVal)
#define IEDMODEL_GenericIO_LTRK1 (&iedModel_GenericIO_LTRK1)
#define IEDMODEL_GenericIO_LTRK1_Beh (&iedModel_GenericIO_LTRK1_Beh)
#define IEDMODEL_GenericIO_LTRK1_Beh_stVal (&iedModel_GenericIO_LTRK1_Beh_stVal)
@@ -604,6 +687,23 @@ extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dstAddress;
#define IEDMODEL_GenericIO_LTRK1_GocbTrk_confRev (&iedModel_GenericIO_LTRK1_GocbTrk_confRev)
#define IEDMODEL_GenericIO_LTRK1_GocbTrk_ndsCom (&iedModel_GenericIO_LTRK1_GocbTrk_ndsCom)
#define IEDMODEL_GenericIO_LTRK1_GocbTrk_dstAddress (&iedModel_GenericIO_LTRK1_GocbTrk_dstAddress)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk (&iedModel_GenericIO_LTRK1_SgcbTrk)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_objRef (&iedModel_GenericIO_LTRK1_SgcbTrk_objRef)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_serviceType (&iedModel_GenericIO_LTRK1_SgcbTrk_serviceType)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_errorCode (&iedModel_GenericIO_LTRK1_SgcbTrk_errorCode)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_originatorID (&iedModel_GenericIO_LTRK1_SgcbTrk_originatorID)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_t (&iedModel_GenericIO_LTRK1_SgcbTrk_t)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_d (&iedModel_GenericIO_LTRK1_SgcbTrk_d)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_dU (&iedModel_GenericIO_LTRK1_SgcbTrk_dU)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_cdcNs (&iedModel_GenericIO_LTRK1_SgcbTrk_cdcNs)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_cdcName (&iedModel_GenericIO_LTRK1_SgcbTrk_cdcName)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_dataNs (&iedModel_GenericIO_LTRK1_SgcbTrk_dataNs)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_numOfSG (&iedModel_GenericIO_LTRK1_SgcbTrk_numOfSG)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_actSG (&iedModel_GenericIO_LTRK1_SgcbTrk_actSG)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_editSG (&iedModel_GenericIO_LTRK1_SgcbTrk_editSG)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_cnfEdit (&iedModel_GenericIO_LTRK1_SgcbTrk_cnfEdit)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_lActTm (&iedModel_GenericIO_LTRK1_SgcbTrk_lActTm)
+#define IEDMODEL_GenericIO_LTRK1_SgcbTrk_resvTms (&iedModel_GenericIO_LTRK1_SgcbTrk_resvTms)
#endif /* STATIC_MODEL_H_ */
diff --git a/src/iec61850/inc_private/mms_mapping_internal.h b/src/iec61850/inc_private/mms_mapping_internal.h
index 920e0df9..fd7c241f 100644
--- a/src/iec61850/inc_private/mms_mapping_internal.h
+++ b/src/iec61850/inc_private/mms_mapping_internal.h
@@ -291,6 +291,7 @@ struct sMmsMapping {
ControlTrkInstance iscTrk;
ControlTrkInstance bacTrk;
SgcbTrkInstance sgcbTrk;
+ ServiceTrkInstance genTrk;
#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */
/* flag indicates if data model is locked --> prevents reports to be sent */
diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c
index 8461b2bd..265605d0 100644
--- a/src/iec61850/server/mms_mapping/mms_mapping.c
+++ b/src/iec61850/server/mms_mapping/mms_mapping.c
@@ -1264,7 +1264,7 @@ checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode)
!strcmp(modelNode->name, "BacIntTrk"))
{
if (DEBUG_IED_SERVER)
- printf("%s data object found!\n", modelNode->name);
+ printf("IED_SERVER: %s data object found!\n", modelNode->name);
DataObject* actTrk = (DataObject*) modelNode;
ControlTrkInstance* actInstance = NULL;
@@ -1306,7 +1306,7 @@ checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode)
}
else if (!strcmp(modelNode->name, "BrcbTrk")) {
if (DEBUG_IED_SERVER)
- printf("BrcbTrk data object found!\n");
+ printf("IED_SERVER: BrcbTrk data object found!\n");
DataObject* brcbTrk = (DataObject*) modelNode;
@@ -1330,7 +1330,7 @@ checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode)
}
else if (!strcmp(modelNode->name, "UrcbTrk")) {
if (DEBUG_IED_SERVER)
- printf("UrcbTrk data object found!\n");
+ printf("IED_SERVER: UrcbTrk data object found!\n");
DataObject* urcbTrk = (DataObject*) modelNode;
@@ -1353,7 +1353,7 @@ checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode)
}
else if (!strcmp(modelNode->name, "GocbTrk")) {
if (DEBUG_IED_SERVER)
- printf("GocbTrk data object found!\n");
+ printf("IED_SERVER: GocbTrk data object found!\n");
DataObject* gocbTrk = (DataObject*) modelNode;
@@ -1376,7 +1376,7 @@ checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode)
}
else if (!strcmp(modelNode->name, "SgcbTrk")) {
if (DEBUG_IED_SERVER)
- printf("SgcbTrk data object found!\n");
+ printf("IED_SERVER: SgcbTrk data object found!\n");
DataObject* sgcbTrk = (DataObject*) modelNode;
@@ -1397,6 +1397,28 @@ checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode)
}
}
+ else if (!strcmp(modelNode->name, "GenTrk")) {
+ if (DEBUG_IED_SERVER)
+ printf("IED_SERVER: GenTrk data object found!\n");
+
+ DataObject* genTrk = (DataObject*) modelNode;
+
+ if (self->genTrk) {
+ if (DEBUG_IED_SERVER)
+ printf("IED_SERVER: ERROR: multiple GenTrk instances found in server\n");
+ }
+ else {
+ /* Setup GenTrk references */
+ self->genTrk = (ServiceTrkInstance) GLOBAL_CALLOC(1, sizeof(struct sServiceTrkInstance));
+
+ if (self->genTrk) {
+ self->genTrk->dobj = genTrk;
+
+ getCommonTrackingAttributes((ServiceTrkInstance) self->genTrk, genTrk);
+ }
+ }
+ }
+
modelNode = modelNode->sibling;
}
@@ -1961,6 +1983,7 @@ MmsMapping_destroy(MmsMapping* self)
if (self->iscTrk) GLOBAL_FREEMEM(self->iscTrk);
if (self->bacTrk) GLOBAL_FREEMEM(self->bacTrk);
if (self->sgcbTrk) GLOBAL_FREEMEM(self->sgcbTrk);
+ if (self->genTrk) GLOBAL_FREEMEM(self->genTrk);
#endif
LinkedList_destroy(self->attributeAccessHandlers);