This is an automated email from the ASF dual-hosted git repository. ldywicki pushed a commit to branch feature/socketcan-0.8-preparations in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 27841bb8d7500959056e1ec664d4978c1e4f05b2 Author: Ćukasz Dywicki <[email protected]> AuthorDate: Mon Sep 7 13:18:29 2020 +0200 Test of wireshark frames. --- .../src/main/resources/protocols/can/canopen.mspec | 243 +++++++++++++++--- .../plc4x/java/can/helper/CANOpenHelper.java | 15 +- .../java/can/protocol/CANOpenProtocolLogic.java | 26 +- .../plc4x/java/can/CANOpenWiresharkTest.java | 30 +++ .../testsuite/CANOpenPayloadTestSuite.xml | 130 +++++----- .../testsuite/CANOpenWiresharkTestSuite.xml | 278 +++++++++++++++++++++ 6 files changed, 616 insertions(+), 106 deletions(-) diff --git a/protocols/can/src/main/resources/protocols/can/canopen.mspec b/protocols/can/src/main/resources/protocols/can/canopen.mspec index bb825f3..e5e0fe1 100644 --- a/protocols/can/src/main/resources/protocols/can/canopen.mspec +++ b/protocols/can/src/main/resources/protocols/can/canopen.mspec @@ -36,7 +36,7 @@ ] [enum uint 8 'NMTStateRequest' - ['0x01' OPERATIONAL] + ['0x01' START] ['0x02' STOP] ['0x80' PRE_OPERATIONAL] ['0x81' RESET_NODE] @@ -58,7 +58,7 @@ [simple uint 7 'node'] ] ['CANOpenService.TIME' CANOpenTimeSynchronization - [simple TimeOfDay 'timeOfDay'] + [simple CANOpenTime 'timeOfDay'] ] ['CANOpenService.RECEIVE_PDO_1' CANOpenPDOPayload [simple CANOpenPDO 'pdo' ['1', 'true']] @@ -84,12 +84,12 @@ ['CANOpenService.TRANSMIT_PDO_4' CANOpenPDOPayload [simple CANOpenPDO 'pdo' ['1', 'false']] ] - ['CANOpenService.TRANSMIT_SDO' CANOpenSDORequest - [enum SDOCommand 'command'] + ['CANOpenService.RECEIVE_SDO' CANOpenSDORequest + [enum SDORequestCommand 'command'] [simple SDORequest 'request' ['command']] ] - ['CANOpenService.RECEIVE_SDO' CANOpenSDOResponse - [enum SDOCommand 'command'] + ['CANOpenService.TRANSMIT_SDO' CANOpenSDOResponse + [enum SDOResponseCommand 'command'] [simple SDOResponse 'response' ['command']] ] ['CANOpenService.HEARTBEAT' CANOpenHeartbeatPayload @@ -98,82 +98,243 @@ ] ] -[type 'SDORequest' [SDOCommand 'command'] +[type 'SDORequest' [SDORequestCommand 'command'] [typeSwitch 'command' - ['SDOCommand.INITIALIZE_DOWNLOAD' SDOInitializeDownloadRequest + ['SDORequestCommand.SEGMENT_DOWNLOAD' SDOSegmentDownloadRequest + [simple bit 'toggle'] + [implicit uint 3 'size' '7 - COUNT(data)'] + [simple bit 'last'] + [array int 8 'data' COUNT '7 - size'] + [padding uint 8 'alignment' '0x00' '7 - COUNT(data)'] + ] + ['SDORequestCommand.INITIATE_DOWNLOAD' SDOInitiateDownloadRequest [reserved uint 1 '0x00'] - [implicit uint 2 'size' 'expedited && indicated ? 4 - COUNT(data) : 0'] + [implicit uint 2 'size' 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.count", expedited, indicated, payload)'] [simple bit 'expedited'] [simple bit 'indicated'] - [simple Multiplexer 'address'] - [array int 8 'data' COUNT '(expedited && indicated) ? 4 - size : 0'] - [padding uint 8 'alignment' '0x00' '4 - (COUNT(data))'] + [simple IndexAddress 'address'] + [simple SDOInitiateUploadResponsePayload 'payload' ['expedited', 'indicated', 'size']] + ] + ['SDORequestCommand.INITIATE_UPLOAD' SDOInitiateUploadRequest + [reserved uint 5 '0x00'] + [simple IndexAddress 'address'] + [reserved int 32 '0x00'] // padding + ] + ['SDORequestCommand.SEGMENT_UPLOAD' SDOSegmentUploadRequest + [simple bit 'toggle'] + [reserved uint 4 '0x00'] + [reserved int 56 '0x00'] // padding + ] + ['SDORequestCommand.ABORT' SDOAbortRequest + [simple SDOAbort 'abort'] + ] + ['SDORequestCommand.BLOCK' SDOBlockRequest + [simple SDOBlockData 'block'] ] - ['SDOCommand.SEGMENT_DOWNLOAD' SDOSegmentDownloadRequest + ] +] + +[type 'SDOBlockData' + [simple uint 5 'flags'] + [array int 8 'data' COUNT '7'] +] + +[type 'SDOResponse' [SDOResponseCommand 'command'] + [typeSwitch 'command' + ['SDOResponseCommand.SEGMENT_UPLOAD' SDOSegmentUploadResponse [simple bit 'toggle'] [implicit uint 3 'size' '7 - COUNT(data)'] [simple bit 'last'] - [array int 8 'data' COUNT '7 - data'] - [padding uint 8 'alignment' '0x00' '7 - (COUNT(data))'] + [array int 8 'data' COUNT '7 - size'] + [padding uint 8 'alignment' '0x00' '7 - COUNT(data)'] + ] + ['SDOResponseCommand.SEGMENT_DOWNLOAD' SDOSegmentDownloadResponse + [simple bit 'toggle'] + [reserved uint 4 '0x00'] // fill first byte + [reserved int 56 '0x00'] // padding + ] + ['SDOResponseCommand.INITIATE_UPLOAD' SDOInitiateUploadResponse + [reserved uint 1 '0x00'] + [implicit uint 2 'size' 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.count", expedited, indicated, payload)'] + [simple bit 'expedited'] + [simple bit 'indicated'] + [simple IndexAddress 'address'] + [simple SDOInitiateUploadResponsePayload 'payload' ['expedited', 'indicated', 'size']] ] - ['SDOCommand.INITIALIZE_UPLOAD' SDOInitializeUploadRequest + ['SDOResponseCommand.INITIATE_DOWNLOAD' SDOInitiateDownloadResponse [reserved uint 5 '0x00'] - [simple Multiplexer 'address'] + [simple IndexAddress 'address'] [reserved int 32 '0x00'] // padding ] + ['SDOResponseCommand.ABORT' SDOAbortResponse + [simple SDOAbort 'abort'] + ] + ['SDOResponseCommand.BLOCK' SDOBlockResponse + [simple SDOBlockData 'block'] + ] ] ] -[type 'SDOResponse' [SDOCommand 'command'] - [typeSwitch 'command' - ['SDOCommand.SEGMENT_UPLOAD' SDOSegmentUploadResponse - [reserved uint 5 '0x00'] - [simple Multiplexer 'address'] - [reserved int 32 '0x00'] // padding +[type 'SDOInitiateUploadResponsePayload' [bit 'expedited', bit 'indicated', uint 2 'size'] + [typeSwitch 'expedited', 'indicated' + ['true', 'true' SDOInitiateExpeditedUploadResponse [uint 2 'size'] + [array int 8 'data' COUNT '4 - size'] + [padding uint 8 'alignment' '0x00' '4 - COUNT(data)'] ] - ['SDOCommand.INITIALIZE_DOWNLOAD' SDOInitializeDownloadResponse - [simple bit 'toggle'] - [reserved uint 4 '0x00'] - [reserved int 32 '0x00'] // padding + ['false', 'true' SDOInitiateSegmentedUploadResponse + [simple uint 32 'bytes'] ] - ['SDOCommand.INITIALIZE_UPLOAD' SDOInitializeUploadResponse - [simple SDOSegment 'segment'] + ['false', 'false' SDOInitiateSegmentedReservedResponse + [reserved int 32 '0x00'] ] ] ] +[type 'SDOAbort' + [reserved uint 5 '0x00'] + [simple IndexAddress 'address'] + [simple uint 32 'code'] +] + [type 'SDOSegment' [reserved uint 1 '0x00'] [implicit uint 2 'size' 'expedited && indicated ? 4 - COUNT(data) : 0'] [simple bit 'expedited'] [simple bit 'indicated'] - [simple Multiplexer 'address'] + [simple IndexAddress 'address'] [array int 8 'data' COUNT '(expedited && indicated) ? 4 - size : 0'] [padding uint 8 'alignment' '0x00' '4 - (COUNT(data))'] ] -[type 'Multiplexer' +[type 'IndexAddress' [simple uint 16 'index'] [simple uint 8 'subindex'] ] -[enum uint 3 'SDOCommand' - ['0x00' SEGMENT_DOWNLOAD] - ['0x01' INITIALIZE_DOWNLOAD] - ['0x02' INITIALIZE_UPLOAD] - ['0x03' SEGMENT_UPLOAD] - ['0x04' ABORT] - ['0x05' BLOCK_UPLOAD] - ['0x06' BLOCK_DOWNLOAD] +[enum uint 3 'SDORequestCommand' + ['0x00' SEGMENT_DOWNLOAD ] + ['0x01' INITIATE_DOWNLOAD ] + ['0x02' INITIATE_UPLOAD ] + ['0x03' SEGMENT_UPLOAD ] + ['0x04' ABORT ] + ['0x05' BLOCK ] +] + +[enum uint 3 'SDOResponseCommand' + ['0x00' SEGMENT_UPLOAD ] + ['0x01' SEGMENT_DOWNLOAD ] + ['0x02' INITIATE_UPLOAD ] + ['0x03' INITIATE_DOWNLOAD ] + ['0x04' ABORT ] + ['0x06' BLOCK ] ] [type 'CANOpenPDO' [uint 2 'index', bit 'receive'] [array int 8 'data' COUNT '8'] ] -[type 'TimeOfDay' - // CiA 301 - section 7.1.6.5 +[type 'CANOpenTime' + // CiA 301 - section 7.1.6.5 and 7.1.6.6 [simple uint 28 'millis'] [reserved int 4 '0x00'] [simple uint 16 'days'] +] + +[enum 'CANOpenDataType' [uint 8 'numBits'] + [BOOLEAN [ '1'] ] + [UNSIGNED8 [ '8'] ] + [UNSIGNED16 ['16'] ] + [UNSIGNED24 ['24'] ] + [UNSIGNED32 ['32'] ] + [UNSIGNED40 ['40'] ] + [UNSIGNED48 ['48'] ] + [UNSIGNED56 ['56'] ] + [UNSIGNED64 ['64'] ] + [INTEGER8 [ '8'] ] + [INTEGER16 ['16'] ] + [INTEGER24 ['24'] ] + [INTEGER32 ['32'] ] + [INTEGER40 ['40'] ] + [INTEGER48 ['48'] ] + [INTEGER56 ['56'] ] + [INTEGER64 ['64'] ] + [REAL32 ['32'] ] + [REAL64 ['64'] ] + + // compound/complex types + [OCTET_STRING [ '8'] ] + [VISIBLE_STRING [ '8'] ] + [UNICODE_STRING ['16'] ] + [TIME_OF_DAY ['48'] ] + [TIME_DIFFERENCE ['48'] ] +] + +[dataIo 'DataItem' [CANOpenDataType 'dataType'] + [typeSwitch 'dataType' + ['CANOpenDataType.BOOLEAN' Boolean + [simple bit 'value'] + ] + ['CANOpenDataType.UNSIGNED8' Integer + [simple uint 8 'value'] + ] + ['CANOpenDataType.UNSIGNED16' Integer + [simple uint 16 'value'] + ] + ['CANOpenDataType.UNSIGNED24' Long + [simple uint 24 'value'] + ] + ['CANOpenDataType.UNSIGNED32' Long + [simple uint 32 'value'] + ] + ['CANOpenDataType.UNSIGNED40' BigInteger + [simple uint 40 'value'] + ] + ['CANOpenDataType.UNSIGNED48' BigInteger + [simple uint 48 'value'] + ] + ['CANOpenDataType.UNSIGNED56' BigInteger + [simple uint 56 'value'] + ] + ['CANOpenDataType.UNSIGNED64' BigInteger + [simple uint 64 'value'] + ] + ['CANOpenDataType.INTEGER8' Integer + [simple int 8 'value'] + ] + ['CANOpenDataType.INTEGER16' Integer + [simple int 16 'value'] + ] + ['CANOpenDataType.INTEGER24' Integer + [simple int 24 'value'] + ] + ['CANOpenDataType.INTEGER32' Integer + [simple int 32 'value'] + ] + ['CANOpenDataType.INTEGER40' Long + [simple int 40 'value'] + ] + ['CANOpenDataType.INTEGER48' Long + [simple int 48 'value'] + ] + ['CANOpenDataType.INTEGER56' Long + [simple int 56 'value'] + ] + ['CANOpenDataType.INTEGER64' Long + [simple int 64 'value'] + ] + ['CANOpenDataType.REAL32' Float + [simple float 8.23 'value'] + ] + ['CANOpenDataType.REAL64' Double + [simple float 11.52 'value'] + ] + ['CANOpenDataType.OCTET_STRING' String + ] + ['CANOpenDataType.VISIBLE_STRING' String + ] + //CANOpenDataType.TIME_OF_DAY' CANOpenTime + //CANOpenDataType.TIME_DIFFERENCE' CANOpenTime + ['CANOpenDataType.UNICODE_STRING' String + ] + ] ] \ No newline at end of file diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/CANOpenHelper.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/CANOpenHelper.java index 5f6b4d3..1a9a346 100644 --- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/CANOpenHelper.java +++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/helper/CANOpenHelper.java @@ -1,16 +1,27 @@ package org.apache.plc4x.java.can.helper; +import org.apache.plc4x.java.canopen.readwrite.SDOInitiateExpeditedUploadResponse; +import org.apache.plc4x.java.canopen.readwrite.SDOInitiateUploadResponsePayload; +import org.apache.plc4x.java.canopen.readwrite.SDOSegmentUploadResponse; import org.apache.plc4x.java.canopen.readwrite.types.CANOpenService; -import org.apache.plc4x.java.socketcan.readwrite.SocketCANFrame; -import org.apache.plc4x.java.spi.generation.ParseException; import org.apache.plc4x.java.spi.generation.WriteBuffer; +import static org.apache.plc4x.java.spi.generation.StaticHelper.COUNT; + public class CANOpenHelper { public static CANOpenService readFunction(short identifier) { return CANOpenService.valueOf((byte) (identifier >> 7)); } + public static int uploadPadding(SDOSegmentUploadResponse payload) { + return 7 - payload.getData().length; + } + + public static int count(boolean expedited, boolean indicated, SDOInitiateUploadResponsePayload payload) { + return expedited && indicated && payload instanceof SDOInitiateExpeditedUploadResponse ? 4 - COUNT(((SDOInitiateExpeditedUploadResponse) payload).getData()) : 0; + } + public static void writeFunction(WriteBuffer io, short identifier) { // NOOP - a placeholder to let mspec compile } diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/CANOpenProtocolLogic.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/CANOpenProtocolLogic.java index c193ec3..fa6dab2 100644 --- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/CANOpenProtocolLogic.java +++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/CANOpenProtocolLogic.java @@ -20,10 +20,8 @@ package org.apache.plc4x.java.can.protocol; import org.apache.plc4x.java.can.configuration.CANConfiguration; import org.apache.plc4x.java.canopen.readwrite.CANOpenHeartbeatPayload; -import org.apache.plc4x.java.canopen.readwrite.CANOpenNetworkPayload; import org.apache.plc4x.java.canopen.readwrite.CANOpenPayload; import org.apache.plc4x.java.canopen.readwrite.io.CANOpenHeartbeatPayloadIO; -import org.apache.plc4x.java.canopen.readwrite.io.CANOpenNetworkPayloadIO; import org.apache.plc4x.java.canopen.readwrite.io.CANOpenPayloadIO; import org.apache.plc4x.java.canopen.readwrite.types.CANOpenService; import org.apache.plc4x.java.canopen.readwrite.types.NMTState; @@ -88,7 +86,14 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<SocketCANFrame> impl @Override protected void decode(ConversationContext<SocketCANFrame> context, SocketCANFrame msg) throws Exception { - logger.info("Decode CAN message {}", msg); + CANOpenService service = serviceId(msg.getIdentifier()); + CANOpenPayload payload = CANOpenPayloadIO.staticParse(new ReadBuffer(msg.getData()), service); + + if (service != null) { + logger.info("Decoded CANOpen {} from {}, message {}", service, Math.abs(service.getMin() - msg.getIdentifier()), payload); + } else { + logger.info("CAN message {}, {}", msg.getIdentifier(), msg); + } // int identifier = msg.getIdentifier(); // CANOpenService service = CANOpenService.valueOf((byte) (identifier >> 7)); @@ -107,7 +112,10 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<SocketCANFrame> impl @Override public void onDisconnect(ConversationContext<SocketCANFrame> context) { - + if (this.heartbeat != null) { + this.heartbeat.cancel(); + this.heartbeat = null; + } } private int cobId(CANOpenService service) { @@ -118,6 +126,14 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<SocketCANFrame> impl private CANOpenService serviceId(int nodeId) { // form 32 bit socketcan identifier - return CANOpenService.valueOf((byte) (nodeId >> 7)); + CANOpenService service = CANOpenService.valueOf((byte) (nodeId >> 7)); + if (service == null) { + for (CANOpenService val : CANOpenService.values()) { + if (val.getMin() > nodeId && val.getMax() < nodeId) { + return val; + } + } + } + return service; } } diff --git a/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/CANOpenWiresharkTest.java b/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/CANOpenWiresharkTest.java new file mode 100644 index 0000000..3d1258a --- /dev/null +++ b/sandbox/test-java-can-driver/src/test/java/org/apache/plc4x/java/can/CANOpenWiresharkTest.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 CANOpenWiresharkTest extends ParserSerializerTestsuiteRunner { + + public CANOpenWiresharkTest() { + super("/testsuite/CANOpenWiresharkTestSuite.xml"); + } + +} diff --git a/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenPayloadTestSuite.xml b/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenPayloadTestSuite.xml index 8537aee..2f2353f 100644 --- a/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenPayloadTestSuite.xml +++ b/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenPayloadTestSuite.xml @@ -34,7 +34,7 @@ </parser-arguments> <xml> <CANOpenTimeSynchronization className="org.apache.plc4x.java.canopen.readwrite.CANOpenTimeSynchronization"> - <timeOfDay className="org.apache.plc4x.java.canopen.readwrite.TimeOfDay"> + <timeOfDay className="org.apache.plc4x.java.canopen.readwrite.CANOpenTime"> <millis>-663027446</millis> <days>13392</days> </timeOfDay> @@ -54,7 +54,7 @@ </parser-arguments> <xml> <CANOpenTimeSynchronization className="org.apache.plc4x.java.canopen.readwrite.CANOpenTimeSynchronization"> - <timeOfDay className="org.apache.plc4x.java.canopen.readwrite.TimeOfDay"> + <timeOfDay className="org.apache.plc4x.java.canopen.readwrite.CANOpenTime"> <millis>-392494841</millis> <days>13392</days> </timeOfDay> @@ -105,27 +105,33 @@ </testcase> <testcase> - <name>SDO request, payload: 43171000</name> - <raw>43171000</raw> + <name>SDO request, payload: 4317100000000000</name> + <raw>4317100000000000</raw> <root-type>CANOpenPayload</root-type> <parser-arguments> - <arg1>RECEIVE_SDO</arg1> + <arg1>TRANSMIT_SDO</arg1> </parser-arguments> <xml> - <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> - <command>INITIALIZE_UPLOAD</command> - <expedited>true</expedited> - <placement>true</placement> - <index>4119</index> - <subindex>0</subindex> - <data/> - </CANOpenSDORequest> + <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> + <command>INITIATE_UPLOAD</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateUploadResponse"> + <expedited>true</expedited> + <indicated>true</indicated> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>4119</index> + <subindex>0</subindex> + </address> + <payload className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateExpeditedUploadResponse"> + <data>AAAAAA==</data> + </payload> + </response> + </CANOpenSDOResponse> </xml> </testcase> <testcase> - <name>SDO request, payload: 00171000<!--A00F0000--></name> - <raw>00171000<!--A00F0000--></raw> + <name>SDO request, payload: 00171000A00F0000</name> + <raw>00171000A00F0000</raw> <root-type>CANOpenPayload</root-type> <parser-arguments> <arg1>RECEIVE_SDO</arg1> @@ -133,87 +139,93 @@ <xml> <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> <command>SEGMENT_DOWNLOAD</command> - <expedited>false</expedited> - <placement>false</placement> - <index>4119</index> - <subindex>0</subindex> - <data/> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOSegmentDownloadRequest"> + <toggle>false</toggle> + <last>false</last> + <data>FxAAoA8AAA==</data> + </request> </CANOpenSDORequest> </xml> </testcase> <testcase> - <name>SDO write request, payload: 2B171000D00F</name> - <raw>2B171000D00F</raw> + <name>SDO write request, payload: 2B171000D00F0000</name> + <raw>2B171000D00F0000</raw> <root-type>CANOpenPayload</root-type> <parser-arguments> <arg1>RECEIVE_SDO</arg1> </parser-arguments> <xml> <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> - <command>INITIALIZE_DOWNLOAD</command> - <expedited>true</expedited> - <placement>true</placement> - <index>4119</index> - <subindex>0</subindex> - <data> - <data>208</data> - <data>15</data> - </data> + <command>INITIATE_DOWNLOAD</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateDownloadRequest"> + <expedited>true</expedited> + <indicated>true</indicated> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>4119</index> + <subindex>0</subindex> + </address> + <payload className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateExpeditedUploadResponse"> + <data>0A8=</data> + </payload> + </request> </CANOpenSDORequest> </xml> </testcase> <testcase> - <name>SDO write result, payload: 60171000<!--A00F0000--></name> - <raw>00171000<!--A00F0000--></raw> + <name>SDO write result, payload: 60171000A00F0000</name> + <raw>00171000A00F0000</raw> <root-type>CANOpenPayload</root-type> <parser-arguments> <arg1>TRANSMIT_SDO</arg1> </parser-arguments> <xml> - <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> - <command>SEGMENT_DOWNLOAD</command> - <expedited>false</expedited> - <placement>false</placement> - <index>4119</index> - <subindex>0</subindex> - <data/> - </CANOpenSDORequest> + <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> + <command>SEGMENT_UPLOAD</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOSegmentUploadResponse"> + <toggle>false</toggle> + <last>false</last> + <data>FxAAoA8AAA==</data> + </response> + </CANOpenSDOResponse> </xml> </testcase> <!-- samples --> <testcase> - <name>SDO response, payload: 60002000</name> - <raw>60002000</raw> + <name>SDO response, payload: 6000200000000000</name> + <raw>6000200000000000</raw> <root-type>CANOpenPayload</root-type> <parser-arguments> <arg1>TRANSMIT_SDO</arg1> </parser-arguments> <xml> <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> - <command>SEGMENT_UPLOAD</command> - <expedited>false</expedited> - <placement>false</placement> - <index>8192</index> - <subindex>0</subindex> - <data/> + <command>INITIATE_DOWNLOAD</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateDownloadResponse"> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>8192</index> + <subindex>0</subindex> + </address> + </response> </CANOpenSDOResponse> </xml> </testcase> <testcase> - <name>PDO, payload: 78563412</name> - <raw>78563412</raw> + <name>PDO, payload: 7856341200000000</name> + <raw>7856341200000000</raw> <root-type>CANOpenPayload</root-type> <parser-arguments> - <arg1>RECEIVE_SDO</arg1> + <arg1>RECEIVE_PDO_1</arg1> </parser-arguments> <xml> - <CANOpenNetworkPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenNetworkPayload"> - <state>PRE_OPERATIONAL</state> - </CANOpenNetworkPayload> + <CANOpenPDOPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenPDOPayload"> + <pdo className="org.apache.plc4x.java.canopen.readwrite.CANOpenPDO"> + <data>eFY0EgAAAAA=</data> + </pdo> + </CANOpenPDOPayload> </xml> </testcase> @@ -226,9 +238,11 @@ <arg1>TRANSMIT_PDO_1</arg1> </parser-arguments> <xml> - <CANOpenNetworkPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenNetworkPayload"> - <state>PRE_OPERATIONAL</state> - </CANOpenNetworkPayload> + <CANOpenPDOPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenPDOPayload"> + <pdo className="org.apache.plc4x.java.canopen.readwrite.CANOpenPDO"> + <data>+QE+AUwBXAE=</data> + </pdo> + </CANOpenPDOPayload> </xml> </testcase> diff --git a/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenWiresharkTestSuite.xml b/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenWiresharkTestSuite.xml new file mode 100644 index 0000000..4bced77 --- /dev/null +++ b/sandbox/test-java-can-driver/src/test/resources/testsuite/CANOpenWiresharkTestSuite.xml @@ -0,0 +1,278 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. + --> +<test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd"> + + <name>Tests of CANopen frames from Wireshark sample PCAP files.</name> + + + <testcase> + <name>SDO initiate request: 4008100000000000</name> + <raw>4008100000000000</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>RECEIVE_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> + <command>INITIATE_UPLOAD</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateUploadRequest"> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>4104</index> + <subindex>0</subindex> + </address> + </request> + </CANOpenSDORequest> + </xml> + </testcase> + + <testcase> + <name>SDO initiate response: 4108100015000000</name> + <raw>4108100015000000</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>TRANSMIT_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> + <command>INITIATE_UPLOAD</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateUploadResponse"> + <expedited>false</expedited> + <indicated>true</indicated> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>4104</index> + <subindex>0</subindex> + </address> + <payload className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateSegmentedUploadResponse"> + <bytes>21</bytes> + </payload> + </response> + </CANOpenSDOResponse> + </xml> + </testcase> + + <testcase> + <name>SDO segment upload request: 6000000000000000</name> + <raw>6000000000000000</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>RECEIVE_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> + <command>SEGMENT_UPLOAD</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOSegmentUploadRequest"> + <toggle>false</toggle> + </request> + </CANOpenSDORequest> + </xml> + </testcase> + + <testcase> + <name>SDO abort: 8000000021000008</name> + <raw>8000000021000008</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>RECEIVE_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> + <command>ABORT</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOAbortRequest"> + <abort className="org.apache.plc4x.java.canopen.readwrite.SDOAbort"> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>0</index> + <subindex>0</subindex> + </address> + <code>134217761</code> + </abort> + </request> + </CANOpenSDORequest> + </xml> + </testcase> + + <testcase> + <name>SDO upload segment response: 00556c7472614869</name> + <raw>00556c7472614869</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>TRANSMIT_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> + <command>SEGMENT_UPLOAD</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOSegmentUploadResponse"> + <toggle>false</toggle> + <last>false</last> + <data>VWx0cmFIaQ==</data> + </response> + </CANOpenSDOResponse> + </xml> + </testcase> + + <testcase> + <name>SDO upload segment request: 7000000000000000</name> + <raw>7000000000000000</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>RECEIVE_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> + <command>SEGMENT_UPLOAD</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOSegmentUploadRequest"> + <toggle>true</toggle> + </request> + </CANOpenSDORequest> + </xml> + </testcase> + + <testcase> + <name>SDO initiate upload request: 4008102a00000000</name> + <raw>4008102a00000000</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>RECEIVE_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> + <command>INITIATE_UPLOAD</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateUploadRequest"> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>4104</index> + <subindex>42</subindex> + </address> + </request> + </CANOpenSDORequest> + </xml> + </testcase> + + <testcase> + <name>NMT start node 0x42: 0142</name> + <raw>0142</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>NMT</arg1> + </parser-arguments> + <xml> + <CANOpenNetworkPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenNetworkPayload"> + <request>START</request> + <node>66</node> + </CANOpenNetworkPayload> + </xml> + </testcase> + + <testcase> + <name>NMT start node 0x00 (all): 0100</name> + <raw>0100</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>NMT</arg1> + </parser-arguments> + <xml> + <CANOpenNetworkPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenNetworkPayload"> + <request>START</request> + <node>0</node> + </CANOpenNetworkPayload> + </xml> + </testcase> + + <testcase> + <name>NMT start node 0x42: 0263</name> + <raw>0263</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>NMT</arg1> + </parser-arguments> + <xml> + <CANOpenNetworkPayload className="org.apache.plc4x.java.canopen.readwrite.CANOpenNetworkPayload"> + <request>STOP</request> + <node>99</node> + </CANOpenNetworkPayload> + </xml> + </testcase> + + <testcase> + <name>SDO initiate download request: 2300620161736466</name> + <raw>2300620161736466</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>RECEIVE_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDORequest className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDORequest"> + <command>INITIATE_DOWNLOAD</command> + <request className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateDownloadRequest"> + <expedited>true</expedited> + <indicated>true</indicated> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>25088</index> + <subindex>1</subindex> + </address> + <payload className="org.apache.plc4x.java.canopen.readwrite.SDOInitiateExpeditedUploadResponse"> + <data>YXNkZg==</data> + </payload> + </request> + </CANOpenSDORequest> + </xml> + </testcase> + + <testcase> + <name>SDO abort: 8000620100000206</name> + <raw>8000620100000206</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>TRANSMIT_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> + <command>ABORT</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOAbortResponse"> + <abort className="org.apache.plc4x.java.canopen.readwrite.SDOAbort"> + <address className="org.apache.plc4x.java.canopen.readwrite.IndexAddress"> + <index>25088</index> + <subindex>1</subindex> + </address> + <code>100794368</code> + </abort> + </response> + </CANOpenSDOResponse> + </xml> + </testcase> + + <testcase> + <name>SDO block upload: c208100015000000</name> + <raw>c208100015000000</raw> + <root-type>CANOpenPayload</root-type> + <parser-arguments> + <arg1>TRANSMIT_SDO</arg1> + </parser-arguments> + <xml> + <CANOpenSDOResponse className="org.apache.plc4x.java.canopen.readwrite.CANOpenSDOResponse"> + <command>BLOCK</command> + <response className="org.apache.plc4x.java.canopen.readwrite.SDOBlockResponse"> + <block className="org.apache.plc4x.java.canopen.readwrite.SDOBlockData"> + <flags>2</flags> + <data>CBAAFQAAAA==</data> + </block> + </response> + </CANOpenSDOResponse> + </xml> + </testcase> +</test:testsuite> \ No newline at end of file
