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 1c00bf0..26d4d57 100644 Binary files a/tools/model_generator/genconfig.jar and b/tools/model_generator/genconfig.jar differ diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index 21472b0..7f8cf31 100644 Binary files a/tools/model_generator/genmodel.jar and b/tools/model_generator/genmodel.jar differ 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)); + + } }