You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2019/11/08 06:46:15 UTC
[plc4x] branch feature/knxnet-ip updated: - Fixed some problems in
the code-generaion - Made it possible to have boolean types in the
Type-Switches - Updated the KNXNet/IP Spec according to the data in KNX
Spec 3.3.2 (Chapter 2.2)
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/knxnet-ip
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/knxnet-ip by this push:
new 7422b0d - Fixed some problems in the code-generaion - Made it possible to have boolean types in the Type-Switches - Updated the KNXNet/IP Spec according to the data in KNX Spec 3.3.2 (Chapter 2.2)
7422b0d is described below
commit 7422b0d8ebfdbe81f15a222bb74e14baf1629470
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Nov 8 07:46:08 2019 +0100
- Fixed some problems in the code-generaion
- Made it possible to have boolean types in the Type-Switches
- Updated the KNXNet/IP Spec according to the data in KNX Spec 3.3.2 (Chapter 2.2)
---
.../language/java/JavaLanguageTemplateHelper.java | 12 +--------
.../main/resources/templates/java/io-template.ftlh | 10 ++++----
.../apache/plc4x/java/utils/EvaluationHelper.java | 5 ++++
.../resources/protocols/knxnetip/knxnetip.mspec | 30 ++++++++++++++++------
4 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index 0fc603f..89841fd 100644
--- a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@ -36,6 +36,7 @@ import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+@SuppressWarnings({"unused", "WeakerAccess"})
public class JavaLanguageTemplateHelper implements FreemarkerLanguageTemplateHelper {
private final Map<String, TypeDefinition> types;
@@ -285,17 +286,6 @@ public class JavaLanguageTemplateHelper implements FreemarkerLanguageTemplateHel
return "Hurz";
}
- public String getReadMethodName(SimpleTypeReference simpleTypeReference) {
- String languageTypeName = getLanguageTypeNameForSpecType(simpleTypeReference);
- languageTypeName = languageTypeName.substring(0, 1).toUpperCase() + languageTypeName.substring(1);
- if(simpleTypeReference.getBaseType().equals(SimpleTypeReference.SimpleBaseType.UINT)) {
- return "readUnsigned" + languageTypeName;
- } else {
- return "read" + languageTypeName;
-
- }
- }
-
public Collection<ComplexTypeReference> getComplexTypes(ComplexTypeDefinition complexTypeDefinition) {
Map<String, ComplexTypeReference> types = new HashMap<>();
for (Field field : complexTypeDefinition.getFields()) {
diff --git a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
index b718935..78ce7a4 100644
--- a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
@@ -119,7 +119,7 @@ public class ${typeName}IO {
<#case "checksum">
// Checksum Field (${field.name})
- ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadMethodName(field.type)}(${field.type.size});
+ ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadBufferReadMethodCall(field.type)};
${helper.getLanguageTypeNameForField(field)} _${field.name}Ref = (${helper.getLanguageTypeNameForField(field)}) (${helper.toDeserializationExpression(field.checksumExpression, type.parserArguments)});
if(${field.name} != _${field.name}Ref) {
throw new ParseException(String.format("Checksum verification failed. Expected %04X but got %04X",_${field.name}Ref & 0xFFFF, ${field.name} & 0xFFFF));
@@ -128,7 +128,7 @@ public class ${typeName}IO {
<#case "const">
// Const Field (${field.name})
- ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadMethodName(field.type)}(${field.type.size});
+ ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadBufferReadMethodCall(field.type)};
if(${field.name} != ${typeName}.${field.name?upper_case}) {
throw new ParseException("Expected constant value " + ${typeName}.${field.name?upper_case} + " but got " + ${field.name});
}
@@ -136,17 +136,17 @@ public class ${typeName}IO {
<#case "enum">
// Enum field (${field.name})
- ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getLanguageTypeNameForField(field)}.valueOf(io.${helper.getReadMethodName(helper.getEnumBaseType(field.type))}(${helper.getEnumBaseType(field.type).size}));
+ ${helper.getLanguageTypeNameForField(field)} ${field.name} = ${helper.getLanguageTypeNameForField(field)}.valueOf(io.${helper.getReadBufferReadMethodCall(helper.getEnumBaseType(field.type))});
<#break>
<#case "discriminator">
// Discriminator Field (${field.name}) (Used as input to a switch field)
- ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadMethodName(field.type)}(${field.type.size});
+ ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadBufferReadMethodCall(field.type)};
<#break>
<#case "implicit">
// Implicit Field (${field.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
- ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadMethodName(field.type)}(${field.type.size});
+ ${helper.getLanguageTypeNameForField(field)} ${field.name} = io.${helper.getReadBufferReadMethodCall(field.type)};
<#break>
<#case "manualArray">
diff --git a/plc4j/utils/driver-base-java/src/main/java/org/apache/plc4x/java/utils/EvaluationHelper.java b/plc4j/utils/driver-base-java/src/main/java/org/apache/plc4x/java/utils/EvaluationHelper.java
index 8e62d79..c278c32 100644
--- a/plc4j/utils/driver-base-java/src/main/java/org/apache/plc4x/java/utils/EvaluationHelper.java
+++ b/plc4j/utils/driver-base-java/src/main/java/org/apache/plc4x/java/utils/EvaluationHelper.java
@@ -27,6 +27,11 @@ public class EvaluationHelper {
Number number2 = (Number) val2;
return number1.doubleValue() == number2.doubleValue();
}
+ if(val1 instanceof Boolean && val2 instanceof Boolean) {
+ Boolean boolean1 = (Boolean) val1;
+ Boolean boolean2 = (Boolean) val2;
+ return boolean1.equals(boolean2);
+ }
return false;
}
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 2364e65..3e2d429 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -295,24 +295,38 @@
[discriminatedType 'CEMIFrame'
[simple bit 'standardFrame']
- [discriminator uint 1 'eot']
+ [simple bit 'polling']
[simple bit 'doNotRepeat']
- [simple bit 'broadcast']
+ [discriminator bit 'notAckFrame']
[enum CEMIPriority 'priority']
- [simple bit 'ackRequested']
- [simple bit 'error']
- [typeSwitch 'eot'
- ['0x0' CEMIFrameData
+ [reserved uint 2 '0x0']
+ [typeSwitch 'notAckFrame','standardFrame','polling'
+ ['false' CEMIFrameAck
+ ]
+ ['true','true','false' CEMIFrameData
[simple CEMIAddress 'sourceAddress']
[simple CEMIAddress 'destinationAddress']
[simple bit 'groupAddress']
- [simple uint 3 'routing']
+ [simple uint 3 'hopCount']
[simple uint 4 'dataLength']
[simple uint 8 'tpci']
[array int 8 'data' count 'dataLength']
[simple uint 8 'crc']
]
- ['0x1' CEMIFrameEot
+ ['true','false','false' CEMIFrameDataExt
+ [simple bit 'groupAddress']
+ [simple uint 3 'hopCount']
+ [simple uint 4 'extendedFrameFormat']
+ [simple CEMIAddress 'sourceAddress']
+ [simple CEMIAddress 'destinationAddress']
+ [simple uint 8 'dataLength']
+ [simple uint 8 'tpci']
+ [array int 8 'data' count 'dataLength']
+ [simple uint 8 'crc']
+ ]
+ ['true','true','true' CEMIFramePollingData
+ ]
+ ['true','false','true' CEMIFramePollingDataExt
]
]
]