From 2e24ecb4eb4571f607fe229cbd99be69bdc4e391 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 13 Aug 2015 08:08:31 +0200 Subject: [PATCH] - changed TimeOfEntry to TimeofEntry for Buffered reporting to deal with "bug" in 8-1 specification - deal with SE/SG in SCL file -> SE will automatically create SG attribute in data model - added wildcard "*" support to file service - fixed problem with filesystem file modification date on embedded linux syste, --- src/goose/goose_publisher.c | 2 +- .../filesystem/linux/file_provider_linux.c | 4 ++-- src/iec61850/client/client_report_control.c | 2 +- src/iec61850/server/mms_mapping/reporting.c | 4 ++-- src/mms/iso_mms/server/mms_file_service.c | 7 +++++++ tools/model_generator/genconfig.jar | Bin 75191 -> 75407 bytes tools/model_generator/genmodel.jar | Bin 75201 -> 75424 bytes .../libiec61850/scl/model/DataAttribute.java | 3 +++ .../com/libiec61850/scl/model/DataObject.java | 9 +++++++++ 9 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/goose/goose_publisher.c b/src/goose/goose_publisher.c index 47b8599..cea381c 100644 --- a/src/goose/goose_publisher.c +++ b/src/goose/goose_publisher.c @@ -201,7 +201,7 @@ prepareGooseBuffer(GoosePublisher self, CommParameters* parameters, const char* int bufPos = 12; -#if 1 +#if 0 /* Priority tag - IEEE 802.1Q */ self->buffer[bufPos++] = 0x81; self->buffer[bufPos++] = 0x00; diff --git a/src/hal/filesystem/linux/file_provider_linux.c b/src/hal/filesystem/linux/file_provider_linux.c index f95cff5..1f0e288 100644 --- a/src/hal/filesystem/linux/file_provider_linux.c +++ b/src/hal/filesystem/linux/file_provider_linux.c @@ -131,8 +131,8 @@ FileSystem_getFileInfo(char* filename, uint32_t* fileSize, uint64_t* lastModific return false; if (lastModificationTimestamp != NULL) - *lastModificationTimestamp = fileStats.st_mtime * 1000; - // does not work on older systems --> *lastModificationTimestamp = fileStats.st_ctim.tv_sec * 1000; + *lastModificationTimestamp = (uint64_t) (fileStats.st_mtime) * 1000LL; + // does not work on older systems --> *lastModificationTimestamp = (uint64_t) (fileStats.st_ctim.tv_sec) * 1000LL; if (fileSize != NULL) *fileSize = fileStats.st_size; diff --git a/src/iec61850/client/client_report_control.c b/src/iec61850/client/client_report_control.c index 9ed5f61..933a937 100644 --- a/src/iec61850/client/client_report_control.c +++ b/src/iec61850/client/client_report_control.c @@ -611,7 +611,7 @@ IedConnection_setRCBValues(IedConnection self, IedClientError* error, ClientRepo if (!isBuffered) goto error_invalid_parameter; - strcpy(itemId + itemIdLen, "$TimeOfEntry"); + strcpy(itemId + itemIdLen, "$TimeofEntry"); LinkedList_add(itemIds, copyString(itemId)); LinkedList_add(values, rcb->timeOfEntry); diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index 8763d9b..9184a69 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -214,7 +214,7 @@ ReportControl_getRCBValue(ReportControl* rc, char* elementName) return MmsValue_getElement(rc->rcbValues, 10); else if (strcmp(elementName, "EntryID") == 0) return MmsValue_getElement(rc->rcbValues, 11); - else if (strcmp(elementName, "TimeOfEntry") == 0) + else if (strcmp(elementName, "TimeofEntry") == 0) return MmsValue_getElement(rc->rcbValues, 12); else if (strcmp(elementName, "ResvTms") == 0) return MmsValue_getElement(rc->rcbValues, 13); @@ -949,7 +949,7 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock, mmsValue->value.structure.components[11] = MmsValue_newOctetString(8, 8); namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); - namedVariable->name = copyString("TimeOfEntry"); + namedVariable->name = copyString("TimeofEntry"); namedVariable->type = MMS_BINARY_TIME; namedVariable->typeSpec.binaryTime = 6; rcb->typeSpec.structure.elements[12] = namedVariable; diff --git a/src/mms/iso_mms/server/mms_file_service.c b/src/mms/iso_mms/server/mms_file_service.c index 03618b4..4ee6f93 100644 --- a/src/mms/iso_mms/server/mms_file_service.c +++ b/src/mms/iso_mms/server/mms_file_service.c @@ -532,6 +532,9 @@ createFileDirectoryResponse(uint32_t invokeId, ByteBuffer* response, char* direc FileSystem_closeDirectory(directory); } else { + + //TODO check if it is a directory + if (DEBUG_MMS_SERVER) printf("Error opening directory!\n"); @@ -678,6 +681,10 @@ mmsServer_handleFileDirectoryRequest( case 0xa0: /* filename */ if (!parseFileName(filename, buffer, &bufPos, bufPos + length, invokeId, response)) return; + + /* check for wildcard character(*) */ + if (strcmp(filename, "*") == 0) filename[0] = 0; + break; case 0xa1: /* continue-after */ diff --git a/tools/model_generator/genconfig.jar b/tools/model_generator/genconfig.jar index 1c00bf010e1a00dddd8de1820578456497f71d48..26d4d57eb2eecc5d7ced63873c375494a7c06dbf 100644 GIT binary patch delta 8086 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 diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index 21472b0a386fd369defe16bc120a8e647299e0cd..7f8cf31b55630da79c51dc7e30914d84db260671 100644 GIT binary patch delta 5616 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 HVIcnlFGhNW diff --git a/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java b/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java index 573183f..44193d7 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java @@ -62,6 +62,9 @@ public class DataAttribute implements DataModelNode { if (this.fc == null) this.fc = fc; + if (fc != null) + this.fc = fc; + if ((parent != null) && (parent instanceof DataAttribute)) this.triggerOptions = ((DataAttribute) parent).getTriggerOptions(); else diff --git a/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java b/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java index 13a373e..7a86176 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java @@ -81,7 +81,16 @@ public class DataObject implements DataModelNode { daDefinitions = ((DataAttributeType) sclType).getSubDataAttributes(); for (DataAttributeDefinition daDefinition : daDefinitions) { + + if (daDefinition.getFc() == FunctionalConstraint.SE) { + + System.out.println("Add SG DA for corresponding SE DA: "); + this.dataAttributes.add(new DataAttribute(daDefinition, typeDeclarations, FunctionalConstraint.SG, this)); + } + this.dataAttributes.add(new DataAttribute(daDefinition, typeDeclarations, null, this)); + + } }