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 2024/03/11 13:24:43 UTC

(plc4x) branch canopen-driver-fixes created (now 0a6c8c4f6c)

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

ldywicki pushed a change to branch canopen-driver-fixes
in repository https://gitbox.apache.org/repos/asf/plc4x.git


      at 0a6c8c4f6c CANopen driver fixes.

This branch includes the following new commits:

     new 0a6c8c4f6c CANopen driver fixes.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(plc4x) 01/01: CANopen driver fixes.

Posted by ld...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch canopen-driver-fixes
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 0a6c8c4f6cf0ce06d96cc5a2f8bb548a39fcac6e
Author: Łukasz Dywicki <lu...@code-house.org>
AuthorDate: Mon Mar 11 14:23:33 2024 +0100

    CANopen driver fixes.
    
    Signed-off-by: Łukasz Dywicki <lu...@code-house.org>
---
 .../java/can/generic/GenericCANDriverTest.java     |  4 ++--
 .../java/canopen/readwrite/CANOpenDataType.java    |  4 ++--
 .../plc4x/java/spi/values/PlcRawByteArray.java     |  9 +++++----
 .../transport/socketcan/SocketCANTransport.java    |  9 +++++++++
 .../java/transport/virtualcan/VirtualCANFrame.java | 23 +++++++++++++++++-----
 .../transport/virtualcan/VirtualCANTransport.java  |  8 ++++++++
 .../transport/virtualcan/io/VirtualCANFrameIO.java | 10 ++++++----
 .../src/main/resources/protocols/can/canopen.mspec |  6 +++---
 8 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/plc4j/drivers/can/src/test/java/org/apache/plc4x/java/can/generic/GenericCANDriverTest.java b/plc4j/drivers/can/src/test/java/org/apache/plc4x/java/can/generic/GenericCANDriverTest.java
