- IED server: added code to create SMVCBs with the dynamic model API (LIB61850-67)

pull/476/head
Michael Zillgith 2 years ago
parent d0e0dc22e9
commit e51fda3a06

@ -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;
} }

Loading…
Cancel
Save