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/11/30 23:10:51 UTC

[plc4x] branch feature/socketcan-0.8-preparations updated (7f63dc6 -> e579b91)

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

ldywicki pushed a change to branch feature/socketcan-0.8-preparations
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


 discard 7f63dc6  Update to latest develop.
     new e579b91  Update to latest develop.

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (7f63dc6)
            \
             N -- N -- N   refs/heads/feature/socketcan-0.8-preparations (e579b91)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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.


Summary of changes:
 .../resources/templates/java/data-io-template.ftlh   | 20 ++++++++++++++------
 .../src/main/resources/protocols/can/canopen.mspec   |  6 +++---
 .../org/apache/plc4x/java/can/CANOpenPlcDriver.java  | 14 +++++++++++++-
 .../protocol/segmentation/CANOpenSegmentation.java   |  2 +-
 4 files changed, 31 insertions(+), 11 deletions(-)


[plc4x] 01/01: Update to latest develop.

Posted by ld...@apache.org.
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 e579b91fc0091072b7f11011cc76332b206effa8
Author: Ɓukasz Dywicki <lu...@code-house.org>
AuthorDate: Mon Nov 30 18:35:42 2020 +0100

    Update to latest develop.
---
 .../resources/templates/java/data-io-template.ftlh | 20 +++++---
 .../src/main/resources/protocols/can/canopen.mspec |  6 +--
 .../apache/plc4x/java/can/CANOpenPlcDriver.java    | 19 ++++++++
 .../org/apache/plc4x/java/can/CANPlcDriver.java    |  6 +++
 .../socketcan/io/CANOpenSocketCANFrameIO.java      |  2 +-
 .../plc4x/java/can/field/CANFieldHandler.java      |  3 +-
 .../plc4x/java/can/field/CANOpenFieldHandler.java  | 42 +----------------
 .../plc4x/java/can/helper/CANOpenHelper.java       |  2 +-
 .../java/can/protocol/CANOpenProtocolLogic.java    | 55 +++++++++++-----------
 .../protocol/segmentation/CANOpenSegmentation.java |  2 +-
 10 files changed, 74 insertions(+), 83 deletions(-)

