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
         ]
     ]
 ]