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 1ec6bea  + use length according to datatype + define some more 
constants
1ec6bea is described below

commit 1ec6beac84dfa841f85274a79dc5cf3a567b0719
Author: Sebastian Rühl <sru...@apache.org>
AuthorDate: Thu May 24 14:27:07 2018 +0200

    + use length according to datatype
    + define some more constants
---
 .../java/ads/api/commands/types/AdsState.java      | 26 +++++++++++++++++++
 .../ads/api/commands/types/TransmissionMode.java   | 14 +++++++++++
 .../java/ads/connection/AdsTcpPlcConnection.java   |  4 +--
 .../ads/protocol/util/LittleEndianDecoder.java     | 29 ++++++++++++++++++----
 4 files changed, 66 insertions(+), 7 deletions(-)

diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java
index 9705ddd..2ddeec7 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsState.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.util.UnsignedShortLEByteValue;
 
+@SuppressWarnings("unused") // Due to predefined AdsStates
 public class AdsState extends UnsignedShortLEByteValue {
 
     public static final int NUM_BYTES = 
UnsignedShortLEByteValue.UNSIGNED_SHORT_LE_NUM_BYTES;
@@ -56,4 +57,29 @@ public class AdsState extends UnsignedShortLEByteValue {
     public static AdsState of(String value) {
         return new AdsState(value);
     }
+
+    // TODO: defined as enum so we might do this too similar to AdsReturnCode
+    public static final class DefinedValues {
+        public static final AdsState ADSSTATE_INVALID = AdsState.of(0);
+        public static final AdsState ADSSTATE_IDLE = AdsState.of(1);
+        public static final AdsState ADSSTATE_RESET = AdsState.of(2);
+        public static final AdsState ADSSTATE_INIT = AdsState.of(3);
+        public static final AdsState ADSSTATE_START = AdsState.of(4);
+        public static final AdsState ADSSTATE_RUN = AdsState.of(5);
+        public static final AdsState ADSSTATE_STOP = AdsState.of(6);
+        public static final AdsState ADSSTATE_SAVECFG = AdsState.of(7);
+        public static final AdsState ADSSTATE_LOADCFG = AdsState.of(8);
+        public static final AdsState ADSSTATE_POWERFAILURE = AdsState.of(9);
+        public static final AdsState ADSSTATE_POWERGOOD = AdsState.of(10);
+        public static final AdsState ADSSTATE_ERROR = AdsState.of(11);
+        public static final AdsState ADSSTATE_SHUTDOWN = AdsState.of(12);
+        public static final AdsState ADSSTATE_SUSPEND = AdsState.of(13);
+        public static final AdsState ADSSTATE_RESUME = AdsState.of(14);
+        public static final AdsState ADSSTATE_CONFIG = AdsState.of(15);
+        public static final AdsState ADSSTATE_RECONFIG = AdsState.of(16);
+        public static final AdsState ADSSTATE_STOPPING = AdsState.of(17);
+        public static final AdsState ADSSTATE_INCOMPATIBLE = AdsState.of(18);
+        public static final AdsState ADSSTATE_EXCEPTION = AdsState.of(19);
+        public static final AdsState ADSSTATE_MAXSTATES = 
AdsState.of(Integer.MAX_VALUE);
+    }
 }
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
index 8f9ae7f..64ae165 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/TransmissionMode.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.util.UnsignedIntLEByteValue;
 
+@SuppressWarnings("unused") // Due to predefined TransmissionModes
 public class TransmissionMode extends UnsignedIntLEByteValue {
 
     public static final int NUM_BYTES = 
UnsignedIntLEByteValue.UNSIGNED_INT_LE_NUM_BYTES;
@@ -56,4 +57,17 @@ public class TransmissionMode extends UnsignedIntLEByteValue 
{
     public static TransmissionMode of(ByteBuf byteBuf) {
         return new TransmissionMode(byteBuf);
     }
+
+    // TODO: defined as enum so we might do this too similar to AdsReturnCode
+    public static final class DefinedValues {
+        public static final TransmissionMode ADSTRANS_NOTRANS = 
TransmissionMode.of(0);
+        public static final TransmissionMode ADSTRANS_CLIENTCYCLE = 
TransmissionMode.of(1);
+        public static final TransmissionMode ADSTRANS_CLIENTONCHA = 
TransmissionMode.of(2);
+        public static final TransmissionMode ADSTRANS_SERVERCYCLE = 
TransmissionMode.of(3);
+        public static final TransmissionMode ADSTRANS_SERVERONCHA = 
TransmissionMode.of(4);
+        public static final TransmissionMode ADSTRANS_SERVERCYCLE2 = 
TransmissionMode.of(5);
+        public static final TransmissionMode ADSTRANS_SERVERONCHA2 = 
TransmissionMode.of(6);
+        public static final TransmissionMode ADSTRANS_CLIENT1REQ = 
TransmissionMode.of(10);
+        public static final TransmissionMode ADSTRANS_MAXMODES = 
TransmissionMode.of(Integer.MAX_VALUE);
+    }
 }
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
index a32727e..1b47bd7 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
@@ -164,8 +164,8 @@ public class AdsTcpPlcConnection extends 
AdsAbstractPlcConnection implements Plc
             Invoke.NONE,
             indexGroup,
             indexOffset,
-            Length.of(1),
-            TransmissionMode.of(3),
+            LittleEndianDecoder.getLengthFor(dataType, 1),
+            TransmissionMode.DefinedValues.ADSTRANS_SERVERCYCLE,
             MaxDelay.of(0),
             CycleTime.of(4000000)
         );
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
index 4a10066..4c705b2 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/util/LittleEndianDecoder.java
@@ -18,22 +18,41 @@
  */
 package org.apache.plc4x.java.ads.protocol.util;
 
+import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.commands.types.TimeStamp;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 
 import java.math.BigInteger;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 // TODO: we might user 
ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN).putInt(port).asArray() 
etc
 public class LittleEndianDecoder {
 
+    private static final Map<Class<?>, Long> LENGTH_MAP;
+
+    static {
+        Map<Class<?>, Long> lengthMap = new ConcurrentHashMap<>();
+        lengthMap.put(Boolean.class, 1L);
+        lengthMap.put(Byte.class, 1L);
+        lengthMap.put(Short.class, 2L);
+        lengthMap.put(Integer.class, 4L);
+        lengthMap.put(Float.class, 4L);
+        lengthMap.put(Calendar.class, 8L);
+        LENGTH_MAP = Collections.unmodifiableMap(lengthMap);
+    }
+
     private LittleEndianDecoder() {
         // Utility class
     }
 
+    public static Length getLengthFor(Class<?> clazz, long defaultValue) {
+        if (Calendar.class.isAssignableFrom(clazz)) {
+            return Length.of(4);
+        }
+        return Length.of(LENGTH_MAP.getOrDefault(clazz, defaultValue));
+    }
+
     @SuppressWarnings("unchecked")
     public static <T> List<T> decodeData(Class<T> datatype, byte[] adsData) 
throws PlcProtocolException {
         List<Object> result = new LinkedList<>();
@@ -51,7 +70,7 @@ public class LittleEndianDecoder {
         } else if (datatype == Float.class && length < 4) {
             safeLengthAdsData = new byte[4];
             System.arraycopy(adsData, 0, safeLengthAdsData, 0, length);
-        } else if (datatype == Calendar.class && length < 8) {
+        } else if (datatype == Calendar.class || 
Calendar.class.isAssignableFrom(datatype) && length < 8) {
             safeLengthAdsData = new byte[8];
             System.arraycopy(adsData, 0, safeLengthAdsData, 0, length);
         } else {

-- 
To stop receiving notification emails like this one, please contact
sru...@apache.org.

Reply via email to