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

sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git


The following commit(s) were added to refs/heads/master by this push:
     new 34bac1f  [Modbus] added example to read an int from 2 registers 
[General] changed byte[] to Byte[] to avoid recurring boxing problems
34bac1f is described below

commit 34bac1fc9684eb7d88b935962fea46d097e28e5c
Author: Sebastian Rühl <sru...@apache.org>
AuthorDate: Wed Sep 26 12:58:57 2018 +0200

    [Modbus] added example to read an int from 2 registers
    [General] changed byte[] to Byte[] to avoid recurring boxing problems
---
 .../plc4x/java/api/messages/PlcReadResponse.java   |  6 ++---
 .../java/base/messages/DefaultPlcReadResponse.java |  8 +++---
 .../base/messages/DefaultPlcSubscriptionEvent.java | 10 ++++----
 .../messages/items/DefaultByteArrayFieldItem.java  |  8 +++---
 .../plc4x/java/base/messages/items/FieldItem.java  |  2 +-
 .../org/apache/plc4x/java/base/util/HexUtil.java   |  5 ++++
 .../java/modbus/netty/Plc4XModbusProtocol.java     |  6 ++---
 .../java/modbus/util/ModbusPlcFieldHandler.java    |  8 +++---
 .../plc4x/java/modbus/ManualPlc4XModbusTest.java   | 29 ++++++++++++++++++++++
 .../apache/plc4x/java/test/TestFieldHandler.java   |  5 ++--
 10 files changed, 60 insertions(+), 27 deletions(-)

diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
index 101a6ad..bf5900b 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
@@ -172,10 +172,10 @@ public interface PlcReadResponse<T extends 
PlcReadRequest> extends PlcFieldRespo
 
     boolean isValidByteArray(String name, int index);
 
-    byte[] getByteArray(String name);
+    Byte[] getByteArray(String name);
 
-    byte[] getByteArray(String name, int index);
+    Byte[] getByteArray(String name, int index);
 
-    Collection<byte[]> getAllByteArrays(String name);
+    Collection<Byte[]> getAllByteArrays(String name);
 
 }
diff --git 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
index 5cbaf0c..cd2dc47 100644
--- 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
+++ 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcReadResponse.java
@@ -660,7 +660,7 @@ public class DefaultPlcReadResponse implements 
InternalPlcReadResponse {
     }
 
     @Override
