diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index aa36640..6c45543 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/DataModelValue.java b/tools/model_generator/src/com/libiec61850/scl/model/DataModelValue.java index 5eeb67e..0798046 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataModelValue.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataModelValue.java @@ -23,6 +23,8 @@ package com.libiec61850.scl.model; * See COPYING file for the complete license text. */ +import java.util.Base64; + import com.libiec61850.scl.types.EnumerationType; import com.libiec61850.scl.types.IllegalValueException; import com.libiec61850.scl.types.SclType; @@ -128,6 +130,15 @@ public class DataModelValue { case UNICODE_STRING_255: this.value = value; break; + + case OCTET_STRING_64: + try { + this.value = Base64.getDecoder().decode(value); + } + catch (IllegalArgumentException e) { + throw new IllegalValueException("Val element for Octet64 type does not contain a valid base64 encoded string"); + } + break; case VISIBLE_STRING_32: case VISIBLE_STRING_64: diff --git a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java index d7b8b9e..2db231b 100644 --- a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java @@ -727,6 +727,20 @@ public class StaticModelGenerator { } } + + private void appendHexArrayString(StringBuffer buffer, byte[] byteArray) { + + buffer.append("{"); + for (int i = 0; i < byteArray.length; i++) { + + if (i == 0) + buffer.append(String.format("0x%02X", byteArray[i])); + else + buffer.append(String.format(", 0x%02X", byteArray[i])); + } + buffer.append("}"); + + } private void printValue(String daName, DataAttribute dataAttribute, DataModelValue value) { @@ -759,6 +773,21 @@ public class StaticModelGenerator { case BOOLEAN: buffer.append("MmsValue_newBoolean(" + value.getValue() + ");"); break; + + case OCTET_STRING_64: + { + String daValName = daName + "__val"; + + buffer.append("MmsValue_newOctetString(0, 64);\n"); + buffer.append("uint8_t " + daValName + "[] = "); + appendHexArrayString(buffer, (byte[]) value.getValue()); + buffer.append(";\n"); + buffer.append("MmsValue_setOctetString("); + buffer.append(daName); + buffer.append(".mmsValue, " + daValName + ", " + ((byte[])value.getValue()).length + ");\n"); + } + break; + case UNICODE_STRING_255: buffer.append("MmsValue_newMmsString(\"" + value.getValue() + "\");"); break;