diff --git a/src/iec61850/inc/iec61850_cdc.h b/src/iec61850/inc/iec61850_cdc.h index 139f0182..5fca651f 100644 --- a/src/iec61850/inc/iec61850_cdc.h +++ b/src/iec61850/inc/iec61850_cdc.h @@ -184,7 +184,8 @@ CDC_ENS_create(const char* dataObjectName, ModelNode* parent, uint32_t options); DataObject* CDC_BCR_create(const char* dataObjectName, ModelNode* parent, uint32_t options); - +DataObject* +CDC_VSS_create(const char* dataObjectName, ModelNode* parent, uint32_t options); /** * \brief create a new SEC (Security violation) CDC instance (data object) @@ -340,6 +341,16 @@ CDC_ACT_create(const char* dataObjectName, ModelNode* parent, uint32_t options); DataObject* CDC_SPG_create(const char* dataObjectName, ModelNode* parent, uint32_t options); +/** + * \brief Visible string setting (VSG) + * + * \param dataObjectName the name of the new object + * \param parent the parent of the new data object (either a LogicalNode or another DataObject) + * \param options bit mask to encode required optional elements + */ +DataObject* +CDC_VSG_create(const char* dataObjectName, ModelNode* parent, uint32_t options); + /** * \brief Enumerated status setting (ENG) * diff --git a/src/iec61850/server/model/cdc.c b/src/iec61850/server/model/cdc.c index acbcaadd..9a64cb0e 100644 --- a/src/iec61850/server/model/cdc.c +++ b/src/iec61850/server/model/cdc.c @@ -379,7 +379,23 @@ CDC_SEC_create(const char* dataObjectName, ModelNode* parent, uint32_t options) } +DataObject* +CDC_VSS_create(const char* dataObjectName, ModelNode* parent, uint32_t options) +{ + DataObject* newSPS = DataObject_create(dataObjectName, parent, 0); + CDC_addStatusToDataObject(newSPS, IEC61850_VISIBLE_STRING_255); + + if (options & CDC_OPTION_PICS_SUBST) + CDC_addOptionPicsSubst(newSPS, IEC61850_BOOLEAN); + + if (options & CDC_OPTION_BLK_ENA) + DataAttribute_create("blkEna", (ModelNode*) newSPS, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + + CDC_addStandardOptions(newSPS, options); + + return newSPS; +} /** * CDC_OPTION_INST_MAG @@ -931,6 +947,19 @@ CDC_SPG_create(const char* dataObjectName, ModelNode* parent, uint32_t options) return newSPG; } +DataObject* +CDC_VSG_create(const char* dataObjectName, ModelNode* parent, uint32_t options) +{ + DataObject* newSPG = DataObject_create(dataObjectName, parent, 0); + + DataAttribute_create("setVal", (ModelNode*) newSPG, IEC61850_VISIBLE_STRING_255, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + + CDC_addStandardOptions(newSPG, options); + + return newSPG; +} + + DataObject* CDC_ENG_create(const char* dataObjectName, ModelNode* parent, uint32_t options) {