You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2019/06/26 16:51:40 UTC

[plc4x] branch develop updated: - Finetuned the java code generation (Removing problems with multiple arrayFields) - Finished a first version of the KNXNet/IP MSpec (Removed the Daffodil version) - Added a sandbox driver for KNXNet/IP

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new d3dfe37  - Finetuned the java code generation (Removing problems with multiple arrayFields) - Finished a first version of the KNXNet/IP MSpec (Removed the Daffodil version) - Added a sandbox driver for KNXNet/IP
d3dfe37 is described below

commit d3dfe3745a9a7d12f3e9d3ce22247115f17d2936
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Jun 26 18:51:32 2019 +0200

    - Finetuned the java code generation (Removing problems with multiple arrayFields)
    - Finished a first version of the KNXNet/IP MSpec (Removed the Daffodil version)
    - Added a sandbox driver for KNXNet/IP
---
 .../main/resources/templates/java/io-template.ftlh |  10 +-
 .../mspec/expression/ExpressionStringListener.java |   3 +
 .../mspec/parser/MessageFormatListener.java        |   4 +-
 .../language/mspec/parser/MessageFormatParser.java |   2 +-
 pom.xml                                            |  26 -
 .../main/resources/daffodil-built-in-catalog.xml   |  23 -
 .../plc4x/protocols/knxnetip/protocol.dfdl.xsd     | 529 ---------------------
 .../plc4x/protocols/knxnetip/protocol.scxml.xml    | 253 ----------
 .../plc4x/protocols/knxnetip/ProtocolTest.java     |  33 --
 protocols/{knxnet-ip => knxnetip}/pom.xml          |  16 +-
 .../plc4x/protocol/knxnetip/KnxNetIpProtocol.java} |   8 +-
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |  19 +
 .../resources/protocols/knxnetip/knxnetip.mspec    | 190 ++++++++
 .../src/site/asciidoc/index.adoc                   |   0
 .../apache/plc4x/protocols/knxnetip/protocol.tdml  |   0
 protocols/plc4x/pom.xml                            |  35 --
 .../main/resources/daffodil-built-in-catalog.xml   |  25 -
 .../org/apache/plc4x/protocols/protocol.dfdl.xsd   | 129 -----
 protocols/pom.xml                                  |   9 +-
 .../org/apache/plc4x/protocol/s7/S7Protocol.java   |   2 +-
 .../protocols/s7/{protocol.spec => protocol.mspec} |   0
 protocols/test-utils/pom.xml                       |  76 ---
 .../plc4x/protocols/AbstractProtocolTest.java      |  64 ---
 sandbox/code-gen/pom.xml                           |   6 +-
 sandbox/pom.xml                                    |  18 +-
 .../pom.xml                                        |   8 +-
 sandbox/test-java-s7-driver/pom.xml                |   2 +-
 27 files changed, 241 insertions(+), 1249 deletions(-)

