This is an automated email from the ASF dual-hosted git repository. cdutz pushed a commit to branch feature/external-types in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 436041b0a2284b658f9724732824ed728cbf4bf8 Author: Christofer Dutz <[email protected]> AuthorDate: Tue Oct 15 23:30:33 2024 +0200 chore: Added support for "external-types" to the go code-generation templates. --- .../BaseFreemarkerLanguageTemplateHelper.java | 7 + .../freemarker/FreemarkerLanguageOutput.java | 14 +- .../apache/plc4x/language/c/CLanguageOutput.java | 6 +- .../apache/plc4x/language/cs/CsLanguageOutput.java | 4 +- .../language/cs/CsLanguageTemplateHelper.java | 4 +- .../apache/plc4x/language/go/GoLanguageOutput.java | 4 +- .../language/go/GoLanguageTemplateHelper.java | 35 +- .../templates/go/data-io-template.go.ftlh | 12 +- .../resources/templates/go/enum-template.go.ftlh | 25 +- .../plc4x/language/java/JavaLanguageOutput.java | 8 +- .../language/java/JavaLanguageTemplateHelper.java | 12 +- .../templates/java/complex-type-template.java.ftlh | 1 + .../templates/java/data-io-template.java.ftlh | 1 + .../templates/java/enum-template.java.ftlh | 3 +- .../language/python/PythonLanguageOutput.java | 2 +- .../plugins/codegenerator/language/mspec/MSpec.g4 | 4 +- .../mspec/parser/MessageFormatListener.java | 4 +- plc4go/internal/ads/Connection.go | 2 +- plc4go/internal/ads/DriverContext.go | 2 +- plc4go/internal/ads/Reader.go | 3 +- plc4go/internal/ads/TagHandler.go | 4 +- plc4go/internal/ads/Writer.go | 2 +- plc4go/internal/eip/Tag.go | 2 +- plc4go/internal/modbus/Tag.go | 2 +- plc4go/internal/opcua/Tag.go | 2 +- plc4go/internal/s7/Tag.go | 2 +- plc4go/internal/simulated/Tag.go | 2 +- plc4go/pkg/api/values/plc_value.go | 2 +- plc4go/pkg/api/values/value_test.go | 2 +- plc4go/pom.xml | 3 + .../protocols/ads/readwrite/model/AdsDataType.go | 89 ++--- plc4go/protocols/ads/readwrite/model/DataItem.go | 120 +++---- .../protocols/ads/readwrite/model/PlcValueType.go | 387 --------------------- plc4j/drivers/ads/pom.xml | 3 + .../plc4x/java/ads/readwrite/AdsDataType.java | 1 + .../apache/plc4x/java/ads/readwrite/DataItem.java | 1 + .../plc4x/java/ads/readwrite/PlcValueType.java | 84 ----- .../plc4x/java/ads/protocol/AdsProtocolLogic.java | 6 +- pom.xml | 2 +- .../ads/src/main/resources/protocols/ads/ads.mspec | 55 +-- 40 files changed, 253 insertions(+), 671 deletions(-) diff --git a/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java b/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java index 3518081c7e..8cb67dd16f 100644 --- a/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java +++ b/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java @@ -29,6 +29,7 @@ import org.apache.plc4x.plugins.codegenerator.types.definitions.*; import org.apache.plc4x.plugins.codegenerator.types.enums.EnumValue; import org.apache.plc4x.plugins.codegenerator.types.fields.*; import org.apache.plc4x.plugins.codegenerator.types.references.*; +import org.apache.plc4x.plugins.codegenerator.types.terms.BooleanLiteral; import org.apache.plc4x.plugins.codegenerator.types.terms.Term; import org.apache.plc4x.plugins.codegenerator.types.terms.VariableLiteral; import org.slf4j.Logger; @@ -373,4 +374,10 @@ public abstract class BaseFreemarkerLanguageTemplateHelper implements Freemarker public void info(String message, Object... objects) { LOGGER.info(message, objects); } + + public boolean isExternal() { + Optional<Term> external = thisType.getAttribute("external"); + return external.isPresent() && (external.get() instanceof BooleanLiteral) && ((BooleanLiteral) external.get()).getValue(); + } + } diff --git a/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java b/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java index d69d13298b..68cc3e29fc 100644 --- a/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java +++ b/code-generation/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/FreemarkerLanguageOutput.java @@ -41,7 +41,9 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput { private static final Logger LOGGER = LoggerFactory.getLogger(FreemarkerLanguageOutput.class); @Override - public void generate(File outputDir, String version, String languageName, String protocolName, String outputFlavor, Map<String, TypeDefinition> types, + public void generate(File outputDir, String version, String languageName, String protocolName, String outputFlavor, + Map<String, TypeDefinition> types, + Map<String, String> externalTypes, Map<String, String> options) throws GenerationException { @@ -73,7 +75,7 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput { typeContext.put("languageName", languageName); typeContext.put("protocolName", protocolName); typeContext.put("outputFlavor", outputFlavor); - typeContext.put("helper", getHelper(null, protocolName, outputFlavor, types, options)); + typeContext.put("helper", getHelper(null, protocolName, outputFlavor, types, options, externalTypes)); typeContext.put("tracer", Tracer.start("global")); typeContext.putAll(options); @@ -95,7 +97,7 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput { typeContext.put("outputFlavor", outputFlavor); typeContext.put("typeName", typeEntry.getKey()); typeContext.put("type", typeEntry.getValue()); - typeContext.put("helper", getHelper(typeEntry.getValue(), protocolName, outputFlavor, types, options)); + typeContext.put("helper", getHelper(typeEntry.getValue(), protocolName, outputFlavor, types, externalTypes, options)); typeContext.put("tracer", Tracer.start("types")); // Depending on the type, get the corresponding list of templates. @@ -127,7 +129,7 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput { typeContext.put("languageName", languageName); typeContext.put("protocolName", protocolName); typeContext.put("outputFlavor", outputFlavor); - typeContext.put("helper", getHelper(null, protocolName, outputFlavor, types, options)); + typeContext.put("helper", getHelper(null, protocolName, outputFlavor, types, options, externalTypes)); typeContext.putAll(options); for (Template template : miscTemplateList) { @@ -155,7 +157,7 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput { // Extract the output path from the first line of the generated content String outputFileName = input.readLine(); // If there is no outputFileName, this file should be skipped. - if (outputFileName == null) { + if ((outputFileName == null) || outputFileName.isEmpty()) { return; } File outputFile = new File(outputDir, outputFileName); @@ -212,6 +214,6 @@ public abstract class FreemarkerLanguageOutput implements LanguageOutput { } protected abstract FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options); + Map<String, String> externalTypes, Map<String, String> options); } diff --git a/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java b/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java index d16425df50..6c1df72675 100644 --- a/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java +++ b/code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageOutput.java @@ -75,8 +75,10 @@ public class CLanguageOutput extends FreemarkerLanguageOutput { } @Override - protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { + protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, + Map<String, TypeDefinition> types, + Map<String, String> externalTypes, + Map<String, String> options) { return new CLanguageTemplateHelper(thisType, protocolName, flavorName, types); } diff --git a/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java b/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java index 68d320442d..29ef5cd7c8 100644 --- a/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java +++ b/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java @@ -69,8 +69,8 @@ public class CsLanguageOutput extends FreemarkerLanguageOutput { } @Override - protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, Map<String, String> options) { - return new CsLanguageTemplateHelper(thisType, protocolName, flavorName, types, options); + protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, Map<String, String> externalTypes, Map<String, String> options) { + return new CsLanguageTemplateHelper(thisType, protocolName, flavorName, types, externalTypes, options); } } diff --git a/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageTemplateHelper.java b/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageTemplateHelper.java index 8a4f5f3195..623ddd71a0 100644 --- a/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageTemplateHelper.java +++ b/code-generation/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageTemplateHelper.java @@ -40,7 +40,7 @@ public class CsLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp private final Map<String, String> options; public CsLanguageTemplateHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { + Map<String, String> externalTypes, Map<String, String> options) { super(thisType, protocolName, flavorName, types); this.options = options; } @@ -55,7 +55,7 @@ public class CsLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp } public String packageName(String protocolName, String languageName, String languageFlavorName) { - return Optional.ofNullable(options.get("package")).orElseGet(() -> + return Optional.ofNullable((String) options.get("package")).orElseGet(() -> "org.apache.plc4x." + String.join("", languageName.split("-")) + "." + String.join("", protocolName.split("-")) + "." + String.join("", languageFlavorName.split("-"))); diff --git a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java index a9f05727cd..2472eb0af2 100644 --- a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java +++ b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageOutput.java @@ -76,8 +76,8 @@ public class GoLanguageOutput extends FreemarkerLanguageOutput { @Override protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { - return new GoLanguageTemplateHelper(thisType, protocolName, flavorName, types, options); + Map<String, String> externalTypes, Map<String, String> options) { + return new GoLanguageTemplateHelper(thisType, protocolName, flavorName, types, externalTypes, options); } } diff --git a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java index fc709ff707..0ef938217f 100644 --- a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java +++ b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java @@ -46,6 +46,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp private static final Logger LOGGER = LoggerFactory.getLogger(GoLanguageTemplateHelper.class); private final Map<String, String> options; + private final Map<String, String> externalTypes; // TODO: we could condense it to one import set as these can be emitted per template and are not hardcoded anymore @@ -54,9 +55,10 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp public final SortedSet<String> requiredImportsForDataIo = new TreeSet<>(); public GoLanguageTemplateHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { + Map<String, String> externalTypes, Map<String, String> options) { super(thisType, protocolName, flavorName, types); this.options = options; + this.externalTypes = externalTypes; } public String fileName(String protocolName, String languageName, String languageFlavorName) { @@ -111,6 +113,31 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp @Override public String getLanguageTypeNameForTypeReference(TypeReference typeReference) { + if(externalTypes != null) { + String typeName = null; + if(typeReference.isComplexTypeReference()) { + typeName = typeReference.asComplexTypeReference().orElseThrow().getName(); + } else if(typeReference.isEnumTypeReference()) { + typeName = typeReference.asEnumTypeReference().orElseThrow().getName(); + } + if((typeName != null) && externalTypes.containsKey(typeName)) { + String replacement = externalTypes.get(typeName); + String namespaceAlias; + if(replacement.contains(" ")) { + namespaceAlias = replacement.split(" ")[0]; + String pkg = replacement.split(" ")[1]; + pkg = pkg.substring(1, pkg.length() - 1); + emitDataIoRequiredImport(namespaceAlias, pkg); + emitRequiredImport(namespaceAlias, pkg); + } else { + String[] split = replacement.split("/"); + namespaceAlias = split[split.length - 1]; + emitDataIoRequiredImport(replacement); + emitRequiredImport(replacement); + } + return namespaceAlias + "." + typeName; + } + } return getLanguageTypeNameForTypeReference(typeReference, null); } @@ -1900,4 +1927,10 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp return options.getOrDefault("generate-properties-for-reserved-fields", "false").equals("true"); } + public String getExternalTypeImports() { + StringBuilder imports = new StringBuilder(); + externalTypes.forEach((mspecTypeName, javaTypeName) -> imports.append("import ").append(javaTypeName).append(";\n")); + return imports.toString(); + } + } diff --git a/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh index 33df8eb5cc..3a727add68 100644 --- a/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh +++ b/code-generation/language-go/src/main/resources/templates/go/data-io-template.go.ftlh @@ -93,7 +93,11 @@ func ${type.name}ParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffe <#assign enumValue=helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)> <#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)> <#assign enumValueTraces=tracer.extractTraces(enumValue)> - ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces?replace("Get","")?replace("()","")} + <#if enumTypeWithoutTraces?contains(".")> + ${enumTypeTraces}${enumTypeWithoutTraces?split(".")[0]}.${enumValueWithoutTraces?replace("Get","")?replace("()","")} + <#else> + ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces?replace("Get","")?replace("()","")} + </#if> <#else> ${helper.toParseExpression(null, parserArguments[discriminatorValueTerm?index].type, discriminatorValueTerm, parserArguments)} </#if> @@ -353,7 +357,11 @@ func ${type.name}SerializeWithWriteBuffer(ctx context.Context, writeBuffer utils <#assign enumValue=helper.toParseExpression(null, typeRef, discriminatorValueTerm, parserArguments)> <#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)> <#assign enumValueTraces=tracer.extractTraces(enumValue)> - ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces?replace("Get","")?replace("()","")} + <#if enumTypeWithoutTraces?contains(".")> + ${enumTypeTraces}${enumTypeWithoutTraces?split(".")[0]}.${enumValueWithoutTraces?replace("Get","")?replace("()","")} + <#else> + ${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces?replace("Get","")?replace("()","")} + </#if> <#else> ${helper.toParseExpression(null, typeRef, discriminatorValueTerm, parserArguments)} </#if> diff --git a/code-generation/language-go/src/main/resources/templates/go/enum-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/enum-template.go.ftlh index 88a20f9bbb..cc2ee762b4 100644 --- a/code-generation/language-go/src/main/resources/templates/go/enum-template.go.ftlh +++ b/code-generation/language-go/src/main/resources/templates/go/enum-template.go.ftlh @@ -26,7 +26,7 @@ <#-- @ftlvariable name="helper" type="org.apache.plc4x.language.go.GoLanguageTemplateHelper" --> <#-- @ftlvariable name="tracer" type="org.apache.plc4x.plugins.codegenerator.protocol.freemarker.Tracer" --> <#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.EnumTypeDefinition" --> -${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.go +<#if !helper.isExternal()>${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.go</#if> /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -48,16 +48,30 @@ ${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/m package model +<#macro importSectionWithContentBelow> + <#local sectionContent><#nested></#local> import ( "context" "fmt" "github.com/apache/plc4x/plc4go/spi/utils" + <#if helper.getRequiredImports()?has_content> + <#list helper.getRequiredImports() as import> + ${import} + </#list> + </#if> "github.com/pkg/errors" "github.com/rs/zerolog" ) + ${sectionContent} +</#macro> + +<#macro emitImport import>${helper.emitDataIoRequiredImport(import)}</#macro> +<#macro emitImportWithAlias alias import>${helper.emitDataIoRequiredImport(alias, import)}</#macro> + +<@importSectionWithContentBelow><@emitImport import="github.com/apache/plc4x/plc4go/spi/utils" /><@emitImport import="github.com/apache/plc4x/plc4go/spi/values" /><@emitImportWithAlias alias="api" import="github.com/apache/plc4x/plc4go/pkg/api/values" /> // Code generated by code-generation. DO NOT EDIT. <#assign baseType><#if type.type.isPresent()>${helper.getLanguageTypeNameForTypeReference(type.type.orElseThrow())}<#else>string</#if></#assign> @@ -108,7 +122,13 @@ func (e ${type.name}) ${constantName?cap_first}() ${helper.getLanguageTypeNameFo case ${enumValue.value}: { /* '${enumValue.value}' */ <#if constantType.isNonSimpleTypeReference()> <#if constantType.isEnumTypeReference()> - return <#if helper.escapeEnumValue(constantType, constantValue) = "0">${helper.escapeEnumValue(constantType, constantValue)}<#else>${helper.getLanguageTypeNameForTypeReference(constantType)}_${helper.escapeEnumValue(constantType, constantValue)}</#if> + <#if helper.escapeEnumValue(constantType, constantValue) = "0"> + return ${helper.escapeEnumValue(constantType, constantValue)} + <#elseif helper.getLanguageTypeNameForTypeReference(constantType)?contains(".")> + return ${helper.getLanguageTypeNameForTypeReference(constantType)?split(".")[0]}.${helper.escapeEnumValue(constantType, constantValue)} + <#else> + return ${helper.getLanguageTypeNameForTypeReference(constantType)}_${helper.escapeEnumValue(constantType, constantValue)} + </#if> <#else> return ${helper.escapeEnumValue(constantType, constantValue)} </#if> @@ -245,5 +265,6 @@ func (e ${type.name}) PLC4XEnumName() string { func (e ${type.name}) String() string { return e.PLC4XEnumName() } +</@importSectionWithContentBelow> </#outputformat> \ No newline at end of file diff --git a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java index cde7c11651..bdf8ed5385 100644 --- a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java +++ b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageOutput.java @@ -53,7 +53,9 @@ public class JavaLanguageOutput extends FreemarkerLanguageOutput { // Generates additional properties to save parser arguments. "generate-properties-for-parser-arguments", // Generates additional properties to save values of reserved fields for the case that the value differs from the expected value. - "generate-properties-for-reserved-fields")); + "generate-properties-for-reserved-fields", + // Map containing the type-names for external types. + "external")); } @Override @@ -85,8 +87,8 @@ public class JavaLanguageOutput extends FreemarkerLanguageOutput { @Override protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { - return new JavaLanguageTemplateHelper(thisType, protocolName, flavorName, types, options); + Map<String, String> externalTypes, Map<String, String> options) { + return new JavaLanguageTemplateHelper(thisType, protocolName, flavorName, types, externalTypes, options); } @Override diff --git a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java index da511586c2..a022f07830 100644 --- a/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java +++ b/code-generation/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java @@ -42,10 +42,12 @@ import java.util.function.Function; public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelper { private final Map<String, String> options; + private final Map<String, String> externalTypes; public JavaLanguageTemplateHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { + Map<String, String> externalTypes, Map<String, String> options) { super(thisType, protocolName, flavorName, types); + this.externalTypes = externalTypes; this.options = options; } @@ -54,7 +56,7 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe } public String packageName(String protocolName, String languageName, String languageFlavorName) { - return Optional.ofNullable(options.get("package")).orElseGet(() -> + return Optional.ofNullable((String) options.get("package")).orElseGet(() -> "org.apache.plc4x." + String.join("", languageName.split("-")) + "." + String.join("", protocolName.split("-")) + "." + String.join("", languageFlavorName.split("-"))); @@ -1392,4 +1394,10 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe return options.getOrDefault("generate-properties-for-reserved-fields", "false").equals("true"); } + public String getExternalTypeImports() { + StringBuilder imports = new StringBuilder(); + externalTypes.forEach((mspecTypeName, javaTypeName) -> imports.append("import ").append(javaTypeName).append(";\n")); + return imports.toString(); + } + } diff --git a/code-generation/language-java/src/main/resources/templates/java/complex-type-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/complex-type-template.java.ftlh index 142a1b2dd9..f242793551 100644 --- a/code-generation/language-java/src/main/resources/templates/java/complex-type-template.java.ftlh +++ b/code-generation/language-java/src/main/resources/templates/java/complex-type-template.java.ftlh @@ -63,6 +63,7 @@ import org.apache.plc4x.java.api.value.*; import java.time.*; import java.util.*; import java.math.BigInteger; +${helper.getExternalTypeImports()} // Code generated by code-generation. DO NOT EDIT. diff --git a/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh index 23cff0b306..52262e545e 100644 --- a/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh +++ b/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh @@ -71,6 +71,7 @@ import java.time.temporal.ChronoField; import java.util.*; import java.util.function.Supplier; import java.util.stream.Collectors; +${helper.getExternalTypeImports()} // Code generated by code-generation. DO NOT EDIT. diff --git a/code-generation/language-java/src/main/resources/templates/java/enum-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/enum-template.java.ftlh index 2356c30846..1e2cde81ec 100644 --- a/code-generation/language-java/src/main/resources/templates/java/enum-template.java.ftlh +++ b/code-generation/language-java/src/main/resources/templates/java/enum-template.java.ftlh @@ -26,7 +26,7 @@ <#-- @ftlvariable name="helper" type="org.apache.plc4x.language.java.JavaLanguageTemplateHelper" --> <#-- @ftlvariable name="tracer" type="org.apache.plc4x.plugins.codegenerator.protocol.freemarker.Tracer" --> <#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.EnumTypeDefinition" --> -${helper.packageName(protocolName, languageName, outputFlavor)?replace(".", "/")}/${type.name}.java +<#if !helper.isExternal()>${helper.packageName(protocolName, languageName, outputFlavor)?replace(".", "/")}/${type.name}.java</#if> /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -53,6 +53,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +${helper.getExternalTypeImports()} // Code generated by code-generation. DO NOT EDIT. diff --git a/code-generation/language-python/src/main/java/org/apache/plc4x/language/python/PythonLanguageOutput.java b/code-generation/language-python/src/main/java/org/apache/plc4x/language/python/PythonLanguageOutput.java index cf931494c4..e5909a40b8 100644 --- a/code-generation/language-python/src/main/java/org/apache/plc4x/language/python/PythonLanguageOutput.java +++ b/code-generation/language-python/src/main/java/org/apache/plc4x/language/python/PythonLanguageOutput.java @@ -181,7 +181,7 @@ public class PythonLanguageOutput extends FreemarkerLanguageOutput { */ @Override protected FreemarkerLanguageTemplateHelper getHelper(TypeDefinition thisType, String protocolName, String flavorName, Map<String, TypeDefinition> types, - Map<String, String> options) { + Map<String, String> externalTypes, Map<String, String> options) { return new PythonLanguageTemplateHelper(thisType, protocolName, flavorName, types); } diff --git a/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4 b/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4 index 9272c0cb6a..404925638d 100644 --- a/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4 +++ b/code-generation/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/MSpec.g4 @@ -28,8 +28,8 @@ complexTypeDefinition complexType : 'type' name=idExpression (LRBRACKET params=argumentList RRBRACKET)? attributes=attributeList (fieldDefinition|batchSetDefinition)* - | 'discriminatedType' name=idExpression (LRBRACKET params=argumentList RRBRACKET)? attributes=attributeList (fieldDefinition|batchSetDefinition)+ - | 'enum' (type=dataType)? name=idExpression (LRBRACKET params=argumentList RRBRACKET)? attributes=attributeList enumValues=enumValueDefinition+ + | 'discriminatedType' name=idExpression (LRBRACKET params=argumentList RRBRACKET)? attributes=attributeList (fieldDefinition|batchSetDefinition)* + | 'enum' (type=dataType)? name=idExpression (LRBRACKET params=argumentList RRBRACKET)? attributes=attributeList enumValues=enumValueDefinition* | 'dataIo' name=idExpression (LRBRACKET params=argumentList RRBRACKET)? (attributes=attributeList) dataIoTypeSwitch=dataIoDefinition ; diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java index 93aecc7984..209bc7a656 100644 --- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java +++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java @@ -104,7 +104,7 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType // Make the new Map the top of the stack. batchSetAttributes.push(curBatchSetAttributes); - if (ctx.enumValues != null) { + if ("enum".equals(ctx.getChild(0).getText())) { List<EnumValue> enumContext = new LinkedList<>(); enumContexts.push(enumContext); } else { @@ -123,7 +123,7 @@ public class MessageFormatListener extends MSpecBaseListener implements LazyType final Map<String, Term> attributes = batchSetAttributes.peek(); // Handle enum types. - if (ctx.enumValues != null) { + if ("enum".equals(ctx.getChild(0).getText())) { SimpleTypeReference type = (ctx.type != null) ? getSimpleTypeReference(ctx.type) : null; List<EnumValue> enumValues = getEnumValues(); if (type == null) { diff --git a/plc4go/internal/ads/Connection.go b/plc4go/internal/ads/Connection.go index 1cd5d88078..2eb0cabc76 100644 --- a/plc4go/internal/ads/Connection.go +++ b/plc4go/internal/ads/Connection.go @@ -402,7 +402,7 @@ func (m *Connection) getPlcValueForAdsDataTypeTableEntry(entry readWriteModel.Ad } dataTypeName = "WSTRING" } - plcValueType, ok := apiValues.PlcValueByName(dataTypeName) + plcValueType, ok := apiValues.PlcValueTypeByName(dataTypeName) if !ok { return apiValues.NULL, -1 } diff --git a/plc4go/internal/ads/DriverContext.go b/plc4go/internal/ads/DriverContext.go index a88ff41880..fb8ce10f12 100644 --- a/plc4go/internal/ads/DriverContext.go +++ b/plc4go/internal/ads/DriverContext.go @@ -132,7 +132,7 @@ func (m *DriverContext) getDataTypeForDataTypeTableEntry(entry driverModel.AdsDa } else if strings.HasPrefix(dataTypeName, "WSTRING(") { dataTypeName = "WSTRING" } - plcValueType, _ := apiValues.PlcValueByName(dataTypeName) + plcValueType, _ := apiValues.PlcValueTypeByName(dataTypeName) return plcValueType } diff --git a/plc4go/internal/ads/Reader.go b/plc4go/internal/ads/Reader.go index ef59b716e6..32d3536d75 100644 --- a/plc4go/internal/ads/Reader.go +++ b/plc4go/internal/ads/Reader.go @@ -307,7 +307,8 @@ func (m *Connection) parsePlcValue(dataType driverModel.AdsDataTypeTableEntry, a if valueType == apiValues.NULL { return nil, errors.New(fmt.Sprintf("error converting %s into plc4x plc-value type", dataType.GetDataTypeName())) } - adsValueType, ok := driverModel.PlcValueTypeByName(valueType.String()) + + adsValueType, ok := apiValues.PlcValueTypeByName(valueType.String()) if !ok { return nil, errors.New(fmt.Sprintf("error converting plc4x plc-value type %s into ads plc-value type", valueType.String())) } diff --git a/plc4go/internal/ads/TagHandler.go b/plc4go/internal/ads/TagHandler.go index e52a876180..7ca6e1c617 100644 --- a/plc4go/internal/ads/TagHandler.go +++ b/plc4go/internal/ads/TagHandler.go @@ -107,7 +107,7 @@ func (m TagHandler) ParseTag(query string) (apiModel.PlcTag, error) { if adsDataTypeName == "" { return nil, errors.Errorf("Missing ads data type") } - plcValueType, ok := apiValues.PlcValueByName(adsDataTypeName) + plcValueType, ok := apiValues.PlcValueTypeByName(adsDataTypeName) if !ok { return nil, fmt.Errorf("invalid ads data type") } @@ -214,7 +214,7 @@ func (m TagHandler) ParseTag(query string) (apiModel.PlcTag, error) { if adsDataTypeName == "" { return nil, errors.Errorf("Missing ads data type") } - plcValueType, ok := apiValues.PlcValueByName(adsDataTypeName) + plcValueType, ok := apiValues.PlcValueTypeByName(adsDataTypeName) if !ok { return nil, fmt.Errorf("invalid ads data type") } diff --git a/plc4go/internal/ads/Writer.go b/plc4go/internal/ads/Writer.go index e939bc9629..8b625ae544 100644 --- a/plc4go/internal/ads/Writer.go +++ b/plc4go/internal/ads/Writer.go @@ -298,7 +298,7 @@ func (m *Connection) serializePlcValue(dataType driverModel.AdsDataTypeTableEntr if valueType == apiValues.NULL { return errors.New(fmt.Sprintf("error converting %s into plc4x plc-value type", dataType.GetDataTypeName())) } - adsValueType, ok := driverModel.PlcValueTypeByName(valueType.String()) + adsValueType, ok := apiValues.PlcValueTypeByName(valueType.String()) if !ok { return errors.New(fmt.Sprintf("error converting plc4x plc-value type %s into ads plc-value type", valueType.String())) } diff --git a/plc4go/internal/eip/Tag.go b/plc4go/internal/eip/Tag.go index 1d6b96710a..112fa3e3b9 100644 --- a/plc4go/internal/eip/Tag.go +++ b/plc4go/internal/eip/Tag.go @@ -57,7 +57,7 @@ func (m plcTag) GetAddressString() string { } func (m plcTag) GetValueType() apiValues.PlcValueType { - if plcValueType, ok := apiValues.PlcValueByName(m.GetType().String()); !ok { + if plcValueType, ok := apiValues.PlcValueTypeByName(m.GetType().String()); !ok { return apiValues.NULL } else { return plcValueType diff --git a/plc4go/internal/modbus/Tag.go b/plc4go/internal/modbus/Tag.go index e7e26cfaee..12c3414b70 100644 --- a/plc4go/internal/modbus/Tag.go +++ b/plc4go/internal/modbus/Tag.go @@ -80,7 +80,7 @@ func (m modbusTag) GetAddressString() string { } func (m modbusTag) GetValueType() apiValues.PlcValueType { - if plcValueType, ok := apiValues.PlcValueByName(m.Datatype.String()); !ok { + if plcValueType, ok := apiValues.PlcValueTypeByName(m.Datatype.String()); !ok { return apiValues.NULL } else { return plcValueType diff --git a/plc4go/internal/opcua/Tag.go b/plc4go/internal/opcua/Tag.go index a8496d0681..5e98470e86 100644 --- a/plc4go/internal/opcua/Tag.go +++ b/plc4go/internal/opcua/Tag.go @@ -59,7 +59,7 @@ func (t *tag) GetAddressString() string { } func (t *tag) GetValueType() apiValues.PlcValueType { - valueType, ok := apiValues.PlcValueByName(t.dataType.PLC4XEnumName()) + valueType, ok := apiValues.PlcValueTypeByName(t.dataType.PLC4XEnumName()) if !ok { return 0xFF } diff --git a/plc4go/internal/s7/Tag.go b/plc4go/internal/s7/Tag.go index 54c3e47335..f2be4b13d8 100644 --- a/plc4go/internal/s7/Tag.go +++ b/plc4go/internal/s7/Tag.go @@ -91,7 +91,7 @@ func (m plcTag) GetAddressString() string { } func (m plcTag) GetValueType() apiValues.PlcValueType { - if plcValueByName, ok := apiValues.PlcValueByName(m.Datatype.String()); ok { + if plcValueByName, ok := apiValues.PlcValueTypeByName(m.Datatype.String()); ok { return plcValueByName } return apiValues.NULL diff --git a/plc4go/internal/simulated/Tag.go b/plc4go/internal/simulated/Tag.go index 78fd4cfeca..b0cfe7c34e 100644 --- a/plc4go/internal/simulated/Tag.go +++ b/plc4go/internal/simulated/Tag.go @@ -69,7 +69,7 @@ func (t simulatedTag) GetAddressString() string { } func (t simulatedTag) GetValueType() values.PlcValueType { - if plcValueType, ok := values.PlcValueByName(t.DataTypeSize.String()); ok { + if plcValueType, ok := values.PlcValueTypeByName(t.DataTypeSize.String()); ok { return plcValueType } return values.NULL diff --git a/plc4go/pkg/api/values/plc_value.go b/plc4go/pkg/api/values/plc_value.go index 673c5a30fc..184720251d 100644 --- a/plc4go/pkg/api/values/plc_value.go +++ b/plc4go/pkg/api/values/plc_value.go @@ -312,7 +312,7 @@ func (p PlcValueType) String() string { return "Unknown" } -func PlcValueByName(value string) (valueType PlcValueType, ok bool) { +func PlcValueTypeByName(value string) (valueType PlcValueType, ok bool) { switch value { case "NULL": return NULL, true diff --git a/plc4go/pkg/api/values/value_test.go b/plc4go/pkg/api/values/value_test.go index 3ae318c82b..5cfec8d0e6 100644 --- a/plc4go/pkg/api/values/value_test.go +++ b/plc4go/pkg/api/values/value_test.go @@ -65,7 +65,7 @@ func TestValues(t *testing.T) { t.Run(fmt.Sprintf("value %d", value), func(t *testing.T) { valueString := value.String() assert.NotEmpty(t, valueString) - valueType, ok := PlcValueByName(valueString) + valueType, ok := PlcValueTypeByName(valueString) expectedValue := value expectedOk := true if value == 0xff { diff --git a/plc4go/pom.xml b/plc4go/pom.xml index b2a1324b5b..f78a47d63f 100644 --- a/plc4go/pom.xml +++ b/plc4go/pom.xml @@ -632,6 +632,9 @@ <languageName>go</languageName> <outputFlavor>read-write</outputFlavor> <outputDir>${project.basedir}/protocols</outputDir> + <externalTypes> + <PlcValueType>api "github.com/apache/plc4x/plc4go/pkg/api/values"</PlcValueType> + </externalTypes> </configuration> </execution> <execution> diff --git a/plc4go/protocols/ads/readwrite/model/AdsDataType.go b/plc4go/protocols/ads/readwrite/model/AdsDataType.go index 744f89cadf..f32322812b 100644 --- a/plc4go/protocols/ads/readwrite/model/AdsDataType.go +++ b/plc4go/protocols/ads/readwrite/model/AdsDataType.go @@ -26,6 +26,7 @@ import ( "github.com/pkg/errors" "github.com/rs/zerolog" + api "github.com/apache/plc4x/plc4go/pkg/api/values" "github.com/apache/plc4x/plc4go/spi/utils" ) @@ -39,7 +40,7 @@ type IAdsDataType interface { utils.LengthAware utils.Serializable NumBytes() uint16 - PlcValueType() PlcValueType + PlcValueType() api.PlcValueType } const ( @@ -311,167 +312,167 @@ func AdsDataTypeFirstEnumForFieldNumBytes(value uint16) (enum AdsDataType, ok bo return 0, false } -func (e AdsDataType) PlcValueType() PlcValueType { +func (e AdsDataType) PlcValueType() api.PlcValueType { switch e { case 0x01: { /* '0x01' */ - return PlcValueType_BOOL + return api.BOOL } case 0x02: { /* '0x02' */ - return PlcValueType_BOOL + return api.BOOL } case 0x03: { /* '0x03' */ - return PlcValueType_BYTE + return api.BYTE } case 0x04: { /* '0x04' */ - return PlcValueType_BYTE + return api.BYTE } case 0x05: { /* '0x05' */ - return PlcValueType_BYTE + return api.BYTE } case 0x06: { /* '0x06' */ - return PlcValueType_WORD + return api.WORD } case 0x07: { /* '0x07' */ - return PlcValueType_WORD + return api.WORD } case 0x08: { /* '0x08' */ - return PlcValueType_DWORD + return api.DWORD } case 0x09: { /* '0x09' */ - return PlcValueType_DWORD + return api.DWORD } case 0x0A: { /* '0x0A' */ - return PlcValueType_SINT + return api.SINT } case 0x0B: { /* '0x0B' */ - return PlcValueType_SINT + return api.SINT } case 0x0C: { /* '0x0C' */ - return PlcValueType_USINT + return api.USINT } case 0x0D: { /* '0x0D' */ - return PlcValueType_USINT + return api.USINT } case 0x0E: { /* '0x0E' */ - return PlcValueType_INT + return api.INT } case 0x0F: { /* '0x0F' */ - return PlcValueType_INT + return api.INT } case 0x10: { /* '0x10' */ - return PlcValueType_UINT + return api.UINT } case 0x11: { /* '0x11' */ - return PlcValueType_UINT + return api.UINT } case 0x12: { /* '0x12' */ - return PlcValueType_DINT + return api.DINT } case 0x13: { /* '0x13' */ - return PlcValueType_DINT + return api.DINT } case 0x14: { /* '0x14' */ - return PlcValueType_UDINT + return api.UDINT } case 0x15: { /* '0x15' */ - return PlcValueType_UDINT + return api.UDINT } case 0x16: { /* '0x16' */ - return PlcValueType_LINT + return api.LINT } case 0x17: { /* '0x17' */ - return PlcValueType_LINT + return api.LINT } case 0x18: { /* '0x18' */ - return PlcValueType_ULINT + return api.ULINT } case 0x19: { /* '0x19' */ - return PlcValueType_ULINT + return api.ULINT } case 0x1A: { /* '0x1A' */ - return PlcValueType_REAL + return api.REAL } case 0x1B: { /* '0x1B' */ - return PlcValueType_REAL + return api.REAL } case 0x1C: { /* '0x1C' */ - return PlcValueType_LREAL + return api.LREAL } case 0x1D: { /* '0x1D' */ - return PlcValueType_LREAL + return api.LREAL } case 0x1E: { /* '0x1E' */ - return PlcValueType_CHAR + return api.CHAR } case 0x1F: { /* '0x1F' */ - return PlcValueType_WCHAR + return api.WCHAR } case 0x20: { /* '0x20' */ - return PlcValueType_STRING + return api.STRING } case 0x21: { /* '0x21' */ - return PlcValueType_WSTRING + return api.WSTRING } case 0x22: { /* '0x22' */ - return PlcValueType_TIME + return api.TIME } case 0x23: { /* '0x23' */ - return PlcValueType_LTIME + return api.LTIME } case 0x24: { /* '0x24' */ - return PlcValueType_DATE + return api.DATE } case 0x25: { /* '0x25' */ - return PlcValueType_TIME_OF_DAY + return api.TIME_OF_DAY } case 0x26: { /* '0x26' */ - return PlcValueType_TIME_OF_DAY + return api.TIME_OF_DAY } case 0x27: { /* '0x27' */ - return PlcValueType_DATE_AND_TIME + return api.DATE_AND_TIME } case 0x28: { /* '0x28' */ - return PlcValueType_DATE_AND_TIME + return api.DATE_AND_TIME } default: { @@ -480,7 +481,7 @@ func (e AdsDataType) PlcValueType() PlcValueType { } } -func AdsDataTypeFirstEnumForFieldPlcValueType(value PlcValueType) (enum AdsDataType, ok bool) { +func AdsDataTypeFirstEnumForFieldPlcValueType(value api.PlcValueType) (enum AdsDataType, ok bool) { for _, sizeValue := range AdsDataTypeValues { if sizeValue.PlcValueType() == value { return sizeValue, true @@ -727,7 +728,7 @@ func (e AdsDataType) GetValue() int8 { func (e AdsDataType) GetNumBytes() uint16 { return e.NumBytes() } -func (e AdsDataType) GetPlcValueType() PlcValueType { +func (e AdsDataType) GetPlcValueType() api.PlcValueType { return e.PlcValueType() } diff --git a/plc4go/protocols/ads/readwrite/model/DataItem.go b/plc4go/protocols/ads/readwrite/model/DataItem.go index 18199ebd24..233bb36d94 100644 --- a/plc4go/protocols/ads/readwrite/model/DataItem.go +++ b/plc4go/protocols/ads/readwrite/model/DataItem.go @@ -32,16 +32,16 @@ import ( // Code generated by code-generation. DO NOT EDIT. -func DataItemParse(ctx context.Context, theBytes []byte, plcValueType PlcValueType, stringLength int32) (api.PlcValue, error) { +func DataItemParse(ctx context.Context, theBytes []byte, plcValueType api.PlcValueType, stringLength int32) (api.PlcValue, error) { return DataItemParseWithBuffer(ctx, utils.NewReadBufferByteBased(theBytes), plcValueType, stringLength) } -func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, plcValueType PlcValueType, stringLength int32) (api.PlcValue, error) { +func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, plcValueType api.PlcValueType, stringLength int32) (api.PlcValue, error) { log := zerolog.Ctx(ctx) _ = log readBuffer.PullContext("DataItem") switch { - case plcValueType == PlcValueType_BOOL: // BOOL + case plcValueType == api.BOOL: // BOOL // Reserved Field (Just skip the bytes) if _, _err := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint8("reserved", 7); _err != nil { return nil, errors.Wrap(_err, "Error parsing reserved field") @@ -55,7 +55,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcBOOL(value), nil - case plcValueType == PlcValueType_BYTE: // BYTE + case plcValueType == api.BYTE: // BYTE // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint8("value", 8) if _valueErr != nil { @@ -64,7 +64,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcBYTE(value), nil - case plcValueType == PlcValueType_WORD: // WORD + case plcValueType == api.WORD: // WORD // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint16("value", 16) if _valueErr != nil { @@ -73,7 +73,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcWORD(value), nil - case plcValueType == PlcValueType_DWORD: // DWORD + case plcValueType == api.DWORD: // DWORD // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint32("value", 32) if _valueErr != nil { @@ -82,7 +82,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcDWORD(value), nil - case plcValueType == PlcValueType_LWORD: // LWORD + case plcValueType == api.LWORD: // LWORD // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint64("value", 64) if _valueErr != nil { @@ -91,7 +91,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcLWORD(value), nil - case plcValueType == PlcValueType_SINT: // SINT + case plcValueType == api.SINT: // SINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadInt8("value", 8) if _valueErr != nil { @@ -100,7 +100,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcSINT(value), nil - case plcValueType == PlcValueType_USINT: // USINT + case plcValueType == api.USINT: // USINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint8("value", 8) if _valueErr != nil { @@ -109,7 +109,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcUSINT(value), nil - case plcValueType == PlcValueType_INT: // INT + case plcValueType == api.INT: // INT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadInt16("value", 16) if _valueErr != nil { @@ -118,7 +118,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcINT(value), nil - case plcValueType == PlcValueType_UINT: // UINT + case plcValueType == api.UINT: // UINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint16("value", 16) if _valueErr != nil { @@ -127,7 +127,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcUINT(value), nil - case plcValueType == PlcValueType_DINT: // DINT + case plcValueType == api.DINT: // DINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadInt32("value", 32) if _valueErr != nil { @@ -136,7 +136,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcDINT(value), nil - case plcValueType == PlcValueType_UDINT: // UDINT + case plcValueType == api.UDINT: // UDINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint32("value", 32) if _valueErr != nil { @@ -145,7 +145,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcUDINT(value), nil - case plcValueType == PlcValueType_LINT: // LINT + case plcValueType == api.LINT: // LINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadInt64("value", 64) if _valueErr != nil { @@ -154,7 +154,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcLINT(value), nil - case plcValueType == PlcValueType_ULINT: // ULINT + case plcValueType == api.ULINT: // ULINT // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint64("value", 64) if _valueErr != nil { @@ -163,7 +163,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcULINT(value), nil - case plcValueType == PlcValueType_REAL: // REAL + case plcValueType == api.REAL: // REAL // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadFloat32("value", 32) if _valueErr != nil { @@ -172,7 +172,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcREAL(value), nil - case plcValueType == PlcValueType_LREAL: // LREAL + case plcValueType == api.LREAL: // LREAL // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadFloat64("value", 64) if _valueErr != nil { @@ -181,7 +181,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcLREAL(value), nil - case plcValueType == PlcValueType_CHAR: // CHAR + case plcValueType == api.CHAR: // CHAR // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadString("value", uint32(8), utils.WithEncoding("Windows-1252")) if _valueErr != nil { @@ -190,7 +190,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcCHAR(value), nil - case plcValueType == PlcValueType_WCHAR: // WCHAR + case plcValueType == api.WCHAR: // WCHAR // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadString("value", uint32(16), utils.WithEncoding("UTF-16LE")) if _valueErr != nil { @@ -199,7 +199,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = value // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcWCHAR(value), nil - case plcValueType == PlcValueType_STRING: // STRING + case plcValueType == api.STRING: // STRING // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadString("value", uint32((stringLength)*(8)), utils.WithEncoding("Windows-1252")) if _valueErr != nil { @@ -213,7 +213,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p } readBuffer.CloseContext("DataItem") return values.NewPlcSTRING(value), nil - case plcValueType == PlcValueType_WSTRING: // WSTRING + case plcValueType == api.WSTRING: // WSTRING // Simple Field (value) value, _valueErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadString("value", uint32(((stringLength)*(8))*(2)), utils.WithEncoding("UTF-16LE")) if _valueErr != nil { @@ -227,7 +227,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p } readBuffer.CloseContext("DataItem") return values.NewPlcWSTRING(value), nil - case plcValueType == PlcValueType_TIME: // TIME + case plcValueType == api.TIME: // TIME // Simple Field (milliseconds) milliseconds, _millisecondsErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint32("milliseconds", 32) if _millisecondsErr != nil { @@ -236,7 +236,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = milliseconds // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcTIMEFromMilliseconds(int64(milliseconds)), nil - case plcValueType == PlcValueType_LTIME: // LTIME + case plcValueType == api.LTIME: // LTIME // Simple Field (nanoseconds) nanoseconds, _nanosecondsErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint64("nanoseconds", 64) if _nanosecondsErr != nil { @@ -245,7 +245,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = nanoseconds // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcLTIMEFromNanoseconds(nanoseconds), nil - case plcValueType == PlcValueType_DATE: // DATE + case plcValueType == api.DATE: // DATE // Simple Field (secondsSinceEpoch) secondsSinceEpoch, _secondsSinceEpochErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint32("secondsSinceEpoch", 32) if _secondsSinceEpochErr != nil { @@ -254,7 +254,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = secondsSinceEpoch // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcDATEFromSecondsSinceEpoch(uint32(secondsSinceEpoch)), nil - case plcValueType == PlcValueType_LDATE: // LDATE + case plcValueType == api.LDATE: // LDATE // Simple Field (nanosecondsSinceEpoch) nanosecondsSinceEpoch, _nanosecondsSinceEpochErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint64("nanosecondsSinceEpoch", 64) if _nanosecondsSinceEpochErr != nil { @@ -263,7 +263,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = nanosecondsSinceEpoch // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcLDATEFromNanosecondsSinceEpoch(uint64(nanosecondsSinceEpoch)), nil - case plcValueType == PlcValueType_TIME_OF_DAY: // TIME_OF_DAY + case plcValueType == api.TIME_OF_DAY: // TIME_OF_DAY // Simple Field (millisecondsSinceMidnight) millisecondsSinceMidnight, _millisecondsSinceMidnightErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint32("millisecondsSinceMidnight", 32) if _millisecondsSinceMidnightErr != nil { @@ -272,7 +272,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = millisecondsSinceMidnight // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcTIME_OF_DAYFromMillisecondsSinceMidnight(millisecondsSinceMidnight), nil - case plcValueType == PlcValueType_LTIME_OF_DAY: // LTIME_OF_DAY + case plcValueType == api.LTIME_OF_DAY: // LTIME_OF_DAY // Simple Field (nanosecondsSinceMidnight) nanosecondsSinceMidnight, _nanosecondsSinceMidnightErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint64("nanosecondsSinceMidnight", 64) if _nanosecondsSinceMidnightErr != nil { @@ -281,7 +281,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = nanosecondsSinceMidnight // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcLTIME_OF_DAYFromNanosecondsSinceMidnight(nanosecondsSinceMidnight), nil - case plcValueType == PlcValueType_DATE_AND_TIME: // DATE_AND_TIME + case plcValueType == api.DATE_AND_TIME: // DATE_AND_TIME // Simple Field (secondsSinceEpoch) secondsSinceEpoch, _secondsSinceEpochErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint32("secondsSinceEpoch", 32) if _secondsSinceEpochErr != nil { @@ -290,7 +290,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p _ = secondsSinceEpoch // TODO: temporary till we fix TIME stuff in golang (see above in the template) readBuffer.CloseContext("DataItem") return values.NewPlcDATA_AND_TIMEFromSecondsSinceEpoch(secondsSinceEpoch), nil - case plcValueType == PlcValueType_LDATE_AND_TIME: // LDATE_AND_TIME + case plcValueType == api.LDATE_AND_TIME: // LDATE_AND_TIME // Simple Field (nanosecondsSinceEpoch) nanosecondsSinceEpoch, _nanosecondsSinceEpochErr := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint64("nanosecondsSinceEpoch", 64) if _nanosecondsSinceEpochErr != nil { @@ -304,7 +304,7 @@ func DataItemParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer, p return nil, errors.New("unsupported type") } -func DataItemSerialize(value api.PlcValue, plcValueType PlcValueType, stringLength int32) ([]byte, error) { +func DataItemSerialize(value api.PlcValue, plcValueType api.PlcValueType, stringLength int32) ([]byte, error) { wb := utils.NewWriteBufferByteBased() if err := DataItemSerializeWithWriteBuffer(context.Background(), wb, value, plcValueType, stringLength); err != nil { return nil, err @@ -313,11 +313,11 @@ func DataItemSerialize(value api.PlcValue, plcValueType PlcValueType, stringLeng } type _DataItem struct { - PlcValueType PlcValueType + PlcValueType api.PlcValueType StringLength int32 } -func (m _DataItem) GetPlcValueType() PlcValueType { +func (m _DataItem) GetPlcValueType() api.PlcValueType { return m.PlcValueType } @@ -325,7 +325,7 @@ func (m _DataItem) GetStringLength() int32 { return m.StringLength } -func DataItemSerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer, value api.PlcValue, plcValueType PlcValueType, stringLength int32) error { +func DataItemSerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer, value api.PlcValue, plcValueType api.PlcValueType, stringLength int32) error { log := zerolog.Ctx(ctx) _ = log m := _DataItem{ @@ -335,7 +335,7 @@ func DataItemSerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.Wri _ = m writeBuffer.PushContext("DataItem") switch { - case plcValueType == PlcValueType_BOOL: // BOOL + case plcValueType == api.BOOL: // BOOL // Reserved Field (Just skip the bytes) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint8("reserved", 7, uint8(uint8(0x00))); _err != nil { return errors.Wrap(_err, "Error serializing reserved field") @@ -345,87 +345,87 @@ func DataItemSerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.Wri if _err := /*TODO: migrate me*/ writeBuffer.WriteBit("value", value.GetBool()); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_BYTE: // BYTE + case plcValueType == api.BYTE: // BYTE // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint8("value", 8, uint8(value.GetUint8())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_WORD: // WORD + case plcValueType == api.WORD: // WORD // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint16("value", 16, uint16(value.GetUint16())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_DWORD: // DWORD + case plcValueType == api.DWORD: // DWORD // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint32("value", 32, uint32(value.GetUint32())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_LWORD: // LWORD + case plcValueType == api.LWORD: // LWORD // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint64("value", 64, uint64(value.GetUint64())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_SINT: // SINT + case plcValueType == api.SINT: // SINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteInt8("value", 8, int8(value.GetInt8())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_USINT: // USINT + case plcValueType == api.USINT: // USINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint8("value", 8, uint8(value.GetUint8())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_INT: // INT + case plcValueType == api.INT: // INT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteInt16("value", 16, int16(value.GetInt16())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_UINT: // UINT + case plcValueType == api.UINT: // UINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint16("value", 16, uint16(value.GetUint16())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_DINT: // DINT + case plcValueType == api.DINT: // DINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteInt32("value", 32, int32(value.GetInt32())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_UDINT: // UDINT + case plcValueType == api.UDINT: // UDINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint32("value", 32, uint32(value.GetUint32())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_LINT: // LINT + case plcValueType == api.LINT: // LINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteInt64("value", 64, int64(value.GetInt64())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_ULINT: // ULINT + case plcValueType == api.ULINT: // ULINT // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint64("value", 64, uint64(value.GetUint64())); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_REAL: // REAL + case plcValueType == api.REAL: // REAL // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteFloat32("value", 32, value.GetFloat32()); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_LREAL: // LREAL + case plcValueType == api.LREAL: // LREAL // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteFloat64("value", 64, value.GetFloat64()); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_CHAR: // CHAR + case plcValueType == api.CHAR: // CHAR // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteString("value", uint32(8), value.GetString(), utils.WithEncoding("Windows-1252)")); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_WCHAR: // WCHAR + case plcValueType == api.WCHAR: // WCHAR // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteString("value", uint32(16), value.GetString(), utils.WithEncoding("UTF-16LE)")); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") } - case plcValueType == PlcValueType_STRING: // STRING + case plcValueType == api.STRING: // STRING // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteString("value", uint32((stringLength)*(8)), value.GetString(), utils.WithEncoding("Windows-1252)")); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") @@ -435,7 +435,7 @@ func DataItemSerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.Wri if _err := /*TODO: migrate me*/ writeBuffer.WriteUint8("reserved", 8, uint8(uint8(0x00))); _err != nil { return errors.Wrap(_err, "Error serializing reserved field") } - case plcValueType == PlcValueType_WSTRING: // WSTRING + case plcValueType == api.WSTRING: // WSTRING // Simple Field (value) if _err := /*TODO: migrate me*/ writeBuffer.WriteString("value", uint32(((stringLength)*(8))*(2)), value.GetString(), utils.WithEncoding("UTF-16LE)")); _err != nil { return errors.Wrap(_err, "Error serializing 'value' field") @@ -445,42 +445,42 @@ func DataItemSerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.Wri if _err := /*TODO: migrate me*/ writeBuffer.WriteUint16("reserved", 16, uint16(uint16(0x0000))); _err != nil { return errors.Wrap(_err, "Error serializing reserved field") } - case plcValueType == PlcValueType_TIME: // TIME + case plcValueType == api.TIME: // TIME // Simple Field (milliseconds) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint32("milliseconds", 32, uint32(value.(values.PlcTIME).GetMilliseconds())); _err != nil { return errors.Wrap(_err, "Error serializing 'milliseconds' field") } - case plcValueType == PlcValueType_LTIME: // LTIME + case plcValueType == api.LTIME: // LTIME // Simple Field (nanoseconds) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint64("nanoseconds", 64, uint64(value.(values.PlcLTIME).GetNanoseconds())); _err != nil { return errors.Wrap(_err, "Error serializing 'nanoseconds' field") } - case plcValueType == PlcValueType_DATE: // DATE + case plcValueType == api.DATE: // DATE // Simple Field (secondsSinceEpoch) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint32("secondsSinceEpoch", 32, uint32(value.(values.PlcDATE).GetSecondsSinceEpoch())); _err != nil { return errors.Wrap(_err, "Error serializing 'secondsSinceEpoch' field") } - case plcValueType == PlcValueType_LDATE: // LDATE + case plcValueType == api.LDATE: // LDATE // Simple Field (nanosecondsSinceEpoch) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint64("nanosecondsSinceEpoch", 64, uint64(value.(values.PlcLDATE).GetNanosecondsSinceEpoch())); _err != nil { return errors.Wrap(_err, "Error serializing 'nanosecondsSinceEpoch' field") } - case plcValueType == PlcValueType_TIME_OF_DAY: // TIME_OF_DAY + case plcValueType == api.TIME_OF_DAY: // TIME_OF_DAY // Simple Field (millisecondsSinceMidnight) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint32("millisecondsSinceMidnight", 32, uint32(value.(values.PlcTIME_OF_DAY).GetMillisecondsSinceMidnight())); _err != nil { return errors.Wrap(_err, "Error serializing 'millisecondsSinceMidnight' field") } - case plcValueType == PlcValueType_LTIME_OF_DAY: // LTIME_OF_DAY + case plcValueType == api.LTIME_OF_DAY: // LTIME_OF_DAY // Simple Field (nanosecondsSinceMidnight) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint64("nanosecondsSinceMidnight", 64, uint64(value.(values.PlcLTIME_OF_DAY).GetNanosecondsSinceMidnight())); _err != nil { return errors.Wrap(_err, "Error serializing 'nanosecondsSinceMidnight' field") } - case plcValueType == PlcValueType_DATE_AND_TIME: // DATE_AND_TIME + case plcValueType == api.DATE_AND_TIME: // DATE_AND_TIME // Simple Field (secondsSinceEpoch) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint32("secondsSinceEpoch", 32, uint32(value.(values.PlcDATE_AND_TIME).GetSecondsSinceEpoch())); _err != nil { return errors.Wrap(_err, "Error serializing 'secondsSinceEpoch' field") } - case plcValueType == PlcValueType_LDATE_AND_TIME: // LDATE_AND_TIME + case plcValueType == api.LDATE_AND_TIME: // LDATE_AND_TIME // Simple Field (nanosecondsSinceEpoch) if _err := /*TODO: migrate me*/ writeBuffer.WriteUint64("nanosecondsSinceEpoch", 64, uint64(value.(values.PlcLDATE_AND_TIME).GetNanosecondsSinceEpoch())); _err != nil { return errors.Wrap(_err, "Error serializing 'nanosecondsSinceEpoch' field") diff --git a/plc4go/protocols/ads/readwrite/model/PlcValueType.go b/plc4go/protocols/ads/readwrite/model/PlcValueType.go deleted file mode 100644 index a7d553d6dd..0000000000 --- a/plc4go/protocols/ads/readwrite/model/PlcValueType.go +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package model - -import ( - "context" - "fmt" - - "github.com/pkg/errors" - "github.com/rs/zerolog" - - "github.com/apache/plc4x/plc4go/spi/utils" -) - -// Code generated by code-generation. DO NOT EDIT. - -// PlcValueType is an enum -type PlcValueType uint8 - -type IPlcValueType interface { - fmt.Stringer - utils.LengthAware - utils.Serializable -} - -const ( - PlcValueType_NULL PlcValueType = 0x00 - PlcValueType_BOOL PlcValueType = 0x01 - PlcValueType_BYTE PlcValueType = 0x02 - PlcValueType_WORD PlcValueType = 0x03 - PlcValueType_DWORD PlcValueType = 0x04 - PlcValueType_LWORD PlcValueType = 0x05 - PlcValueType_USINT PlcValueType = 0x11 - PlcValueType_UINT PlcValueType = 0x12 - PlcValueType_UDINT PlcValueType = 0x13 - PlcValueType_ULINT PlcValueType = 0x14 - PlcValueType_SINT PlcValueType = 0x21 - PlcValueType_INT PlcValueType = 0x22 - PlcValueType_DINT PlcValueType = 0x23 - PlcValueType_LINT PlcValueType = 0x24 - PlcValueType_REAL PlcValueType = 0x31 - PlcValueType_LREAL PlcValueType = 0x32 - PlcValueType_CHAR PlcValueType = 0x41 - PlcValueType_WCHAR PlcValueType = 0x42 - PlcValueType_STRING PlcValueType = 0x43 - PlcValueType_WSTRING PlcValueType = 0x44 - PlcValueType_TIME PlcValueType = 0x51 - PlcValueType_LTIME PlcValueType = 0x52 - PlcValueType_DATE PlcValueType = 0x53 - PlcValueType_LDATE PlcValueType = 0x54 - PlcValueType_TIME_OF_DAY PlcValueType = 0x55 - PlcValueType_LTIME_OF_DAY PlcValueType = 0x56 - PlcValueType_DATE_AND_TIME PlcValueType = 0x57 - PlcValueType_LDATE_AND_TIME PlcValueType = 0x58 - PlcValueType_Struct PlcValueType = 0x61 - PlcValueType_List PlcValueType = 0x62 - PlcValueType_RAW_BYTE_ARRAY PlcValueType = 0x71 -) - -var PlcValueTypeValues []PlcValueType - -func init() { - _ = errors.New - PlcValueTypeValues = []PlcValueType{ - PlcValueType_NULL, - PlcValueType_BOOL, - PlcValueType_BYTE, - PlcValueType_WORD, - PlcValueType_DWORD, - PlcValueType_LWORD, - PlcValueType_USINT, - PlcValueType_UINT, - PlcValueType_UDINT, - PlcValueType_ULINT, - PlcValueType_SINT, - PlcValueType_INT, - PlcValueType_DINT, - PlcValueType_LINT, - PlcValueType_REAL, - PlcValueType_LREAL, - PlcValueType_CHAR, - PlcValueType_WCHAR, - PlcValueType_STRING, - PlcValueType_WSTRING, - PlcValueType_TIME, - PlcValueType_LTIME, - PlcValueType_DATE, - PlcValueType_LDATE, - PlcValueType_TIME_OF_DAY, - PlcValueType_LTIME_OF_DAY, - PlcValueType_DATE_AND_TIME, - PlcValueType_LDATE_AND_TIME, - PlcValueType_Struct, - PlcValueType_List, - PlcValueType_RAW_BYTE_ARRAY, - } -} - -func PlcValueTypeByValue(value uint8) (enum PlcValueType, ok bool) { - switch value { - case 0x00: - return PlcValueType_NULL, true - case 0x01: - return PlcValueType_BOOL, true - case 0x02: - return PlcValueType_BYTE, true - case 0x03: - return PlcValueType_WORD, true - case 0x04: - return PlcValueType_DWORD, true - case 0x05: - return PlcValueType_LWORD, true - case 0x11: - return PlcValueType_USINT, true - case 0x12: - return PlcValueType_UINT, true - case 0x13: - return PlcValueType_UDINT, true - case 0x14: - return PlcValueType_ULINT, true - case 0x21: - return PlcValueType_SINT, true - case 0x22: - return PlcValueType_INT, true - case 0x23: - return PlcValueType_DINT, true - case 0x24: - return PlcValueType_LINT, true - case 0x31: - return PlcValueType_REAL, true - case 0x32: - return PlcValueType_LREAL, true - case 0x41: - return PlcValueType_CHAR, true - case 0x42: - return PlcValueType_WCHAR, true - case 0x43: - return PlcValueType_STRING, true - case 0x44: - return PlcValueType_WSTRING, true - case 0x51: - return PlcValueType_TIME, true - case 0x52: - return PlcValueType_LTIME, true - case 0x53: - return PlcValueType_DATE, true - case 0x54: - return PlcValueType_LDATE, true - case 0x55: - return PlcValueType_TIME_OF_DAY, true - case 0x56: - return PlcValueType_LTIME_OF_DAY, true - case 0x57: - return PlcValueType_DATE_AND_TIME, true - case 0x58: - return PlcValueType_LDATE_AND_TIME, true - case 0x61: - return PlcValueType_Struct, true - case 0x62: - return PlcValueType_List, true - case 0x71: - return PlcValueType_RAW_BYTE_ARRAY, true - } - return 0, false -} - -func PlcValueTypeByName(value string) (enum PlcValueType, ok bool) { - switch value { - case "NULL": - return PlcValueType_NULL, true - case "BOOL": - return PlcValueType_BOOL, true - case "BYTE": - return PlcValueType_BYTE, true - case "WORD": - return PlcValueType_WORD, true - case "DWORD": - return PlcValueType_DWORD, true - case "LWORD": - return PlcValueType_LWORD, true - case "USINT": - return PlcValueType_USINT, true - case "UINT": - return PlcValueType_UINT, true - case "UDINT": - return PlcValueType_UDINT, true - case "ULINT": - return PlcValueType_ULINT, true - case "SINT": - return PlcValueType_SINT, true - case "INT": - return PlcValueType_INT, true - case "DINT": - return PlcValueType_DINT, true - case "LINT": - return PlcValueType_LINT, true - case "REAL": - return PlcValueType_REAL, true - case "LREAL": - return PlcValueType_LREAL, true - case "CHAR": - return PlcValueType_CHAR, true - case "WCHAR": - return PlcValueType_WCHAR, true - case "STRING": - return PlcValueType_STRING, true - case "WSTRING": - return PlcValueType_WSTRING, true - case "TIME": - return PlcValueType_TIME, true - case "LTIME": - return PlcValueType_LTIME, true - case "DATE": - return PlcValueType_DATE, true - case "LDATE": - return PlcValueType_LDATE, true - case "TIME_OF_DAY": - return PlcValueType_TIME_OF_DAY, true - case "LTIME_OF_DAY": - return PlcValueType_LTIME_OF_DAY, true - case "DATE_AND_TIME": - return PlcValueType_DATE_AND_TIME, true - case "LDATE_AND_TIME": - return PlcValueType_LDATE_AND_TIME, true - case "Struct": - return PlcValueType_Struct, true - case "List": - return PlcValueType_List, true - case "RAW_BYTE_ARRAY": - return PlcValueType_RAW_BYTE_ARRAY, true - } - return 0, false -} - -func PlcValueTypeKnows(value uint8) bool { - for _, typeValue := range PlcValueTypeValues { - if uint8(typeValue) == value { - return true - } - } - return false -} - -func CastPlcValueType(structType any) PlcValueType { - castFunc := func(typ any) PlcValueType { - if sPlcValueType, ok := typ.(PlcValueType); ok { - return sPlcValueType - } - return 0 - } - return castFunc(structType) -} - -func (m PlcValueType) GetLengthInBits(ctx context.Context) uint16 { - return 8 -} - -func (m PlcValueType) GetLengthInBytes(ctx context.Context) uint16 { - return m.GetLengthInBits(ctx) / 8 -} - -func PlcValueTypeParse(ctx context.Context, theBytes []byte) (PlcValueType, error) { - return PlcValueTypeParseWithBuffer(ctx, utils.NewReadBufferByteBased(theBytes)) -} - -func PlcValueTypeParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer) (PlcValueType, error) { - log := zerolog.Ctx(ctx) - _ = log - val, err := /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.ReadUint8("PlcValueType", 8) - if err != nil { - return 0, errors.Wrap(err, "error reading PlcValueType") - } - if enum, ok := PlcValueTypeByValue(val); !ok { - log.Debug().Interface("val", val).Msg("no value val found for PlcValueType") - return PlcValueType(val), nil - } else { - return enum, nil - } -} - -func (e PlcValueType) Serialize() ([]byte, error) { - wb := utils.NewWriteBufferByteBased() - if err := e.SerializeWithWriteBuffer(context.Background(), wb); err != nil { - return nil, err - } - return wb.GetBytes(), nil -} - -func (e PlcValueType) SerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer) error { - log := zerolog.Ctx(ctx) - _ = log - return /*TODO: migrate me*/ writeBuffer.WriteUint8("PlcValueType", 8, uint8(uint8(e)), utils.WithAdditionalStringRepresentation(e.PLC4XEnumName())) -} - -func (e PlcValueType) GetValue() uint8 { - return uint8(e) -} - -// PLC4XEnumName returns the name that is used in code to identify this enum -func (e PlcValueType) PLC4XEnumName() string { - switch e { - case PlcValueType_NULL: - return "NULL" - case PlcValueType_BOOL: - return "BOOL" - case PlcValueType_BYTE: - return "BYTE" - case PlcValueType_WORD: - return "WORD" - case PlcValueType_DWORD: - return "DWORD" - case PlcValueType_LWORD: - return "LWORD" - case PlcValueType_USINT: - return "USINT" - case PlcValueType_UINT: - return "UINT" - case PlcValueType_UDINT: - return "UDINT" - case PlcValueType_ULINT: - return "ULINT" - case PlcValueType_SINT: - return "SINT" - case PlcValueType_INT: - return "INT" - case PlcValueType_DINT: - return "DINT" - case PlcValueType_LINT: - return "LINT" - case PlcValueType_REAL: - return "REAL" - case PlcValueType_LREAL: - return "LREAL" - case PlcValueType_CHAR: - return "CHAR" - case PlcValueType_WCHAR: - return "WCHAR" - case PlcValueType_STRING: - return "STRING" - case PlcValueType_WSTRING: - return "WSTRING" - case PlcValueType_TIME: - return "TIME" - case PlcValueType_LTIME: - return "LTIME" - case PlcValueType_DATE: - return "DATE" - case PlcValueType_LDATE: - return "LDATE" - case PlcValueType_TIME_OF_DAY: - return "TIME_OF_DAY" - case PlcValueType_LTIME_OF_DAY: - return "LTIME_OF_DAY" - case PlcValueType_DATE_AND_TIME: - return "DATE_AND_TIME" - case PlcValueType_LDATE_AND_TIME: - return "LDATE_AND_TIME" - case PlcValueType_Struct: - return "Struct" - case PlcValueType_List: - return "List" - case PlcValueType_RAW_BYTE_ARRAY: - return "RAW_BYTE_ARRAY" - } - return fmt.Sprintf("Unknown(%v)", uint8(e)) -} - -func (e PlcValueType) String() string { - return e.PLC4XEnumName() -} diff --git a/plc4j/drivers/ads/pom.xml b/plc4j/drivers/ads/pom.xml index 1359d91633..72e291f64c 100644 --- a/plc4j/drivers/ads/pom.xml +++ b/plc4j/drivers/ads/pom.xml @@ -168,6 +168,9 @@ <languageName>java</languageName> <outputFlavor>read-write</outputFlavor> <outputDir>src/main/generated</outputDir> + <externalTypes> + <PlcValueType>org.apache.plc4x.java.api.types.PlcValueType</PlcValueType> + </externalTypes> </configuration> </execution> <execution> diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataType.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataType.java index 7d0dc5bb73..d825746e15 100644 --- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataType.java +++ b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataType.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.plc4x.java.api.types.PlcValueType; // Code generated by code-generation. DO NOT EDIT. diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/DataItem.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/DataItem.java index f7126c8c74..d7d7f30832 100644 --- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/DataItem.java +++ b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/DataItem.java @@ -29,6 +29,7 @@ import java.time.*; import java.time.temporal.ChronoField; import java.util.*; import org.apache.plc4x.java.api.exceptions.*; +import org.apache.plc4x.java.api.types.PlcValueType; import org.apache.plc4x.java.api.value.*; import org.apache.plc4x.java.spi.codegen.*; import org.apache.plc4x.java.spi.codegen.fields.*; diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/PlcValueType.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/PlcValueType.java deleted file mode 100644 index 44d3737931..0000000000 --- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/PlcValueType.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.plc4x.java.ads.readwrite; - -import java.util.HashMap; -import java.util.Map; - -// Code generated by code-generation. DO NOT EDIT. - -public enum PlcValueType { - NULL((short) 0x00), - BOOL((short) 0x01), - BYTE((short) 0x02), - WORD((short) 0x03), - DWORD((short) 0x04), - LWORD((short) 0x05), - USINT((short) 0x11), - UINT((short) 0x12), - UDINT((short) 0x13), - ULINT((short) 0x14), - SINT((short) 0x21), - INT((short) 0x22), - DINT((short) 0x23), - LINT((short) 0x24), - REAL((short) 0x31), - LREAL((short) 0x32), - CHAR((short) 0x41), - WCHAR((short) 0x42), - STRING((short) 0x43), - WSTRING((short) 0x44), - TIME((short) 0x51), - LTIME((short) 0x52), - DATE((short) 0x53), - LDATE((short) 0x54), - TIME_OF_DAY((short) 0x55), - LTIME_OF_DAY((short) 0x56), - DATE_AND_TIME((short) 0x57), - LDATE_AND_TIME((short) 0x58), - Struct((short) 0x61), - List((short) 0x62), - RAW_BYTE_ARRAY((short) 0x71); - private static final Map<Short, PlcValueType> map; - - static { - map = new HashMap<>(); - for (PlcValueType value : PlcValueType.values()) { - map.put((short) value.getValue(), value); - } - } - - private final short value; - - PlcValueType(short value) { - this.value = value; - } - - public short getValue() { - return value; - } - - public static PlcValueType enumForValue(short value) { - return map.get(value); - } - - public static Boolean isDefined(short value) { - return map.containsKey(value); - } -} diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java index d0797ca2d1..e4edbe1ccc 100644 --- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java +++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java @@ -37,6 +37,7 @@ import org.apache.plc4x.java.api.messages.*; import org.apache.plc4x.java.api.model.*; import org.apache.plc4x.java.api.types.PlcResponseCode; import org.apache.plc4x.java.api.types.PlcSubscriptionType; +import org.apache.plc4x.java.api.types.PlcValueType; import org.apache.plc4x.java.api.value.PlcValue; import org.apache.plc4x.java.spi.ConversationContext; import org.apache.plc4x.java.spi.Plc4xProtocolBase; @@ -505,8 +506,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } // Convert the plc value type from the ADS specific one to the PLC4X global one. - org.apache.plc4x.java.api.types.PlcValueType plc4xPlcValueType = - org.apache.plc4x.java.api.types.PlcValueType.valueOf(getPlcValueTypeForAdsDataTypeForBrowse(dataType).toString()); + PlcValueType plcValueType = getPlcValueTypeForAdsDataTypeForBrowse(dataType); // If this type has children, add entries for its children. List<PlcBrowseItem> children = getBrowseItems(symbol.getName(), symbol.getGroup(), symbol.getOffset(), !symbol.getFlagReadOnly(), dataType); @@ -530,7 +530,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements itemArrayInfo.add(new DefaultPlcBrowseItemArrayInfo( adsDataTypeArrayInfo.getLowerBound(), adsDataTypeArrayInfo.getUpperBound())); } - DefaultPlcBrowseItemList item = new DefaultPlcBrowseItemList(new SymbolicAdsTag(symbol.getName(), plc4xPlcValueType, arrayInfo), symbol.getName(), + DefaultPlcBrowseItemList item = new DefaultPlcBrowseItemList(new SymbolicAdsTag(symbol.getName(), plcValueType, arrayInfo), symbol.getName(), true, !symbol.getFlagReadOnly(), true, false, childMap, options, itemArrayInfo); // Check if this item should be added to the result diff --git a/pom.xml b/pom.xml index 72e63c71a4..ca89476dc5 100644 --- a/pom.xml +++ b/pom.xml @@ -99,7 +99,7 @@ <sonar.cfamily.build-wrapper-output>${project.basedir}/plc4c/target/build-wrapper-output </sonar.cfamily.build-wrapper-output> - <plc4x-code-generation.version>1.7.0</plc4x-code-generation.version> + <plc4x-code-generation.version>1.8.0-SNAPSHOT</plc4x-code-generation.version> <antlr.version>4.13.2</antlr.version> <apiguardian.version>1.1.2</apiguardian.version> diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec index b2d2516f3e..5835e7b690 100644 --- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec +++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec @@ -21,6 +21,12 @@ [const uint 16 adsTcpDefaultPort 48898] ] +//////////////////////////////////////////////////////////////// +// External types +//////////////////////////////////////////////////////////////// + +[enum PlcValueType external='true'] + //////////////////////////////////////////////////////////////// // AMS/TCP Packet //////////////////////////////////////////////////////////////// @@ -512,55 +518,6 @@ ] ] -[enum uint 8 PlcValueType - ['0x00' NULL ] - - // Bit Strings - ['0x01' BOOL ] - ['0x02' BYTE ] - ['0x03' WORD ] - ['0x04' DWORD ] - ['0x05' LWORD ] - - // Unsigned Integers - ['0x11' USINT ] - ['0x12' UINT ] - ['0x13' UDINT ] - ['0x14' ULINT ] - - // Signed Integers - ['0x21' SINT ] - ['0x22' INT ] - ['0x23' DINT ] - ['0x24' LINT ] - - // Floating Point Values - ['0x31' REAL ] - ['0x32' LREAL ] - - // Chars and Strings - ['0x41' CHAR ] - ['0x42' WCHAR ] - ['0x43' STRING ] - ['0x44' WSTRING ] - - // Times and Dates - ['0x51' TIME ] - ['0x52' LTIME ] - ['0x53' DATE ] - ['0x54' LDATE ] - ['0x55' TIME_OF_DAY ] - ['0x56' LTIME_OF_DAY ] - ['0x57' DATE_AND_TIME ] - ['0x58' LDATE_AND_TIME] - - // Complex types - ['0x61' Struct ] - ['0x62' List ] - - ['0x71' RAW_BYTE_ARRAY] -] - [enum int 8 AdsDataType(uint 16 numBytes, PlcValueType plcValueType) ['0x01' BOOL ['1', 'BOOL' ]] ['0x02' BIT ['1', 'BOOL' ]]
