You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by ld...@apache.org on 2020/10/07 10:02:01 UTC

[plc4x] 06/19: More definitions of various frame formats.

This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch feature/socketcan
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit b3047448bce7aedd074c0ecbd17547dad2284cf2
Author: Ɓukasz Dywicki <lu...@code-house.org>
AuthorDate: Wed Aug 26 23:49:33 2020 +0200

    More definitions of various frame formats.
---
 .../can/src/main/resources/protocols/can/can.mspec | 67 ++++++++++++++++++----
 .../apache/plc4x/java/can/helper/HeaderParser.java |  4 +-
 .../apache/plc4x/java/can/ManualParserTest.java    |  3 +
 .../apache/plc4x/java/can/SocketCAN20ATest.java    | 30 ++++++++++
 ...tCANTestSuite.xml => SocketCAN20ATestSuite.xml} | 45 ++++++++++-----
 ...tCANTestSuite.xml => SocketCAN20BTestSuite.xml} | 26 ++-------
 .../resources/testsuite/SocketCANTestSuite.xml     | 42 ++++++++++----
 7 files changed, 156 insertions(+), 61 deletions(-)

diff --git a/protocols/can/src/main/resources/protocols/can/can.mspec b/protocols/can/src/main/resources/protocols/can/can.mspec
index 16408fd..147492b 100644
--- a/protocols/can/src/main/resources/protocols/can/can.mspec
+++ b/protocols/can/src/main/resources/protocols/can/can.mspec
@@ -52,10 +52,35 @@ struct canfd_frame {
 };
 */
 
