You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2022/05/25 08:18:40 UTC

[plc4x] branch logix_develop created (now 94aa0010a4)

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

hutcheb pushed a change to branch logix_develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


      at 94aa0010a4 start of logix development

This branch includes the following new commits:

     new 54c90dba81 fix(plc4j/opcua-server): Moved pinned jaxb-runtime from parent to nifi processor. It isn't needed and causes issue with the milo stack
     new 94aa0010a4 start of logix development

The 2 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/02: fix(plc4j/opcua-server): Moved pinned jaxb-runtime from parent to nifi processor. It isn't needed and causes issue with the milo stack

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

hutcheb pushed a commit to branch logix_develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 54c90dba81ed287308fb14c9dec06b8b23310a47
Author: Ben Hutcheson <be...@gmail.com>
AuthorDate: Wed May 25 16:11:17 2022 +1000

    fix(plc4j/opcua-server): Moved pinned jaxb-runtime from parent to nifi processor. It isn't needed and causes issue with the milo stack
---
 plc4j/integrations/apache-nifi/pom.xml             | 16 ++++++++++
 plc4j/integrations/opcua-server/pom.xml            |  1 +
 .../opcua-server/src/main/resources/config.yml     | 36 +++++++++++-----------
 .../opcua-server/src/test/resources/config.yml     | 36 +++++++++++-----------
 pom.xml                                            | 20 +-----------
 5 files changed, 54 insertions(+), 55 deletions(-)

diff --git a/plc4j/integrations/apache-nifi/pom.xml b/plc4j/integrations/apache-nifi/pom.xml
index de68897213..f89022a2ba 100644
--- a/plc4j/integrations/apache-nifi/pom.xml
+++ b/plc4j/integrations/apache-nifi/pom.xml
@@ -93,6 +93,22 @@
         <artifactId>swagger-annotations</artifactId>
         <version>1.6.0</version>
       </dependency>