diff --git a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
index 9de8c7a..e28338a 100644
--- a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
@@ -120,14 +120,22 @@ public class ${type.name}IO {
                             <#if helper.isLengthArrayField(field)>
             // Length array
             int _${field.name}Length = ${helper.toParseExpression(field, field.loopExpression, type.parserArguments)};
-            List<${helper.getNonPrimitiveLanguageTypeNameForField(field)}> _${field.name}List = new LinkedList<>();
             int ${field.name}EndPos = io.getPos() + _${field.name}Length;
+            List<PlcValue> value = new LinkedList<>();
             while(io.getPos() < ${field.name}EndPos) {
-                _${field.name}List.add(<#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type)}<#else>${field.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})<#sep>, </#sep></#list></#if>)</#if>);
-                <#-- After parsing, update the current position, but only if it's needed -->
-                                <#if field.loopExpression.contains("curPos")>
-                curPos = io.getPos() - startPos;
-                                </#if>
+                value.add(
+                <#if helper.isSimpleTypeReference(field.type)>
+                    new ${helper.getPlcValueTypeForTypeReference(field.type)}(${helper.getReadBufferReadMethodCall(field.type)})
+                <#else>${field.type.name}IO.staticParse(io
+                    <#if field.params?has_content>,
+                        <#list field.params as parserArgument>
+                            (${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})
+                            <#sep>, </#sep>
+                        </#list>
+                    </#if>
+                    )
+                </#if>
+                );
             }
             <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
                             <#elseif helper.isTerminatedArrayField(field)>
diff --git a/protocols/can/src/main/resources/protocols/can/canopen.mspec b/protocols/can/src/main/resources/protocols/can/canopen.mspec
index 1cb60fd..8badf51 100644
--- a/protocols/can/src/main/resources/protocols/can/canopen.mspec
+++ b/protocols/can/src/main/resources/protocols/can/canopen.mspec
@@ -332,13 +332,13 @@
         ['CANOpenDataType.RECORD' List [int 32 'size']
             [array int 8 'value' length 'size']
         ]
-        ['CANOpenDataType.OCTET_STRING' String
+        ['CANOpenDataType.OCTET_STRING' STRING
             [manual string 'UTF-8' 'value'
                 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.parseString", io, size, _type.encoding)'
                 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.serializeString", io, _value, _type.encoding)' '_value.length * 8'
             ]
         ]
-        ['CANOpenDataType.VISIBLE_STRING' String
+        ['CANOpenDataType.VISIBLE_STRING' STRING
             [manual string 'UTF-8' 'value'
                 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.parseString", io, size, _type.encoding)'
                 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.serializeString", io, _value, _type.encoding)' '_value.length * 8'
@@ -346,7 +346,7 @@
         ]
         //CANOpenDataType.TIME_OF_DAY' CANOpenTime
         //CANOpenDataType.TIME_DIFFERENCE' CANOpenTime
-        ['CANOpenDataType.UNICODE_STRING' String
+        ['CANOpenDataType.UNICODE_STRING' STRING
             [manual string 'UTF-8' 'value'
                 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.parseString", io, size, _type.encoding)'
                 'STATIC_CALL("org.apache.plc4x.java.can.helper.CANOpenHelper.serializeString", io, _value, _type.encoding)' '_value.length'
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANOpenPlcDriver.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANOpenPlcDriver.java
index 3916a15..da53947 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANOpenPlcDriver.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANOpenPlcDriver.java
@@ -19,6 +19,9 @@
 package org.apache.plc4x.java.can;
 
 import io.netty.buffer.ByteBuf;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.api.value.PlcValueHandler;
 import org.apache.plc4x.java.can.canopen.CANOpenFrame;
 import org.apache.plc4x.java.can.canopen.socketcan.io.CANOpenSocketCANFrameIO;
 import org.apache.plc4x.java.can.configuration.CANConfiguration;
@@ -31,7 +34,10 @@ import org.apache.plc4x.java.spi.connection.ProtocolStackConfigurer;
 import org.apache.plc4x.java.spi.connection.SingleProtocolStackConfigurer;
 import org.apache.plc4x.java.spi.optimizer.BaseOptimizer;
 import org.apache.plc4x.java.spi.optimizer.SingleFieldOptimizer;
+import org.apache.plc4x.java.spi.values.IEC61131ValueHandler;
+import org.apache.plc4x.java.spi.values.PlcList;
 
+import java.lang.reflect.Array;
 import java.util.function.ToIntFunction;
 
 /**
@@ -79,6 +85,19 @@ public class CANOpenPlcDriver extends GeneratedDriverBase<CANOpenFrame> {
     }
 
     @Override
+    protected PlcValueHandler getValueHandler() {
+        return new IEC61131ValueHandler() {
+            @Override
+            public PlcValue newPlcValue(PlcField field, Object[] values) {
+                if (values[0] instanceof byte[]) {
+                    return (PlcValue) values[0];
+                }
+                return super.newPlcValue(field, values);
+            }
+        };
+    }
+
+    @Override
     protected BaseOptimizer getOptimizer() {
         return new SingleFieldOptimizer();
     }
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANPlcDriver.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANPlcDriver.java
index c135280..bdf2858 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANPlcDriver.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/CANPlcDriver.java
@@ -20,6 +20,7 @@ package org.apache.plc4x.java.can;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
+import org.apache.plc4x.java.api.value.PlcValueHandler;
 import org.apache.plc4x.java.can.configuration.CANConfiguration;
 import org.apache.plc4x.java.can.context.CANDriverContext;
 import org.apache.plc4x.java.can.field.CANFieldHandler;
@@ -65,6 +66,11 @@ public class CANPlcDriver extends GeneratedDriverBase<SocketCANFrame> {
     }
 
     @Override
+    protected PlcValueHandler getValueHandler() {
+        return null;
+    }
+
+    @Override
     protected ProtocolStackConfigurer<SocketCANFrame> getStackConfigurer() {
         return SingleProtocolStackConfigurer.builder(SocketCANFrame.class, SocketCANFrameIO.class)
             .withProtocol(CANProtocolLogic.class)
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/canopen/socketcan/io/CANOpenSocketCANFrameIO.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/canopen/socketcan/io/CANOpenSocketCANFrameIO.java
index 1b6dbf2..2175456 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/canopen/socketcan/io/CANOpenSocketCANFrameIO.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/canopen/socketcan/io/CANOpenSocketCANFrameIO.java
@@ -145,7 +145,7 @@ public class CANOpenSocketCANFrameIO implements MessageIO<CANOpenFrame, CANOpenF
 
     public static CANOpenService serviceId(int cobId) {
         // form 32 bit socketcan identifier
-        CANOpenService service = CANOpenService.valueOf((byte) (cobId >> 7));
+        CANOpenService service = CANOpenService.enumForValue((byte) (cobId >> 7));
         if (service == null) {
             for (CANOpenService val : CANOpenService.values()) {
                 if (val.getMin() > cobId && val.getMax() < cobId) {
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANFieldHandler.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANFieldHandler.java
index 2f2c3f8..a9abf19 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANFieldHandler.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANFieldHandler.java
@@ -20,10 +20,9 @@ package org.apache.plc4x.java.can.field;
 
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.spi.connection.DefaultPlcFieldHandler;
 import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
 
-public class CANFieldHandler extends DefaultPlcFieldHandler implements PlcFieldHandler {
+public class CANFieldHandler implements PlcFieldHandler {
 
     @Override
     public PlcField createField(String fieldQuery) throws PlcInvalidFieldException {
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANOpenFieldHandler.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANOpenFieldHandler.java
index cb61195..1a6f3a0 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANOpenFieldHandler.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/field/CANOpenFieldHandler.java
@@ -19,54 +19,14 @@ under the License.
 package org.apache.plc4x.java.can.field;
 
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.api.value.*;
-import org.apache.plc4x.java.spi.connection.DefaultPlcFieldHandler;
 import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-public class CANOpenFieldHandler extends DefaultPlcFieldHandler implements PlcFieldHandler {
+public class CANOpenFieldHandler implements PlcFieldHandler {
 
     @Override
     public PlcField createField(String fieldQuery) throws PlcInvalidFieldException {
         return CANOpenField.of(fieldQuery);
     }
 
-    @Override
-    public PlcValue encodeString(PlcField field, Object[] values) {
-        CANOpenSDOField coField = (CANOpenSDOField) field;
-        String[] strings = (String[]) values;
-
-        switch (coField.getCanOpenDataType()) {
-            case VISIBLE_STRING:
-            case OCTET_STRING:
-            case UNICODE_STRING:
-                if (values.length == 1) {
-                    return new PlcString(strings[0]);
-                } else {
-                    return new PlcList(Arrays.stream(strings).map(PlcString::new).collect(Collectors.toList()));
-                }
-        }
-
-        throw new PlcRuntimeException("Invalid encoder for type " + coField.getCanOpenDataType().name());
-    }
-
-    @Override
-    public PlcValue encodeByte(PlcField field, Object[] values) {
-        List<PlcValue> resultSet = new ArrayList<>();
-        for (Object item : values) {
-            resultSet.add(PlcValues.of((Byte) item));
-        }
-
-        if (resultSet.size() == 1) {
-            return resultSet.get(0);
-        } else {
-            return new PlcList(resultSet);
-        }
-    }
 }
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 3f1e22a..85209b6 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
@@ -14,7 +14,7 @@ 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));
+        return CANOpenService.enumForValue((byte) (identifier >> 7));
     }
 
     public static int uploadPadding(SDOSegmentUploadResponse payload) {
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 e8c9a0d..8c94e8f 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
@@ -28,14 +28,11 @@ import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
 import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionField;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.api.types.PlcSubscriptionType;
-import org.apache.plc4x.java.api.value.PlcNull;
-import org.apache.plc4x.java.api.value.PlcStruct;
-import org.apache.plc4x.java.api.value.PlcUSINT;
 import org.apache.plc4x.java.api.value.PlcValue;
-import org.apache.plc4x.java.api.value.PlcValues;
 import org.apache.plc4x.java.can.canopen.CANOpenAbortException;
 import org.apache.plc4x.java.can.canopen.CANOpenFrame;
 import org.apache.plc4x.java.can.api.conversation.canopen.CANConversation;
@@ -71,18 +68,20 @@ import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.messages.DefaultPlcReadResponse;
 import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionEvent;
+import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionRequest;
 import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionResponse;
+import org.apache.plc4x.java.spi.messages.DefaultPlcWriteRequest;
 import org.apache.plc4x.java.spi.messages.DefaultPlcWriteResponse;
-import org.apache.plc4x.java.spi.messages.InternalPlcReadRequest;
-import org.apache.plc4x.java.spi.messages.InternalPlcSubscriptionRequest;
-import org.apache.plc4x.java.spi.messages.InternalPlcWriteRequest;
 import org.apache.plc4x.java.spi.messages.PlcSubscriber;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.model.DefaultPlcConsumerRegistration;
+import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField;
 import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionHandle;
-import org.apache.plc4x.java.spi.model.InternalPlcSubscriptionHandle;
-import org.apache.plc4x.java.spi.model.SubscriptionPlcField;
 import org.apache.plc4x.java.spi.transaction.RequestTransactionManager;
+import org.apache.plc4x.java.spi.values.PlcNull;
+import org.apache.plc4x.java.spi.values.PlcStruct;
+import org.apache.plc4x.java.spi.values.PlcUSINT;
+import org.apache.plc4x.java.spi.values.PlcValues;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -180,11 +179,11 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<CANOpenFrame> implem
         }
 
         if (field instanceof CANOpenSDOField) {
-            writeInternally((InternalPlcWriteRequest) writeRequest, (CANOpenSDOField) field, response);
+            writeInternally((DefaultPlcWriteRequest) writeRequest, (CANOpenSDOField) field, response);
             return response;
         }
         if (field instanceof CANOpenPDOField) {
-            writeInternally((InternalPlcWriteRequest) writeRequest, (CANOpenPDOField) field, response);
+            writeInternally((DefaultPlcWriteRequest) writeRequest, (CANOpenPDOField) field, response);
             return response;
         }
 
@@ -192,7 +191,7 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<CANOpenFrame> implem
         return response;
     }
 
-    private void writeInternally(InternalPlcWriteRequest writeRequest, CANOpenSDOField field, CompletableFuture<PlcWriteResponse> response) {
+    private void writeInternally(DefaultPlcWriteRequest writeRequest, CANOpenSDOField field, CompletableFuture<PlcWriteResponse> response) {
         final RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
 
         String fieldName = writeRequest.getFieldNames().iterator().next();
@@ -218,7 +217,7 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<CANOpenFrame> implem
         transaction.submit(() -> download.execute(callback));
     }
 
-    private void writeInternally(InternalPlcWriteRequest writeRequest, CANOpenPDOField field, CompletableFuture<PlcWriteResponse> response) {
+    private void writeInternally(DefaultPlcWriteRequest writeRequest, CANOpenPDOField field, CompletableFuture<PlcWriteResponse> response) {
         PlcValue writeValue = writeRequest.getPlcValues().get(0);
 
         try {
@@ -259,42 +258,42 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<CANOpenFrame> implem
             return response;
         };
 
-        readInternally((InternalPlcReadRequest) readRequest, (CANOpenSDOField) field, response);
+        readInternally(readRequest, (CANOpenSDOField) field, response);
         return response;
     }
 
     @Override
     public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest request) {
-        InternalPlcSubscriptionRequest rq = (InternalPlcSubscriptionRequest) request;
+        DefaultPlcSubscriptionRequest rq = (DefaultPlcSubscriptionRequest) request;
 
         Map<String, ResponseItem<PlcSubscriptionHandle>> answers = new LinkedHashMap<>();
         DefaultPlcSubscriptionResponse response = new DefaultPlcSubscriptionResponse(rq, answers);
 
-        for (Map.Entry<String, SubscriptionPlcField> entry : rq.getSubscriptionPlcFieldMap().entrySet()) {
-            SubscriptionPlcField subscription = entry.getValue();
+        for (String key : rq.getFieldNames()) {
+            DefaultPlcSubscriptionField subscription = (DefaultPlcSubscriptionField) rq.getField(key);
             if (subscription.getPlcSubscriptionType() != PlcSubscriptionType.EVENT) {
-                answers.put(entry.getKey(), new ResponseItem<>(PlcResponseCode.UNSUPPORTED, null));
+                answers.put(key, new ResponseItem<>(PlcResponseCode.UNSUPPORTED, null));
             } else if ((subscription.getPlcField() instanceof CANOpenPDOField)) {
-                answers.put(entry.getKey(), new ResponseItem<>(PlcResponseCode.OK,
-                    new CANOpenSubscriptionHandle(this, entry.getKey(), (CANOpenPDOField) subscription.getPlcField())
+                answers.put(key, new ResponseItem<>(PlcResponseCode.OK,
+                    new CANOpenSubscriptionHandle(this, key, (CANOpenPDOField) subscription.getPlcField())
                 ));
             } else if ((subscription.getPlcField() instanceof CANOpenNMTField)) {
-                answers.put(entry.getKey(), new ResponseItem<>(PlcResponseCode.OK,
-                    new CANOpenSubscriptionHandle(this, entry.getKey(), (CANOpenNMTField) subscription.getPlcField())
+                answers.put(key, new ResponseItem<>(PlcResponseCode.OK,
+                    new CANOpenSubscriptionHandle(this, key, (CANOpenNMTField) subscription.getPlcField())
                 ));
             } else if ((subscription.getPlcField() instanceof CANOpenHeartbeatField)) {
-                answers.put(entry.getKey(), new ResponseItem<>(PlcResponseCode.OK,
-                    new CANOpenSubscriptionHandle(this, entry.getKey(), (CANOpenHeartbeatField) subscription.getPlcField())
+                answers.put(key, new ResponseItem<>(PlcResponseCode.OK,
+                    new CANOpenSubscriptionHandle(this, key, (CANOpenHeartbeatField) subscription.getPlcField())
                 ));
             } else {
-                answers.put(entry.getKey(), new ResponseItem<>(PlcResponseCode.INVALID_ADDRESS, null));
+                answers.put(key, new ResponseItem<>(PlcResponseCode.INVALID_ADDRESS, null));
             }
         }
 
         return CompletableFuture.completedFuture(response);
     }
 
-    private void readInternally(InternalPlcReadRequest readRequest, CANOpenSDOField field, CompletableFuture<PlcReadResponse> response) {
+    private void readInternally(PlcReadRequest readRequest, CANOpenSDOField field, CompletableFuture<PlcReadResponse> response) {
         String fieldName = readRequest.getFieldNames().iterator().next();
 
         final RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
@@ -365,7 +364,7 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<CANOpenFrame> implem
             DefaultPlcConsumerRegistration registration = entry.getKey();
             Consumer<PlcSubscriptionEvent> consumer = entry.getValue();
 
-            for (InternalPlcSubscriptionHandle handler : registration.getAssociatedHandles()) {
+            for (PlcSubscriptionHandle handler : registration.getSubscriptionHandles()) {
                 CANOpenSubscriptionHandle handle = (CANOpenSubscriptionHandle) handler;
                 if (payload instanceof CANOpenPDOPayload) {
 
@@ -446,7 +445,7 @@ public class CANOpenProtocolLogic extends Plc4xProtocolBase<CANOpenFrame> implem
 
     @Override
     public PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles) {
-        final DefaultPlcConsumerRegistration consumerRegistration =new DefaultPlcConsumerRegistration(this, consumer, handles.toArray(new InternalPlcSubscriptionHandle[0]));
+        final DefaultPlcConsumerRegistration consumerRegistration =new DefaultPlcConsumerRegistration(this, consumer, handles.toArray(new DefaultPlcSubscriptionHandle[0]));
         consumers.put(consumerRegistration, consumer);
         return consumerRegistration;
     }
diff --git a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/segmentation/CANOpenSegmentation.java b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/segmentation/CANOpenSegmentation.java
index afea76e..36f49c8 100644
--- a/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/segmentation/CANOpenSegmentation.java
+++ b/sandbox/test-java-can-driver/src/main/java/org/apache/plc4x/java/can/protocol/segmentation/CANOpenSegmentation.java
@@ -72,7 +72,7 @@ public class CANOpenSegmentation<R> extends Segmentation<SocketCANFrame, CANOpen
 
     private CANOpenService serviceId(int cobId) {
         // form 32 bit socketcan identifier
-        CANOpenService service = CANOpenService.valueOf((byte) (cobId >> 7));
+        CANOpenService service = CANOpenService.enumForValue((byte) (cobId >> 7));
         if (service == null) {
             for (CANOpenService val : CANOpenService.values()) {
                 if (val.getMin() > cobId && val.getMax() < cobId) {