+[type 'BrokenSocketCANFrame'
+    [discriminator bit 'extended']
+    [simple bit 'remote']
+    [simple bit 'error']
+    [simple bit 'extended']
+    [typeSwitch 'extended'
+        ['true' ExtendedSocketCANFrame
+            [simple uint 29 'identifier']
+        ]
+
+        ['false' StandardSocketCANFrame
+            [const  uint 18 '0x0']
+            [simple uint 11 'identifier']
+        ]
+    ]
+    [implicit uint 8 'size' 'COUNT(data)']
+    [reserved uint 8 '0x0'] // padding
+    [reserved uint 8 '0x0'] // reserved / padding
+    [reserved uint 8 '0x0'] // reserved / padding
+    [array int 8 'data' COUNT 'size']
+]
+
 [type 'SocketCANFrame'
     [simple int 32 'rawId']
+    [virtual int 32 'identifier'
+        'STATIC_CALL("org.apache.plc4x.java.can.helper.HeaderParser.readIdentifier", rawId)'
+    ]
     [virtual bit 'extended'
-        'STATIC_CALL("org.apache.plc4x.java.can.helper.HeaderParser.isRemote", rawId)'
+        'STATIC_CALL("org.apache.plc4x.java.can.helper.HeaderParser.isExtended", rawId)'
     ]
     [virtual bit 'remote'
         'STATIC_CALL("org.apache.plc4x.java.can.helper.HeaderParser.isRemote", rawId)'
@@ -64,28 +89,48 @@ struct canfd_frame {
         'STATIC_CALL("org.apache.plc4x.java.can.helper.HeaderParser.isError", rawId)'
     ]
     [implicit uint 8 'size' 'COUNT(data)']
-//    [typeSwitch 'extended'
-//        ['true' ExtendedOtherSocketCanFrame
-//            [simple uint 8 'flags']
-//        ]
-//        ['false' ExtendedOtherSocketCanFrame
-            [reserved uint 8 '0x0']
-//        ]
-//    ]
     [reserved uint 8 '0x0'] //flags
     [reserved uint 8 '0x0'] // padding 1
     [reserved uint 8 '0x0'] // padding 2
     [array int 8 'data' COUNT 'size']
 ]
 
+[type 'SocketCAN20AFrame'
+    [simple int 16 'identifier']
+    [reserved int 8 '0x0'] // filling gap used by extended frame
+    [simple bit 'extended']
+    [simple bit 'remote']
+    [simple bit 'error']
+    [reserved int 5 '0x0']  // filling gap used by extended frame
+    [implicit uint 8 'size' 'COUNT(data)']
+    [reserved uint 8 '0x0'] // in case of fd frame these are flags
+    [reserved uint 8 '0x0'] // padding 1
+    [reserved uint 8 '0x0'] // padding 2
+    [array int 8 'data' COUNT 'size']
+]
+
 [type 'SimplifiedSocketCANFrame'
     [simple bit 'extended']
     [simple bit 'remote']
     [simple bit 'error']
     [simple uint 29 'identifier']
-    [implicit uint 8 'length' 'COUNT(data)']
+    //implicit uint 8 'size' 'COUNT(data)'
     [reserved uint 8 '0x0'] // flags
     [reserved uint 8 '0x0'] // padding
     [reserved uint 8 '0x0'] // padding
-    [array int 8 'data' COUNT 'length']
+    //array int 8 'data' COUNT 'size'
+]
+
+[enum 'CanOpenNMTCommand'
+    ['0x01', START_DEVICE]
+    ['0x02', STOP_DEVICE]
+    ['0x80', PRE_START]
+    ['0x81', RESET_DEVICE]
+    ['0x82', RESET_COMMUNICATION]
 ]
+
+[dataIo 'CANOpenFrame' [uint 4 'function', uint 7 nodeId, int 8 'data']
+    [discriminator uint 4 'afunction']
+    [typeSwitch 'afunction'
+    ]
+]
\ No newline at end of file
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/HeaderParser.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/HeaderParser.java
index 3ce7f0f..c0363f6 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/HeaderParser.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/HeaderParser.java
@@ -2,7 +2,6 @@ package org.apache.plc4x.java.can.helper;
 
 import org.apache.plc4x.java.can.readwrite.SocketCANFrame;
 import org.apache.plc4x.java.spi.generation.ParseException;
-import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
 public class HeaderParser {
@@ -17,8 +16,7 @@ public class HeaderParser {
 
     public static final int EXTENDED_FORMAT_IDENTIFIER_MASK = 0x1fffffff;
 
-    public static int readIdentifier(ReadBuffer buffer) throws ParseException {
-        int identifier = buffer.readInt(32);
+    public static int readIdentifier(int identifier) {
         if ((identifier & EXTENDED_FORMAT_IDENTIFIER_MASK) == 0) {
             return identifier & STANDARD_FORMAT_IDENTIFIER_MASK;
         }
diff --git a/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/ManualParserTest.java b/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/ManualParserTest.java
index 11c6ca6..c055513 100644
--- a/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/ManualParserTest.java
+++ b/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/ManualParserTest.java
@@ -18,6 +18,9 @@ public class ManualParserTest {
     // cansend 5A1#11.2233.44556677.88
     String STANDARD = "a1050000080000001122334455667788";
 
+    // cansend 5A1#R
+    String STANDARD_REPLY = "a1050040000000000000000000000000";
+
     // cansend 1E6EC676#05.05.1F.26.C3
     String EXTENDED = "76c66e9e0500000005051f26c3000000";
 
diff --git a/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/SocketCAN20ATest.java b/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/SocketCAN20ATest.java
new file mode 100644
index 0000000..8d86d97
--- /dev/null
+++ b/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/SocketCAN20ATest.java
@@ -0,0 +1,30 @@
+/*
+  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
+
+      http://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.can;
+
+import org.apache.plc4x.test.parserserializer.ParserSerializerTestsuiteRunner;
+
+public class SocketCAN20ATest extends ParserSerializerTestsuiteRunner {
+
+    public SocketCAN20ATest() {
+        super("/testsuite/SocketCAN20ATestSuite.xml");
+    }
+
+}
diff --git a/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml b/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCAN20ATestSuite.xml
similarity index 53%
copy from sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
copy to sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCAN20ATestSuite.xml
index 774563b..60140de 100644
--- a/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
+++ b/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCAN20ATestSuite.xml
@@ -19,35 +19,50 @@
   -->
 <test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd">
 
-  <name>CAN Standard Format Frame</name>
+  <name>Tests of socketcan/CAN 2.0A frames</name>
 
   <testcase>
-    <name>Extended frame 1E6EC676#05.05.1F.26.C3</name>
-    <raw>76c66e9e0500000005051f26c3000000</raw>
-    <root-type>SocketCANFrame</root-type>
+    <name>Standard frame with 5 byte payload: 5A1#11.2233.44556677.88</name>
+    <raw>a1050000080000001122334455667788</raw>
+    <root-type>SocketCAN20AFrame</root-type>
     <xml>
-      <SocketCANFDFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
-        <identifier>510576246</identifier>
-        <extended>true</extended>
+      <SocketCAN20AFrame className="org.apache.plc4x.java.can.readwrite.SocketCAN20AFrame">
+        <identifier>1441</identifier>
+        <extended>false</extended>
         <remote>false</remote>
-        <error>true</error>
-        <data></data>
-      </SocketCANFDFrame>
+        <error>false</error>
+        <data>ESIzRFVmd4g=</data>
+      </SocketCAN20AFrame>
     </xml>
   </testcase>
 
   <testcase>
-    <name>Standard frame 5A1#11.2233.44556677.88</name>
-    <raw>a1050000080000001122334455667788</raw>
-    <root-type>SocketCANFrame</root-type>
+    <name>Standard frame with no payload: 5A1#</name>
+    <raw>a105000000000000</raw>
+    <root-type>SocketCAN20AFrame</root-type>
     <xml>
-      <ScoketCANSFFrame className="org.apache.plc4x.java.can.readwrite.ScoketCANFrame">
+      <SocketCAN20AFrame className="org.apache.plc4x.java.can.readwrite.SocketCAN20AFrame">
         <identifier>1441</identifier>
         <extended>false</extended>
         <remote>false</remote>
         <error>false</error>
         <data></data>
-      </ScoketCANSFFrame>
+      </SocketCAN20AFrame>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Remote transmission request: 5A1#R</name>
+    <raw>a105004000000000</raw>
+    <root-type>SocketCAN20AFrame</root-type>
+    <xml>
+      <SocketCAN20AFrame className="org.apache.plc4x.java.can.readwrite.SocketCAN20AFrame">
+        <identifier>1441</identifier>
+        <extended>false</extended>
+        <remote>true</remote>
+        <error>false</error>
+        <data></data>
+      </SocketCAN20AFrame>
     </xml>
   </testcase>
 
diff --git a/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml b/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCAN20BTestSuite.xml
similarity index 63%
copy from sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
copy to sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCAN20BTestSuite.xml
index 774563b..e8f08f4 100644
--- a/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
+++ b/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCAN20BTestSuite.xml
@@ -19,35 +19,21 @@
   -->
 <test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd">
 
-  <name>CAN Standard Format Frame</name>
+  <name>Tests of socketcan/CAN 2.0B frames</name>
 
   <testcase>
     <name>Extended frame 1E6EC676#05.05.1F.26.C3</name>
-    <raw>76c66e9e0500000005051f26c3000000</raw>
+    <raw>76c66e9e0500000005051f26c3</raw>
     <root-type>SocketCANFrame</root-type>
     <xml>
-      <SocketCANFDFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
+      <SocketCANFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
+        <rawId>-1636907402</rawId>
+        <data>BQUfJsM=</data>
         <identifier>510576246</identifier>
         <extended>true</extended>
         <remote>false</remote>
-        <error>true</error>
-        <data></data>
-      </SocketCANFDFrame>
-    </xml>
-  </testcase>
-
-  <testcase>
-    <name>Standard frame 5A1#11.2233.44556677.88</name>
-    <raw>a1050000080000001122334455667788</raw>
-    <root-type>SocketCANFrame</root-type>
-    <xml>
-      <ScoketCANSFFrame className="org.apache.plc4x.java.can.readwrite.ScoketCANFrame">
-        <identifier>1441</identifier>
-        <extended>false</extended>
-        <remote>false</remote>
         <error>false</error>
-        <data></data>
-      </ScoketCANSFFrame>
+      </SocketCANFrame>
     </xml>
   </testcase>
 
diff --git a/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml b/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
index 774563b..f2518c0 100644
--- a/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
+++ b/sandbox/test-java-can-driver/src/test/resources/testsuite/SocketCANTestSuite.xml
@@ -22,32 +22,50 @@
   <name>CAN Standard Format Frame</name>
 
   <testcase>
-    <name>Extended frame 1E6EC676#05.05.1F.26.C3</name>
-    <raw>76c66e9e0500000005051f26c3000000</raw>
+    <name>Standard frame with 5 byte payload: 5A1#11.2233.44556677.88</name>
+    <raw>a1050000080000001122334455667788</raw>
     <root-type>SocketCANFrame</root-type>
     <xml>
-      <SocketCANFDFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
-        <identifier>510576246</identifier>
-        <extended>true</extended>
+      <SocketCANFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
+        <rawId>1441</rawId>
+        <data>ESIzRFVmd4g=</data>
+        <identifier>1441</identifier>
+        <extended>false</extended>
         <remote>false</remote>
-        <error>true</error>
-        <data></data>
-      </SocketCANFDFrame>
+        <error>false</error>
+      </SocketCANFrame>
     </xml>
   </testcase>
 
   <testcase>
-    <name>Standard frame 5A1#11.2233.44556677.88</name>
-    <raw>a1050000080000001122334455667788</raw>
+    <name>Standard frame with no payload: 5A1#</name>
+    <raw>a105000000000000</raw>
     <root-type>SocketCANFrame</root-type>
     <xml>
-      <ScoketCANSFFrame className="org.apache.plc4x.java.can.readwrite.ScoketCANFrame">
+      <SocketCANFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
+        <rawId>1441</rawId>
+        <data></data>
         <identifier>1441</identifier>
         <extended>false</extended>
         <remote>false</remote>
         <error>false</error>
+      </SocketCANFrame>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Remote transmission request: 5A1#R</name>
+    <raw>a105004000000000</raw>
+    <root-type>SocketCANFrame</root-type>
+    <xml>
+      <SocketCANFrame className="org.apache.plc4x.java.can.readwrite.SocketCANFrame">
+        <rawId>1073743265</rawId>
         <data></data>
-      </ScoketCANSFFrame>
+        <identifier>1441</identifier>
+        <extended>false</extended>
+        <remote>true</remote>
+        <error>false</error>
+      </SocketCANFrame>
     </xml>
   </testcase>