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/22 11:55:13 UTC
[plc4x] 04/22: 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 8f858b7bfe04c3671f88cc6f3c811c614f2aea55
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>