diff --git a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
index fef151d..d790f0b 100644
--- a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
@@ -66,16 +66,16 @@ public class ${typeName}IO  {
         <#if field.lengthExpression.contains("curPos")>
         curPos = io.getPos() - startPos;
         </#if>
-        int size = ${helper.toDeserializationExpression(field.lengthExpression)};
+        int ${field.name}Size = ${helper.toDeserializationExpression(field.lengthExpression)};
         <#if helper.isCountArray(field)>
-        ${helper.getLanguageTypeNameForField(field)}[] ${field.name} = new ${helper.getLanguageTypeNameForField(field)}[size];
-        for(int i = 0; i < size; i++) {
+        ${helper.getLanguageTypeNameForField(field)}[] ${field.name} = new ${helper.getLanguageTypeNameForField(field)}[${field.name}Size];
+        for(int i = 0; i < ${field.name}Size; i++) {
             ${field.name}[i] = <#if helper.isSimpleType(field.type)>io.${helper.getReadBufferReadMethodCall(field.type)}<#else>${field.type.name}IO.parse(io<#if field.params?has_content>, <#list field.params as parserArgument>${parserArgument}<#sep>, </#sep></#list></#if>)</#if>;
         }
         <#else>
         List<${helper.getLanguageTypeNameForField(field)}> ${field.name}List = <#if helper.isCountArray(field)>new ArrayList<>(size)<#else>new LinkedList<>()</#if>;
-        int endPos = io.getPos() + size;
-        while(io.getPos() < endPos) {
+        int ${field.name}EndPos = io.getPos() + ${field.name}Size;
+        while(io.getPos() < ${field.name}EndPos) {
             <#if field.lengthExpression.contains("curPos")>
             curPos = io.getPos() - startPos;
             </#if>
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
index fab3d61..4586e4e 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
@@ -44,6 +44,9 @@ public class ExpressionStringListener extends ExpressionBaseListener {
     @Override
     public void exitExpressionString(ExpressionParser.ExpressionStringContext ctx) {
         List<Term> roots = parserContexts.pop();
+        if(roots.isEmpty()) {
+            throw new RuntimeException("Empty Expression not supported.");
+        }
         if(roots.size() != 1) {
             throw new RuntimeException("Expression can only contain one root term.");
         }
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
index 71e9765..ffb82f1 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatListener.java
@@ -224,7 +224,7 @@ public class MessageFormatListener extends MSpecBaseListener {
             SimpleTypeReference.SimpleBaseType simpleBaseType = SimpleTypeReference.SimpleBaseType.valueOf(
                 ctx.simpleTypeReference.base.getText().toUpperCase());
             if(ctx.simpleTypeReference.size != null) {
-                int size = Integer.valueOf(ctx.simpleTypeReference.size.getText());
+                int size = Integer.parseInt(ctx.simpleTypeReference.size.getText());
                 return new DefaultSimpleTypeReference(simpleBaseType, size);
             } else {
                 return new DefaultSimpleTypeReference(simpleBaseType, 1);
@@ -238,7 +238,7 @@ public class MessageFormatListener extends MSpecBaseListener {
         SimpleTypeReference.SimpleBaseType simpleBaseType =
             SimpleTypeReference.SimpleBaseType.valueOf(ctx.base.getText().toUpperCase());
         if(ctx.size != null) {
-            int size = Integer.valueOf(ctx.size.getText());
+            int size = Integer.parseInt(ctx.size.getText());
             return new DefaultSimpleTypeReference(simpleBaseType, size);
         } else {
             return new DefaultSimpleTypeReference(simpleBaseType, 1);
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
index 2295d3a..79380ea 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParser.java
@@ -43,7 +43,7 @@ public class MessageFormatParser {
             MessageFormatListener listener = new MessageFormatListener();
             walker.walk(listener, tree);
             return listener.getComplexTypes();
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
diff --git a/pom.xml b/pom.xml
index cc72766..4d2d70f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,7 +123,6 @@
     <commons-pool2.version>2.6.0</commons-pool2.version>
     <commons-text.version>1.6</commons-text.version>
     <crc.version>1.0.1</crc.version>
-    <daffodil.version>2.3.0</daffodil.version>
     <elasticsearch.version>7.0.1</elasticsearch.version>
     <equalsverifier.version>3.0.2</equalsverifier.version>
     <findbugs.version>3.0.1</findbugs.version>
@@ -396,31 +395,6 @@
         <version>${commons-text.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.daffodil</groupId>
-        <artifactId>daffodil-japi_2.12</artifactId>
-        <version>${daffodil.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.daffodil</groupId>
-        <artifactId>daffodil-lib_2.12</artifactId>
-        <version>${daffodil.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.daffodil</groupId>
-        <artifactId>daffodil-runtime1_2.12</artifactId>
-        <version>${daffodil.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.daffodil</groupId>
-        <artifactId>daffodil-tdml-lib_2.12</artifactId>
-        <version>${daffodil.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.daffodil</groupId>
-        <artifactId>daffodil-tdml-processor_2.12</artifactId>
-        <version>${daffodil.version}</version>
-      </dependency>
-      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-api</artifactId>
         <version>${log4j.version}</version>
diff --git a/protocols/knxnet-ip/src/main/resources/daffodil-built-in-catalog.xml b/protocols/knxnet-ip/src/main/resources/daffodil-built-in-catalog.xml
deleted file mode 100644
index 2f61b17..0000000
--- a/protocols/knxnet-ip/src/main/resources/daffodil-built-in-catalog.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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.
-  -->
-<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
-  <uri name="http://plc4x.apache.org/knxnet-ip"
-       uri="org/apache/plc4x/protocols/knxnetip/protocol.dfdl.xsd"/>
-</catalog>
\ No newline at end of file
diff --git a/protocols/knxnet-ip/src/main/resources/org/apache/plc4x/protocols/knxnetip/protocol.dfdl.xsd b/protocols/knxnet-ip/src/main/resources/org/apache/plc4x/protocols/knxnetip/protocol.dfdl.xsd
deleted file mode 100644
index b2fe71c..0000000
--- a/protocols/knxnet-ip/src/main/resources/org/apache/plc4x/protocols/knxnetip/protocol.dfdl.xsd
+++ /dev/null
@@ -1,529 +0,0 @@
-<!--
-  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.
-  -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-           xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
-           xmlns:knx="http://plc4x.apache.org/knxnet-ip"
-           xmlns:plc4x="http://plc4x.apache.org/plc4x"
-           targetNamespace="http://plc4x.apache.org/knxnet-ip">
-
-    <xs:annotation>
-        <xs:appinfo source="http://www.ogf.org/dfdl/">
-            <dfdl:defineVariable name="messageType" type="xs:string"/>
-            <dfdl:defineFormat name="knxNetIpFullFormat">
-                <dfdl:format representation="binary"
-                             binaryNumberRep="binary"
-                             byteOrder="bigEndian"
-                             lengthKind="implicit" lengthUnits="bytes" length="0"
-                             occursCountKind="implicit"
-                             textOutputMinLength="0"
-                             binaryBooleanTrueRep="1"
-                             binaryBooleanFalseRep="0"
-                             alignment="1" alignmentUnits="bits"
-                             leadingSkip="0" trailingSkip="0"
-                             textPadKind="none" ignoreCase="no"
-                             textBidi="no" floating="no"
-                             encoding="utf-8" truncateSpecifiedLengthString="no"
-                             initiator="" terminator=""
-                             sequenceKind="ordered" separator=""
-                             escapeSchemeRef="" initiatedContent="no"
-                             encodingErrorPolicy="replace"/>
-            </dfdl:defineFormat>
-            <dfdl:format ref="knx:knxNetIpFullFormat"/>
-        </xs:appinfo>
-    </xs:annotation>
-
-    <!--
-
-        TPKT - Iso-On-TCP
-
-    -->
-
-    <xs:element name="KNXNetIPMessage" type="knx:KNXNetIPMessageType"/>
-
-    <xs:complexType name="KNXNetIPMessageType">
-        <xs:sequence>
-            <xs:element name="headerLength" type="plc4x:uint8" fixed="06"/>
-            <xs:element name="protocolVersion" type="plc4x:uint8" fixed="10"/>
-            <xs:element name="type" type="plc4x:uint16"/>
-            <!-- length of the entire message (including header) -->
-            <xs:element name="totalLength" type="plc4x:uint16"/>
-            <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
-                <xs:element dfdl:choiceBranchKey="513" name="SearchRequest" type="knx:SearchRequest"/>
-                <xs:element dfdl:choiceBranchKey="514" name="SearchResponse" type="knx:SearchResponse"/>
-                <xs:element dfdl:choiceBranchKey="515" name="DescriptionRequest" type="knx:DescriptionRequest"/>
-                <xs:element dfdl:choiceBranchKey="516" name="DescriptionResponse" type="knx:DescriptionResponse"/>
-                <xs:element dfdl:choiceBranchKey="517" name="ConnectionRequest" type="knx:ConnectionRequest"/>
-                <xs:element dfdl:choiceBranchKey="518" name="ConnectionResponse" type="knx:ConnectionResponse"/>
-                <xs:element dfdl:choiceBranchKey="519" name="ConnectionStateRequest" type="knx:ConnectionStateRequest"/>
-                <xs:element dfdl:choiceBranchKey="520" name="ConnectionStateResponse" type="knx:ConnectionStateResponse"/>
-                <xs:element dfdl:choiceBranchKey="521" name="DisconnectRequest" type="knx:DisconnectRequest"/>
-                <xs:element dfdl:choiceBranchKey="522" name="DisconnectResponse" type="knx:DisconnectResponse"/>
-                <xs:element dfdl:choiceBranchKey="784" name="DeviceConfigurationRequest" type="knx:DeviceConfigurationRequest"/>
-                <xs:element dfdl:choiceBranchKey="785" name="DeviceConfigurationResponse" type="knx:DeviceConfigurationResponse"/>
-                <xs:element dfdl:choiceBranchKey="1056" name="TunnelingRequest" type="knx:TunnelingRequest"/>
-                <xs:element dfdl:choiceBranchKey="1057" name="TunnelingResponse" type="knx:TunnelingResponse"/>
-            </xs:choice>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="SearchRequest">
-        <xs:sequence>
-            <xs:element name="HPAIDiscoveryEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="SearchResponse">
-        <xs:sequence>
-            <xs:element name="HPAIControlEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-            <xs:element name="DIBDeviceInfo">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="descriptionType" type="plc4x:uint8"/>
-                        <xs:element name="knxMedium" type="plc4x:uint8"/>
-                        <xs:element name="deviceStatus">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xs:sequence>
-                                        <xs:element name="reserved" type="plc4x:uint7"/>
-                                        <xs:element name="programMode" type="plc4x:bit"/>
-                                    </xs:sequence>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                        <xs:element name="knxAddress" type="knx:KnxAddress"/>
-                        <xs:element name="projectInstallationIdentifier">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xs:element name="projectNumber" type="plc4x:uint8"/>
-                                    <xs:element name="installationNumber" type="plc4x:uint8"/>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                        <xs:element name="knxNetIpDeviceSerialNumber" type="xs:hexBinary"
-                                    dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes"
-                                    dfdl:length="6"/>
-                        <xs:element name="knxNetIpDeviceMulticastAddress" type="plc4x:byte8"/>
-                        <xs:element name="knxNetIpDeviceMacAddress" type="xs:hexBinary"
-                                    dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes"
-                                    dfdl:length="6"/>
-                        <xs:element name="deviceFriendlyName" type="xs:string"
-                                    dfdl:textTrimKind="none" dfdl:alignmentUnits="bytes"
-                                    dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes"
-                                    dfdl:length="30"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-            <xs:element name="DIBSuppSvcFamilies">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="descriptionType" type="plc4x:uint8"/>
-                        <xs:element name="serviceIds">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xs:element name="serviceId" maxOccurs="unbounded">
-                                        <xs:complexType>
-                                            <xs:sequence>
-                                                <xs:element name="type" type="plc4x:uint8"/>
-                                                <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
-                                                    <xs:element dfdl:choiceBranchKey="2" name="KnxNetIpCore">
-                                                        <xs:complexType>
-                                                            <xs:sequence>
-                                                                <xs:element name="version" type="plc4x:uint8"/>
-                                                            </xs:sequence>
-                                                        </xs:complexType>
-                                                    </xs:element>
-                                                    <xs:element dfdl:choiceBranchKey="3" name="KnxNetIpDeviceManagement">
-                                                        <xs:complexType>
-                                                            <xs:sequence>
-                                                                <xs:element name="version" type="plc4x:uint8"/>
-                                                            </xs:sequence>
-                                                        </xs:complexType>
-                                                    </xs:element>
-                                                    <xs:element dfdl:choiceBranchKey="4" name="KnxNetIpTunneling">
-                                                        <xs:complexType>
-                                                            <xs:sequence>
-                                                                <xs:element name="version" type="plc4x:uint8"/>
-                                                            </xs:sequence>
-                                                        </xs:complexType>
-                                                    </xs:element>
-                                                </xs:choice>
-                                            </xs:sequence>
-                                        </xs:complexType>
-                                    </xs:element>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DescriptionRequest">
-        <xs:sequence>
-            <xs:element name="HPAIControlEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DescriptionResponse">
-        <xs:sequence>
-            <!-- Identical to SearchResponse -->
-            <xs:element name="DIBDeviceInfo">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="descriptionType" type="plc4x:uint8"/>
-                        <xs:element name="knxMedium" type="plc4x:uint8"/>
-                        <xs:element name="deviceStatus">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xs:sequence>
-                                        <xs:element name="reserved" type="plc4x:uint7"/>
-                                        <xs:element name="programMode" type="plc4x:bit"/>
-                                    </xs:sequence>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                        <xs:element name="knxAddress" type="knx:KnxAddress"/>
-                        <xs:element name="projectInstallationIdentifier">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xs:element name="projectNumber" type="plc4x:uint8"/>
-                                    <xs:element name="installationNumber" type="plc4x:uint8"/>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                        <xs:element name="knxNetIpDeviceSerialNumber" type="xs:hexBinary"
-                                    dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes"
-                                    dfdl:length="6"/>
-                        <xs:element name="knxNetIpDeviceMulticastAddress" type="plc4x:byte8"/>
-                        <xs:element name="knxNetIpDeviceMacAddress" type="xs:hexBinary"
-                                    dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes"
-                                    dfdl:length="6"/>
-                        <xs:element name="deviceFriendlyName" type="xs:string"
-                                    dfdl:textTrimKind="none" dfdl:alignmentUnits="bytes"
-                                    dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes"
-                                    dfdl:length="30"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-            <xs:element name="DIBSuppSvcFamilies">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="descriptionType" type="plc4x:uint8"/>
-                        <xs:element name="serviceIds">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xs:element name="serviceId" maxOccurs="unbounded">
-                                        <xs:complexType>
-                                            <xs:sequence>
-                                                <xs:element name="type" type="plc4x:uint8"/>
-                                                <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
-                                                    <xs:element dfdl:choiceBranchKey="2" name="KnxNetIpCore">
-                                                        <xs:complexType>
-                                                            <xs:sequence>
-                                                                <xs:element name="version" type="plc4x:uint8"/>
-                                                            </xs:sequence>
-                                                        </xs:complexType>
-                                                    </xs:element>
-                                                    <xs:element dfdl:choiceBranchKey="3" name="KnxNetIpDeviceManagement">
-                                                        <xs:complexType>
-                                                            <xs:sequence>
-                                                                <xs:element name="version" type="plc4x:uint8"/>
-                                                            </xs:sequence>
-                                                        </xs:complexType>
-                                                    </xs:element>
-                                                    <xs:element dfdl:choiceBranchKey="4" name="KnxNetIpTunneling">
-                                                        <xs:complexType>
-                                                            <xs:sequence>
-                                                                <xs:element name="version" type="plc4x:uint8"/>
-                                                            </xs:sequence>
-                                                        </xs:complexType>
-                                                    </xs:element>
-                                                </xs:choice>
-                                            </xs:sequence>
-                                        </xs:complexType>
-                                    </xs:element>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="ConnectionRequest">
-        <xs:sequence>
-            <xs:element name="HPAIDiscoveryEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-            <xs:element name="HPAIDataEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-            <xs:element name="ConnectionRequestInformation">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="connectionType" type="plc4x:uint8"/>
-                        <xs:element name="knxLayer" type="plc4x:uint8" />
-                        <xs:element name="reserved" type="plc4x:uint8"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="ConnectionResponse">
-        <xs:sequence>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="status" type="plc4x:uint8"/>
-            <xs:element name="HPAIDataEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-            <xs:element name="ConnectionResponseDataBlock">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="connectionType" type="plc4x:uint8"/>
-                        <xs:element name="knxAddress" type="knx:KnxAddress"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="ConnectionStateRequest">
-        <xs:sequence>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="reserved" type="plc4x:uint8"/>
-            <xs:element name="HPAIControlEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="ConnectionStateResponse">
-        <xs:sequence>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="status" type="plc4x:uint8"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DisconnectRequest">
-        <xs:sequence>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="reserved" type="plc4x:uint8"/>
-            <xs:element name="HPAIControlEndpoint">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="structureLength" type="plc4x:uint8"/>
-                        <xs:element name="hostProtocolCode" type="plc4x:uint8"/>
-                        <xs:element name="ipAddress" type="plc4x:byte8" />
-                        <xs:element name="ipPort" type="plc4x:uint16"/>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DisconnectResponse">
-        <xs:sequence>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="status" type="plc4x:uint8"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DeviceConfigurationRequest">
-        <xs:sequence>
-            <xs:element name="structureLength" type="plc4x:uint8"/>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="sequenceCounter" type="plc4x:uint8"/>
-            <xs:element name="reserved" type="plc4x:uint8"/>
-            <xs:element name="cEMI" type="knx:CEMI">
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="DeviceConfigurationResponse">
-        <xs:sequence>
-            <xs:element name="structureLength" type="plc4x:uint8"/>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="sequenceCounter" type="plc4x:uint8"/>
-            <xs:element name="status" type="plc4x:uint8"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="TunnelingRequest">
-        <xs:sequence>
-            <xs:element name="structureLength" type="plc4x:uint8"/>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="sequenceCounter" type="plc4x:uint8"/>
-            <xs:element name="reserved" type="plc4x:uint8"/>
-            <xs:element name="cEMI" type="knx:CEMI"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="TunnelingResponse">
-        <xs:sequence>
-            <xs:element name="structureLength" type="plc4x:uint8"/>
-            <xs:element name="communicationChannelId" type="plc4x:uint8"/>
-            <xs:element name="sequenceCounter" type="plc4x:uint8"/>
-            <xs:element name="status" type="plc4x:uint8"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="KnxAddress">
-        <xs:sequence>
-            <xs:element name="mainGroup" type="plc4x:uint4"/>
-            <xs:element name="middleGroup" type="plc4x:uint4"/>
-            <xs:element name="subGroup" type="plc4x:uint8"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="CEMI">
-        <xs:sequence>
-            <xs:element name="type" type="plc4x:uint8"/>
-            <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
-                <xs:element dfdl:choiceBranchKey="252" name="MPropRead">
-                    <xs:complexType>
-                        <xs:sequence>
-                            <xs:element name="interfaceObjectType" type="plc4x:uint16"/>
-                            <xs:element name="objectInstance" type="plc4x:uint8"/>
-                            <xs:element name="propertyIdentifyer" type="plc4x:uint8"/>
-                            <xs:element name="numberOfElements" type="plc4x:uint4"/>
-                            <xs:element name="startIndex" type="plc4x:uint12"/>
-                        </xs:sequence>
-                    </xs:complexType>
-                </xs:element>
-                <xs:element dfdl:choiceBranchKey="43" name="LBusmonInd">
-                    <xs:complexType>
-                        <xs:sequence>
-                            <xs:element name="additionalInformationLength" type="plc4x:uint8"/>
-                            <xs:element name="additionalInformation">
-                                <xs:complexType>
-                                    <xs:sequence>
-                                        <xs:element name="additionalInformation" maxOccurs="unbounded">
-                                            <xs:complexType>
-                                                <xs:sequence>
-                                                    <xs:element name="type" type="plc4x:uint8"/>
-                                                    <xs:choice dfdl:choiceDispatchKey="{xs:string(type)}">
-                                                        <xs:element dfdl:choiceBranchKey="3" name="BusmonitorInfo">
-                                                            <xs:complexType>
-                                                                <xs:sequence>
-                                                                    <xs:element name="length" type="plc4x:uint8"/>
-                                                                    <xs:element name="busmonitorErrorFlags">
-                                                                        <xs:complexType>
-                                                                            <xs:sequence>
-                                                                                <xs:element name="frameErrorFlag" type="plc4x:bit"/>
-                                                                                <xs:element name="bitErrorFlag" type="plc4x:bit"/>
-                                                                                <xs:element name="parityErrorFlag" type="plc4x:bit"/>
-                                                                                <xs:element name="dontCare" type="plc4x:bit"/>
-                                                                                <xs:element name="lostFlag" type="plc4x:bit"/>
-                                                                                <xs:element name="sequenceNumber" type="plc4x:uint3"/>
-                                                                            </xs:sequence>
-                                                                        </xs:complexType>
-                                                                    </xs:element>
-                                                                </xs:sequence>
-                                                            </xs:complexType>
-                                                        </xs:element>
-                                                        <xs:element dfdl:choiceBranchKey="4" name="RelativeTimestamp">
-                                                            <xs:complexType>
-                                                                <xs:sequence>
-                                                                    <xs:element name="length" type="plc4x:uint8"/>
-                                                                    <xs:element name="relativeTimestamp" type="plc4x:uint16"/>
-                                                                </xs:sequence>
-                                                            </xs:complexType>
-                                                        </xs:element>
-                                                    </xs:choice>
-                                                </xs:sequence>
-                                            </xs:complexType>
-                                        </xs:element>
-                                    </xs:sequence>
-                                </xs:complexType>
-                            </xs:element>
-                            <xs:element name="rawFrame" type="xs:hexBinary"
-                                        dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
-                                        dfdl:length="{../../../../header/totalLength - (12 + ../additionalInformationLength)}"/>
-                        </xs:sequence>
-                    </xs:complexType>
-                </xs:element>
-            </xs:choice>
-        </xs:sequence>
-    </xs:complexType>
-
-</xs:schema>
\ No newline at end of file
diff --git a/protocols/knxnet-ip/src/main/resources/org/apache/plc4x/protocols/knxnetip/protocol.scxml.xml b/protocols/knxnet-ip/src/main/resources/org/apache/plc4x/protocols/knxnetip/protocol.scxml.xml
deleted file mode 100644
index 2b53ae7..0000000
--- a/protocols/knxnet-ip/src/main/resources/org/apache/plc4x/protocols/knxnetip/protocol.scxml.xml
+++ /dev/null
@@ -1,253 +0,0 @@
-<!--
-  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.
-  -->
-<sc:scxml version="1.0"
-          xmlns:plc4x="https://plc4x.apache.org/scxml-extension"
-          xmlns:sc="http://www.w3.org/2005/07/scxml"
-          xmlns:knx="http://plc4x.apache.org/knxnet-ip"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          initial="init"
-          datamodel="jexl"
-          xsi:schemaLocation="http://www.w3.org/2005/07/scxml http://www.w3.org/2011/04/SCXML/scxml.xsd">
-
-  <!-- Define all the variables we're going to use -->
-  <sc:datamodel>
-    <sc:data id="protocolDaffodilSchema"/>
-    <sc:data id="clientIpAddress"/>
-    <sc:data id="clientUdpPort"/>
-    <sc:data id="clientKnxAddress"/>
-    <sc:data id="serverIpAddress"/>
-    <sc:data id="serverPort"/>
-    <sc:data id="serverKnxAddress"/>
-    <sc:data id="serverName"/>
-
-    <!-- Data container for processing requests -->
-    <sc:data id="container"/>
-  </sc:datamodel>
-
-  <!--
-    Setup the initial state ... this usually just initializes the Daffodil subsystem.
-  -->
-  <sc:state id="init">
-    <sc:onentry>
-      <plc4x:initContext protocolDaffodilSchemaName="protocolDaffodilSchema"/>
-    </sc:onentry>
-    <sc:transition event="success" target="connect">
-      <sc:assign location="args" expr="_event.data"/>
-    </sc:transition>
-  </sc:state>
-
-  <!--
-    Sub-Statemachine handling the connection establishment.
-  -->
-  <sc:state id="connect">
-    <sc:initial>
-      <sc:transition target="establishNetworkConnection"/>
-    </sc:initial>
-
-    <!-- This step establishes the physical connection to the remote -->
-    <sc:state id="establishNetworkConnection">
-      <sc:onentry>
-        <!-- Initialize the network connection to the remote host using the tcp adapter with a given host and port -->
-        <plc4x:connect type="udp" host="224.0.23.12" port="3671"/>
-      </sc:onentry>
-      <sc:transition event="success" target="sendSearchRequest"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <sc:state id="sendSearchRequest">
-      <sc:onentry>
-        <plc4x:send>
-          <knx:KNXNetIPMessage>
-            <header>
-              <headerLength>6</headerLength>
-              <protocolVersion>16</protocolVersion>
-              <serviceTypeIdentifier>513</serviceTypeIdentifier>
-              <totalLength>14</totalLength>
-            </header>
-            <SearchRequest>
-              <HPAIDiscoveryEndpoint>
-                <structureLength>8</structureLength>
-                <hostProtocolCode>1</hostProtocolCode>
-                <ipAddress>${clientIpAddress}</ipAddress>
-                <ipPort>${clientUdpPort}</ipPort>
-              </HPAIDiscoveryEndpoint>
-            </SearchRequest>
-          </knx:KNXNetIPMessage>
-        </plc4x:send>
-      </sc:onentry>
-      <sc:transition event="success" target="receiveSearchResponse"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <sc:state id="receiveSearchResponse">
-      <plc4x:receiveExtractVerify timeout="5000" packetLengthStartPosition="4" packetLengthSizeInBytes="2">
-        <extraction name="serverIpAddress" xpath-expression=""/>
-        <extraction name="serverPort" xpath-expression=""/>
-        <extraction name="serverKnxAddress" xpath-expression=""/>
-        <extraction name="serverName" xpath-expression=""/>
-      </plc4x:receiveExtractVerify>
-      <sc:transition event="success" target="sendConnectionRequest"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <!--sc:state id="sendDescriptionRequest">
-      <sc:onentry>
-        <plc4x:send>
-          <knx:KNXNetIPMessage>
-            <header>
-              <headerLength>6</headerLength>
-              <protocolVersion>16</protocolVersion>
-              <serviceTypeIdentifier>515</serviceTypeIdentifier>
-              <totalLength>14</totalLength>
-            </header>
-            <DescriptionRequest>
-              <HPAIControlEndpoint>
-                <structureLength>8</structureLength>
-                <hostProtocolCode>1</hostProtocolCode>
-                <ipAddress>00000000</ipAddress>
-                <ipPort>0</ipPort>
-              </HPAIControlEndpoint>
-            </DescriptionRequest>
-          </knx:KNXNetIPMessage>
-        </plc4x:send>
-      </sc:onentry>
-      <sc:transition event="success" target="receiveDescriptionResponse"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <sc:state id="receiveDescriptionResponse">
-      <plc4x:receiveExtractVerify timeout="5000" packetLengthStartPosition="4" packetLengthSizeInBytes="2">
-        <extraction name="clientKnxAddress" xpath-expression=""/>
-      </plc4x:receiveExtractVerify>
-      <sc:transition event="success" target="sendConnectionRequest"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state-->
-
-    <sc:state id="sendConnectionRequest">
-      <sc:onentry>
-        <plc4x:send>
-          <knx:KNXNetIPMessage>
-            <header>
-              <headerLength>6</headerLength>
-              <protocolVersion>16</protocolVersion>
-              <serviceTypeIdentifier>517</serviceTypeIdentifier>
-              <totalLength>26</totalLength>
-            </header>
-            <ConnectionRequest>
-              <HPAIDiscoveryEndpoint>
-                <structureLength>8</structureLength>
-                <hostProtocolCode>1</hostProtocolCode>
-                <ipAddress>${clientIpAddress}</ipAddress>
-                <ipPort>${clientUdpPort}</ipPort>
-              </HPAIDiscoveryEndpoint>
-              <HPAIDataEndpoint>
-                <structureLength>8</structureLength>
-                <hostProtocolCode>1</hostProtocolCode>
-                <ipAddress>${clientIpAddress}</ipAddress>
-                <ipPort>${clientUdpPort}</ipPort>
-              </HPAIDataEndpoint>
-              <ConnectionRequestInformation>
-                <structureLength>4</structureLength>
-                <connectionType>4</connectionType>
-                <knxLayer>2</knxLayer>
-                <reserved>0</reserved>
-              </ConnectionRequestInformation>
-            </ConnectionRequest>
-          </knx:KNXNetIPMessage>
-        </plc4x:send>
-      </sc:onentry>
-      <sc:transition event="success" target="receiveConnectionResponse"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <sc:state id="receiveConnectionResponse">
-      <plc4x:receiveExtractVerify timeout="5000" packetLengthStartPosition="4" packetLengthSizeInBytes="2">
-        <verification value="0" xpath-expression=""/>
-        <extraction name="communicationChanelId" xpath-expression=""/>
-        <extraction name="clientKnxAddress" xpath-expression=""/>
-      </plc4x:receiveExtractVerify>
-      <sc:transition event="success" target="sendConnectionStateRequest"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <sc:state id="sendConnectionStateRequest">
-      <sc:onentry>
-        <plc4x:send>
-          <knx:KNXNetIPMessage>
-          </knx:KNXNetIPMessage>
-        </plc4x:send>
-      </sc:onentry>
-      <sc:transition event="success" target="receiveConnectionStateRequest"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <sc:state id="receiveConnectionStateRequest">
-      <sc:transition event="success" target="connected"/>
-      <sc:transition event="failure" target="error"/>
-      <sc:transition event="disconnect" target="disconnect"/>
-    </sc:state>
-
-    <!--
-      Default state after connecting to a PLC.
-    -->
-    <sc:state id="connected">
-      <!--sc:transition event="read" target="sendS7ReadRequest">
-        <sc:assign location="container" expr="_event.data"/>
-      </sc:transition>
-      <sc:transition event="write" target="sendS7WriteRequest">
-        <sc:assign location="container" expr="_event.data"/>
-      </sc:transition>
-      <sc:transition event="disconnect" target="disconnect"/-->
-    </sc:state>
-
-    <!--
-      Initiate disconnecting.
-    -->
-    <sc:state id="disconnect">
-      <sc:transition event="disconnect" target="disconnected"/>
-    </sc:state>
-
-    <!--
-      Final state of this state-machine, after any of the parties disconnected.
-    -->
-    <sc:final id="disconnected">
-      <sc:onentry>
-        <sc:log expr="'Disconnected'"/>
-      </sc:onentry>
-    </sc:final>
-
-    <!--
-      Error state in case of any form of error during the processing of data.
-    -->
-    <sc:final id="error">
-      <sc:onentry>
-        <sc:log expr="'Error'"/>
-      </sc:onentry>
-    </sc:final>
-  </sc:state>
-
-</sc:scxml>
\ No newline at end of file
diff --git a/protocols/knxnet-ip/src/test/java/org/apache/plc4x/protocols/knxnetip/ProtocolTest.java b/protocols/knxnet-ip/src/test/java/org/apache/plc4x/protocols/knxnetip/ProtocolTest.java
deleted file mode 100644
index 47f9b81..0000000
--- a/protocols/knxnet-ip/src/test/java/org/apache/plc4x/protocols/knxnetip/ProtocolTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- 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.protocols.knxnetip;
-
-import org.apache.plc4x.protocols.AbstractProtocolTest;
-
-/**
- * Executes all tests for the ISO on TCP / TPKT protocol.
- */
-public class ProtocolTest extends AbstractProtocolTest {
-
-    public ProtocolTest() {
-        super("org/apache/plc4x/protocols/knxnetip/protocol.tdml");
-    }
-
-}
diff --git a/protocols/knxnet-ip/pom.xml b/protocols/knxnetip/pom.xml
similarity index 74%
rename from protocols/knxnet-ip/pom.xml
rename to protocols/knxnetip/pom.xml
index a02e4b9..4aab3a8 100644
--- a/protocols/knxnet-ip/pom.xml
+++ b/protocols/knxnetip/pom.xml
@@ -29,25 +29,17 @@
     <version>0.5.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4x-protocols-knxnet-ip</artifactId>
+  <artifactId>plc4x-protocols-knxnetip</artifactId>
 
-  <name>Protocols: KNXNet-IP</name>
-  <description>Base protocol specifications for the KNX Net-IP protocol</description>
+  <name>Protocols: KNXNet/IP</name>
+  <description>Base protocol specifications for the KNXNet/IP protocol</description>
 
   <dependencies>
-    <!-- Import the base types -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4x-protocols-plc4x</artifactId>
+      <artifactId>plc4x-build-utils-protocol-base-mspec</artifactId>
       <version>0.5.0-SNAPSHOT</version>
     </dependency>
-
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4x-protocols-test-utils</artifactId>
-      <version>0.5.0-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java b/protocols/knxnetip/src/main/java/org/apache/plc4x/protocol/knxnetip/KnxNetIpProtocol.java
similarity index 86%
copy from protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java
copy to protocols/knxnetip/src/main/java/org/apache/plc4x/protocol/knxnetip/KnxNetIpProtocol.java
index 96b3a31..89249ec 100644
--- a/protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java
+++ b/protocols/knxnetip/src/main/java/org/apache/plc4x/protocol/knxnetip/KnxNetIpProtocol.java
@@ -17,7 +17,7 @@
  under the License.
  */
 
-package org.apache.plc4x.protocol.s7;
+package org.apache.plc4x.protocol.knxnetip;
 
 import org.apache.plc4x.plugins.codegenerator.language.mspec.parser.MessageFormatParser;
 import org.apache.plc4x.plugins.codegenerator.protocol.Protocol;
@@ -27,16 +27,16 @@ import org.apache.plc4x.plugins.codegenerator.types.exceptions.GenerationExcepti
 import java.io.InputStream;
 import java.util.Map;
 
-public class S7Protocol implements Protocol {
+public class KnxNetIpProtocol implements Protocol {
 
     @Override
     public String getName() {
-        return "s7";
+        return "knxnetip";
     }
 
     @Override
     public Map<String, ComplexTypeDefinition> getTypeDefinitions() throws GenerationException {
-        InputStream schemaInputStream = S7Protocol.class.getResourceAsStream("/protocols/s7/protocol.spec");
+        InputStream schemaInputStream = KnxNetIpProtocol.class.getResourceAsStream("/protocols/knxnetip/knxnetip.mspec");
         if(schemaInputStream == null) {
             throw new GenerationException("Error loading message-format schema for protocol '" + getName() + "'");
         }
diff --git a/protocols/knxnetip/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol b/protocols/knxnetip/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
new file mode 100644
index 0000000..86b7da4
--- /dev/null
+++ b/protocols/knxnetip/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.knxnetip.KnxNetIpProtocol
\ No newline at end of file
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
new file mode 100644
index 0000000..adb5a4d
--- /dev/null
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -0,0 +1,190 @@
+//
+// 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.
+//
+
+[discriminatedType 'KNXNetIPMessage'
+    [implicit      uint 8  'headerLength' 'lengthInBytes']
+    [const         uint 8  'protocolVersion' '0x0A']
+    [discriminator uint 16 'msgType']
+    [implicit      uint 16 'totalLength' 'lengthInBytes']
+    [typeSwitch 'msgType'
+        ['0x0201' SearchRequest
+            [field HPAIDiscoveryEndpoint 'hPAIDiscoveryEndpoint']
+        ]
+        ['0x0202' SearchResponse
+            [field HPAIControlEndpoint 'hPAIControlEndpoint']
+            [field DIBDeviceInfo       'dIBDeviceInfo']
+            [field DIBSuppSvcFamilies  'dIBSuppSvcFamilies']
+        ]
+        ['0x0203' DescriptionRequest
+            [field HPAIControlEndpoint 'hPAIControlEndpoint']
+        ]
+        ['0x0204' DescriptionResponse
+            [field DIBDeviceInfo       'dIBDeviceInfo']
+            [field DIBSuppSvcFamilies  'dIBSuppSvcFamilies']
+        ]
+        ['0x0205' ConnectionRequest
+            [field HPAIDiscoveryEndpoint        'hPAIDiscoveryEndpoint']
+            [field HPAIDataEndpoint             'hPAIDataEndpoint']
+            [field ConnectionRequestInformation 'connectionRequestInformation']
+        ]
+        ['0x0206' ConnectionResponse
+            [field uint 8 'communicationChannelId']
+            [field uint 8 'status']
+            [field HPAIDataEndpoint            'hPAIDataEndpoint']
+            [field ConnectionResponseDataBlock 'connectionResponseDataBlock']
+        ]
+        ['0x0207' ConnectionStateRequest
+            [field    uint 8 'communicationChannelId']
+            [reserved uint 8 '0x00']
+            [field HPAIControlEndpoint 'hPAIControlEndpoint']
+        ]
+        ['0x0208' ConnectionStateResponse
+            [field uint 8 'communicationChannelId']
+            [field uint 8 'status']
+        ]
+        ['0x0209' DisconnectRequest
+            [field    uint 8 'communicationChannelId']
+            [reserved uint 8 '0x00']
+            [field HPAIControlEndpoint 'hPAIControlEndpoint']
+        ]
+        ['0x020A' DisconnectResponse
+            [field uint 8 'communicationChannelId']
+            [field uint 8 'status']
+        ]
+        ['0x0310' DeviceConfigurationRequest
+            [implicit uint 8 'structureLength' 'lengthInBytes']
+            [field    uint 8 'communicationChannelId']
+            [field    uint 8 'sequenceCounter']
+            [reserved uint 8 '0x00']
+            [field    CEMI 'cEMI']
+        ]
+        ['0x0311' DeviceConfigurationResponse
+            [implicit uint 8 'structureLength' 'lengthInBytes']
+            [field    uint 8 'communicationChannelId']
+            [field    uint 8 'sequenceCounter']
+            [field    uint 8 'status']
+        ]
+        ['0x0420' TunnelingRequest
+            [implicit uint 8 'structureLength' 'lengthInBytes']
+            [field    uint 8 'communicationChannelId']
+            [field    uint 8 'sequenceCounter']
+            [reserved uint 8 '0x00']
+            [field    CEMI 'cEMI']
+        ]
+        ['0x0421' TunnelingResponse
+            [implicit uint 8 'structureLength' 'lengthInBytes']
+            [field    uint 8 'communicationChannelId']
+            [field    uint 8 'sequenceCounter']
+            [field    uint 8 'status']
+        ]
+    ]
+]
+
+[type 'HPAIDiscoveryEndpoint'
+    [implicit uint 8    'structureLength' 'lengthInBytes']
+    [field    uint 8    'hostProtocolCode']
+    [field    IPAddress 'ipAddress']
+    [field    uint 16   'ipPort']
+]
+
+[type 'HPAIControlEndpoint'
+    [implicit uint 8    'structureLength' 'lengthInBytes']
+    [field    uint 8    'hostProtocolCode']
+    [field    IPAddress 'ipAddress']
+    [field    uint 16   'ipPort']
+]
+
+[type 'DIBDeviceInfo'
+    [implicit   uint 8       'structureLength' 'lengthInBytes']
+    [field      uint 8       'descriptionType']
+    [field      uint 8       'knxMedium']
+    [field      DeviceStatus 'deviceStatus']
+    [field      KNXAddress   'knxAddress']
+    [field      ProjectInstallationIdentifier 'projectInstallationIdentifier']
+    [arrayField uint 8 'knxNetIpDeviceSerialNumber' count '6']
+    [field      uint 8       'knxNetIpDeviceMulticastAddress']
+    [arrayField uint 8 'knxNetIpDeviceMacAddress'   count '6']
+    [arrayField uint 8 'deviceFriendlyName'         count '30']
+]
+
+[type 'DIBSuppSvcFamilies'
+    [implicit   uint 8       'structureLength' 'lengthInBytes']
+    [field      uint 8       'descriptionType']
+    [arrayField ServiceId    'serviceIds' length '3']
+]
+
+[type 'HPAIDataEndpoint'
+    [implicit uint 8    'structureLength' 'lengthInBytes']
+    [field    uint 8    'hostProtocolCode']
+    [field    IPAddress 'ipAddress']
+    [field    uint 16   'ipPort']
+]
+
+[type 'ConnectionRequestInformation'
+    [implicit uint 8    'structureLength' 'lengthInBytes']
+    [field    uint 8    'connectionType']
+    [field    uint 8    'knxLayer']
+    [reserved uint 8    '0x00']
+]
+
+[type 'ConnectionResponseDataBlock'
+    [implicit uint 8     'structureLength' 'lengthInBytes']
+    [field    uint 8     'connectionType']
+    [field    KNXAddress 'knxAddress']
+]
+
+[type 'IPAddress'
+    [arrayField uint 8 'addr' count '4']
+]
+
+[type 'KNXAddress'
+    [field uint 4 'mainGroup']
+    [field uint 4 'middleGroup']
+    [field uint 8 'subGroup']
+]
+
+[type 'DeviceStatus'
+    [reserved uint 7 '0x00']
+    [field    bit  1 'programMode']
+]
+
+[type 'ProjectInstallationIdentifier'
+    [field uint 8 'projectNumber']
+    [field uint 8 'installationNumber']
+]
+
+[discriminatedType 'ServiceId'
+    [discriminator uint 8 'serviceType']
+    [typeSwitch 'serviceType'
+        ['0x02' KnxNetIpCore
+            [field uint 8 'version']
+        ]
+        ['0x03' KnxNetIpDeviceManagement
+            [field uint 8 'version']
+        ]
+        ['0x04' KnxNetIpTunneling
+            [field uint 8 'version']
+        ]
+    ]
+]
+
+[type 'CEMI'
+    [field uint 8 'test']
+]
+
diff --git a/protocols/knxnet-ip/src/site/asciidoc/index.adoc b/protocols/knxnetip/src/site/asciidoc/index.adoc
similarity index 100%
rename from protocols/knxnet-ip/src/site/asciidoc/index.adoc
rename to protocols/knxnetip/src/site/asciidoc/index.adoc
diff --git a/protocols/knxnet-ip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml b/protocols/knxnetip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml
similarity index 100%
rename from protocols/knxnet-ip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml
rename to protocols/knxnetip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml
diff --git a/protocols/plc4x/pom.xml b/protocols/plc4x/pom.xml
deleted file mode 100644
index 9e95eb2..0000000
--- a/protocols/plc4x/pom.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.5.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>plc4x-protocols-plc4x</artifactId>
-
-  <name>Protocols: PLC4X</name>
-  <description>Base protocol specifications for any form of PLC4X driver</description>
-
-</project>
\ No newline at end of file
diff --git a/protocols/plc4x/src/main/resources/daffodil-built-in-catalog.xml b/protocols/plc4x/src/main/resources/daffodil-built-in-catalog.xml
deleted file mode 100644
index 4ac9f77..0000000
--- a/protocols/plc4x/src/main/resources/daffodil-built-in-catalog.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
-  -->
-<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
-
-  <uri name="http://plc4x.apache.org/plc4x"
-       uri="org/apache/plc4x/protocols/protocol.dfdl.xsd"/>
-
-</catalog>
\ No newline at end of file
diff --git a/protocols/plc4x/src/main/resources/org/apache/plc4x/protocols/protocol.dfdl.xsd b/protocols/plc4x/src/main/resources/org/apache/plc4x/protocols/protocol.dfdl.xsd
deleted file mode 100644
index 7cf31f4..0000000
--- a/protocols/plc4x/src/main/resources/org/apache/plc4x/protocols/protocol.dfdl.xsd
+++ /dev/null
@@ -1,129 +0,0 @@
-<!--
-  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.
-  -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-           xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
-           xmlns:plc4x="http://plc4x.apache.org/plc4x"
-           targetNamespace="http://plc4x.apache.org/plc4x">
-
-    <!--
-
-        Simple type definition.
-
-        These are the types language adapters must provide mappings for.
-
-    -->
-
-    <xs:simpleType name="null" dfdl:lengthUnits="bytes" dfdl:length="0" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:hexBinary"/>
-    </xs:simpleType>
-
-
-
-    <xs:simpleType name="bit" dfdl:lengthUnits="bits" dfdl:length="1" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:boolean"/>
-    </xs:simpleType>
-
-
-
-    <!--
-        UINT values are always referenced with 'bit' lengths
-    -->
-    <xs:simpleType name="uint8" dfdl:lengthUnits="bits" dfdl:length="8" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:unsignedByte"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="uint16" dfdl:lengthUnits="bits" dfdl:length="16" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:unsignedShort"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="uint32" dfdl:lengthUnits="bits" dfdl:length="32" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:unsignedInt"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="uint64" dfdl:lengthUnits="bits" dfdl:length="64" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:unsignedLong"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="uintN" dfdl:lengthUnits="bits" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:unsignedLong"/>
-    </xs:simpleType>
-
-
-
-    <!--
-        INT values are always referenced with 'bit' lengths
-    -->
-    <xs:simpleType name="int8" dfdl:lengthUnits="bits" dfdl:length="8" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:byte"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="int16" dfdl:lengthUnits="bits" dfdl:length="16" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:short"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="int32" dfdl:lengthUnits="bits" dfdl:length="32" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:int"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="int64" dfdl:lengthUnits="bits" dfdl:length="64" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:long"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="intN" dfdl:lengthUnits="bits" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:long"/>
-    </xs:simpleType>
-
-
-
-    <!--
-        BYTE values are always referenced with 'byte' lengths because
-        it doesn't make sense to read part of a byte as hex value.
-    -->
-    <xs:simpleType name="byte8" dfdl:lengthUnits="bytes" dfdl:length="1" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:hexBinary"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="byte16" dfdl:lengthUnits="bytes" dfdl:length="2" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:hexBinary"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="byte32" dfdl:lengthUnits="bytes" dfdl:length="3" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:hexBinary"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="byte64" dfdl:lengthUnits="bytes" dfdl:length="4" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:hexBinary"/>
-    </xs:simpleType>
-
-    <xs:simpleType name="byteN" dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit">
-        <xs:restriction base="xs:hexBinary"/>
-    </xs:simpleType>
-
-
-
-    <!--
-        STRING values are always referenced with 'byte' lengths because
-        it doesn't make sense to read part of a string character.
-    -->
-    <xs:simpleType name="stringN" dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
-                   dfdl:textTrimKind="none" dfdl:alignmentUnits="bytes">
-        <xs:restriction base="xs:string"/>
-    </xs:simpleType>
-
-</xs:schema>
\ No newline at end of file
diff --git a/protocols/pom.xml b/protocols/pom.xml
index 8216520..8bf4c9c 100644
--- a/protocols/pom.xml
+++ b/protocols/pom.xml
@@ -190,15 +190,8 @@
   </build>
 
   <modules>
-    <!-- Base definitions of the simple types used by all drivers -->
-    <module>plc4x</module>
-
-    <!-- DFDL and SCXML based protocols -->
-    <module>knxnet-ip</module>
+    <module>knxnetip</module>
     <module>s7</module>
-
-    <!-- Stuff for testing -->
-    <module>test-utils</module>
   </modules>
 
   <profiles>
diff --git a/protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java b/protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java
index 96b3a31..c8d576c 100644
--- a/protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java
+++ b/protocols/s7/src/main/java/org/apache/plc4x/protocol/s7/S7Protocol.java
@@ -36,7 +36,7 @@ public class S7Protocol implements Protocol {
 
     @Override
     public Map<String, ComplexTypeDefinition> getTypeDefinitions() throws GenerationException {
-        InputStream schemaInputStream = S7Protocol.class.getResourceAsStream("/protocols/s7/protocol.spec");
+        InputStream schemaInputStream = S7Protocol.class.getResourceAsStream("/protocols/s7/protocol.mspec");
         if(schemaInputStream == null) {
             throw new GenerationException("Error loading message-format schema for protocol '" + getName() + "'");
         }
diff --git a/protocols/s7/src/main/resources/protocols/s7/protocol.spec b/protocols/s7/src/main/resources/protocols/s7/protocol.mspec
similarity index 100%
rename from protocols/s7/src/main/resources/protocols/s7/protocol.spec
rename to protocols/s7/src/main/resources/protocols/s7/protocol.mspec
diff --git a/protocols/test-utils/pom.xml b/protocols/test-utils/pom.xml
deleted file mode 100644
index 9909b49..0000000
--- a/protocols/test-utils/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?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.5.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>plc4x-protocols-test-utils</artifactId>
-
-  <name>Protocols: Test-Utils</name>
-  <description>Test utils for protocols</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.daffodil</groupId>
-      <artifactId>daffodil-tdml-lib_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.daffodil</groupId>
-      <artifactId>daffodil-lib_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.daffodil</groupId>
-      <artifactId>daffodil-japi_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.daffodil</groupId>
-      <artifactId>daffodil-tdml-processor_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.scala-lang</groupId>
-      <artifactId>scala-library</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.junit.jupiter</groupId>
-      <artifactId>junit-jupiter-api</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.apache.daffodil:daffodil-tdml-processor_2.12</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
\ No newline at end of file
diff --git a/protocols/test-utils/src/main/java/org/apache/plc4x/protocols/AbstractProtocolTest.java b/protocols/test-utils/src/main/java/org/apache/plc4x/protocols/AbstractProtocolTest.java
deleted file mode 100644
index e7911d3..0000000
--- a/protocols/test-utils/src/main/java/org/apache/plc4x/protocols/AbstractProtocolTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- 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.protocols;
-
-import org.apache.daffodil.tdml.DFDLTestSuite;
-import org.apache.daffodil.tdml.Runner;
-import org.apache.daffodil.util.Misc;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
-import scala.collection.Iterator;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public abstract class AbstractProtocolTest {
-
-    private final String testsuiteName;
-
-    public AbstractProtocolTest(String testsuiteName) {
-        System.out.println("Initializing Testsuite:");
-        System.out.println(testsuiteName);
-        this.testsuiteName = testsuiteName;
-    }
-
-    //@TestFactory
-    public List<DynamicTest> getTestsuiteTests() {
-        DFDLTestSuite testSuite = new DFDLTestSuite(Misc.getRequiredResource(testsuiteName), true, true, false,
-            Runner.defaultRoundTripDefaultDefault(),
-            Runner.defaultValidationDefaultDefault(),
-            Runner.defaultImplementationsDefaultDefault(),
-            Runner.defaultShouldDoErrorComparisonOnCrossTests(),
-            Runner.defaultShouldDoWarningComparisonOnCrossTests());
-        List<DynamicTest> dynamicTests = new LinkedList<>();
-        Iterator<String> iterator = testSuite.testCaseMap().keySet().iterator();
-        while (iterator.hasNext()) {
-            String testcaseName = iterator.next();
-            String testcaseLabel = testSuite.suiteName() + ": " + testcaseName;
-            DynamicTest test = DynamicTest.dynamicTest(testcaseLabel, () ->
-                testSuite.runOneTest(testcaseName, scala.Option.apply(null), false)
-            );
-            dynamicTests.add(test);
-        }
-        System.out.println("Found " + dynamicTests.size() + " tests");
-        return dynamicTests;
-    }
-
-}
diff --git a/sandbox/code-gen/pom.xml b/sandbox/code-gen/pom.xml
index dc3d1ae..5928747 100644
--- a/sandbox/code-gen/pom.xml
+++ b/sandbox/code-gen/pom.xml
@@ -20,14 +20,18 @@
 <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>
     <artifactId>plc4x-sandbox</artifactId>
     <groupId>org.apache.plc4x.sandbox</groupId>
     <version>0.5.0-SNAPSHOT</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <artifactId>code-gen</artifactId>
+
+  <name>Sandbox: Code-Gen</name>
+
   <dependencies>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/sandbox/pom.xml b/sandbox/pom.xml
index 5ae2fdf..12df32c 100644
--- a/sandbox/pom.xml
+++ b/sandbox/pom.xml
@@ -36,24 +36,8 @@
 
   <modules>
     <module>code-gen</module>
+    <module>test-java-knxnetip-driver</module>
     <module>test-java-s7-driver</module>
   </modules>
 
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-scxml2</artifactId>
-        <!-- Materialized version -->
-        <version>2.0-20190516.183044-86</version>
-        <exclusions>
-          <exclusion>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
 </project>
\ No newline at end of file
diff --git a/sandbox/test-java-s7-driver/pom.xml b/sandbox/test-java-knxnetip-driver/pom.xml
similarity index 92%
copy from sandbox/test-java-s7-driver/pom.xml
copy to sandbox/test-java-knxnetip-driver/pom.xml
index 924baf1..8d9e15e 100644
--- a/sandbox/test-java-s7-driver/pom.xml
+++ b/sandbox/test-java-knxnetip-driver/pom.xml
@@ -28,9 +28,9 @@
     <version>0.5.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>test-java-s7-driver</artifactId>
+  <artifactId>test-java-knxnetip-driver</artifactId>
 
-  <name>Sandbox: Test GenerateMojo</name>
+  <name>Sandbox: Test Generated KNXNet/IP Driver</name>
 
   <build>
     <plugins>
@@ -45,7 +45,7 @@
               <goal>generate-driver</goal>
             </goals>
             <configuration>
-              <protocolName>s7</protocolName>
+              <protocolName>knxnetip</protocolName>
               <languageName>java</languageName>
             </configuration>
           </execution>
@@ -77,7 +77,7 @@
 
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4x-protocols-s7</artifactId>
+      <artifactId>plc4x-protocols-knxnetip</artifactId>
       <version>0.5.0-SNAPSHOT</version>
       <!-- Scope is 'provided' as this way it's not shipped with the driver -->
       <scope>provided</scope>
diff --git a/sandbox/test-java-s7-driver/pom.xml b/sandbox/test-java-s7-driver/pom.xml
index 924baf1..66c5a71 100644
--- a/sandbox/test-java-s7-driver/pom.xml
+++ b/sandbox/test-java-s7-driver/pom.xml
@@ -30,7 +30,7 @@
 
   <artifactId>test-java-s7-driver</artifactId>
 
-  <name>Sandbox: Test GenerateMojo</name>
+  <name>Sandbox: Test Generated S7 Driver</name>
 
   <build>
     <plugins>