-    public byte[] getByteArray(String name) {
+    public Byte[] getByteArray(String name) {
         FieldItem fieldInternal = getFieldInternal(name);
         if (fieldInternal != null) {
             return fieldInternal.getByteArray(0);
@@ -669,7 +669,7 @@ public class DefaultPlcReadResponse implements 
InternalPlcReadResponse {
     }
 
     @Override
-    public byte[] getByteArray(String name, int index) {
+    public Byte[] getByteArray(String name, int index) {
         FieldItem fieldInternal = getFieldInternal(name);
         if (fieldInternal != null) {
             return fieldInternal.getByteArray(index);
@@ -678,11 +678,11 @@ public class DefaultPlcReadResponse implements 
InternalPlcReadResponse {
     }
 
     @Override
-    public Collection<byte[]> getAllByteArrays(String name) {
+    public Collection<Byte[]> getAllByteArrays(String name) {
         FieldItem fieldInternal = getFieldInternal(name);
         if (fieldInternal != null) {
             int num = fieldInternal.getNumberOfValues();
-            List<byte[]> values = new ArrayList<>(num);
+            List<Byte[]> values = new ArrayList<>(num);
             for (int i = 0; i < num; i++) {
                 values.add(fieldInternal.getByteArray(i));
             }
diff --git 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
index beb0ef9..7451e00 100644
--- 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
+++ 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
@@ -394,17 +394,17 @@ public class DefaultPlcSubscriptionEvent implements 
InternalPlcSubscriptionEvent
     }
 
     @Override
-    public byte[] getByteArray(String name) {
-        return new byte[0];
+    public Byte[] getByteArray(String name) {
+        return new Byte[0];
     }
 
     @Override
-    public byte[] getByteArray(String name, int index) {
-        return new byte[0];
+    public Byte[] getByteArray(String name, int index) {
+        return new Byte[0];
     }
 
     @Override
-    public Collection<byte[]> getAllByteArrays(String name) {
+    public Collection<Byte[]> getAllByteArrays(String name) {
         return null;
     }
 
diff --git 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
index 936b32f..4663e46 100644
--- 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
+++ 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
@@ -18,9 +18,9 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
-public class DefaultByteArrayFieldItem extends FieldItem<byte[]> {
+public class DefaultByteArrayFieldItem extends FieldItem<Byte[]> {
 
-    public DefaultByteArrayFieldItem(byte[]... values) {
+    public DefaultByteArrayFieldItem(Byte[]... values) {
         super(values);
     }
 
@@ -30,11 +30,11 @@ public class DefaultByteArrayFieldItem extends 
FieldItem<byte[]> {
     }
 
     public boolean isValidByteArray(int index) {
-        byte[] value = getValue(index);
+        Byte[] value = getValue(index);
         return value != null;
     }
 
-    public byte[] getByteArray(int index) {
+    public Byte[] getByteArray(int index) {
         return getValue(index);
     }
 
diff --git 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
index e21cd11..2a4acca 100644
--- 
a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
+++ 
b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
@@ -147,7 +147,7 @@ public abstract class FieldItem<T> {
         return false;
     }
 
-    public byte[] getByteArray(int index) {
+    public Byte[] getByteArray(int index) {
         return null;
     }
 
diff --git 
a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/HexUtil.java
 
b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/HexUtil.java
index c145565..40e5680 100644
--- 
a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/HexUtil.java
+++ 
b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/HexUtil.java
@@ -20,6 +20,7 @@
 package org.apache.plc4x.java.base.util;
 
 import org.apache.commons.io.HexDump;
+import org.apache.commons.lang3.ArrayUtils;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -32,6 +33,10 @@ public class HexUtil {
      * @param bytes to be displayed.
      * @return hexed string.
      */
+    public static String toHex(Byte[] bytes) {
+        return toHex(ArrayUtils.toPrimitive(bytes));
+    }
+
     public static String toHex(byte[] bytes) {
         try (ByteArrayOutputStream byteArrayOutputStream = new 
ByteArrayOutputStream()) {
             HexDump.dump(bytes, 0, byteArrayOutputStream, 0);
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
index 774368a..ce6be0d 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
@@ -515,12 +515,12 @@ public class Plc4XModbusProtocol extends 
MessageToMessageCodec<ModbusTcpPayload,
         if (readableBytes % 2 != 0) {
             throw new PlcProtocolException("Readables bytes should even: " + 
readableBytes);
         }
-        List<byte[]> data = new LinkedList<>();
+        List<Byte[]> data = new LinkedList<>();
         while (byteBuf.readableBytes() > 0) {
             byte[] register = new byte[2];
             byteBuf.readBytes(register);
-            data.add(register);
+            data.add(ArrayUtils.toObject(register));
         }
-        return new DefaultByteArrayFieldItem(data.toArray(new byte[0][0]));
+        return new DefaultByteArrayFieldItem(data.toArray(new Byte[0][0]));
     }
 }
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
index 00b653f..f3fb19d 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
@@ -95,20 +95,20 @@ public class ModbusPlcFieldHandler extends 
DefaultPlcFieldHandler {
     @Override
     public FieldItem encodeByteArray(PlcField field, Object[] values) {
         ModbusField modbusField = (ModbusField) field;
-        List<byte[]> byteArrays = new LinkedList<>();
+        List<Byte[]> byteArrays = new LinkedList<>();
         for (Object value : values) {
             if (value instanceof byte[]) {
                 byte[] byteArray = (byte[]) value;
-                byteArrays.add(byteArray);
+                byteArrays.add(ArrayUtils.toObject(byteArray));
             } else if (value instanceof Byte[]) {
                 Byte[] byteArray = (Byte[]) value;
-                byteArrays.add(ArrayUtils.toPrimitive(byteArray));
+                byteArrays.add(byteArray);
             } else {
                 throw new IllegalArgumentException(
                     "Value of type " + value.getClass().getName() +
                         " is not assignable to " + modbusField + " fields.");
             }
         }
-        return new DefaultByteArrayFieldItem(byteArrays.toArray(new 
byte[0][0]));
+        return new DefaultByteArrayFieldItem(byteArrays.toArray(new 
Byte[0][0]));
     }
 }
diff --git 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
index 6c2fab3..21ef508 100644
--- 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
+++ 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.plc4x.java.modbus;
 
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
@@ -26,6 +27,11 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.base.util.HexUtil;
 
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Arrays;
+import java.util.Collection;
+
 public class ManualPlc4XModbusTest {
 
     public static void main(String... args) {
@@ -52,6 +58,29 @@ public class ManualPlc4XModbusTest {
             }
 
             {
+                // Read an int from 2 registers
+                PlcReader reader = plcConnection.getReader().orElseThrow(() -> 
new RuntimeException("No Reader found"));
+
+                // Just dump the actual values
+                PlcReadResponse<?> readResponse = reader.read(builder -> 
builder.addItem("randomRegister", "register:3[2]")).get();
+                System.out.println("Response " + readResponse);
+                Collection<Byte[]> randomRegisters = 
readResponse.getAllByteArrays("randomRegister");
+                randomRegisters.stream()
+                    .map(HexUtil::toHex)
+                    .map(hex -> "Register Value: " + hex)
+                    .forEach(System.out::println);
+
+                // Read an actual int
+                Byte[] registerBytes = randomRegisters.stream()
+                    .flatMap(Arrays::stream)
+                    .toArray(Byte[]::new);
+                int readInt = 
ByteBuffer.wrap(ArrayUtils.toPrimitive(registerBytes))
+                    .order(ByteOrder.BIG_ENDIAN)
+                    .getInt();
+                System.out.println("Read int " + readInt + " from register");
+            }
+
+            {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> 
new RuntimeException("No Reader found"));
 
                 PlcReadResponse<?> readResponse = reader.read(builder -> 
builder.addItem("randomCoil", "coil:1[9]")).get();
diff --git 
a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
 
b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
index be76172..045912c 100644
--- 
a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
+++ 
b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
@@ -19,7 +19,6 @@
 
 package org.apache.plc4x.java.test;
 
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.model.PlcField;
@@ -164,10 +163,10 @@ public class TestFieldHandler implements PlcFieldHandler {
     public FieldItem encodeByteArray(PlcField field, Object[] values) {
         TestField testField = (TestField) field;
         if (testField.getDataType() == byte[].class) {
-            return new 
DefaultByteArrayFieldItem(ArrayUtils.toPrimitive((Byte[]) values));
+            return new 
DefaultByteArrayFieldItem(Arrays.stream(values).map(Byte.class::cast).toArray(Byte[]::new));
         }
         if (testField.getDataType() == Byte[].class) {
-            return new 
DefaultByteArrayFieldItem(ArrayUtils.toPrimitive((Byte[]) values));
+            return new DefaultByteArrayFieldItem((Byte[]) values);
         }
         throw new PlcRuntimeException("Invalid encoder for type " + 
testField.getDataType().getName());
     }

Reply via email to