|
|
@ -166,7 +166,6 @@ IedModel_addSettingGroupControlBlock(IedModel* self, SettingGroupControlBlock* s
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif /* (CONFIG_IEC61850_SETTING_GROUPS == 1) */
|
|
|
|
#endif /* (CONFIG_IEC61850_SETTING_GROUPS == 1) */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
static void
|
|
|
|
IedModel_addGSEControlBlock(IedModel* self, GSEControlBlock* gcb)
|
|
|
|
IedModel_addGSEControlBlock(IedModel* self, GSEControlBlock* gcb)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -175,13 +174,29 @@ IedModel_addGSEControlBlock(IedModel* self, GSEControlBlock* gcb)
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
GSEControlBlock* lastGcb = self->gseCBs;
|
|
|
|
GSEControlBlock* lastGcb = self->gseCBs;
|
|
|
|
|
|
|
|
|
|
|
|
while (lastGcb->sibling != NULL)
|
|
|
|
while (lastGcb->sibling)
|
|
|
|
lastGcb = lastGcb->sibling;
|
|
|
|
lastGcb = lastGcb->sibling;
|
|
|
|
|
|
|
|
|
|
|
|
lastGcb->sibling = gcb;
|
|
|
|
lastGcb->sibling = gcb;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
|
|
IedModel_addSMVControlBlock(IedModel* self, SVControlBlock* smvcb)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (self->svCBs == NULL) {
|
|
|
|
|
|
|
|
self->svCBs = smvcb;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
SVControlBlock* lastSvCB = self->svCBs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (lastSvCB->sibling)
|
|
|
|
|
|
|
|
lastSvCB = lastSvCB->sibling;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lastSvCB->sibling = smvcb;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
LogicalDevice*
|
|
|
|
LogicalDevice*
|
|
|
|
LogicalDevice_create(const char* name, IedModel* parent)
|
|
|
|
LogicalDevice_create(const char* name, IedModel* parent)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -475,6 +490,14 @@ GSEControlBlock_create(const char* name, LogicalNode* parent, const char* appId,
|
|
|
|
return self;
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
|
|
LogicalNode_addSMVControlBlock(LogicalNode* self, SVControlBlock* smvcb)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
IedModel* model = (IedModel*) self->parent->parent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IedModel_addSMVControlBlock(model, smvcb);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SVControlBlock*
|
|
|
|
SVControlBlock*
|
|
|
|
SVControlBlock_create(const char* name, LogicalNode* parent, const char* svID, const char* dataSet, uint32_t confRev, uint8_t smpMod,
|
|
|
|
SVControlBlock_create(const char* name, LogicalNode* parent, const char* svID, const char* dataSet, uint32_t confRev, uint8_t smpMod,
|
|
|
|
uint16_t smpRate, uint8_t optFlds, bool isUnicast)
|
|
|
|
uint16_t smpRate, uint8_t optFlds, bool isUnicast)
|
|
|
@ -499,6 +522,12 @@ SVControlBlock_create(const char* name, LogicalNode* parent, const char* svID, c
|
|
|
|
self->optFlds = optFlds;
|
|
|
|
self->optFlds = optFlds;
|
|
|
|
self->isUnicast = isUnicast;
|
|
|
|
self->isUnicast = isUnicast;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self->dstAddress = NULL;
|
|
|
|
|
|
|
|
self->sibling = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (parent)
|
|
|
|
|
|
|
|
LogicalNode_addSMVControlBlock(parent, self);
|
|
|
|
|
|
|
|
|
|
|
|
return self;
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|