index 674f87f0c9..b518014e27 100644
--- a/plc4j/drivers/can/src/test/java/org/apache/plc4x/java/can/generic/GenericCANDriverTest.java
+++ b/plc4j/drivers/can/src/test/java/org/apache/plc4x/java/can/generic/GenericCANDriverTest.java
@@ -52,7 +52,7 @@ public class GenericCANDriverTest {
         PlcConnection connection2 = connection1;
 
         CountDownLatch latch = new CountDownLatch(1);
-        Byte tag1 = 0x55;
+        short tag1 = 0x55;
         short tag2 = 10;
         short tag3 = 50;
 
@@ -86,7 +86,7 @@ public class GenericCANDriverTest {
         latch.await();
 
         PlcSubscriptionEvent event = plcEvent.get();
-        assertEquals(tag1, event.getByte("tag1"));
+        assertEquals(tag1, (short) event.getByte("tag1"));
         assertEquals(tag2, event.getShort("tag2"));
         assertEquals(tag3, event.getShort("tag3"));
 
diff --git a/plc4j/drivers/canopen/src/main/generated/org/apache/plc4x/java/canopen/readwrite/CANOpenDataType.java b/plc4j/drivers/canopen/src/main/generated/org/apache/plc4x/java/canopen/readwrite/CANOpenDataType.java
index 96a6a3b1ee..4db67d91a2 100644
--- a/plc4j/drivers/canopen/src/main/generated/org/apache/plc4x/java/canopen/readwrite/CANOpenDataType.java
+++ b/plc4j/drivers/canopen/src/main/generated/org/apache/plc4x/java/canopen/readwrite/CANOpenDataType.java
@@ -45,8 +45,8 @@ public enum CANOpenDataType {
   INTEGER64((long) 16L, (String) "LINT", (short) 64),
   REAL32((long) 17L, (String) "REAL", (short) 32),
   REAL64((long) 18L, (String) "LREAL", (short) 64),
-  RECORD((long) 19L, (String) "BYTE", (short) 8),
-  OCTET_STRING((long) 20L, (String) "BYTE", (short) 8),
+  RECORD((long) 19L, (String) "RAW_BYTE_ARRAY", (short) 8),
+  OCTET_STRING((long) 20L, (String) "RAW_BYTE_ARRAY", (short) 8),
   VISIBLE_STRING((long) 21L, (String) "CHAR", (short) 8),
   UNICODE_STRING((long) 22L, (String) "WCHAR", (short) 16),
   TIME_OF_DAY((long) 23L, (String) "TIME_OF_DAY", (short) 48),
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcRawByteArray.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcRawByteArray.java
index cb1fc54cee..7111783054 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcRawByteArray.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcRawByteArray.java
@@ -43,12 +43,13 @@ public class PlcRawByteArray extends PlcIECValue<byte[]> {
     }
 
     @Override
-    public String toString() {
-        return Hex.encodeHexString(value);
+    public byte[] getRaw() {
+        return value;
     }
 
-    public byte[] getBytes() {
-        return value;
+    @Override
+    public String toString() {
+        return Hex.encodeHexString(value);
     }
 
     @Override
diff --git a/plc4j/transports/socketcan/src/main/java/org/apache/plc4x/java/transport/socketcan/SocketCANTransport.java b/plc4j/transports/socketcan/src/main/java/org/apache/plc4x/java/transport/socketcan/SocketCANTransport.java
index 2fce3f7977..57129e6434 100644
--- a/plc4j/transports/socketcan/src/main/java/org/apache/plc4x/java/transport/socketcan/SocketCANTransport.java
+++ b/plc4j/transports/socketcan/src/main/java/org/apache/plc4x/java/transport/socketcan/SocketCANTransport.java
@@ -26,6 +26,7 @@ import java.util.function.ToIntFunction;
 import org.apache.plc4x.java.spi.configuration.PlcConnectionConfiguration;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.socketcan.readwrite.SocketCANFrame;
+import org.apache.plc4x.java.spi.configuration.PlcTransportConfiguration;
 import org.apache.plc4x.java.spi.connection.ChannelFactory;
 import org.apache.plc4x.java.spi.generation.*;
 import org.apache.plc4x.java.transport.can.CANFrameBuilder;
@@ -59,6 +60,14 @@ public class SocketCANTransport implements CANTransport<SocketCANFrame> {
         return (buff) -> 16;
     }
 
+    public static class EmptyConfiguration implements PlcTransportConfiguration {}
+
+    @Override
+    public Class<? extends PlcTransportConfiguration> getTransportConfigType() {
+        return EmptyConfiguration.class;
+    }
+
+
     @Override
     public MessageInput<SocketCANFrame> getMessageInput(PlcConnectionConfiguration cfg) {
         return SocketCANFrame::staticParse;
diff --git a/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANFrame.java b/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANFrame.java
index 06ff636be9..d51f7ff51b 100644
--- a/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANFrame.java
+++ b/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANFrame.java
@@ -18,9 +18,19 @@
  */
 package org.apache.plc4x.java.transport.virtualcan;
 
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.writeByteArrayField;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.writeSimpleField;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.writeByteArray;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.writeSignedInt;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.writeUnsignedInt;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.writeUnsignedShort;
+
 import org.apache.commons.codec.binary.Hex;
+import org.apache.plc4x.java.spi.codegen.WithOption;
+import org.apache.plc4x.java.spi.generation.ByteOrder;
 import org.apache.plc4x.java.spi.generation.Message;
 import org.apache.plc4x.java.spi.generation.SerializationException;
+import org.apache.plc4x.java.spi.generation.WithWriterArgs;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
 public class VirtualCANFrame implements Message {
@@ -42,19 +52,22 @@ public class VirtualCANFrame implements Message {
 
     @Override
     public void serialize(WriteBuffer writeBuffer) throws SerializationException {
-        writeBuffer.writeUnsignedShort("length", 8, (short) data.length);
-        writeBuffer.writeUnsignedInt("nodeId", 32, nodeId);
-        writeBuffer.writeByteArray("data", data);
+        WithOption withOption = WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN);
+//        WithWriterArgs[] withOption = new WithWriterArgs[0];
+
+        writeSimpleField("rawId", (short) data.length, writeUnsignedShort(writeBuffer, 8), withOption);
+        writeSimpleField("nodeId", data.length, writeSignedInt(writeBuffer, 32), withOption);
+        writeByteArrayField("data", data, writeByteArray(writeBuffer, 8), withOption);
     }
 
     @Override
     public int getLengthInBytes() {
-        return 0;
+        return 1 + 4 + data.length;
     }
 
     @Override
     public int getLengthInBits() {
-        return 0;
+        return getLengthInBytes() * 8;
     }
 
     public String toString() {
diff --git a/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANTransport.java b/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANTransport.java
index 54f0916af0..5c8ecfd6fa 100644
--- a/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANTransport.java
+++ b/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/VirtualCANTransport.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.transport.virtualcan;
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.spi.configuration.PlcConnectionConfiguration;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.spi.configuration.PlcTransportConfiguration;
 import org.apache.plc4x.java.spi.generation.*;
 import org.apache.plc4x.java.transport.can.CANFrameBuilder;
 import org.apache.plc4x.java.transport.can.CANTransport;
@@ -53,6 +54,13 @@ public class VirtualCANTransport extends TestTransport implements CANTransport<V
         return VirtualCANFrame.class;
     }
 
+    public static class EmptyConfiguration implements PlcTransportConfiguration {}
+
+    @Override
+    public Class<? extends PlcTransportConfiguration> getTransportConfigType() {
+        return EmptyConfiguration.class;
+    }
+
     @Override
     public CANFrameBuilder<VirtualCANFrame> getTransportFrameBuilder() {
         return new CANFrameBuilder<>() {
diff --git a/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/io/VirtualCANFrameIO.java b/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/io/VirtualCANFrameIO.java
index f046c3beaa..9559508ccb 100644
--- a/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/io/VirtualCANFrameIO.java
+++ b/plc4j/transports/virtualcan/src/main/java/org/apache/plc4x/java/transport/virtualcan/io/VirtualCANFrameIO.java
@@ -18,6 +18,7 @@
  */
 package org.apache.plc4x.java.transport.virtualcan.io;
 
+import org.apache.plc4x.java.spi.codegen.WithOption;
 import org.apache.plc4x.java.spi.generation.*;
 import org.apache.plc4x.java.transport.virtualcan.VirtualCANFrame;
 
@@ -29,13 +30,14 @@ import org.apache.plc4x.java.transport.virtualcan.VirtualCANFrame;
  */
 public class VirtualCANFrameIO implements MessageInput<VirtualCANFrame> {
 
-    public static final MessageInput<? extends Message> INSTANCE = new VirtualCANFrameIO();
+    public static final MessageInput<VirtualCANFrame> INSTANCE = new VirtualCANFrameIO();
 
     @Override
     public VirtualCANFrame parse(ReadBuffer io, Object... args) throws ParseException {
-        short length = io.readUnsignedShort("length", 8);
-        int nodeId = io.readUnsignedInt("nodeId", 32);
-        byte[] data = io.readByteArray("data", length);
+        WithOption withOption = WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN);
+        short length = io.readUnsignedShort("length", 8, withOption);
+        int nodeId = io.readUnsignedInt("nodeId", 32, withOption);
+        byte[] data = io.readByteArray("data", length, withOption);
 
         return new VirtualCANFrame(nodeId, data);
     }
diff --git a/protocols/canopen/src/main/resources/protocols/can/canopen.mspec b/protocols/canopen/src/main/resources/protocols/can/canopen.mspec
index 0dd435af13..40f58b3a36 100644
--- a/protocols/canopen/src/main/resources/protocols/can/canopen.mspec
+++ b/protocols/canopen/src/main/resources/protocols/can/canopen.mspec
@@ -262,8 +262,8 @@
     [REAL64      ['64', '"LREAL"'         ] ]
 
     // compound/complex types
-    [RECORD           [ '8', '"BYTE"'       ] ]
-    [OCTET_STRING     [ '8', '"BYTE"'       ] ]
+    [RECORD           [ '8', '"RAW_BYTE_ARRAY"' ] ]
+    [OCTET_STRING     [ '8', '"RAW_BYTE_ARRAY"' ] ]
     [VISIBLE_STRING   [ '8', '"CHAR"'       ] ]
     [UNICODE_STRING   ['16', '"WCHAR"'      ] ]
     [TIME_OF_DAY      ['48', '"TIME_OF_DAY"'] ]
@@ -330,7 +330,7 @@
             [simple float 64 value]
         ]
         ['RECORD' List(int 32 size)
-            [array byte value length 'size']
+            [array byte   value count 'size']
         ]
         ['OCTET_STRING' STRING
            [simple vstring 'size' value]