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:24 UTC
[plc4x] 15/22: Test of wireshark frames.
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 81137792484f1796ce2a15e071af29e94f822541
Author: Ćukasz Dywicki <lu...@code-house.org>
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