- IED server: add support for SMV control blocks ("SMVC") in config file

parser
pull/331/head
Michael Zillgith 4 years ago
parent de3aba0cb6
commit 7185c3b8d4

@ -130,6 +130,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle)
ModelNode* currentModelNode = NULL;
DataSet* currentDataSet = NULL;
GSEControlBlock* currentGoCB = NULL;
SVControlBlock* currentSMVCB = NULL;
char nameString[130];
char nameString2[130];
@ -289,6 +290,23 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle)
indendation = 4;
}
else if (StringUtils_startsWith((char*) lineBuffer, "SMVC")) {
uint32_t confRev;
int smpMod;
int smpRate;
int optFlds;
int isUnicast;
int matchedItems = sscanf((char*) lineBuffer, "SMVC(%s %s %s %u %i %i %i %i)",
nameString, nameString2, nameString3, &confRev, &smpMod, &smpRate, &optFlds, &isUnicast);
if (matchedItems < 5) goto exit_error;
currentSMVCB = SVControlBlock_create(nameString, currentLN, nameString2, nameString3, confRev, smpMod, smpRate, optFlds, (bool) isUnicast);
indendation = 4;
}
#if (CONFIG_IEC61850_SETTING_GROUPS == 1)
else if (StringUtils_startsWith((char*) lineBuffer, "SG")) {
@ -442,7 +460,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle)
}
}
int lineLength = strlen((char*) lineBuffer);
int lineLength = (int) strlen((char*) lineBuffer);
if (lineBuffer[lineLength - 1] == '{') {
indendation++;
@ -488,7 +506,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle)
int matchedItems = sscanf((char*) lineBuffer, "PA(%u %u %u %s)", &vlanPrio, &vlanId, &appId, nameString);
if ((matchedItems != 4) || (currentGoCB == NULL)) goto exit_error;
if ((matchedItems != 4) || ((currentGoCB == NULL) && (currentSMVCB == NULL))) goto exit_error;
terminateString(nameString, ')');
@ -502,8 +520,13 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle)
PhyComAddress_create((uint8_t) vlanPrio, (uint16_t) vlanId, (uint16_t) appId,
(uint8_t*) nameString2);
GSEControlBlock_addPhyComAddress(currentGoCB, dstAddress);
if (currentGoCB) {
GSEControlBlock_addPhyComAddress(currentGoCB, dstAddress);
}
if (currentSMVCB) {
SVControlBlock_addPhyComAddress(currentSMVCB, dstAddress);
}
}
else
goto exit_error;
@ -535,7 +558,8 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle)
exit_error:
if (DEBUG_IED_SERVER)
printf("IED_SERVER: error parsing line %i (indendation level = %i)\n", currentLine, indendation);
printf("IED_SERVER: error parsing line %i (indentation level = %i)\n", currentLine, indendation);
IedModel_destroy(model);
return NULL;
}

Loading…
Cancel
Save