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 <l...@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>