+      <dependency>
+        <groupId>org.glassfish.jaxb</groupId>
+        <artifactId>jaxb-runtime</artifactId>
+        <version>${jaxb.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>jakarta.xml.bind</groupId>
+        <artifactId>jakarta.xml.bind-api</artifactId>
+        <version>3.0.1</version>
+        <exclusions>
+          <exclusion>
+            <groupId>jakarta.activation</groupId>
+            <artifactId>jakarta.activation-api</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 
diff --git a/plc4j/integrations/opcua-server/pom.xml b/plc4j/integrations/opcua-server/pom.xml
index 49b8302616..aed25c810a 100644
--- a/plc4j/integrations/opcua-server/pom.xml
+++ b/plc4j/integrations/opcua-server/pom.xml
@@ -106,6 +106,7 @@
       <version>0.10.0-SNAPSHOT</version>
     </dependency>
 
+
     <!-- Include all drivers -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
diff --git a/plc4j/integrations/opcua-server/src/main/resources/config.yml b/plc4j/integrations/opcua-server/src/main/resources/config.yml
index b27a805fea..35aacc7530 100644
--- a/plc4j/integrations/opcua-server/src/main/resources/config.yml
+++ b/plc4j/integrations/opcua-server/src/main/resources/config.yml
@@ -66,38 +66,38 @@ devices:
   connectionString: "opcua:tcp://127.0.0.1:12687/plc4x"
   tags:
   - alias: "Simulated_OPC_BOOL"
-    address: "ns=2;s=Simulated_BOOL"
+    address: "ns=1;s=Simulated_BOOL"
   - alias: "Simulated_OPC_BYTE"
-    address: "ns=2;s=Simulated_BYTE"
+    address: "ns=1;s=Simulated_BYTE"
   - alias: "Simulated_OPC_WORD"
-    address: "ns=2;s=Simulated_WORD"
+    address: "ns=1;s=Simulated_WORD"
   - alias: "Simulated_OPC_DWORD"
-    address: "ns=2;s=Simulated_DWORD"
+    address: "ns=1;s=Simulated_DWORD"
   - alias: "Simulated_OPC_SINT"
-    address: "ns=2;s=Simulated_SINT"
+    address: "ns=1;s=Simulated_SINT"
   - alias: "Simulated_OPC_USINT"
-    address: "ns=2;s=Simulated_USINT"
+    address: "ns=1;s=Simulated_USINT"
   - alias: "Simulated_OPC_INT"
-    address: "ns=2;s=Simulated_INT"
+    address: "ns=1;s=Simulated_INT"
   - alias: "Simulated_OPC_UINT"
-    address: "ns=2;s=Simulated_UINT"
+    address: "ns=1;s=Simulated_UINT"
   - alias: "Simulated_OPC_DINT"
-    address: "ns=2;s=Simulated_DINT"
+    address: "ns=1;s=Simulated_DINT"
   - alias: "Simulated_OPC_UDINT"
-    address: "ns=2;s=Simulated_UDINT"
+    address: "ns=1;s=Simulated_UDINT"
   - alias: "Simulated_OPC_LINT"
-    address: "ns=2;s=Simulated_LINT"
+    address: "ns=1;s=Simulated_LINT"
   - alias: "Simulated_OPC_ULINT"
-    address: "ns=2;s=Simulated_ULINT"
+    address: "ns=1;s=Simulated_ULINT"
   - alias: "Simulated_OPC_REAL"
-    address: "ns=2;s=Simulated_REAL"
+    address: "ns=1;s=Simulated_REAL"
   - alias: "Simulated_OPC_LREAL"
-    address: "ns=2;s=Simulated_LREAL"
+    address: "ns=1;s=Simulated_LREAL"
   - alias: "Simulated_OPC_CHAR"
-    address: "ns=2;s=Simulated_CHAR"
+    address: "ns=1;s=Simulated_CHAR"
   - alias: "Simulated_OPC_WCHAR"
-    address: "ns=2;s=Simulated_WCHAR"
+    address: "ns=1;s=Simulated_WCHAR"
   - alias: "Simulated_OPC_STRING"
-    address: "ns=2;s=Simulated_STRING"
+    address: "ns=1;s=Simulated_STRING"
   - alias: "Simulated_OPC_WSTRING"
-    address: "ns=2;s=Simulated_WSTRING"
+    address: "ns=1;s=Simulated_WSTRING"
diff --git a/plc4j/integrations/opcua-server/src/test/resources/config.yml b/plc4j/integrations/opcua-server/src/test/resources/config.yml
index 2296449ce0..c950e57019 100644
--- a/plc4j/integrations/opcua-server/src/test/resources/config.yml
+++ b/plc4j/integrations/opcua-server/src/test/resources/config.yml
@@ -66,38 +66,38 @@ devices:
   connectionString: "opcua:tcp://127.0.0.1:12673/plc4x"
   tags:
   - alias: "Simulated_OPC_BOOL"
-    address: "ns=2;s=Simulated_BOOL"
+    address: "ns=1;s=Simulated_BOOL"
   - alias: "Simulated_OPC_BYTE"
-    address: "ns=2;s=Simulated_BYTE"
+    address: "ns=1;s=Simulated_BYTE"
   - alias: "Simulated_OPC_WORD"
-    address: "ns=2;s=Simulated_WORD"
+    address: "ns=1;s=Simulated_WORD"
   - alias: "Simulated_OPC_DWORD"
-    address: "ns=2;s=Simulated_DWORD"
+    address: "ns=1;s=Simulated_DWORD"
   - alias: "Simulated_OPC_SINT"
-    address: "ns=2;s=Simulated_SINT"
+    address: "ns=1;s=Simulated_SINT"
   - alias: "Simulated_OPC_USINT"
-    address: "ns=2;s=Simulated_USINT"
+    address: "ns=1;s=Simulated_USINT"
   - alias: "Simulated_OPC_INT"
-    address: "ns=2;s=Simulated_INT"
+    address: "ns=1;s=Simulated_INT"
   - alias: "Simulated_OPC_UINT"
-    address: "ns=2;s=Simulated_UINT"
+    address: "ns=1;s=Simulated_UINT"
   - alias: "Simulated_OPC_DINT"
-    address: "ns=2;s=Simulated_DINT"
+    address: "ns=1;s=Simulated_DINT"
   - alias: "Simulated_OPC_UDINT"
-    address: "ns=2;s=Simulated_UDINT"
+    address: "ns=1;s=Simulated_UDINT"
   - alias: "Simulated_OPC_LINT"
-    address: "ns=2;s=Simulated_LINT"
+    address: "ns=1;s=Simulated_LINT"
   - alias: "Simulated_OPC_ULINT"
-    address: "ns=2;s=Simulated_ULINT"
+    address: "ns=1;s=Simulated_ULINT"
   - alias: "Simulated_OPC_REAL"
-    address: "ns=2;s=Simulated_REAL"
+    address: "ns=1;s=Simulated_REAL"
   - alias: "Simulated_OPC_LREAL"
-    address: "ns=2;s=Simulated_LREAL"
+    address: "ns=1;s=Simulated_LREAL"
   - alias: "Simulated_OPC_CHAR"
-    address: "ns=2;s=Simulated_CHAR"
+    address: "ns=1;s=Simulated_CHAR"
   - alias: "Simulated_OPC_WCHAR"
-    address: "ns=2;s=Simulated_WCHAR"
+    address: "ns=1;s=Simulated_WCHAR"
   - alias: "Simulated_OPC_STRING"
-    address: "ns=2;s=Simulated_STRING"
+    address: "ns=1;s=Simulated_STRING"
   - alias: "Simulated_OPC_WSTRING"
-    address: "ns=2;s=Simulated_WSTRING"
+    address: "ns=1;s=Simulated_WSTRING"
diff --git a/pom.xml b/pom.xml
index ff07a2ddaa..676c64d11d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -151,7 +151,7 @@
     <junit.platform.version>1.8.2</junit.platform.version>
     <logback.version>1.2.10</logback.version>
     <maven.clean.plugin.version>3.2.0</maven.clean.plugin.version>
-    <milo.version>0.6.3</milo.version>
+    <milo.version>0.6.6</milo.version>
     <mockito.version>4.4.0</mockito.version>
     <netty.version>4.1.77.Final</netty.version>
     <owasp-dependency-check.version>7.0.4</owasp-dependency-check.version>
@@ -637,18 +637,6 @@
         <version>${netty.version}</version>
       </dependency>
 
-      <dependency>
-        <groupId>jakarta.xml.bind</groupId>
-        <artifactId>jakarta.xml.bind-api</artifactId>
-        <version>3.0.1</version>
-        <exclusions>
-          <exclusion>
-            <groupId>jakarta.activation</groupId>
-            <artifactId>jakarta.activation-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-
       <dependency>
         <groupId>net.java.dev.jna</groupId>
         <artifactId>jna</artifactId>
@@ -661,12 +649,6 @@
         <version>${apiguardian.version}</version>
       </dependency>
 
-      <dependency>
-        <groupId>org.glassfish.jaxb</groupId>
-        <artifactId>jaxb-runtime</artifactId>
-        <version>${jaxb.version}</version>
-      </dependency>
-
       <dependency>
         <groupId>org.jetbrains</groupId>
         <artifactId>annotations</artifactId>


[plc4x] 02/02: start of logix development

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

hutcheb pushed a commit to branch logix_develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 94aa0010a4b49a36b10bedcf9d4627a3429b867a
Author: Ben Hutcheson <be...@gmail.com>
AuthorDate: Wed May 25 18:17:16 2022 +1000

    start of logix development
---
 protocols/logix/pom.xml                            |  43 +++
 .../apache/plc4x/protocol/logix/LogixProtocol.java |  42 +++
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |  19 ++
 .../src/main/resources/protocols/logix/logix.mspec | 210 +++++++++++++++
 .../plc4x/protocol/logix/LogixProtocolTest.java    |  37 +++
 .../resources/protocols/eip/DriverTestsuite.xml    | 224 ++++++++++++++++
 .../protocols/eip/ParserSerializerTestsuite.xml    | 292 +++++++++++++++++++++
 7 files changed, 867 insertions(+)

diff --git a/protocols/logix/pom.xml b/protocols/logix/pom.xml
new file mode 100644
index 0000000000..a61f5f01ac
--- /dev/null
+++ b/protocols/logix/pom.xml
@@ -0,0 +1,43 @@
+<?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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4x-protocols</artifactId>
+    <version>0.10.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4x-protocols-logix</artifactId>
+
+  <name>Protocols: Allen Bradley Logix Processors</name>
+  <description>Base protocol specifications for the Allen Bradley Logix Processors</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-code-generation-protocol-base-mspec</artifactId>
+      <version>0.10.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/protocols/logix/src/main/java/org/apache/plc4x/protocol/logix/LogixProtocol.java b/protocols/logix/src/main/java/org/apache/plc4x/protocol/logix/LogixProtocol.java
new file mode 100644
index 0000000000..7f25668042
--- /dev/null
+++ b/protocols/logix/src/main/java/org/apache/plc4x/protocol/logix/LogixProtocol.java
@@ -0,0 +1,42 @@
+/*
+ * 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.protocol.logix;
+
+import org.apache.plc4x.plugins.codegenerator.language.mspec.parser.MessageFormatParser;
+import org.apache.plc4x.plugins.codegenerator.language.mspec.protocol.ProtocolHelpers;
+import org.apache.plc4x.plugins.codegenerator.language.mspec.protocol.ValidatableTypeContext;
+import org.apache.plc4x.plugins.codegenerator.protocol.Protocol;
+import org.apache.plc4x.plugins.codegenerator.protocol.TypeContext;
+import org.apache.plc4x.plugins.codegenerator.types.exceptions.GenerationException;
+
+public class LogixProtocol implements Protocol, ProtocolHelpers {
+
+    @Override
+    public String getName() {
+        return "logix";
+    }
+
+    @Override
+    public TypeContext getTypeContext() throws GenerationException {
+        ValidatableTypeContext typeContext = new MessageFormatParser().parse(getMspecStream());
+        typeContext.validate();
+        return typeContext;
+    }
+
+}
diff --git a/protocols/logix/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol b/protocols/logix/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
new file mode 100644
index 0000000000..a926f952db
--- /dev/null
+++ b/protocols/logix/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+org.apache.plc4x.protocol.logix.LogixProtocol
\ No newline at end of file
diff --git a/protocols/logix/src/main/resources/protocols/logix/logix.mspec b/protocols/logix/src/main/resources/protocols/logix/logix.mspec
new file mode 100644
index 0000000000..65860e0021
--- /dev/null
+++ b/protocols/logix/src/main/resources/protocols/logix/logix.mspec
@@ -0,0 +1,210 @@
+/*
+ * 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.
+ */
+
+//////////////////////////////////////////////////////////////////
+///EthernetIP Header of size 24
+/////////////////////////////////////////////////////////////////
+
+[discriminatedType EipPacket byteOrder='LITTLE_ENDIAN'
+    [discriminator uint 16 command]
+    [implicit      uint 16 len 'lengthInBytes - 24']
+    [simple        uint 32 sessionHandle]
+    [simple        uint 32 status]
+    [array         uint 8  senderContext count '8']
+    [simple        uint 32 options]
+    [typeSwitch command
+            ['0x0065' EipConnectionRequest
+                [const      uint    16   protocolVersion   0x01]
+                [const      uint    16   flags             0x00]
+            ]
+            ['0x0066' EipDisconnectRequest
+            ]
+            ['0x006F' CipRRData(uint 16 len)
+                [reserved   uint    32    '0x00000000']
+                [simple     uint    16    timeout]
+                [simple     uint    16    itemCount]
+                [simple    CipExchange('len - 6')   exchange]
+            ]
+        ]
+]
+
+[type  CipExchange (uint 16 exchangeLen)  //We pass then length down to evey sub-type to be able to provide the remaining data size
+    [const          uint 32                         nullPtr             0x0                   ]  //NullPointerAddress
+    [const          uint 16                         unconnectedData     0x00B2                ]  //Connection Manager
+    [implicit       uint 16                         size                'lengthInBytes - 8 - 2' ]  //remove fields above and routing
+    [simple         CipService('exchangeLen - 10')  service                                     ]
+]
+
+[discriminatedType  CipService(uint 16 serviceLen)
+    [discriminator  bit     response]
+    [discriminator  uint    7   service]
+    [typeSwitch service,response
+        ['0x4C','false' CipReadRequest
+            [simple     int     8   requestPathSize]
+            [array      byte   tag   length  '(requestPathSize * 2)']
+            [simple     uint    16  elementNb]
+        ]
+        ['0x4C','true' CipReadResponse
+              [reserved   uint            8   '0x00']
+              [simple     uint            8   status]
+              [simple     uint            8   extStatus]
+              [simple     CIPDataTypeCode     dataType]
+              [array      byte   data  count  'serviceLen - 6']
+        ]
+        ['0x4D','false' CipWriteRequest
+            [simple     int     8           requestPathSize]
+            [array      byte           tag   length  'requestPathSize * 2']
+            [simple     CIPDataTypeCode     dataType]
+            [simple     uint    16          elementNb]
+            [array      byte            data  length  'dataType.size * elementNb']
+        ]
+        ['0x4D','true' CipWriteResponse
+            [reserved   uint        8   '0x00']
+            [simple     uint        8   status]
+            [simple     uint        8   extStatus]
+        ]
+        ['0x0A','false' MultipleServiceRequest
+               [const  int     8   requestPathSize   0x02]
+               [const  uint    32  requestPath       0x01240220]   //Logical Segment: Class(0x20) 0x02, Instance(0x24) 01 (Message Router)
+               [simple Services('serviceLen - 6 ')  data ]
+        ]
+        ['0x0A','true' MultipleServiceResponse
+               [reserved   uint    8   '0x0']
+               [simple     uint    8   status]
+               [simple     uint    8   extStatus]
+               [simple     uint    16  serviceNb]
+               [array      uint    16  offsets       count  'serviceNb']
+               [array      byte   servicesData count 'serviceLen - 6 - (2 * serviceNb)']
+        ]
+        ['0x52','false'   CipUnconnectedRequest
+               [implicit   uint    8    requestPathSize ]
+               [optional   PathSegment  pathSegment0 'requestPathSize - pathSegment0.dataSize']
+               [optional   PathSegment  pathSegment1 'requestPathSize - pathSegment0.dataSize - pathSegment1.dataSize']
+
+
+               [reserved   uint    8   '0x20']   // setRequestPathLogicalClassSegment
+               [reserved   uint    8   '0x06']   // set request class path
+               [reserved   uint    8   '0x24']   // setRequestPathLogicalInstanceSegment
+               [reserved   uint    8   '0x01']   // setRequestPathInstance
+               [reserved   uint    16  '0x9D05']   //Timeout 5s
+               [implicit   uint    16  messageSize   'lengthInBytes - 10 - 4']   //subtract above and routing
+               [simple     CipService('messageSize')  unconnectedService ]
+               [const      uint    16  route 0x0001]
+               [simple     int     8   backPlane]
+               [simple     int     8   slot]
+        ]
+        ['0x5B','false'     CipConnectionManagerRequest
+               [simple      int     8           requestPathSize]
+               [simple      ClassSegment        classSegment]
+               [simple      InstanceSegment     instanceSegment]
+               [simple      unit    4           priority]
+               [simple      uint    4           tickTime]
+               [simple      uint    8           timeoutTicks]
+               [simple      uint    16          actualTimeout]
+               [simple      uint    32          otConnectionId]
+               [simple      uint    32          toConnectionId]
+               [simple      uint    16          connectionSerialNumber]
+               [simple      uint    16          originatorVendorId]
+               [simple      uint    32          originatorSerialNumber]
+               [simple      uint    8           timeoutMultiplier]
+               [reserved    uint    24          '0x000000']
+               [simple      uint    32          otRpi]
+               [simple      NetworkConnectionParameters otConnectionParameters]
+               [simple      uint    32          toRpi]
+               [simple      NetworkConnectionParameters toConnectionParameters]
+               [simple      TransportType       transportType]
+               [simple      uint    8           connectionPathSize]
+               [simple      PortSegment         portSegment]
+
+        ]
+        ['0x5B','true'     CipConnectionManagerResponse
+               [simple      uint    32          otConnectionId]
+               [simple      uint    32          toConnectionId]
+               [simple      uint    16          connectionSerialNumber]
+               [simple      uint    16          originatorVendorId]
+               [simple      uint    32          originatorSerialNumber]
+               [simple      uint    32          otApi]
+               [simple      uint    32          toApi]
+               [implicit    uint    8           replySize   'serviceLen - 46']
+               [reserved    uint    8           '0x00']
+        ]
+    ]
+]
+
+[type   InstanceSegment
+                [simple     uint    3   pathSegmentType]
+                [simple     uint    3   logicalSegmentType]
+                [simple     uint    2   logicalSegmentFormat]
+                [simple     uint    8   instance]
+]
+
+[type   ClassSegment
+                [simple     uint    3   pathSegmentType]
+                [simple     uint    3   logicalSegmentType]
+                [simple     uint    2   logicalSegmentFormat]
+                [simple     uint    8   class]
+]
+
+[type   PortSegment
+                [simple     uint    3   portSegmentType]
+                [simple     bool    1   extendedLinkAddress]
+                [simple     uint    4   port]
+                [simple     uint    8   linkAddress]
+]
+
+[type   NetworkConnectionParameters
+               [simple      bool    1   owner]
+               [simple      uint    2   connectionType]
+               [simple      uint    2   priority]
+               [simple      bool    1   connectionSizeType]
+               [simple      uint    16  connectionSize]
+]
+
+[type   TransportType
+               [simple      bool    1   direction]
+               [simple      uint    3   trigger]
+               [simple      uint    4   class]
+]
+
+[type   Services  (uint   16   servicesLen)
+    [simple uint        16  serviceNb]
+    [array  uint        16  offsets       count  'serviceNb']
+    [array  CipService('servicesLen / serviceNb')   services    count  'serviceNb' ]
+]
+
+[enum uint   16   CIPDataTypeCode(uint 8  size)
+    ['0X00C1'   BOOL            ['1']]
+    ['0X00C2'   SINT            ['1']]
+    ['0X00C3'   INT             ['2']]
+    ['0X00C4'   DINT            ['4']]
+    ['0X00C5'   LINT            ['8']]
+    ['0X00CA'   REAL            ['4']]
+    ['0X00D3'   DWORD           ['4']]
+    ['0X02A0'   STRUCTURED      ['88']]
+    ['0X02A0'   STRING          ['88']]
+    ['0X02A0'   STRING36        ['40']]
+    //TODO: -1 is not a valid value for uint
+    //['-1'       UNKNOWN         ['-1']]
+]
+
+[enum   uint    16  EiPCommand
+    ['0x0065'   RegisterSession ]
+    ['0x0066'   UnregisterSession ]
+    ['0x006F'   SendRRData ]
+]
\ No newline at end of file
diff --git a/protocols/logix/src/test/java/org/apache/plc4x/protocol/logix/LogixProtocolTest.java b/protocols/logix/src/test/java/org/apache/plc4x/protocol/logix/LogixProtocolTest.java
new file mode 100644
index 0000000000..a573d2c397
--- /dev/null
+++ b/protocols/logix/src/test/java/org/apache/plc4x/protocol/logix/LogixProtocolTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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.protocol.logix;
+
+import org.apache.plc4x.plugins.codegenerator.protocol.TypeContext;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+
+class LogixProtocolTest {
+
+    @Test
+    void getTypeContext() throws Exception {
+        TypeContext typeContext = new LogixProtocol().getTypeContext();
+        assertNotNull(typeContext);
+        assertNotNull(typeContext.getUnresolvedTypeReferences());
+        assertSame(0, typeContext.getUnresolvedTypeReferences().size());
+    }
+
+}
diff --git a/protocols/logix/src/test/resources/protocols/eip/DriverTestsuite.xml b/protocols/logix/src/test/resources/protocols/eip/DriverTestsuite.xml
new file mode 100644
index 0000000000..16bdb77ca0
--- /dev/null
+++ b/protocols/logix/src/test/resources/protocols/eip/DriverTestsuite.xml
@@ -0,0 +1,224 @@
+<?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:driver-testsuite xmlns:test="https://plc4x.apache.org/schemas/driver-testsuite.xsd"
+                       byteOrder="LITTLE_ENDIAN">
+
+  <name>LOGIX</name>
+
+  <protocolName>logix</protocolName>
+  <outputFlavor>read-write</outputFlavor>
+
+  <driver-name>logix</driver-name>
+
+  <setup>
+    <!-- First the driver is expected to send a RegisterSession connection request -->
+    <outgoing-plc-message name="Send connection request">
+      <EipPacket>
+        <command dataType="uint" bitLength="16">101</command>
+        <len dataType="uint" bitLength="16">4</len>
+        <sessionHandle dataType="uint" bitLength="32">0</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <EipConnectionRequest>
+          <protocolVersion dataType="uint" bitLength="16">1</protocolVersion>
+          <flags dataType="uint" bitLength="16">0</flags>
+        </EipConnectionRequest>
+      </EipPacket>
+    </outgoing-plc-message>
+    <!-- The PLC will send the connection response with a sender context and session handle-->
+    <incoming-plc-message name="Receive connection response">
+      <EipPacket>
+        <command dataType="uint" bitLength="16">101</command>
+        <len dataType="uint" bitLength="16">4</len>
+        <sessionHandle dataType="uint" bitLength="32">1</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">2</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <EipConnectionRequest>
+          <protocolVersion dataType="uint" bitLength="16">1</protocolVersion>
+          <flags dataType="uint" bitLength="16">0</flags>
+        </EipConnectionRequest>
+      </EipPacket>
+
+    </incoming-plc-message>
+  </setup>
+  <testcase>
+    <name>Single element read request</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <fields>
+            <field className="org.apache.plc4x.test.driver.internal.api.TestField">
+              <name>hurz</name>
+              <address>%rate</address>
+            </field>
+          </fields>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="Send CipReadRequest to PLC">
+        <EipPacket>
+          <command dataType="uint" bitLength="16">111</command>
+          <len dataType="uint" bitLength="16">40</len>
+          <sessionHandle dataType="uint" bitLength="32">1</sessionHandle>
+          <status dataType="uint" bitLength="32">0</status>
+          <senderContext isList="true">
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+          </senderContext>
+          <options dataType="uint" bitLength="32">0</options>
+          <CipRRData>
+            <reserved dataType="uint" bitLength="32">0</reserved>
+            <reserved dataType="uint" bitLength="16">0</reserved>
+            <exchange>
+              <CipExchange>
+                <itemCount dataType="uint" bitLength="16">2</itemCount>
+                <nullPtr dataType="uint" bitLength="32">0</nullPtr>
+                <unconnectedData dataType="uint" bitLength="16">178</unconnectedData>
+                <size dataType="uint" bitLength="16">24</size>
+                <service>
+                  <CipService>
+                    <service dataType="uint" bitLength="8">82</service>
+                    <CipUnconnectedRequest>
+                      <reserved dataType="uint" bitLength="8">2</reserved>
+                      <reserved dataType="uint" bitLength="8">32</reserved>
+                      <reserved dataType="uint" bitLength="8">6</reserved>
+                      <reserved dataType="uint" bitLength="8">36</reserved>
+                      <reserved dataType="uint" bitLength="8">1</reserved>
+                      <reserved dataType="uint" bitLength="16">40197</reserved>
+                      <messageSize dataType="uint" bitLength="16">10</messageSize>
+                      <unconnectedService>
+                        <CipService>
+                          <service dataType="uint" bitLength="8">76</service>
+                          <CipReadRequest>
+                            <requestPathSize dataType="int" bitLength="8">3</requestPathSize>
+                            <tag dataType="byte" bitLength="48">0x910472617465</tag>
+                            <elementNb dataType="uint" bitLength="16">1</elementNb>
+                          </CipReadRequest>
+                        </CipService>
+                      </unconnectedService>
+                      <route dataType="uint" bitLength="16">1</route>
+                      <backPlane dataType="int" bitLength="8">0</backPlane>
+                      <slot dataType="int" bitLength="8">0</slot>
+                    </CipUnconnectedRequest>
+                  </CipService>
+                </service>
+              </CipExchange>
+            </exchange>
+          </CipRRData>
+        </EipPacket>
+      </outgoing-plc-message>
+      <incoming-plc-message name="Get CipReadResponse from PLC">
+        <EipPacket>
+          <command dataType="uint" bitLength="16">111</command>
+          <len dataType="uint" bitLength="16">26</len>
+          <sessionHandle dataType="uint" bitLength="32">1</sessionHandle>
+          <status dataType="uint" bitLength="32">0</status>
+          <senderContext isList="true">
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">0</value>
+            <value dataType="uint" bitLength="8">2</value>
+          </senderContext>
+          <options dataType="uint" bitLength="32">0</options>
+          <CipRRData>
+            <reserved dataType="uint" bitLength="32">0</reserved>
+            <reserved dataType="uint" bitLength="16">0</reserved>
+            <exchange>
+              <CipExchange>
+                <itemCount dataType="uint" bitLength="16">2</itemCount>
+                <nullPtr dataType="uint" bitLength="32">0</nullPtr>
+                <unconnectedData dataType="uint" bitLength="16">178</unconnectedData>
+                <size dataType="uint" bitLength="16">10</size>
+                <service>
+                  <CipService>
+                    <service dataType="uint" bitLength="8">204</service>
+                    <CipReadResponse>
+                      <reserved dataType="uint" bitLength="8">0</reserved>
+                      <status dataType="uint" bitLength="8">0</status>
+                      <extStatus dataType="uint" bitLength="8">0</extStatus>
+                      <dataType>
+                        <CIPDataTypeCode dataType="uint" bitLength="16" stringRepresentation="DINT">196
+                        </CIPDataTypeCode>
+                      </dataType>
+                      <data dataType="byte" bitLength="32">0x00000216</data>
+                    </CipReadResponse>
+                  </CipService>
+                </service>
+              </CipExchange>
+            </exchange>
+          </CipRRData>
+        </EipPacket>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <PlcReadRequest>
+            <fields>
+              <hurz>
+                <EipField>
+                  <node dataType="string" bitLength="32" encoding="UTF-8">rate</node>
+                  <elementNb dataType="uint" bitLength="16">0</elementNb>
+                  <defaultJavaType dataType="string" bitLength="128" encoding="UTF-8">java.lang.Object</defaultJavaType>
+                </EipField>
+              </hurz>
+            </fields>
+          </PlcReadRequest>
+          <values>
+            <hurz>
+              <ResponseItem>
+                <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+                <PlcDINT dataType="int" bitLength="64">369229824</PlcDINT>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+</test:driver-testsuite>
\ No newline at end of file
diff --git a/protocols/logix/src/test/resources/protocols/eip/ParserSerializerTestsuite.xml b/protocols/logix/src/test/resources/protocols/eip/ParserSerializerTestsuite.xml
new file mode 100644
index 0000000000..c984885589
--- /dev/null
+++ b/protocols/logix/src/test/resources/protocols/eip/ParserSerializerTestsuite.xml
@@ -0,0 +1,292 @@
+<?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"
+                byteOrder="BIG_ENDIAN">
+
+  <name>LOGIX</name>
+
+  <protocolName>logix</protocolName>
+  <outputFlavor>read-write</outputFlavor>
+
+  <testcase>
+    <name>Register Session</name>
+    <raw>00650004000000000000000000000000000000000000000000010000</raw>
+    <root-type>EipPacket</root-type>
+    <xml>
+      <EipPacket>
+        <command dataType="uint" bitLength="16">101</command>
+        <len dataType="uint" bitLength="16">4</len>
+        <sessionHandle dataType="uint" bitLength="32">0</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <EipConnectionRequest>
+          <protocolVersion dataType="uint" bitLength="16">1</protocolVersion>
+          <flags dataType="uint" bitLength="16">0</flags>
+        </EipConnectionRequest>
+      </EipPacket>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>CIP Read Request</name>
+    <raw>
+      006F0028000012340000000001000000000000010000000000000000000000020000000000B200185202200624019D05000A4C03910472617465000100010104
+    </raw>
+    <root-type>EipPacket</root-type>
+    <xml>
+      <EipPacket>
+        <command dataType="uint" bitLength="16">111</command>
+        <len dataType="uint" bitLength="16">40</len>
+        <sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">1</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">1</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <CipRRData>
+          <reserved dataType="uint" bitLength="32">0</reserved>
+          <reserved dataType="uint" bitLength="16">0</reserved>
+          <exchange>
+            <CipExchange>
+              <itemCount dataType="uint" bitLength="16">2</itemCount>
+              <nullPtr dataType="uint" bitLength="32">0</nullPtr>
+              <unconnectedData dataType="uint" bitLength="16">178</unconnectedData>
+              <size dataType="uint" bitLength="16">24</size>
+              <service>
+                <CipService>
+                  <service dataType="uint" bitLength="8">82</service>
+                  <CipUnconnectedRequest>
+                    <reserved dataType="uint" bitLength="8">2</reserved>
+                    <reserved dataType="uint" bitLength="8">32</reserved>
+                    <reserved dataType="uint" bitLength="8">6</reserved>
+                    <reserved dataType="uint" bitLength="8">36</reserved>
+                    <reserved dataType="uint" bitLength="8">1</reserved>
+                    <reserved dataType="uint" bitLength="16">40197</reserved>
+                    <messageSize dataType="uint" bitLength="16">10</messageSize>
+                    <unconnectedService>
+                      <CipService>
+                        <service dataType="uint" bitLength="8">76</service>
+                        <CipReadRequest>
+                          <requestPathSize dataType="int" bitLength="8">3</requestPathSize>
+                          <tag dataType="byte" bitLength="48">0x910472617465</tag>
+                          <elementNb dataType="uint" bitLength="16">1</elementNb>
+                        </CipReadRequest>
+                      </CipService>
+                    </unconnectedService>
+                    <route dataType="uint" bitLength="16">1</route>
+                    <backPlane dataType="int" bitLength="8">1</backPlane>
+                    <slot dataType="int" bitLength="8">4</slot>
+                  </CipUnconnectedRequest>
+                </CipService>
+              </service>
+            </CipExchange>
+          </exchange>
+        </CipRRData>
+      </EipPacket>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>CIP Read Response</name>
+    <raw>006F001A000012340000000001000000000000010000000000000000000000020000000000B2000ACC00000000C400000216</raw>
+    <root-type>EipPacket</root-type>
+    <xml>
+      <EipPacket>
+        <command dataType="uint" bitLength="16">111</command>
+        <len dataType="uint" bitLength="16">26</len>
+        <sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">1</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">1</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <CipRRData>
+          <reserved dataType="uint" bitLength="32">0</reserved>
+          <reserved dataType="uint" bitLength="16">0</reserved>
+          <exchange>
+            <CipExchange>
+              <itemCount dataType="uint" bitLength="16">2</itemCount>
+              <nullPtr dataType="uint" bitLength="32">0</nullPtr>
+              <unconnectedData dataType="uint" bitLength="16">178</unconnectedData>
+              <size dataType="uint" bitLength="16">10</size>
+              <service>
+                <CipService>
+                  <service dataType="uint" bitLength="8">204</service>
+                  <CipReadResponse>
+                    <reserved dataType="uint" bitLength="8">0</reserved>
+                    <status dataType="uint" bitLength="8">0</status>
+                    <extStatus dataType="uint" bitLength="8">0</extStatus>
+                    <dataType> <!--0xC4-->
+                      <CIPDataTypeCode dataType="uint" bitLength="16" stringRepresentation="DINT">196</CIPDataTypeCode>
+                    </dataType>
+                    <data dataType="byte" bitLength="32">0x00000216</data>  <!--0x216 but again issue when parsing Object to XML-->
+                  </CipReadResponse>
+                </CipService>
+              </service>
+            </CipExchange>
+          </exchange>
+        </CipRRData>
+      </EipPacket>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>CIP Write Request</name>
+    <raw>
+      006F0034000012340000000001000000000000010000000000000000000000020000000000B200245202200624019D0500164D069116436172746F6E53697A6500C400010000000E00010104
+    </raw>
+    <root-type>EipPacket</root-type>
+    <xml>
+      <EipPacket>
+        <command dataType="uint" bitLength="16">111</command>
+        <len dataType="uint" bitLength="16">52</len>
+        <sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">1</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">1</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <CipRRData>
+          <reserved dataType="uint" bitLength="32">0</reserved>
+          <reserved dataType="uint" bitLength="16">0</reserved>
+          <exchange>
+            <CipExchange>
+              <itemCount dataType="uint" bitLength="16">2</itemCount>
+              <nullPtr dataType="uint" bitLength="32">0</nullPtr>
+              <unconnectedData dataType="uint" bitLength="16">178</unconnectedData>
+              <size dataType="uint" bitLength="16">36</size>
+              <service>
+                <CipService>
+                  <service dataType="uint" bitLength="8">82</service>
+                  <CipUnconnectedRequest>
+                    <reserved dataType="uint" bitLength="8">2</reserved>
+                    <reserved dataType="uint" bitLength="8">32</reserved>
+                    <reserved dataType="uint" bitLength="8">6</reserved>
+                    <reserved dataType="uint" bitLength="8">36</reserved>
+                    <reserved dataType="uint" bitLength="8">1</reserved>
+                    <reserved dataType="uint" bitLength="16">40197</reserved>
+                    <messageSize dataType="uint" bitLength="16">22</messageSize>
+                    <unconnectedService>
+                      <CipService>
+                        <service dataType="uint" bitLength="8">77</service>
+                        <CipWriteRequest>
+                          <requestPathSize dataType="int" bitLength="8">6</requestPathSize>
+                          <tag dataType="byte" bitLength="96">0x9116436172746f6e53697a65</tag>
+                          <dataType>
+                            <CIPDataTypeCode dataType="uint" bitLength="16" stringRepresentation="DINT">196</CIPDataTypeCode>
+                          </dataType>
+                          <elementNb dataType="uint" bitLength="16">1</elementNb>
+                          <data dataType="byte" bitLength="32">0x0000000e</data>
+                        </CipWriteRequest>
+                      </CipService>
+                    </unconnectedService>
+                    <route dataType="uint" bitLength="16">1</route>
+                    <backPlane dataType="int" bitLength="8">1</backPlane>
+                    <slot dataType="int" bitLength="8">4</slot>
+                  </CipUnconnectedRequest>
+                </CipService>
+              </service>
+            </CipExchange>
+          </exchange>
+        </CipRRData>
+      </EipPacket>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>CIP Write Response</name>
+    <raw>006F0014000012340000000001000000000000010000000000000000000000020000000000B20004CD000000</raw>
+    <root-type>EipPacket</root-type>
+    <xml>
+      <EipPacket>
+        <command dataType="uint" bitLength="16">111</command>
+        <len dataType="uint" bitLength="16">20</len>
+        <sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
+        <status dataType="uint" bitLength="32">0</status>
+        <senderContext isList="true">
+          <value dataType="uint" bitLength="8">1</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">0</value>
+          <value dataType="uint" bitLength="8">1</value>
+        </senderContext>
+        <options dataType="uint" bitLength="32">0</options>
+        <CipRRData>
+          <reserved dataType="uint" bitLength="32">0</reserved>
+          <reserved dataType="uint" bitLength="16">0</reserved>
+          <exchange>
+            <CipExchange>
+              <itemCount dataType="uint" bitLength="16">2</itemCount>
+              <nullPtr dataType="uint" bitLength="32">0</nullPtr>
+              <unconnectedData dataType="uint" bitLength="16">178</unconnectedData>
+              <size dataType="uint" bitLength="16">4</size>
+              <service>
+                <CipService>
+                  <service dataType="uint" bitLength="8">205</service>
+                  <CipWriteResponse>
+                    <reserved dataType="uint" bitLength="8">0</reserved>
+                    <status dataType="uint" bitLength="8">0</status>
+                    <extStatus dataType="uint" bitLength="8">0</extStatus>
+                  </CipWriteResponse>
+                </CipService>
+              </service>
+            </CipExchange>
+          </exchange>
+        </CipRRData>
+      </EipPacket>
+    </xml>
+  </testcase>
+
+
+</test:testsuite>
\ No newline at end of file