From b131193694c06a9ca23cf16454f2c25440dfd342 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Tue, 29 Oct 2024 18:32:38 +0000 Subject: [PATCH] - some code format updates - added clang-formatter configuration --- .clang-format | 192 ++++++ src/iec61850/server/mms_mapping/mms_mapping.c | 15 +- src/iec61850/server/mms_mapping/reporting.c | 145 +++-- src/iec61850/server/model/model.c | 566 ++++++++++-------- 4 files changed, 595 insertions(+), 323 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..8f8adb40 --- /dev/null +++ b/.clang-format @@ -0,0 +1,192 @@ +--- +Language: Cpp +# BasedOnStyle: Microsoft +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignArrayOfStructures: None +AlignConsecutiveMacros: None +AlignConsecutiveAssignments: None +AlignConsecutiveBitFields: None +AlignConsecutiveDeclarations: None +AlignEscapedNewlines: Right +AlignOperands: Align +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortEnumsOnASingleLine: false +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: All +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: true + AfterControlStatement: Always + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: false + AfterExternBlock: true + BeforeCatch: true + BeforeElse: true + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeConceptDeclarations: true +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +QualifierAlignment: Leave +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +PackConstructorInitializers: BinPack +BasedOnStyle: '' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +AllowAllConstructorInitializersOnNextLine: true +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseLabels: false +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: NoIndent +IndentRequires: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +LambdaBodyIndentation: Signature +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 1000 +PenaltyIndentedWhitespace: 0 +PointerAlignment: Left +PPIndentWidth: -1 +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: false +SeparateDefinitionBlocks: Leave +ShortNamespaceLines: 1 +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + BeforeNonEmptyParentheses: false +SpaceAroundPointerQualifiers: Default +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +BitFieldColonSpacing: Both +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 4 +UseCRLF: false +UseTab: Never +WhitespaceSensitiveMacros: + - STRINGIZE + - PP_STRINGIZE + - BOOST_PP_STRINGIZE + - NS_SWIFT_NAME + - CF_SWIFT_NAME +... + diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 3000224c..a184ffe5 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -1952,8 +1952,8 @@ createDataSets(MmsDevice* mmsDevice, IedModel* iedModel) { LogicalDevice* ld = IedModel_getDeviceByInst(iedModel, dataset->logicalDeviceName); - if (ld) { - + if (ld) + { if (ld->ldName) { StringUtils_copyStringMax(domainName, 65, ld->ldName); } @@ -1963,8 +1963,8 @@ createDataSets(MmsDevice* mmsDevice, IedModel* iedModel) MmsDomain* dataSetDomain = MmsDevice_getDomain(mmsDevice, domainName); - if (dataSetDomain == NULL) { - + if (dataSetDomain == NULL) + { if (DEBUG_IED_SERVER) printf("IED_SERVER: MMS domain for dataset does not exist!\n"); @@ -1978,8 +1978,8 @@ createDataSets(MmsDevice* mmsDevice, IedModel* iedModel) DataSetEntry* dataSetEntry = dataset->fcdas; - while (dataSetEntry != NULL) { - + while (dataSetEntry != NULL) + { MmsAccessSpecifier accessSpecifier; if (ld->ldName) { @@ -2004,7 +2004,8 @@ createDataSets(MmsDevice* mmsDevice, IedModel* iedModel) MmsDomain_addNamedVariableList(dataSetDomain, varList); } - else { + else + { if (DEBUG_IED_SERVER) printf("IED_SERVER: LD for dataset does not exist!\n"); } diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index 0bb683f1..3e21116a 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -2679,8 +2679,10 @@ exit_function_only_tracking: static void Reporting_disableReportControlInstance(MmsMapping* self, ReportControl* rc) { - if (rc->enabled) { - if (self->rcbEventHandler) { + if (rc->enabled) + { + if (self->rcbEventHandler) + { ClientConnection clientConnection = private_IedServer_getClientConnectionByHandle(self->iedServer, rc->clientConnection); self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_DISABLE, NULL, DATA_ACCESS_ERROR_SUCCESS); @@ -2701,19 +2703,22 @@ Reporting_disableReportControlInstance(MmsMapping* self, ReportControl* rc) Semaphore_post(rc->rcbValuesLock); #endif - if (rc->reserved) { + if (rc->reserved) + { rc->reserved = false; - if (self->rcbEventHandler) { + if (self->rcbEventHandler) + { ClientConnection clientConnection = private_IedServer_getClientConnectionByHandle(self->iedServer, rc->clientConnection); self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_UNRESERVED, NULL, DATA_ACCESS_ERROR_SUCCESS); } } - if (rc->buffered == false) { - - if (rc->resvTms != -1) { + if (rc->buffered == false) + { + if (rc->resvTms != -1) + { #if (CONFIG_MMS_THREADLESS_STACK != 1) Semaphore_wait(rc->rcbValuesLock); #endif @@ -2732,7 +2737,8 @@ Reporting_disableReportControlInstance(MmsMapping* self, ReportControl* rc) /* delete buffer content */ purgeBuf(rc); } - else { + else + { if (rc->resvTms == 0) updateOwner(rc, NULL); else if (rc->resvTms > 0) { @@ -2751,7 +2757,8 @@ Reporting_deactivateAllReports(MmsMapping* self) { LinkedList rcElem = LinkedList_getNext(self->reportControls); - while (rcElem) { + while (rcElem) + { ReportControl* rc = (ReportControl*)LinkedList_getData(rcElem); Reporting_disableReportControlInstance(self, rc); @@ -2765,7 +2772,8 @@ Reporting_deactivateReportsForConnection(MmsMapping* self, MmsServerConnection c { LinkedList rcElem = LinkedList_getNext(self->reportControls); - while (rcElem) { + while (rcElem) + { ReportControl* rc = (ReportControl*)LinkedList_getData(rcElem); if (rc->clientConnection == connection) { @@ -2835,13 +2843,16 @@ removeAllGIReportsFromReportBuffer(ReportBuffer* reportBuffer) ReportBufferEntry* currentReport = reportBuffer->oldestReport; ReportBufferEntry* lastReport = NULL; - while (currentReport != NULL) { - if (currentReport->flags & 2) { - - if (currentReport == reportBuffer->oldestReport) { + while (currentReport != NULL) + { + if (currentReport->flags & 2) + { + if (currentReport == reportBuffer->oldestReport) + { reportBuffer->oldestReport = currentReport->next; } - else { + else + { if (lastReport != NULL) lastReport->next = currentReport->next; else @@ -2849,9 +2860,9 @@ removeAllGIReportsFromReportBuffer(ReportBuffer* reportBuffer) } #if (DEBUG_IED_SERVER == 1) - printf("IED_SERVER: REMOVE old GI report with ID "); - printReportId(currentReport); - printf("\n"); + printf("IED_SERVER: REMOVE old GI report with ID "); + printReportId(currentReport); + printf("\n"); #endif reportBuffer->reportsCount--; @@ -2859,7 +2870,8 @@ removeAllGIReportsFromReportBuffer(ReportBuffer* reportBuffer) if (reportBuffer->nextToTransmit == currentReport) reportBuffer->nextToTransmit = currentReport->next; - if (reportBuffer->lastEnqueuedReport == currentReport) { + if (reportBuffer->lastEnqueuedReport == currentReport) + { if (lastReport != NULL) reportBuffer->lastEnqueuedReport = lastReport; else @@ -2924,7 +2936,8 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ int encodedSize; - if (dataSetEntry->value) { + if (dataSetEntry->value) + { encodedSize = MmsValue_encodeMmsData(dataSetEntry->value, NULL, 0, false); } else @@ -2972,14 +2985,16 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ if (DEBUG_IED_SERVER) printf("IED_SERVER: enqueueReport: bufferEntrySize: %i\n", bufferEntrySize); - if (bufferEntrySize > buffer->memoryBlockSize) { + if (bufferEntrySize > buffer->memoryBlockSize) + { if (DEBUG_IED_SERVER) printf("IED_SERVER: enqueueReport: report buffer too small for report entry! Skip event!\n"); goto exit_function; } - if (isBuffered) { + if (isBuffered) + { /* remove old buffered GI reports */ if (isGI) removeAllGIReportsFromReportBuffer(buffer); } @@ -3002,7 +3017,8 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ assert(buffer->lastEnqueuedReport != NULL); assert(buffer->oldestReport != NULL); - if (DEBUG_IED_SERVER) { + if (DEBUG_IED_SERVER) + { printf("IED_SERVER: buffer->lastEnqueuedReport: %p\n", buffer->lastEnqueuedReport); printf("IED_SERVER: buffer->oldestReport: %p\n", buffer->oldestReport); printf("IED_SERVER: buffer->nextToTransmit: %p\n", buffer->nextToTransmit); @@ -3383,7 +3399,8 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue* confRev = ReportControl_getRCBValue(self, "ConfRev"); - if (isBuffered) { + if (isBuffered) + { MmsValue* entryIdValue = MmsValue_getElement(self->rcbValues, 11); MmsValue_setOctetString(entryIdValue, (uint8_t*) report->entryId, 8); } @@ -3399,7 +3416,8 @@ sendNextReportEntrySegment(ReportControl* self) const char* rptIdStr = MmsValue_toString(rptIdFromRcb); - if (rptIdStr[0] == 0) { + if (rptIdStr[0] == 0) + { /* use default rptId when RptID is empty in RCB */ updateWithDefaultRptId(self, &rptId); } @@ -3409,7 +3427,8 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue* optFlds = ReportControl_getRCBValue(self, "OptFlds"); - if (isBuffered == false) { + if (isBuffered == false) + { /* delete option fields for unrelated options (not present in unbuffered report) */ MmsValue_setBitStringBit(optFlds, 6, false); /* bufOvfl */ MmsValue_setBitStringBit(optFlds, 7, false); /* entryID */ @@ -3424,8 +3443,8 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue* inclusionField = NULL; - if (report->flags == 0) { - + if (report->flags == 0) + { inclusionField = &_inclusionField; _inclusionField.type = MMS_BIT_STRING; @@ -3457,7 +3476,8 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue _timeOfEntry; MmsValue* timeOfEntry = NULL; - if (MmsValue_getBitStringBit(optFlds, 2)) { /* report time stamp */ + if (MmsValue_getBitStringBit(optFlds, 2)) /* report time stamp */ + { hasReportTimestamp = true; _timeOfEntry.type = MMS_BINARY_TIME; _timeOfEntry.value.binaryTime.size = 6; @@ -3470,7 +3490,8 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue* datSet = ReportControl_getRCBValue(self, "DatSet"); - if (MmsValue_getBitStringBit(optFlds, 4)) {/* data set reference */ + if (MmsValue_getBitStringBit(optFlds, 4)) /* data set reference */ + { hasDataSetReference = true; accessResultSize += MmsValue_encodeMmsData(datSet, NULL, 0, false); } @@ -3478,8 +3499,10 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue _bufOvfl; MmsValue* bufOvfl = NULL; - if (isBuffered) { - if (MmsValue_getBitStringBit(optFlds, 6)) { /* bufOvfl */ + if (isBuffered) + { + if (MmsValue_getBitStringBit(optFlds, 6)) /* bufOvfl */ + { hasBufOvfl = true; bufOvfl = &_bufOvfl; @@ -3494,8 +3517,10 @@ sendNextReportEntrySegment(ReportControl* self) MmsValue _entryId; MmsValue* entryId = NULL; - if (isBuffered) { - if (MmsValue_getBitStringBit(optFlds, 7)) { /* entryID */ + if (isBuffered) + { + if (MmsValue_getBitStringBit(optFlds, 7)) /* entryID */ + { hasEntryId = true; entryId = &_entryId; @@ -3508,7 +3533,8 @@ sendNextReportEntrySegment(ReportControl* self) } } - if (MmsValue_getBitStringBit(optFlds, 8)) { + if (MmsValue_getBitStringBit(optFlds, 8)) + { hasConfRev = true; accessResultSize += MmsValue_encodeMmsData(confRev, NULL, 0, false); } @@ -3544,16 +3570,16 @@ sendNextReportEntrySegment(ReportControl* self) int numberOfAddedElements = 0; - for (i = 0; i < self->dataSet->elementCount; i++) { - - if ((report->flags > 0) || MmsValue_getBitStringBit(inclusionField, i)) { - - if (i >= startElementIndex) { - + for (i = 0; i < self->dataSet->elementCount; i++) + { + if ((report->flags > 0) || MmsValue_getBitStringBit(inclusionField, i)) + { + if (i >= startElementIndex) + { int elementSize = 0; - if (withDataReference) { - + if (withDataReference) + { DataSetEntry* dataSetEntry = getDataSetEntryWithIndex(self->dataSet->fcdas, i); char dataReference[130]; @@ -3593,7 +3619,8 @@ sendNextReportEntrySegment(ReportControl* self) int lenSize = BerDecoder_decodeLength(currentReportBufferPos + 1, &length, 0, report->entryLength); - if (lenSize < 0) { + if (lenSize < 0) + { if (DEBUG_IED_SERVER) printf("IED_SERVER: internal error in report buffer\n"); @@ -3606,13 +3633,12 @@ sendNextReportEntrySegment(ReportControl* self) currentReportBufferPos += dataElementSize; } - if (withReasonCode) { elementSize += 4; /* reason code size is always 4 byte */ } - if ((estimatedSegmentSize + elementSize) > maxMmsPduSize) { - + if ((estimatedSegmentSize + elementSize) > maxMmsPduSize) + { segmented = true; moreFollows = true; _moreFollows.value.boolean = true; @@ -3630,13 +3656,15 @@ sendNextReportEntrySegment(ReportControl* self) accessResultSize += elementSize; estimatedSegmentSize += elementSize; } - else { + else + { /* move element pointer in report buffer to skip elements that were already sent in former segments */ int length; int lenSize = BerDecoder_decodeLength(currentReportBufferPos + 1, &length, 0, report->entryLength); - if (lenSize < 0) { + if (lenSize < 0) + { if (DEBUG_IED_SERVER) printf("IED_SERVER: internal error in report buffer\n"); @@ -3656,7 +3684,8 @@ sendNextReportEntrySegment(ReportControl* self) /* now calculate the exact information report segment size */ - if (segmented) { + if (segmented) + { int segmentedSize = MmsValue_encodeMmsData(&_moreFollows, NULL, 0, false) + MmsValue_encodeMmsData(subSeqNum, NULL, 0, false); accessResultSize += segmentedSize; } @@ -3667,7 +3696,8 @@ sendNextReportEntrySegment(ReportControl* self) uint32_t informationReportSize = 1 + informationReportContentSize + BerEncoder_determineLengthSize(informationReportContentSize); uint32_t completeMessageSize = 1 + informationReportSize + BerEncoder_determineLengthSize(informationReportSize); - if (((int) completeMessageSize > maxMmsPduSize) || (numberOfAddedElements == 0)) { + if (((int) completeMessageSize > maxMmsPduSize) || (numberOfAddedElements == 0)) + { if (DEBUG_IED_SERVER) printf("IED_SERVER: MMS PDU size too small to encode report data (max PDU size = %i) -> skip message!\n", maxMmsPduSize); @@ -3730,10 +3760,12 @@ sendNextReportEntrySegment(ReportControl* self) bufPos = MmsValue_encodeMmsData(self->inclusionField, buffer, bufPos, true); /* encode data references if selected */ - if (MmsValue_getBitStringBit(optFlds, 5)) { /* data-reference */ + if (MmsValue_getBitStringBit(optFlds, 5)) /* data-reference */ + { DataSetEntry* dataSetEntry = getDataSetEntryWithIndex(self->dataSet->fcdas, startElementIndex); - for (i = startElementIndex; i < maxIndex; i++) { + for (i = startElementIndex; i < maxIndex; i++) + { bool addReferenceForEntry = false; if (report->flags > 0) @@ -3741,8 +3773,8 @@ sendNextReportEntrySegment(ReportControl* self) else if (MmsValue_getBitStringBit(self->inclusionField, i)) addReferenceForEntry = true; - if (addReferenceForEntry) { - + if (addReferenceForEntry) + { char dataReference[130]; int currentPos = 0; @@ -3753,7 +3785,8 @@ sendNextReportEntrySegment(ReportControl* self) } int ldNameLength = (int) strlen(dataSetEntry->logicalDeviceName); - for (j = 0; j < ldNameLength; j++) { + for (j = 0; j < ldNameLength; j++) + { dataReference[currentPos] = dataSetEntry->logicalDeviceName[j]; currentPos++; } diff --git a/src/iec61850/server/model/model.c b/src/iec61850/server/model/model.c index 53d3b38b..577f3b4a 100644 --- a/src/iec61850/server/model/model.c +++ b/src/iec61850/server/model/model.c @@ -1,7 +1,7 @@ /* * model.c * - * Copyright 2013-2022 Michael Zillgith + * Copyright 2013-2024 Michael Zillgith * * This file is part of libIEC61850. * @@ -23,21 +23,23 @@ #include "iec61850_model.h" -#include "stack_config.h" #include "libiec61850_platform_includes.h" +#include "stack_config.h" static void setAttributeValuesToNull(ModelNode* node) { - if (node->modelType == DataAttributeModelType) { - DataAttribute* da = (DataAttribute*) node; + if (node->modelType == DataAttributeModelType) + { + DataAttribute* da = (DataAttribute*)node; da->mmsValue = NULL; } ModelNode* child = node->firstChild; - while (child != NULL) { + while (child != NULL) + { setAttributeValuesToNull(child); child = child->sibling; } @@ -46,7 +48,7 @@ setAttributeValuesToNull(ModelNode* node) void IedModel_setIedName(IedModel* self, const char* name) { - self->name = (char*) name; + self->name = (char*)name; } void @@ -54,95 +56,105 @@ IedModel_setAttributeValuesToNull(IedModel* iedModel) { LogicalDevice* ld = iedModel->firstChild; - while (ld != NULL) { + while (ld != NULL) + { - LogicalNode* ln = (LogicalNode*) ld->firstChild; + LogicalNode* ln = (LogicalNode*)ld->firstChild; - while (ln != NULL) { + while (ln != NULL) + { ModelNode* node = ln->firstChild; - while (node != NULL) { + while (node != NULL) + { setAttributeValuesToNull(node); node = node->sibling; } - ln = (LogicalNode*) ln->sibling; + ln = (LogicalNode*)ln->sibling; } - ld = (LogicalDevice*) ld->sibling; + ld = (LogicalDevice*)ld->sibling; } } int IedModel_getLogicalDeviceCount(IedModel* self) { - if (self->firstChild == NULL) - return 0; + if (self->firstChild == NULL) + return 0; - LogicalDevice* logicalDevice = self->firstChild; + LogicalDevice* logicalDevice = self->firstChild; - int ldCount = 1; + int ldCount = 1; - while (logicalDevice->sibling != NULL) { - logicalDevice = (LogicalDevice*) logicalDevice->sibling; - ldCount++; - } + while (logicalDevice->sibling != NULL) + { + logicalDevice = (LogicalDevice*)logicalDevice->sibling; + ldCount++; + } - return ldCount; + return ldCount; } DataSet* -IedModel_lookupDataSet(IedModel* self, const char* dataSetReference /* e.g. ied1Inverter/LLN0$dataset1 */) +IedModel_lookupDataSet(IedModel* self, const char* dataSetReference /* e.g. ied1Inverter/LLN0$dataset1 */) { - DataSet* dataSet = self->dataSets; + DataSet* dataSet = self->dataSets; - const char* separator = strchr(dataSetReference, '/'); + const char* separator = strchr(dataSetReference, '/'); - if (separator == NULL) - return NULL; - - int ldNameLen = separator - dataSetReference; + if (separator == NULL) + return NULL; - char domainName[65]; + int ldNameLen = separator - dataSetReference; - int modelNameLen = strlen(self->name); + char domainName[65]; - if (modelNameLen > 64) - return NULL; + int modelNameLen = strlen(self->name); - memcpy(domainName, self->name, modelNameLen); + if (modelNameLen > 64) + return NULL; - while (dataSet != NULL) { + memcpy(domainName, self->name, modelNameLen); - LogicalDevice* ld = IedModel_getDeviceByInst(self, dataSet->logicalDeviceName); + while (dataSet != NULL) + { + LogicalDevice* ld = IedModel_getDeviceByInst(self, dataSet->logicalDeviceName); - if (ld) { - if (ld->ldName == NULL) { + if (ld) + { + if (ld->ldName == NULL) + { /* LD name = IEDName + ldInst */ domainName[modelNameLen] = 0; StringUtils_appendString(domainName, 65, dataSet->logicalDeviceName); - if (strncmp(domainName, dataSetReference, ldNameLen) == 0) { - if (strcmp(dataSet->name, separator + 1) == 0) { - return dataSet; - } - } - } - else { - /* functional naming */ - if (strncmp(ld->ldName, dataSetReference, ldNameLen) == 0) { - if (strcmp(dataSet->name, separator + 1) == 0) { + if (strncmp(domainName, dataSetReference, ldNameLen) == 0) + { + if (strcmp(dataSet->name, separator + 1) == 0) + { return dataSet; } } - } - - } + } + else + { + /* functional naming */ + if (strncmp(ld->ldName, dataSetReference, ldNameLen) == 0) + { + if (strcmp(dataSet->name, separator + 1) == 0) + { + return dataSet; + } + } + } + } - dataSet = dataSet->sibling; - } + dataSet = dataSet->sibling; + } - return NULL; + return NULL; } LogicalDevice* @@ -150,14 +162,16 @@ IedModel_getDevice(IedModel* self, const char* deviceName) { LogicalDevice* device = self->firstChild; - while (device) { - - if (device->ldName) { + while (device) + { + if (device->ldName) + { /* functional naming */ if (strcmp(device->ldName, deviceName) == 0) return device; } - else { + else + { /* LD name = IEDName + ldInst */ char domainName[65]; @@ -167,7 +181,7 @@ IedModel_getDevice(IedModel* self, const char* deviceName) return device; } - device = (LogicalDevice*) device->sibling; + device = (LogicalDevice*)device->sibling; } return NULL; @@ -180,10 +194,10 @@ IedModel_getDeviceByInst(IedModel* self, const char* ldInst) while (device) { - if (strcmp(device->name, ldInst) == 0) - return device; + if (strcmp(device->name, ldInst) == 0) + return device; - device = (LogicalDevice*) device->sibling; + device = (LogicalDevice*)device->sibling; } return NULL; @@ -196,14 +210,14 @@ IedModel_getDeviceByIndex(IedModel* self, int index) int currentIndex = 0; - while (logicalDevice) { - + while (logicalDevice) + { if (currentIndex == index) return logicalDevice; currentIndex++; - logicalDevice = (LogicalDevice*) logicalDevice->sibling; + logicalDevice = (LogicalDevice*)logicalDevice->sibling; } return NULL; @@ -214,9 +228,11 @@ ModelNode_getDataAttributeByMmsValue(ModelNode* self, MmsValue* value) { ModelNode* node = self->firstChild; - while (node != NULL) { - if (node->modelType == DataAttributeModelType) { - DataAttribute* da = (DataAttribute*) node; + while (node != NULL) + { + if (node->modelType == DataAttributeModelType) + { + DataAttribute* da = (DataAttribute*)node; if (da->mmsValue == value) return da; @@ -238,16 +254,14 @@ IedModel_lookupDataAttributeByMmsValue(IedModel* model, MmsValue* value) { LogicalDevice* ld = model->firstChild; - while (ld != NULL) { - - DataAttribute* da = - ModelNode_getDataAttributeByMmsValue((ModelNode*) ld, value); + while (ld != NULL) + { + DataAttribute* da = ModelNode_getDataAttributeByMmsValue((ModelNode*)ld, value); if (da != NULL) return da; - - ld = (LogicalDevice*) ld->sibling; + ld = (LogicalDevice*)ld->sibling; } return NULL; @@ -260,9 +274,11 @@ getChildWithShortAddress(ModelNode* node, uint32_t sAddr) child = node->firstChild; - while (child != NULL) { - if (child->modelType == DataAttributeModelType) { - DataAttribute* da = (DataAttribute*) child; + while (child != NULL) + { + if (child->modelType == DataAttributeModelType) + { + DataAttribute* da = (DataAttribute*)child; if (da->sAddr == sAddr) return child; @@ -284,17 +300,18 @@ IedModel_getModelNodeByShortAddress(IedModel* model, uint32_t sAddr) { ModelNode* node = NULL; - LogicalDevice* ld = (LogicalDevice*) model->firstChild; - - while (ld != NULL) { + LogicalDevice* ld = (LogicalDevice*)model->firstChild; - LogicalNode* ln = (LogicalNode*) ld->firstChild; - - while (ln != NULL) { + while (ld != NULL) + { + LogicalNode* ln = (LogicalNode*)ld->firstChild; + while (ln != NULL) + { ModelNode* doNode = ln->firstChild; - while (doNode != NULL) { + while (doNode != NULL) + { ModelNode* matchingNode = getChildWithShortAddress(doNode, sAddr); if (matchingNode != NULL) @@ -303,10 +320,10 @@ IedModel_getModelNodeByShortAddress(IedModel* model, uint32_t sAddr) doNode = doNode->sibling; } - ln = (LogicalNode*) ln->sibling; + ln = (LogicalNode*)ln->sibling; } - ld = (LogicalDevice*) ld->sibling; + ld = (LogicalDevice*)ld->sibling; } return node; @@ -328,12 +345,13 @@ IedModel_getModelNodeByObjectReference(IedModel* model, const char* objectRefere LogicalDevice* ld = IedModel_getDevice(model, objRef); - if (ld == NULL) return NULL; + if (ld == NULL) + return NULL; if ((separator == NULL) || (*(separator + 1) == 0)) - return (ModelNode*) ld; + return (ModelNode*)ld; - return ModelNode_getChild((ModelNode*) ld, separator + 1); + return ModelNode_getChild((ModelNode*)ld, separator + 1); } #if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) @@ -345,13 +363,14 @@ IedModel_getSVControlBlock(IedModel* self, LogicalNode* parentLN, const char* sv SVControlBlock* svCb = self->svCBs; - while (svCb != NULL) { - if ((svCb->parent == parentLN) && (strcmp(svCb->name, svcbName) == 0)) { + while (svCb != NULL) + { + if ((svCb->parent == parentLN) && (strcmp(svCb->name, svcbName) == 0)) + { retVal = svCb; break; } - svCb = svCb->sibling; } @@ -379,8 +398,10 @@ IedModel_getModelNodeByShortObjectReference(IedModel* model, const char* objectR LogicalDevice* ld = IedModel_getDeviceByInst(model, ldInst); - if (ld == NULL) { - if (DEBUG_IED_SERVER) { + if (ld == NULL) + { + if (DEBUG_IED_SERVER) + { printf("IED_SERVER: LD (%s) not found\n", ldInst); } @@ -388,150 +409,159 @@ IedModel_getModelNodeByShortObjectReference(IedModel* model, const char* objectR } if ((separator == NULL) || (*(separator + 1) == 0)) - return (ModelNode*) ld; + return (ModelNode*)ld; - return ModelNode_getChild((ModelNode*) ld, separator + 1); + return ModelNode_getChild((ModelNode*)ld, separator + 1); } bool DataObject_hasFCData(DataObject* dataObject, FunctionalConstraint fc) { - ModelNode* modelNode = dataObject->firstChild; + ModelNode* modelNode = dataObject->firstChild; - while (modelNode != NULL) { - - if (modelNode->modelType == DataAttributeModelType) { - DataAttribute* dataAttribute = (DataAttribute*) modelNode; - - if (dataAttribute->fc == fc) - return true; - } - else if (modelNode->modelType == DataObjectModelType) { + while (modelNode != NULL) + { + if (modelNode->modelType == DataAttributeModelType) + { + DataAttribute* dataAttribute = (DataAttribute*)modelNode; - if (DataObject_hasFCData((DataObject*) modelNode, fc)) - return true; - } + if (dataAttribute->fc == fc) + return true; + } + else if (modelNode->modelType == DataObjectModelType) + { + if (DataObject_hasFCData((DataObject*)modelNode, fc)) + return true; + } - modelNode = modelNode->sibling; - } + modelNode = modelNode->sibling; + } - return false; + return false; } bool LogicalNode_hasFCData(LogicalNode* node, FunctionalConstraint fc) { - DataObject* dataObject = (DataObject*) node->firstChild; + DataObject* dataObject = (DataObject*)node->firstChild; - while (dataObject != NULL) { - if (DataObject_hasFCData(dataObject, fc)) - return true; + while (dataObject != NULL) + { + if (DataObject_hasFCData(dataObject, fc)) + return true; - dataObject = (DataObject*) dataObject->sibling; - } + dataObject = (DataObject*)dataObject->sibling; + } - return false; + return false; } DataSet* LogicalNode_getDataSet(LogicalNode* self, const char* dataSetName) { assert(self->modelType == LogicalNodeModelType); - assert(dataSetName != NULL); + assert(dataSetName != NULL); - char dsName[66]; + char dsName[66]; - LogicalDevice* ld = (LogicalDevice*) self->parent; + LogicalDevice* ld = (LogicalDevice*)self->parent; - if (strlen(dataSetName) > 32) { - - if (DEBUG_IED_SERVER) { - printf("IED_SERVER: LogicalNode_getDataSet - data set name %s too long!\n", dataSetName); - } - - goto exit_error; - } + if (strlen(dataSetName) > 32) + { + if (DEBUG_IED_SERVER) + { + printf("IED_SERVER: LogicalNode_getDataSet - data set name %s too long!\n", dataSetName); + } - StringUtils_createStringInBuffer(dsName, 66, 3, self->name, "$", dataSetName); + goto exit_error; + } - IedModel* iedModel = (IedModel*) ld->parent; + StringUtils_createStringInBuffer(dsName, 66, 3, self->name, "$", dataSetName); - DataSet* ds = iedModel->dataSets; + IedModel* iedModel = (IedModel*)ld->parent; - while (ds != NULL) { - if (strcmp(ds->logicalDeviceName, ld->name) == 0) { - if (strcmp(ds->name, dsName) == 0) { - return ds; - } - } + DataSet* ds = iedModel->dataSets; - ds = ds->sibling; - } + while (ds != NULL) + { + if (strcmp(ds->logicalDeviceName, ld->name) == 0) + { + if (strcmp(ds->name, dsName) == 0) + { + return ds; + } + } + ds = ds->sibling; + } exit_error: - return NULL; + return NULL; } int LogicalDevice_getLogicalNodeCount(LogicalDevice* logicalDevice) { - int lnCount = 0; + int lnCount = 0; - LogicalNode* logicalNode = (LogicalNode*) logicalDevice->firstChild; + LogicalNode* logicalNode = (LogicalNode*)logicalDevice->firstChild; - while (logicalNode != NULL) { - logicalNode = (LogicalNode*) logicalNode->sibling; - lnCount++; - } + while (logicalNode != NULL) + { + logicalNode = (LogicalNode*)logicalNode->sibling; + lnCount++; + } - return lnCount; + return lnCount; } ModelNode* LogicalDevice_getChildByMmsVariableName(LogicalDevice* logicalDevice, const char* mmsVariableName) { - const char* separator = strchr(mmsVariableName,'$'); + const char* separator = strchr(mmsVariableName, '$'); - if (separator == NULL) - return NULL; + if (separator == NULL) + return NULL; - if (strlen(separator) > 4) { - char fcString[3]; - char nameRef[65]; + if (strlen(separator) > 4) + { + char fcString[3]; + char nameRef[65]; - fcString[0] = separator[1]; - fcString[1] = separator[2]; - fcString[2] = 0; + fcString[0] = separator[1]; + fcString[1] = separator[2]; + fcString[2] = 0; - const char* strpos = mmsVariableName; + const char* strpos = mmsVariableName; - int targetPos = 0; + int targetPos = 0; - while (strpos < separator) { - nameRef[targetPos++] = strpos[0]; - strpos++; - } + while (strpos < separator) + { + nameRef[targetPos++] = strpos[0]; + strpos++; + } - nameRef[targetPos++] = '.'; + nameRef[targetPos++] = '.'; - strpos = separator + 4; + strpos = separator + 4; - while (strpos[0] != 0) { - nameRef[targetPos++] = strpos[0]; - strpos++; - } + while (strpos[0] != 0) + { + nameRef[targetPos++] = strpos[0]; + strpos++; + } - nameRef[targetPos++] = 0; + nameRef[targetPos++] = 0; - StringUtils_replace(nameRef, '$', '.'); + StringUtils_replace(nameRef, '$', '.'); - FunctionalConstraint fc = FunctionalConstraint_fromString(fcString); + FunctionalConstraint fc = FunctionalConstraint_fromString(fcString); - return ModelNode_getChildWithFc((ModelNode*) logicalDevice, nameRef, fc); - } + return ModelNode_getChildWithFc((ModelNode*)logicalDevice, nameRef, fc); + } - return NULL; + return NULL; } static int @@ -566,11 +596,11 @@ createObjectReference(ModelNode* node, char* objectReference, int bufSize, bool } else { - LogicalNode* lNode = (LogicalNode*) node; + LogicalNode* lNode = (LogicalNode*)node; - LogicalDevice* lDevice = (LogicalDevice*) lNode->parent; + LogicalDevice* lDevice = (LogicalDevice*)lNode->parent; - IedModel* iedModel = (IedModel*) lDevice->parent; + IedModel* iedModel = (IedModel*)lDevice->parent; bufPos = 0; @@ -581,10 +611,12 @@ createObjectReference(ModelNode* node, char* objectReference, int bufSize, bool } else { - if (lDevice->ldName) { + if (lDevice->ldName) + { StringUtils_copyStringMax(objectReference, bufSize, lDevice->ldName); } - else { + else + { StringUtils_concatString(objectReference, bufSize, iedModel->name, lDevice->name); } } @@ -605,13 +637,15 @@ createObjectReference(ModelNode* node, char* objectReference, int bufSize, bool if (bufPos + nameLength < bufSize) { int i; - for (i = 0; i < nameLength; i++) { + for (i = 0; i < nameLength; i++) + { objectReference[bufPos++] = node->name[i]; } return bufPos; } - else { + else + { return -1; } } @@ -630,7 +664,8 @@ createObjectReference(ModelNode* node, char* objectReference, int bufSize, bool objectReference[bufPos++] = '('; - for (i = 0; i < arrayIndexStrLength; i++) { + for (i = 0; i < arrayIndexStrLength; i++) + { objectReference[bufPos++] = arrayIndexStr[i]; } objectReference[bufPos++] = ')'; @@ -655,7 +690,7 @@ ModelNode_getObjectReferenceEx(ModelNode* node, char* objectReference, bool with if (objectReference == NULL) { - objectReference = (char*) GLOBAL_MALLOC(130); + objectReference = (char*)GLOBAL_MALLOC(130); allocated = true; } @@ -681,17 +716,19 @@ ModelNode_getObjectReferenceEx(ModelNode* node, char* objectReference, bool with } int -ModelNode_getChildCount(ModelNode* modelNode) { - int childCount = 0; +ModelNode_getChildCount(ModelNode* modelNode) +{ + int childCount = 0; - ModelNode* child = modelNode->firstChild; + ModelNode* child = modelNode->firstChild; - while (child != NULL) { - childCount++; - child = child->sibling; - } + while (child != NULL) + { + childCount++; + child = child->sibling; + } - return childCount; + return childCount; } ModelNode* @@ -713,7 +750,7 @@ ModelNode_getChild(ModelNode* self, const char* name) if (arraySeparator2) { - int idx = (int) strtol(arraySeparator + 1, NULL, 10); + int idx = (int)strtol(arraySeparator + 1, NULL, 10); ModelNode* arrayNode = NULL; @@ -740,7 +777,8 @@ ModelNode_getChild(ModelNode* self, const char* name) ModelNode* childNode = ModelNode_getChild(self, nameCopy); - if (childNode) { + if (childNode) + { arrayNode = ModelNode_getChildWithIdx(childNode, idx); } else @@ -764,11 +802,11 @@ ModelNode_getChild(ModelNode* self, const char* name) else return NULL; } - else { + else + { /* invalid name */ return NULL; } - } int nameElementLength = 0; @@ -784,8 +822,9 @@ ModelNode_getChild(ModelNode* self, const char* name) while (nextNode) { - if (nextNode->name == NULL) { - break; /* is an array element */ + if (nextNode->name == NULL) + { + break; /* is an array element */ } int nodeNameLen = strlen(nextNode->name); @@ -802,7 +841,8 @@ ModelNode_getChild(ModelNode* self, const char* name) nextNode = nextNode->sibling; } - if ((separator != NULL) && (matchingNode != NULL)) { + if ((separator != NULL) && (matchingNode != NULL)) + { return ModelNode_getChild(matchingNode, separator + 1); } else @@ -840,68 +880,71 @@ ModelNode_getChildWithIdx(ModelNode* self, int idx) ModelNode* ModelNode_getChildWithFc(ModelNode* self, const char* name, FunctionalConstraint fc) { - /* check for separator */ - const char* separator = strchr(name, '.'); - - int nameElementLength = 0; - - if (separator != NULL) - nameElementLength = (separator - name); - else - nameElementLength = strlen(name); - - ModelNode* nextNode = self->firstChild; - - ModelNode* matchingNode = NULL; - - while (nextNode != NULL) - { - int nodeNameLen = strlen(nextNode->name); - - if (nodeNameLen == nameElementLength) - { - if (memcmp(nextNode->name, name, nodeNameLen) == 0) - { - if (separator == NULL) - { - if (nextNode->modelType == DataAttributeModelType) - { - DataAttribute* da = (DataAttribute*) nextNode; - - if (da->fc == fc) { - matchingNode = nextNode; - break; - } - } - } - else - { - if (nextNode->modelType == DataAttributeModelType) - { - DataAttribute* da = (DataAttribute*) nextNode; + /* check for separator */ + const char* separator = strchr(name, '.'); + + int nameElementLength = 0; + + if (separator != NULL) + nameElementLength = (separator - name); + else + nameElementLength = strlen(name); + + ModelNode* nextNode = self->firstChild; + + ModelNode* matchingNode = NULL; + + while (nextNode != NULL) + { + int nodeNameLen = strlen(nextNode->name); + + if (nodeNameLen == nameElementLength) + { + if (memcmp(nextNode->name, name, nodeNameLen) == 0) + { + if (separator == NULL) + { + if (nextNode->modelType == DataAttributeModelType) + { + DataAttribute* da = (DataAttribute*)nextNode; + + if (da->fc == fc) + { + matchingNode = nextNode; + break; + } + } + } + else + { + if (nextNode->modelType == DataAttributeModelType) + { + DataAttribute* da = (DataAttribute*)nextNode; if (da->fc == fc) { - matchingNode = nextNode; - break; + matchingNode = nextNode; + break; } - } - else { - matchingNode = nextNode; - break; - } - } - } - } + } + else + { + matchingNode = nextNode; + break; + } + } + } + } - nextNode = nextNode->sibling; - } + nextNode = nextNode->sibling; + } - if ((separator != NULL) && (matchingNode != NULL)) { - return ModelNode_getChildWithFc(matchingNode, separator + 1, fc); - } - else - return matchingNode; + if ((separator != NULL) && (matchingNode != NULL)) + { + return ModelNode_getChildWithFc(matchingNode, separator + 1, fc); + } + else + return matchingNode; } ModelNodeType @@ -932,7 +975,8 @@ ModelNode_getChildren(ModelNode* self) ModelNode* childNode = self->firstChild; - while (childNode) { + while (childNode) + { LinkedList_add(childNodes, childNode); childNode = childNode->sibling; @@ -944,20 +988,21 @@ ModelNode_getChildren(ModelNode* self) LogicalNode* LogicalDevice_getLogicalNode(LogicalDevice* self, const char* nodeName) { - return (LogicalNode*) ModelNode_getChild((ModelNode*) self, nodeName); + return (LogicalNode*)ModelNode_getChild((ModelNode*)self, nodeName); } SettingGroupControlBlock* LogicalDevice_getSettingGroupControlBlock(LogicalDevice* self) { - IedModel* model = (IedModel*) self->parent; + IedModel* model = (IedModel*)self->parent; if (model == NULL) return NULL; LogicalNode* ln = LogicalDevice_getLogicalNode(self, "LLN0"); - if (ln == NULL) { + if (ln == NULL) + { if (DEBUG_IED_SERVER) printf("IED_SERVER: logical node LLN0 not found!\n"); @@ -966,7 +1011,8 @@ LogicalDevice_getSettingGroupControlBlock(LogicalDevice* self) SettingGroupControlBlock* sgcb = model->sgcbs; - while (sgcb != NULL) { + while (sgcb != NULL) + { if (sgcb->parent == ln) return sgcb;