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 2021/01/23 12:07:53 UTC

[plc4x] branch feature/native_opua_client updated (11b9d51 -> d8e54a0)

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

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


    from 11b9d51  Add Certificategenerator and connection string param for Security
     add 7bd2c16  - Increased the type for the auto-generated enums to avoid overflow errors
     add cc4f0c7  - Implemented a first version of a KNX auto-discovery
     add 8fb992f  - Refactored the structure of the "internal" part of plc4go to match the structure of the API - Fixed an issue in the go code generation adding a pointer access where it caused problems compiling
     add 1df8f4d  - Implemented a Browse API implementation which scans the KNX bus for KNX devices - Fine-tuned the SPI
     add ad382db  - Fixed the problem with the KNX Ping operation.
     add 380b471  - Made the existing API safe against problems related to result-channels not being requested - Removed some debug output - Finished implementing the Browse functionality so it actually returns something instead of just printing it on the console
     add 5d9f8ac  - Added the "CanBrowse" to the connection metadata
     add 4a8c91a  - Implemented a first mostly working version of active property reading in KNX
     add 392c2b5  - Updated the XSLT to create more detailed Enums out of the KNX master data.
     add 628898e  - Explicitly added two factory methods to the enum generation in go "ByName" and "ByValue"
     add c0bbc1d  - Adjusted the Java KNX client to the latest changes in code-generation.
     add 2d00ab4  - Commented ut the last line in that adapter.
     add 802c088  - Commented ut the last line in that adapter.
     add b14d524  - Fixed some commented out code.
     add a5321b9  - Implemented the logic to decode properties.
     add 3ea8e6c  PLC4X-270 Ads driver does not accept double-digit array indexes
     add da4eeb4  Add future to DisconnectedEvent
     add f729ca6  Merge branch 'develop' into bug/close_connection
     add ba961c5  Tidied up disconnect logic
     add 8bf6c45  Added some logging
     add f19ca3f  Merge pull request #221 from apache/bug/close_connection
     add 747868a  Add confluent package to deployment so it appears in Nexus.
     add dc88603  Merge pull request #222 from apache/add_confluent_package_nexus
     add 56bae6f  - Added the missing drivers
     add da43590  - Try to fix the deployment issue.
     add eead488  Updated Notice and License files.
     add d1231c5  Merge pull request #223 from apache/update_notice_file
     add 2733964  - Added the extensions to the LICENSE and NOTICE files which maven will generate in the Kafka connector archives
     add d66c60d  - Minor updates (Generally the order of imports so a reformat doesn't change the files too much)
     add 3ce506f  - Minor updates (Generally the order of imports so a reformat doesn't change the files too much)
     add 6d8f73f  PLC4X-272 When splitting up large requests, too big sub-requests are generated (S7) - When splitting up into more than one request, the new request was correctly initialized with the empty-request size, however the current element wasn't added. This should now be fixed
     add aa172ac  Add Encryption handler for opcua server
     add cb1f190  Re-Wrote OPC UA server -> Milo Interface
     add 184fafb  Finialized OPCUA server and updated Kafka connector
     add cca4a9f  Updated based on Ottos and Matthias' comments.
     add 3101ec1  Merge pull request #225 from apache/add_encryption_handler_opcua
     add e1560ad  - Made the Reader detect the case of a property not existing or not having the permission to read.
     add b5ed562  - Fixed some package errors
     add 7919d5d  - Adjusted the "TestKnxNetIpPlc4goDiscovery" test to work with the updated Browse functionality.
     add c87455a  - Made the Udp and Tcp transport not log an error in GetNumReadableBytes
     add 0baecae  - Removed an unneeded log output
     new a6e41a9  Merge branch 'develop' into feature/native_opua_client
     new d8e54a0  Cleaned up parameter parsing and key store generator.

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.


Summary of changes:
 LICENSE                                            |    1 +
 NOTICE                                             |    5 +-
 RELEASE_NOTES                                      |    2 +
 .../language/go/GoLanguageTemplateHelper.java      |   25 +-
 .../main/resources/templates/go/enum-template.ftlh |   16 +-
 .../templates/go/parser-factory-template.ftlh      |    2 +-
 plc4go/cmd/main/drivers/bacnetip_test.go           |    2 +-
 plc4go/cmd/main/drivers/knxnetip_test.go           |  433 +-
 plc4go/cmd/main/drivers/modbus_test.go             |    8 +-
 plc4go/cmd/main/drivers/s7_test.go                 |    2 +-
 .../cmd/main/drivers/tests/knx_discovery_test.go   | 1224 ++--
 .../cmd/main/drivers/tests/modbus_driver_test.go   |    2 +-
 .../drivers/tests/modbus_parser_serializer_test.go |    2 +-
 plc4go/go.sum                                      |    1 +
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |    4 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |    4 +-
 .../readwrite/model/APDUConfirmedRequest.go        |    4 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |    4 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |    4 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |    4 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |    4 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |    4 +-
 .../bacnetip/readwrite/model/ApplicationTag.go     |   38 +-
 .../bacnetip/readwrite/model/BACnetAddress.go      |    2 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |    2 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |    2 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |    2 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |    2 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |    2 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |    2 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |    2 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |    2 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |    2 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |    2 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |    2 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |    2 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |    2 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |    2 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |    2 +-
 .../model/BACnetConfirmedServiceRequest.go         |    2 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |    2 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |    2 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |    2 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |    2 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |    2 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |    2 +-
 ...rmedServiceRequestConfirmedEventNotification.go |    2 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |    2 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |    2 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |    2 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |    2 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |    2 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |    2 +-
 ...etConfirmedServiceRequestGetEventInformation.go |    2 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |    2 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |    2 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |    2 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |    2 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |    2 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |    2 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |    2 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |    2 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |    2 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |    2 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |    2 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |    2 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |    2 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |    2 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |    2 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |    2 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |    2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |    2 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |    2 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |    2 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |    2 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |    2 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |    2 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |    2 +-
 .../model/BACnetErrorGetEventInformation.go        |    2 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |    2 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |    2 +-
 .../readwrite/model/BACnetErrorReadRange.go        |    2 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |    2 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |   34 +-
 .../bacnetip/readwrite/model/BACnetNodeType.go     |   56 +-
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |   18 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |  130 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |    2 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |    2 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |    2 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |    2 +-
 .../model/BACnetServiceAckCreateObject.go          |    2 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |    2 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |    2 +-
 .../model/BACnetServiceAckGetEventInformation.go   |    2 +-
 .../model/BACnetServiceAckReadProperty.go          |    2 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |    2 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |    2 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |    2 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |    2 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |    2 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |    2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |    2 +-
 .../model/BACnetTagApplicationBitString.go         |    2 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |    2 +-
 .../model/BACnetTagApplicationCharacterString.go   |    2 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |    2 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |    2 +-
 .../model/BACnetTagApplicationEnumerated.go        |    2 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |    2 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |    2 +-
 .../model/BACnetTagApplicationOctetString.go       |    2 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |    2 +-
 .../model/BACnetTagApplicationSignedInteger.go     |    2 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |    2 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |    2 +-
 .../readwrite/model/BACnetTagWithContent.go        |    2 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |    2 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |    2 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |    2 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |    2 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |    2 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |    2 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |    2 +-
 ...edServiceRequestUnconfirmedEventNotification.go |    2 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |    2 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |    2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |    2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |    2 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |    2 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |    2 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |    2 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |    2 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |    2 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |    2 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |    2 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |    2 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |    2 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |    2 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |    2 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |    2 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |    2 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |    2 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |    2 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |    2 +-
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |    4 +-
 .../knxmasterdata/readwrite/XmlParserHelper.go     |   35 -
 .../readwrite/model/KnxManufacturers.go            | 4380 ------------
 .../readwrite/model/KnxObjectProperties.go         | 1378 ----
 .../knxmasterdata/readwrite/model/KnxObjectType.go |  268 -
 plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go |  241 +
 .../internal/plc4go/knxnetip/KnxNetIpConnection.go |  978 +--
 .../internal/plc4go/knxnetip/KnxNetIpDiscoverer.go |  148 +
 plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go  |   99 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpField.go   |  101 +-
 .../plc4go/knxnetip/KnxNetIpFieldHandler.go        |  101 +-
 .../plc4go/knxnetip/KnxNetIpMessageCodec.go        |  154 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go  |  554 +-
 .../internal/plc4go/knxnetip/KnxNetIpSubscriber.go |  220 +-
 .../plc4go/knxnetip/KnxNetIpSubscriptionEvent.go   |    4 +-
 .../plc4go/knxnetip/KnxNetIpValueHandler.go        |   15 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go  |   54 +-
 plc4go/internal/plc4go/knxnetip/Utils.go           |   42 +
 .../plc4go/knxnetip/readwrite/ParserHelper.go      |  124 +-
 .../knxnetip/readwrite/PropertyDataTypeIO.go       |  156 +
 .../plc4go/knxnetip/readwrite/XmlParserHelper.go   |  338 +-
 .../plc4go/knxnetip/readwrite/model/APCI.go        |   44 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |    2 +-
 .../readwrite/model/CEMIAdditionalInformation.go   |    2 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |    2 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |    2 +-
 .../knxnetip/readwrite/model/CEMIPriority.go       |   20 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |    2 +-
 .../model/ConnectionRequestInformation.go          |    2 +-
 ...ConnectionRequestInformationDeviceManagement.go |    2 +-
 ...ConnectionRequestInformationTunnelConnection.go |    4 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |    2 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |    2 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |    2 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |    2 +-
 .../readwrite/model/ConnectionStateRequest.go      |    4 +-
 .../readwrite/model/ConnectionStateResponse.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/ControlType.go |   20 +-
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |    2 +-
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |    2 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |    2 +-
 .../readwrite/model/DescriptionResponse.go         |    2 +-
 .../readwrite/model/DeviceConfigurationAck.go      |    2 +-
 .../model/DeviceConfigurationAckDataBlock.go       |    2 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |    2 +-
 .../model/DeviceConfigurationRequestDataBlock.go   |    4 +-
 .../knxnetip/readwrite/model/DeviceStatus.go       |    4 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |    4 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |    2 +-
 .../knxnetip/readwrite/model/ExtendedAPCI.go       |   94 +-
 .../readwrite/model/HPAIControlEndpoint.go         |    2 +-
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |    2 +-
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |    2 +-
 .../knxnetip/readwrite/model/HostProtocolCode.go   |   16 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |    2 +-
 .../plc4go/knxnetip/readwrite/model/KnxAddress.go  |    2 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       |    4 +-
 .../readwrite/model/KnxDatapointSubtype.go         | 5260 +++++++++++++++
 .../knxnetip/readwrite/model/KnxDatapointType.go   | 5596 +++------------
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |    2 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |    2 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |    2 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |    2 +-
 .../readwrite/model/KnxInterfaceObjectProperty.go  | 4221 ++++++++++++
 .../readwrite/model/KnxInterfaceObjectType.go      |  424 ++
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |   18 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    | 7093 ++++++++++++++++++++
 .../plc4go/knxnetip/readwrite/model/KnxMedium.go   |   24 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |    2 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |    2 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |    2 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |    2 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |    2 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |    2 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |    2 +-
 .../readwrite/model/KnxPropertyDataType.go         |  908 +++
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |    2 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |    2 +-
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  |    2 +-
 .../knxnetip/readwrite/model/LDataFrameAck.go      |    2 +-
 .../knxnetip/readwrite/model/LDataFrameData.go     |    2 +-
 .../knxnetip/readwrite/model/LDataFrameDataExt.go  |    2 +-
 .../readwrite/model/LDataFramePollingData.go       |    4 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |    2 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |    2 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |    2 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |    2 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |    2 +-
 .../readwrite/model/MFuncPropCommandReq.go         |    2 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |    2 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |    2 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |    2 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |    2 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |    2 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |    2 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |    2 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |    2 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |    2 +-
 .../model/ProjectInstallationIdentifier.go         |    2 +-
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |    2 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |    2 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |    2 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |    2 +-
 .../plc4go/knxnetip/readwrite/model/Status.go      |   36 +-
 .../readwrite/model/SupportedPhysicalMedia.go      |   54 +-
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |    2 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |    2 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |    2 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |    2 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |    2 +-
 .../readwrite/model/TunnelingRequestDataBlock.go   |    4 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |    2 +-
 .../readwrite/model/TunnelingResponseDataBlock.go  |    2 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |    2 +-
 plc4go/internal/plc4go/modbus/ModbusConnection.go  |   53 +-
 plc4go/internal/plc4go/modbus/ModbusDriver.go      |   29 +-
 .../internal/plc4go/modbus/ModbusFieldHandler.go   |   22 +-
 .../internal/plc4go/modbus/ModbusMessageCodec.go   |   87 +-
 plc4go/internal/plc4go/modbus/ModbusReader.go      |   67 +-
 .../internal/plc4go/modbus/ModbusValueHandler.go   |    2 +-
 plc4go/internal/plc4go/modbus/ModbusWriter.go      |   74 +-
 .../plc4go/modbus/readwrite/ParserHelper.go        |    2 +-
 .../plc4go/modbus/readwrite/model/DataItem.go      |    4 +-
 .../modbus/readwrite/model/ModbusConstants.go      |    2 +-
 .../modbus/readwrite/model/ModbusDataTypeSizes.go  |   64 +-
 .../modbus/readwrite/model/ModbusErrorCode.go      |   32 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |    2 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |    2 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |    2 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |    2 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |    2 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |    2 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |    2 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |    2 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |    2 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |    2 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |    2 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |    2 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |    2 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |    2 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |    2 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |    2 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |    2 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |    2 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |    2 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |    2 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |    2 +-
 .../model/ModbusPDUReadFileRecordRequestItem.go    |    2 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |    2 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |    2 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |    2 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |    2 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |    2 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |    2 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUReportServerIdRequest.go        |    2 +-
 .../model/ModbusPDUReportServerIdResponse.go       |    2 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |    2 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |    2 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |    2 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |    2 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |    2 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |    2 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |    2 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |    2 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |    2 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |    2 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |    2 +-
 .../modbus/readwrite/model/ModbusSerialADU.go      |    4 +-
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |    2 +-
 .../plc4go/model/DefaultPlcSubscriptionEvent.go    |  108 -
 .../plc4go/model/DefaultPlcSubscriptionRequest.go  |  160 -
 .../internal/plc4go/model/values/PlcBitString.go   |   93 -
 .../internal/plc4go/s7/readwrite/ParserHelper.go   |    2 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |    2 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |    2 +-
 .../model/COTPPacketConnectionResponse.go          |    2 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |    2 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |    2 +-
 .../model/COTPPacketDisconnectResponse.go          |    2 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |    2 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |    2 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |    2 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |    2 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |    2 +-
 ...COTPParameterDisconnectAdditionalInformation.go |    2 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |    2 +-
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |   22 +-
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |   26 +-
 .../internal/plc4go/s7/readwrite/model/DataItem.go |    4 +-
 .../s7/readwrite/model/DataTransportErrorCode.go   |   24 +-
 .../plc4go/s7/readwrite/model/DataTransportSize.go |   26 +-
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |   18 +-
 .../plc4go/s7/readwrite/model/MemoryArea.go        |   30 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |    2 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |    4 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |    6 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |    2 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |    2 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |    2 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |    2 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |    2 +-
 .../model/S7ParameterSetupCommunication.go         |    4 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |    2 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |    2 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |    2 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |    2 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |    2 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |    2 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |    2 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |    2 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |    2 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |    2 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |    2 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |    2 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |    2 +-
 .../plc4go/s7/readwrite/model/S7StaticHelper.go    |    4 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |    2 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |    2 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |    2 +-
 .../model/S7VarRequestParameterItemAddress.go      |    2 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |    2 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |    2 +-
 .../s7/readwrite/model/SzlModuleTypeClass.go       |   20 +-
 .../plc4go/s7/readwrite/model/SzlSublist.go        |   50 +-
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |    4 +-
 .../plc4go/s7/readwrite/model/TransportSize.go     |   40 +-
 plc4go/internal/plc4go/spi/Message.go              |    4 +-
 plc4go/internal/plc4go/spi/MessageCodec.go         |   24 +-
 .../plc4go/spi/{PlcWriter.go => PlcBrowser.go}     |    4 +-
 .../plc4go/spi/{PlcReader.go => PlcDiscoverer.go}  |    4 +-
 plc4go/internal/plc4go/spi/PlcSubscriber.go        |    2 +-
 .../plc4go/spi/TransportInstanceExposer.go         |    4 +-
 .../interceptors/SingleItemRequestInterceptor.go   |    2 +-
 .../plc4go/spi/model/DefaultBrowseRequest.go       |  102 +
 .../plc4go/spi/model/DefaultPlcDiscoveryEvent.go}  |   33 +-
 .../{ => spi}/model/DefaultPlcReadRequest.go       |    0
 .../{ => spi}/model/DefaultPlcReadResponse.go      |    0
 .../model/DefaultPlcSubscriptionEvent.go}          |   66 +-
 .../spi/model/DefaultPlcSubscriptionRequest.go     |  160 +
 .../model/DefaultPlcSubscriptionResponse.go        |    4 +-
 .../{ => spi}/model/DefaultPlcWriteRequest.go      |    2 +-
 .../{ => spi}/model/DefaultPlcWriteResponse.go     |    0
 .../plc4go/{ => spi}/model/RequestInterceptor.go   |    0
 .../plc4go/{ => spi}/testutils/DriverTestRunner.go |   32 +-
 .../testutils/ParserSerializerTestRunner.go        |   20 +-
 .../plc4go/{ => spi}/testutils/TestUtils.go        |    0
 .../plc4go/{ => spi}/transports/Transport.go       |   10 +-
 .../{ => spi}/transports/TransportInstance.go      |    0
 .../plc4go/spi/transports/tcp/TcpTransport.go      |  188 +
 .../{ => spi}/transports/test/TestTransport.go     |    2 +-
 .../plc4go/spi/transports/udp/UdpTransport.go      |  217 +
 .../internal/plc4go/{ => spi}/utils/CastUtils.go   |   20 +-
 .../internal/plc4go/{ => spi}/utils/ReadBuffer.go  |    0
 .../plc4go/{utils/Utils.go => spi/utils/Regexp.go} |   18 +-
 .../plc4go/{ => spi}/utils/Serializable.go         |    2 +-
 plc4go/internal/plc4go/{ => spi}/utils/Utils.go    |    0
 .../internal/plc4go/{ => spi}/utils/WriteBuffer.go |    0
 .../internal/plc4go/{model => spi}/values/BOOL.go  |    0
 .../internal/plc4go/{model => spi}/values/BYTE.go  |    0
 .../internal/plc4go/{model => spi}/values/CHAR.go  |    0
 .../internal/plc4go/{model => spi}/values/DATE.go  |   26 +-
 .../plc4go/{model => spi}/values/DATE_AND_TIME.go  |    0
 .../internal/plc4go/{model => spi}/values/DINT.go  |    0
 .../internal/plc4go/{model => spi}/values/DWORD.go |    0
 .../{model => spi}/values/IEC61131ValueHandler.go  |    0
 .../internal/plc4go/{model => spi}/values/INT.go   |    0
 .../internal/plc4go/{model => spi}/values/LINT.go  |    0
 .../internal/plc4go/{model => spi}/values/LREAL.go |    0
 .../internal/plc4go/{model => spi}/values/LTIME.go |    0
 .../internal/plc4go/{model => spi}/values/LWORD.go |    0
 .../internal/plc4go/{model => spi}/values/NULL.go  |    0
 .../PlcList.go => spi/values/PlcBitString.go}      |   47 +-
 .../plc4go/{model => spi}/values/PlcByteArray.go   |    0
 .../plc4go/{model => spi}/values/PlcList.go        |    0
 .../{model => spi}/values/PlcSimpleValueAdapter.go |    0
 .../plc4go/{model => spi}/values/PlcStruct.go      |   24 +-
 .../{model => spi}/values/PlcValueAdapter.go       |    0
 .../internal/plc4go/{model => spi}/values/REAL.go  |    0
 .../internal/plc4go/{model => spi}/values/SINT.go  |    0
 .../plc4go/{model => spi}/values/STRING.go         |    0
 .../internal/plc4go/{model => spi}/values/TIME.go  |    0
 .../plc4go/{model => spi}/values/TIME_OF_DAY.go    |   30 +-
 .../internal/plc4go/{model => spi}/values/UDINT.go |    0
 .../internal/plc4go/{model => spi}/values/UINT.go  |    0
 .../internal/plc4go/{model => spi}/values/ULINT.go |    0
 .../internal/plc4go/{model => spi}/values/USINT.go |    0
 .../internal/plc4go/{model => spi}/values/WCHAR.go |    0
 .../internal/plc4go/{model => spi}/values/WORD.go  |    0
 .../plc4go/{model => spi}/values/WSTRING.go        |    0
 .../internal/plc4go/transports/tcp/TcpTransport.go |  188 -
 .../internal/plc4go/transports/udp/UdpTransport.go |  190 -
 plc4go/internal/plc4go/utils/Regexp.go             |   35 -
 plc4go/pkg/plc4go/connection.go                    |    2 +
 plc4go/pkg/plc4go/driver.go                        |   21 +-
 plc4go/pkg/plc4go/driverManager.go                 |  238 +-
 .../model/{plc_read_request.go => plc_browse.go}   |   35 +-
 plc4go/pkg/plc4go/model/plc_connection_metadata.go |    7 +-
 .../plc4go/model/plc_discovery.go}                 |   26 +-
 .../model/{plc_read_request.go => plc_read.go}     |   12 +-
 plc4go/pkg/plc4go/model/plc_read_response.go       |   29 -
 ...subscription_request.go => plc_subscription.go} |   46 +-
 plc4go/pkg/plc4go/model/plc_subscription_event.go  |   31 -
 .../pkg/plc4go/model/plc_subscription_response.go  |   25 -
 ...bscription_request.go => plc_unsubscription.go} |    3 +
 .../model/{plc_write_request.go => plc_write.go}   |    3 +
 plc4go/pkg/plc4go/model/plc_write_response.go      |   22 -
 plc4go/pkg/plc4go/transports/transports.go         |    4 +-
 plc4go/pom.xml                                     |    2 +-
 .../org/apache/plc4x/java/abeth/AbEthDriver.java   |    9 +
 .../org/apache/plc4x/java/ads/ADSPlcDriver.java    |    9 +
 .../plc4x/java/ads/field/DirectAdsField.java       |    2 +-
 .../plc4x/java/ads/field/DirectAdsStringField.java |    2 +-
 .../plc4x/java/ads/field/SymbolicAdsField.java     |    2 +-
 .../java/ads/field/SymbolicAdsStringField.java     |    2 +-
 .../plc4x/java/canopen/CANOpenPlcDriver.java       |    9 +
 .../apache/plc4x/java/eip/readwrite/EIPDriver.java |    9 +
 .../java/firmata/readwrite/FirmataDriver.java      |    9 +
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |    3 +
 .../plc4x/java/knxnetip/ets5/Ets5Parser.java       |   10 +-
 .../java/knxnetip/ets5/model/GroupAddress.java     |    8 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |    9 +-
 .../org/apache/plc4x/java/modbus/ModbusDriver.java |    9 +
 .../apache/plc4x/java/opcua/OpcuaPlcDriver.java    |   36 +-
 .../java/opcua/config/OpcuaConfiguration.java      |   24 +-
 .../apache/plc4x/java/s7/readwrite/S7Driver.java   |    9 +
 .../java/s7/readwrite/optimizer/S7Optimizer.java   |    4 +-
 .../plc4x/java/s7/readwrite/issues/PLC4X272.java}  |    8 +-
 .../s7/src/test/resources/tests/PLC4X-272.xml      | 2282 +++++++
 plc4j/integrations/apache-kafka/pom.xml            |   48 +-
 .../org/apache/plc4x/kafka/Plc4xSinkConnector.java |    1 -
 .../java/org/apache/plc4x/kafka/Plc4xSinkTask.java |    2 -
 .../apache/plc4x/kafka/Plc4xSourceConnector.java   |    3 -
 .../org/apache/plc4x/kafka/Plc4xSourceTask.java    |    5 +-
 .../apache-kafka/src/remote-resources/LICENSE      |    7 +
 .../apache-kafka/src/remote-resources}/NOTICE      |    2 +-
 plc4j/integrations/opcua-server/pom.xml            |   22 +-
 .../java/opcuaserver/AttributeLoggingFilter.java   |   73 -
 .../plc4x/java/opcuaserver/KeyStoreLoader.java     |  163 -
 .../apache/plc4x/java/opcuaserver/OPCUAServer.java |  244 +-
 .../opcuaserver/backend/Plc4xCommunication.java    |  238 +-
 .../java/opcuaserver/backend/Plc4xNamespace.java   |  110 +-
 .../opcuaserver/configuration/Configuration.java   |    7 -
 .../opcuaserver}/context/CertificateGenerator.java |    8 +-
 .../opcuaserver}/context/CertificateKeyPair.java   |    2 +-
 .../plc4x/java/opcuaserver/OpcuaPlcDriverTest.java |  245 +
 .../opcua-server/src/test/resources/config.yml     |    1 -
 .../apache/plc4x/java/spi/Plc4xNettyWrapper.java   |    1 +
 .../spi/connection/DefaultNettyPlcConnection.java  |   27 +-
 .../java/spi/connection/GeneratedDriverBase.java   |   13 +
 .../plc4x/test/driver/DriverTestsuiteRunner.java   |    3 +
 pom.xml                                            |    7 +-
 protocols/knxnetip/pom.xml                         |    7 +
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |  173 +-
 .../enrich/knxnetip/ets5/Ets5DataEnrichment.java   |    8 +-
 516 files changed, 27516 insertions(+), 15269 deletions(-)
 delete mode 100644 plc4go/internal/plc4go/knxmasterdata/readwrite/XmlParserHelper.go
 delete mode 100644 plc4go/internal/plc4go/knxmasterdata/readwrite/model/KnxManufacturers.go
 delete mode 100644 plc4go/internal/plc4go/knxmasterdata/readwrite/model/KnxObjectProperties.go
 delete mode 100644 plc4go/internal/plc4go/knxmasterdata/readwrite/model/KnxObjectType.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/KnxNetIpDiscoverer.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/PropertyDataTypeIO.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointSubtype.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/model/KnxInterfaceObjectProperty.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/model/KnxInterfaceObjectType.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/model/KnxManufacturer.go
 create mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/model/KnxPropertyDataType.go
 delete mode 100644 plc4go/internal/plc4go/model/DefaultPlcSubscriptionEvent.go
 delete mode 100644 plc4go/internal/plc4go/model/DefaultPlcSubscriptionRequest.go
 delete mode 100644 plc4go/internal/plc4go/model/values/PlcBitString.go
 copy plc4go/internal/plc4go/spi/{PlcWriter.go => PlcBrowser.go} (88%)
 copy plc4go/internal/plc4go/spi/{PlcReader.go => PlcDiscoverer.go} (89%)
 create mode 100644 plc4go/internal/plc4go/spi/model/DefaultBrowseRequest.go
 rename plc4go/{pkg/plc4go/model/plc_unsubscription_response.go => internal/plc4go/spi/model/DefaultPlcDiscoveryEvent.go} (55%)
 rename plc4go/internal/plc4go/{ => spi}/model/DefaultPlcReadRequest.go (100%)
 copy plc4go/internal/plc4go/{ => spi}/model/DefaultPlcReadResponse.go (100%)
 rename plc4go/internal/plc4go/{model/DefaultPlcReadResponse.go => spi/model/DefaultPlcSubscriptionEvent.go} (50%)
 create mode 100644 plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
 rename plc4go/internal/plc4go/{ => spi}/model/DefaultPlcSubscriptionResponse.go (98%)
 rename plc4go/internal/plc4go/{ => spi}/model/DefaultPlcWriteRequest.go (98%)
 rename plc4go/internal/plc4go/{ => spi}/model/DefaultPlcWriteResponse.go (100%)
 rename plc4go/internal/plc4go/{ => spi}/model/RequestInterceptor.go (100%)
 rename plc4go/internal/plc4go/{ => spi}/testutils/DriverTestRunner.go (96%)
 rename plc4go/internal/plc4go/{ => spi}/testutils/ParserSerializerTestRunner.go (94%)
 rename plc4go/internal/plc4go/{ => spi}/testutils/TestUtils.go (100%)
 rename plc4go/internal/plc4go/{ => spi}/transports/Transport.go (73%)
 rename plc4go/internal/plc4go/{ => spi}/transports/TransportInstance.go (100%)
 create mode 100644 plc4go/internal/plc4go/spi/transports/tcp/TcpTransport.go
 rename plc4go/internal/plc4go/{ => spi}/transports/test/TestTransport.go (97%)
 create mode 100644 plc4go/internal/plc4go/spi/transports/udp/UdpTransport.go
 rename plc4go/internal/plc4go/{ => spi}/utils/CastUtils.go (88%)
 rename plc4go/internal/plc4go/{ => spi}/utils/ReadBuffer.go (100%)
 copy plc4go/internal/plc4go/{utils/Utils.go => spi/utils/Regexp.go} (72%)
 rename plc4go/internal/plc4go/{ => spi}/utils/Serializable.go (95%)
 rename plc4go/internal/plc4go/{ => spi}/utils/Utils.go (100%)
 rename plc4go/internal/plc4go/{ => spi}/utils/WriteBuffer.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/BOOL.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/BYTE.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/CHAR.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/DATE.go (71%)
 rename plc4go/internal/plc4go/{model => spi}/values/DATE_AND_TIME.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/DINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/DWORD.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/IEC61131ValueHandler.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/INT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/LINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/LREAL.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/LTIME.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/LWORD.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/NULL.go (100%)
 copy plc4go/internal/plc4go/{model/values/PlcList.go => spi/values/PlcBitString.go} (55%)
 rename plc4go/internal/plc4go/{model => spi}/values/PlcByteArray.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/PlcList.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/PlcSimpleValueAdapter.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/PlcStruct.go (85%)
 rename plc4go/internal/plc4go/{model => spi}/values/PlcValueAdapter.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/REAL.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/SINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/STRING.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/TIME.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/TIME_OF_DAY.go (66%)
 rename plc4go/internal/plc4go/{model => spi}/values/UDINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/UINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/ULINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/USINT.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/WCHAR.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/WORD.go (100%)
 rename plc4go/internal/plc4go/{model => spi}/values/WSTRING.go (100%)
 delete mode 100644 plc4go/internal/plc4go/transports/tcp/TcpTransport.go
 delete mode 100644 plc4go/internal/plc4go/transports/udp/UdpTransport.go
 delete mode 100644 plc4go/internal/plc4go/utils/Regexp.go
 copy plc4go/pkg/plc4go/model/{plc_read_request.go => plc_browse.go} (53%)
 rename plc4go/{internal/plc4go/knxmasterdata/readwrite/ParserHelper.go => pkg/plc4go/model/plc_discovery.go} (62%)
 rename plc4go/pkg/plc4go/model/{plc_read_request.go => plc_read.go} (80%)
 delete mode 100644 plc4go/pkg/plc4go/model/plc_read_response.go
 rename plc4go/pkg/plc4go/model/{plc_subscription_request.go => plc_subscription.go} (51%)
 delete mode 100644 plc4go/pkg/plc4go/model/plc_subscription_event.go
 delete mode 100644 plc4go/pkg/plc4go/model/plc_subscription_response.go
 rename plc4go/pkg/plc4go/model/{plc_unsubscription_request.go => plc_unsubscription.go} (96%)
 rename plc4go/pkg/plc4go/model/{plc_write_request.go => plc_write.go} (97%)
 delete mode 100644 plc4go/pkg/plc4go/model/plc_write_response.go
 copy plc4j/drivers/{ads/src/test/java/org/apache/plc4x/protocol/ads/AdsDriverIT.java => s7/src/test/java/org/apache/plc4x/java/s7/readwrite/issues/PLC4X272.java} (82%)
 create mode 100644 plc4j/drivers/s7/src/test/resources/tests/PLC4X-272.xml
 create mode 100644 plc4j/integrations/apache-kafka/src/remote-resources/LICENSE
 copy plc4j/{utils/raw-sockets/src/remote-resources/META-INF => integrations/apache-kafka/src/remote-resources}/NOTICE (55%)
 delete mode 100644 plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/AttributeLoggingFilter.java
 delete mode 100644 plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/KeyStoreLoader.java
 copy plc4j/{drivers/opcua/src/main/java/org/apache/plc4x/java/opcua => integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver}/context/CertificateGenerator.java (96%)
 copy plc4j/{drivers/opcua/src/main/java/org/apache/plc4x/java/opcua => integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver}/context/CertificateKeyPair.java (96%)
 create mode 100644 plc4j/integrations/opcua-server/src/test/java/org/apache/plc4x/java/opcuaserver/OpcuaPlcDriverTest.java


[plc4x] 02/02: Cleaned up parameter parsing and key store generator.

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

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

commit d8e54a013a4959d4a4b9e60e8bc976bc925abd48
Author: hutcheb <be...@gmail.com>
AuthorDate: Sat Jan 23 07:06:37 2021 -0500

    Cleaned up parameter parsing and key store generator.
---
 .../apache/plc4x/java/opcua/OpcuaPlcDriver.java    | 36 ++++++++++++++++------
 .../java/opcua/config/OpcuaConfiguration.java      | 24 ++++++---------
 plc4j/integrations/opcua-server/pom.xml            |  5 +--
 .../spi/connection/DefaultNettyPlcConnection.java  | 14 ---------
 protocols/knxnetip/src/main/xslt/knx-types.xsl     | 26 ++++------------
 5 files changed, 43 insertions(+), 62 deletions(-)

diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java
index 1a391f5..8ee6981 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java
@@ -33,9 +33,9 @@ import org.apache.plc4x.java.spi.values.IEC61131ValueHandler;
 import org.apache.plc4x.java.api.value.PlcValueHandler;
 import org.apache.plc4x.java.spi.configuration.Configuration;
 import org.apache.plc4x.java.spi.connection.GeneratedDriverBase;
-import org.apache.plc4x.java.spi.optimizer.BaseOptimizer;
-import org.apache.plc4x.java.spi.optimizer.SingleFieldOptimizer;
 import io.netty.buffer.ByteBuf;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ServiceLoader;
 import java.util.regex.Matcher;
@@ -45,14 +45,9 @@ import java.util.function.ToIntFunction;
 
 import static org.apache.plc4x.java.spi.configuration.ConfigurationFactory.configure;
 
-/**
- * Implementation of the OPC UA protocol, based on:
- * - Eclipse Milo (https://github.com/eclipse/milo)
- *
- * Created by Matthias Milan Strljic on 10.05.2019
- */
 public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(OpcuaPlcDriver.class);
 
     public static final Pattern OPCUA_URI_PARAM_PATTERN = Pattern.compile("(?<param>[(\\?|\\&)([^=]+)\\=([^&]+)]+)?"); //later used for regex filtering of the params
 
@@ -65,7 +60,7 @@ public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
     public static final Pattern URI_PATTERN = Pattern.compile("^(?<protocolCode>opcua)" +
                                                                     INET_ADDRESS_PATTERN +
                                                                     "(?<transportEndpoint>[\\w/=]*)[\\?]?" +
-                                                                    "(?<paramString>[\\&\\w=]+\\=[\\w&]+)*"
+                                                                    "(?<paramString>([^\\=]+\\=[^\\=&]+[&]?)*)"
                                                                 );
 
 
@@ -125,6 +120,10 @@ public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
         return new IEC61131ValueHandler();
     }
 
+    protected boolean awaitDisconnectComplete() {
+        return true;
+    }
+
     @Override
     protected ProtocolStackConfigurer<OpcuaAPU> getStackConfigurer() {
         return SingleProtocolStackConfigurer.builder(OpcuaAPU.class, OpcuaAPUIO.class)
@@ -190,6 +189,7 @@ public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
         configure(configuration, transport);
 
         // Create an instance of the communication channel which the driver should use.
+        System.out.println(transportHost + ":" + transportPort);
         ChannelFactory channelFactory = transport.createChannelFactory(transportHost + ":" + transportPort);
         if(channelFactory == null) {
             throw new PlcConnectionException("Unable to get channel factory from url " + transportHost + ":" + transportPort);
@@ -205,6 +205,23 @@ public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
             awaitSetupComplete = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_SETUP_COMPLETE));
         }
 
+        // Make the "await disconnect complete" overridable via system property.
+        boolean awaitDisconnectComplete = awaitDisconnectComplete();
+        if(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCONNECT_COMPLETE) != null) {
+            awaitDisconnectComplete = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCONNECT_COMPLETE));
+        }
+
+        if (!(configuration.getSecurityPolicy().equals("None"))) {
+            try {
+                LOGGER.info(configuration.getKeyStoreFile());
+                LOGGER.info(configuration.getCertDirectory());
+                LOGGER.info(configuration.getKeyStorePassword());
+                configuration.openKeyStore();
+            } catch (Exception e) {
+                throw new PlcConnectionException("Unable to open keystore, please confirm you have the correct permissions");
+            }
+        }
+
         return new DefaultNettyPlcConnection(
             canRead(), canWrite(), canSubscribe(),
             getFieldHandler(),
@@ -212,6 +229,7 @@ public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
             configuration,
             channelFactory,
             awaitSetupComplete,
+            awaitDisconnectComplete,
             getStackConfigurer(),
             getOptimizer());
     }
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/config/OpcuaConfiguration.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/config/OpcuaConfiguration.java
index c9ff79f..0b6b86d 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/config/OpcuaConfiguration.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/config/OpcuaConfiguration.java
@@ -29,6 +29,7 @@ import org.apache.plc4x.java.spi.configuration.annotations.defaults.BooleanDefau
 import org.apache.plc4x.java.spi.configuration.annotations.defaults.IntDefaultValue;
 import org.apache.plc4x.java.spi.configuration.annotations.defaults.StringDefaultValue;
 import org.apache.plc4x.java.transport.tcp.TcpTransportConfiguration;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,6 +45,11 @@ import java.security.cert.X509Certificate;
 
 public class OpcuaConfiguration implements Configuration, TcpTransportConfiguration {
 
+    static {
+        // Required for SecurityPolicy.Aes256_Sha256_RsaPss
+        Security.addProvider(new BouncyCastleProvider());
+    }
+
     private static final Logger LOGGER = LoggerFactory.getLogger(OpcuaConfiguration.class);
 
     private String code;
@@ -52,18 +58,6 @@ public class OpcuaConfiguration implements Configuration, TcpTransportConfigurat
     private String endpoint;
     private String params;
 
-    public OpcuaConfiguration() {
-        if (!(securityPolicy == "None")) {
-            try {
-                if (!(keyStoreFile == null) & !(certDirectory == null) & !(keyStorePassword == null)) {
-                    openKeyStore();
-                }
-            } catch (Exception e) {
-                LOGGER.info("Unable to open keystore, please confirm you have the correct permissions");
-            }
-        }
-    }
-
     @ConfigurationParameter("discovery")
     @BooleanDefaultValue(true)
     private boolean discovery;
@@ -133,8 +127,8 @@ public class OpcuaConfiguration implements Configuration, TcpTransportConfigurat
         this.password = password;
     }
 
-    public void setCertFile(String certFile) {
-        this.certDirectory = certFile;
+    public void setCertDirectory(String certDirectory) {
+        this.certDirectory = certDirectory;
     }
 
     public void setSecurityPolicy(String securityPolicy) {
@@ -181,7 +175,7 @@ public class OpcuaConfiguration implements Configuration, TcpTransportConfigurat
         this.endpoint = endpoint;
     }
 
-    private void openKeyStore() throws KeyStoreException, PlcConnectionException, CertificateException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException {
+    public void openKeyStore() throws KeyStoreException, PlcConnectionException, CertificateException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException {
         File securityTempDir = new File(certDirectory, "security");
         if (!securityTempDir.exists() && !securityTempDir.mkdirs()) {
             throw new PlcConnectionException("Unable to create directory please confirm folder permissions on "  + certDirectory);
diff --git a/plc4j/integrations/opcua-server/pom.xml b/plc4j/integrations/opcua-server/pom.xml
index 21fcc24..aa3b66a 100644
--- a/plc4j/integrations/opcua-server/pom.xml
+++ b/plc4j/integrations/opcua-server/pom.xml
@@ -203,10 +203,7 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
     </dependency>
-<<<<<<< HEAD
 
-    
-=======
     <dependency>
 	    <groupId>commons-io</groupId>
 	    <artifactId>commons-io</artifactId>
@@ -216,7 +213,7 @@
       <groupId>io.vavr</groupId>
       <artifactId>vavr</artifactId>
     </dependency>
->>>>>>> develop
+
 
     <dependency>
       <groupId>org.apache.commons</groupId>
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
index 2343d11..177ef71 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
@@ -50,11 +50,7 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements
     protected final boolean awaitSessionSetupComplete;
     protected final boolean awaitSessionDisconnectComplete;
     protected final ProtocolStackConfigurer stackConfigurer;
-<<<<<<< HEAD
-    private final CompletableFuture<Void> sessionDisconnectCompleteFuture = new CompletableFuture<>();
-=======
     protected final CompletableFuture<Void> sessionDisconnectCompleteFuture = new CompletableFuture<>();
->>>>>>> develop
 
     protected Channel channel;
     protected boolean connected;
@@ -122,15 +118,6 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements
      */
     @Override
     public void close() throws PlcConnectionException {
-<<<<<<< HEAD
-        // TODO call protocols close method
-
-        channel.pipeline().fireUserEventTriggered(new DisconnectEvent());
-        try {
-            sessionDisconnectCompleteFuture.get(10000L, TimeUnit.MILLISECONDS);
-        } catch (Exception e) {
-            //Do Nothing
-=======
 
         logger.debug("Closing connection to PLC, await for disconnect = {}", awaitSessionDisconnectComplete);
 
@@ -141,7 +128,6 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements
             }
         } catch (Exception e) {
             logger.error("Timeout while trying to close connection");
->>>>>>> develop
         }
         channel.pipeline().fireUserEventTriggered(new CloseConnectionEvent());
 
diff --git a/protocols/knxnetip/src/main/xslt/knx-types.xsl b/protocols/knxnetip/src/main/xslt/knx-types.xsl
index 6590625..4e3a6de 100644
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@ -47,45 +47,35 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-[enum uint 16 'KnxDatapointType' [uint 16 'number', uint 8 'sizeInBits', string 'name']
+[enum uint 16 'KnxDatapointType' [uint 16 'number', uint 8 'sizeInBits', string '-1' 'name']
     ['0' DPT_UNKNOWN ['0', '0', '"Unknown Datapoint Type"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType"/>
 ]
 
-[enum uint 32 'KnxDatapointSubtype' [uint 16 'number', KnxDatapointType 'datapointType', string 'name']
+[enum uint 32 'KnxDatapointSubtype' [uint 16 'number', KnxDatapointType 'datapointType', string '-1' 'name']
     ['0' DPST_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown Datapoint Subtype"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype"/>
 ]
 
-[enum uint 16 'KnxInterfaceObjectType' [string 'code', string 'name']
+[enum uint 16 'KnxInterfaceObjectType' [string '-1' 'code', string '-1' 'name']
     ['0' OT_UNKNOWN ['U', '"Unknown Interface Object Type"']]
     ['1' OT_GENERAL ['G', '"General Interface Object Type"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectTypes/knx:InterfaceObjectType"/>
 ]
 
-<<<<<<< HEAD
-[enum uint 8 'KnxObjectType' [string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectTypes/knx:InterfaceObjectType"/>
-]
-
-[enum uint 8 'KnxObjectProperties' [string '-1' 'name', string '-1' 'dataTypeId', string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
-]
-
-[enum uint 16 'KnxManufacturers' [string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
-=======
-[enum uint 32 'KnxInterfaceObjectProperty' [uint 8 'propertyId', KnxInterfaceObjectType 'objectType', KnxPropertyDataType 'propertyDataType', string 'name']
+[enum uint 32 'KnxInterfaceObjectProperty' [uint 8 'propertyId', KnxInterfaceObjectType 'objectType', KnxPropertyDataType 'propertyDataType', string '-1' 'name']
     ['0' PID_UNKNOWN ['0', 'KnxInterfaceObjectType.OT_UNKNOWN', 'KnxPropertyDataType.PDT_UNKNOWN', '"Unknown Interface Object Property"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
 ]
 
-[enum uint 8 'KnxPropertyDataType' [uint 8 'number', uint 8 'sizeInBytes', string 'name']
+[enum uint 8 'KnxPropertyDataType' [uint 8 'number', uint 8 'sizeInBytes', string '-1' 'name']
     ['0' PDT_UNKNOWN ['0', '0', '"Unknown Property Data Type"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:PropertyDataTypes/knx:PropertyDataType"/>
 ]
 
-[enum uint 16 'KnxManufacturer' [uint 16 'number', string 'name']
+[enum uint 16 'KnxManufacturer' [uint 16 'number', string '-1' 'name']
     ['0' M_UNKNOWN ['0', '"Unknown Manufacturer"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
->>>>>>> develop
 ]
     </xsl:template>
 
@@ -188,9 +178,6 @@
         </xsl:choose>
     </xsl:template>
 
-<<<<<<< HEAD
-</xsl:stylesheet>
-=======
     <xsl:template name="getIdFromText">
         <xsl:param name="text"/>
         <xsl:variable name="cleanedText" select="fn:replace(fn:replace(fn:replace(fn:replace(fn:upper-case($text), '/', ''), '\(', ''), '\)', ''), '&#x2013;', '_')"/>
@@ -199,4 +186,3 @@
     </xsl:template>
 
 </xsl:stylesheet>
->>>>>>> develop


[plc4x] 01/02: Merge branch 'develop' into feature/native_opua_client

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

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

commit a6e41a9f0691aa33cf4c612b71c7482f6fe898ba
Merge: 11b9d51 0baecae
Author: hutcheb <be...@gmail.com>
AuthorDate: Fri Jan 22 07:04:00 2021 -0500

    Merge branch 'develop' into feature/native_opua_client

 LICENSE                                            |    1 +
 NOTICE                                             |    5 +-
 RELEASE_NOTES                                      |    2 +
 .../language/go/GoLanguageTemplateHelper.java      |   25 +-
 .../main/resources/templates/go/enum-template.ftlh |   16 +-
 .../templates/go/parser-factory-template.ftlh      |    2 +-
 plc4go/cmd/main/drivers/bacnetip_test.go           |    2 +-
 plc4go/cmd/main/drivers/knxnetip_test.go           |  433 +-
 plc4go/cmd/main/drivers/modbus_test.go             |    8 +-
 plc4go/cmd/main/drivers/s7_test.go                 |    2 +-
 .../cmd/main/drivers/tests/knx_discovery_test.go   | 1224 ++--
 .../cmd/main/drivers/tests/modbus_driver_test.go   |    2 +-
 .../drivers/tests/modbus_parser_serializer_test.go |    2 +-
 plc4go/go.sum                                      |    1 +
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |    4 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |    4 +-
 .../readwrite/model/APDUConfirmedRequest.go        |    4 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |    4 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |    4 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |    4 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |    4 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |    4 +-
 .../bacnetip/readwrite/model/ApplicationTag.go     |   38 +-
 .../bacnetip/readwrite/model/BACnetAddress.go      |    2 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |    2 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |    2 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |    2 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |    2 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |    2 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |    2 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |    2 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |    2 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |    2 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |    2 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |    2 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |    2 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |    2 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |    2 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |    2 +-
 .../model/BACnetConfirmedServiceRequest.go         |    2 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |    2 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |    2 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |    2 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |    2 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |    2 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |    2 +-
 ...rmedServiceRequestConfirmedEventNotification.go |    2 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |    2 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |    2 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |    2 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |    2 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |    2 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |    2 +-
 ...etConfirmedServiceRequestGetEventInformation.go |    2 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |    2 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |    2 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |    2 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |    2 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |    2 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |    2 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |    2 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |    2 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |    2 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |    2 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |    2 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |    2 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |    2 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |    2 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |    2 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |    2 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |    2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |    2 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |    2 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |    2 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |    2 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |    2 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |    2 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |    2 +-
 .../model/BACnetErrorGetEventInformation.go        |    2 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |    2 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |    2 +-
 .../readwrite/model/BACnetErrorReadRange.go        |    2 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |    2 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |   34 +-
 .../bacnetip/readwrite/model/BACnetNodeType.go     |   56 +-
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |   18 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |  130 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |    2 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |    2 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |    2 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |    2 +-
 .../model/BACnetServiceAckCreateObject.go          |    2 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |    2 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |    2 +-
 .../model/BACnetServiceAckGetEventInformation.go   |    2 +-
 .../model/BACnetServiceAckReadProperty.go          |    2 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |    2 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |    2 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |    2 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |    2 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |    2 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |    2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |    2 +-
 .../model/BACnetTagApplicationBitString.go         |    2 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |    2 +-
 .../model/BACnetTagApplicationCharacterString.go   |    2 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |    2 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |    2 +-
 .../model/BACnetTagApplicationEnumerated.go        |    2 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |    2 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |    2 +-
 .../model/BACnetTagApplicationOctetString.go       |    2 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |    2 +-
 .../model/BACnetTagApplicationSignedInteger.go     |    2 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |    2 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |    2 +-
 .../readwrite/model/BACnetTagWithContent.go        |    2 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |    2 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |    2 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |    2 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |    2 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |    2 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |    2 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |    2 +-
 ...edServiceRequestUnconfirmedEventNotification.go |    2 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |    2 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |    2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |    2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |    2 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |    2 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |    2 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |    2 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |    2 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |    2 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |    2 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |    2 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |    2 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |    2 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |    2 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |    2 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |    2 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |    2 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |    2 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |    2 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |    2 +-
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |    4 +-
 .../readwrite/model/KnxManufacturers.go            | 4380 ------------
 .../readwrite/model/KnxObjectProperties.go         | 1378 ----
 .../knxmasterdata/readwrite/model/KnxObjectType.go |  268 -
 plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go |  241 +
 .../internal/plc4go/knxnetip/KnxNetIpConnection.go |  978 +--
 .../internal/plc4go/knxnetip/KnxNetIpDiscoverer.go |  148 +
 plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go  |   99 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpField.go   |  101 +-
 .../plc4go/knxnetip/KnxNetIpFieldHandler.go        |  101 +-
 .../plc4go/knxnetip/KnxNetIpMessageCodec.go        |  154 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go  |  554 +-
 .../internal/plc4go/knxnetip/KnxNetIpSubscriber.go |  220 +-
 .../plc4go/knxnetip/KnxNetIpSubscriptionEvent.go   |    4 +-
 .../plc4go/knxnetip/KnxNetIpValueHandler.go        |   15 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go  |   54 +-
 plc4go/internal/plc4go/knxnetip/Utils.go           |   42 +
 .../plc4go/knxnetip/readwrite/ParserHelper.go      |  124 +-
 .../knxnetip/readwrite/PropertyDataTypeIO.go       |  156 +
 .../plc4go/knxnetip/readwrite/XmlParserHelper.go   |  338 +-
 .../plc4go/knxnetip/readwrite/model/APCI.go        |   44 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |    2 +-
 .../readwrite/model/CEMIAdditionalInformation.go   |    2 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |    2 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |    2 +-
 .../knxnetip/readwrite/model/CEMIPriority.go       |   20 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |    2 +-
 .../model/ConnectionRequestInformation.go          |    2 +-
 ...ConnectionRequestInformationDeviceManagement.go |    2 +-
 ...ConnectionRequestInformationTunnelConnection.go |    4 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |    2 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |    2 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |    2 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |    2 +-
 .../readwrite/model/ConnectionStateRequest.go      |    4 +-
 .../readwrite/model/ConnectionStateResponse.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/ControlType.go |   20 +-
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |    2 +-
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |    2 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |    2 +-
 .../readwrite/model/DescriptionResponse.go         |    2 +-
 .../readwrite/model/DeviceConfigurationAck.go      |    2 +-
 .../model/DeviceConfigurationAckDataBlock.go       |    2 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |    2 +-
 .../model/DeviceConfigurationRequestDataBlock.go   |    4 +-
 .../knxnetip/readwrite/model/DeviceStatus.go       |    4 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |    4 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |    2 +-
 .../knxnetip/readwrite/model/ExtendedAPCI.go       |   94 +-
 .../readwrite/model/HPAIControlEndpoint.go         |    2 +-
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |    2 +-
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |    2 +-
 .../knxnetip/readwrite/model/HostProtocolCode.go   |   16 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |    2 +-
 .../plc4go/knxnetip/readwrite/model/KnxAddress.go  |    2 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       |    4 +-
 .../readwrite/model/KnxDatapointSubtype.go         | 5260 +++++++++++++++
 .../knxnetip/readwrite/model/KnxDatapointType.go   | 5596 +++------------
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |    2 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |    2 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |    2 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |    2 +-
 .../readwrite/model/KnxInterfaceObjectProperty.go  | 4221 ++++++++++++
 .../readwrite/model/KnxInterfaceObjectType.go      |  424 ++
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |   18 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    | 7093 ++++++++++++++++++++
 .../plc4go/knxnetip/readwrite/model/KnxMedium.go   |   24 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |    2 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |    2 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |    2 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |    2 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |    2 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |    2 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |    2 +-
 .../readwrite/model/KnxPropertyDataType.go         |  908 +++
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |    2 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |    2 +-
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  |    2 +-
 .../knxnetip/readwrite/model/LDataFrameAck.go      |    2 +-
 .../knxnetip/readwrite/model/LDataFrameData.go     |    2 +-
 .../knxnetip/readwrite/model/LDataFrameDataExt.go  |    2 +-
 .../readwrite/model/LDataFramePollingData.go       |    4 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |    2 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |    2 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |    2 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |    2 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |    2 +-
 .../readwrite/model/MFuncPropCommandReq.go         |    2 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |    2 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |    2 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |    2 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |    2 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |    2 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |    2 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |    2 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |    2 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |    2 +-
 .../model/ProjectInstallationIdentifier.go         |    2 +-
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |    2 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |    2 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |    2 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |    2 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |    2 +-
 .../plc4go/knxnetip/readwrite/model/Status.go      |   36 +-
 .../readwrite/model/SupportedPhysicalMedia.go      |   54 +-
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |    2 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |    2 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |    2 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |    2 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |    2 +-
 .../readwrite/model/TunnelingRequestDataBlock.go   |    4 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |    2 +-
 .../readwrite/model/TunnelingResponseDataBlock.go  |    2 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |    2 +-
 plc4go/internal/plc4go/modbus/ModbusConnection.go  |   53 +-
 plc4go/internal/plc4go/modbus/ModbusDriver.go      |   29 +-
 .../internal/plc4go/modbus/ModbusFieldHandler.go   |   22 +-
 .../internal/plc4go/modbus/ModbusMessageCodec.go   |   87 +-
 plc4go/internal/plc4go/modbus/ModbusReader.go      |   67 +-
 .../internal/plc4go/modbus/ModbusValueHandler.go   |    2 +-
 plc4go/internal/plc4go/modbus/ModbusWriter.go      |   74 +-
 .../plc4go/modbus/readwrite/ParserHelper.go        |    2 +-
 .../plc4go/modbus/readwrite/model/DataItem.go      |    4 +-
 .../modbus/readwrite/model/ModbusConstants.go      |    2 +-
 .../modbus/readwrite/model/ModbusDataTypeSizes.go  |   64 +-
 .../modbus/readwrite/model/ModbusErrorCode.go      |   32 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |    2 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |    2 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |    2 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |    2 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |    2 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |    2 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |    2 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |    2 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |    2 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |    2 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |    2 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |    2 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |    2 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |    2 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |    2 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |    2 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |    2 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |    2 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |    2 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |    2 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |    2 +-
 .../model/ModbusPDUReadFileRecordRequestItem.go    |    2 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |    2 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |    2 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |    2 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |    2 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |    2 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |    2 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUReportServerIdRequest.go        |    2 +-
 .../model/ModbusPDUReportServerIdResponse.go       |    2 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |    2 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |    2 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |    2 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |    2 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |    2 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |    2 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |    2 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |    2 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |    2 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |    2 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |    2 +-
 .../modbus/readwrite/model/ModbusSerialADU.go      |    4 +-
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |    2 +-
 .../plc4go/model/DefaultPlcSubscriptionEvent.go    |  108 -
 .../plc4go/model/DefaultPlcSubscriptionRequest.go  |  160 -
 .../internal/plc4go/model/values/PlcBitString.go   |   93 -
 .../internal/plc4go/s7/readwrite/ParserHelper.go   |    2 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |    2 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |    2 +-
 .../model/COTPPacketConnectionResponse.go          |    2 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |    2 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |    2 +-
 .../model/COTPPacketDisconnectResponse.go          |    2 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |    2 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |    2 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |    2 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |    2 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |    2 +-
 ...COTPParameterDisconnectAdditionalInformation.go |    2 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |    2 +-
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |   22 +-
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |   26 +-
 .../internal/plc4go/s7/readwrite/model/DataItem.go |    4 +-
 .../s7/readwrite/model/DataTransportErrorCode.go   |   24 +-
 .../plc4go/s7/readwrite/model/DataTransportSize.go |   26 +-
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |   18 +-
 .../plc4go/s7/readwrite/model/MemoryArea.go        |   30 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |    2 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |    4 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |    6 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |    2 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |    2 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |    2 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |    2 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |    2 +-
 .../model/S7ParameterSetupCommunication.go         |    4 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |    2 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |    2 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |    2 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |    2 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |    2 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |    2 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |    2 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |    2 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |    2 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |    2 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |    2 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |    2 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |    2 +-
 .../plc4go/s7/readwrite/model/S7StaticHelper.go    |    4 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |    2 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |    2 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |    2 +-
 .../model/S7VarRequestParameterItemAddress.go      |    2 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |    2 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |    2 +-
 .../s7/readwrite/model/SzlModuleTypeClass.go       |   20 +-
 .../plc4go/s7/readwrite/model/SzlSublist.go        |   50 +-
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |    4 +-
 .../plc4go/s7/readwrite/model/TransportSize.go     |   40 +-
 plc4go/internal/plc4go/spi/Message.go              |    4 +-
 plc4go/internal/plc4go/spi/MessageCodec.go         |   24 +-
 .../{TransportInstanceExposer.go => PlcBrowser.go} |    6 +-
 .../plc4go/spi/PlcDiscoverer.go}                   |    7 +-
 plc4go/internal/plc4go/spi/PlcSubscriber.go        |    2 +-
 .../plc4go/spi/TransportInstanceExposer.go         |    4 +-
 .../interceptors/SingleItemRequestInterceptor.go   |    2 +-
 .../plc4go/spi/model/DefaultBrowseRequest.go       |  102 +
 .../model/DefaultPlcDiscoveryEvent.go}             |   36 +-
 .../{ => spi}/model/DefaultPlcReadRequest.go       |    0
 .../{ => spi}/model/DefaultPlcReadResponse.go      |    0
 .../model/DefaultPlcSubscriptionEvent.go}          |   66 +-
 .../spi/model/DefaultPlcSubscriptionRequest.go     |  160 +
 .../model/DefaultPlcSubscriptionResponse.go        |    4 +-
 .../{ => spi}/model/DefaultPlcWriteRequest.go      |    2 +-
 .../{ => spi}/model/DefaultPlcWriteResponse.go     |    0
 .../plc4go/{ => spi}/model/RequestInterceptor.go   |    0
 .../plc4go/{ => spi}/testutils/DriverTestRunner.go |   32 +-
 .../testutils/ParserSerializerTestRunner.go        |   20 +-
 .../plc4go/{ => spi}/testutils/TestUtils.go        |    0
 .../plc4go/{ => spi}/transports/Transport.go       |   10 +-
 .../{ => spi}/transports/TransportInstance.go      |    0
 .../plc4go/spi/transports/tcp/TcpTransport.go      |  188 +
 .../{ => spi}/transports/test/TestTransport.go     |    2 +-
 .../plc4go/spi/transports/udp/UdpTransport.go      |  217 +
 .../internal/plc4go/{ => spi}/utils/CastUtils.go   |   20 +-
 .../internal/plc4go/{ => spi}/utils/ReadBuffer.go  |    0
 .../plc4go/{utils/Utils.go => spi/utils/Regexp.go} |   18 +-
 .../plc4go/{ => spi}/utils/Serializable.go         |    2 +-
 plc4go/internal/plc4go/{ => spi}/utils/Utils.go    |    0
 .../internal/plc4go/{ => spi}/utils/WriteBuffer.go |    0
 .../internal/plc4go/{model => spi}/values/BOOL.go  |    0
 .../internal/plc4go/{model => spi}/values/BYTE.go  |    0
 .../internal/plc4go/{model => spi}/values/CHAR.go  |    0
 .../internal/plc4go/{model => spi}/values/DATE.go  |   26 +-
 .../plc4go/{model => spi}/values/DATE_AND_TIME.go  |    0
 .../internal/plc4go/{model => spi}/values/DINT.go  |    0
 .../internal/plc4go/{model => spi}/values/DWORD.go |    0
 .../{model => spi}/values/IEC61131ValueHandler.go  |    0
 .../internal/plc4go/{model => spi}/values/INT.go   |    0
 .../internal/plc4go/{model => spi}/values/LINT.go  |    0
 .../internal/plc4go/{model => spi}/values/LREAL.go |    0
 .../internal/plc4go/{model => spi}/values/LTIME.go |    0
 .../internal/plc4go/{model => spi}/values/LWORD.go |    0
 .../internal/plc4go/{model => spi}/values/NULL.go  |    0
 .../PlcList.go => spi/values/PlcBitString.go}      |   47 +-
 .../plc4go/{model => spi}/values/PlcByteArray.go   |    0
 .../plc4go/{model => spi}/values/PlcList.go        |    0
 .../{model => spi}/values/PlcSimpleValueAdapter.go |    0
 .../plc4go/{model => spi}/values/PlcStruct.go      |   24 +-
 .../{model => spi}/values/PlcValueAdapter.go       |    0
 .../internal/plc4go/{model => spi}/values/REAL.go  |    0
 .../internal/plc4go/{model => spi}/values/SINT.go  |    0
 .../plc4go/{model => spi}/values/STRING.go         |    0
 .../internal/plc4go/{model => spi}/values/TIME.go  |    0
 .../plc4go/{model => spi}/values/TIME_OF_DAY.go    |   30 +-
 .../internal/plc4go/{model => spi}/values/UDINT.go |    0
 .../internal/plc4go/{model => spi}/values/UINT.go  |    0
 .../internal/plc4go/{model => spi}/values/ULINT.go |    0
 .../internal/plc4go/{model => spi}/values/USINT.go |    0
 .../internal/plc4go/{model => spi}/values/WCHAR.go |    0
 .../internal/plc4go/{model => spi}/values/WORD.go  |    0
 .../plc4go/{model => spi}/values/WSTRING.go        |    0
 .../internal/plc4go/transports/tcp/TcpTransport.go |  188 -
 .../internal/plc4go/transports/udp/UdpTransport.go |  190 -
 plc4go/internal/plc4go/utils/Regexp.go             |   35 -
 plc4go/pkg/plc4go/connection.go                    |    2 +
 plc4go/pkg/plc4go/driver.go                        |   21 +-
 plc4go/pkg/plc4go/driverManager.go                 |  238 +-
 .../model/{plc_read_request.go => plc_browse.go}   |   35 +-
 plc4go/pkg/plc4go/model/plc_connection_metadata.go |    7 +-
 .../plc4go/model/plc_discovery.go}                 |   26 +-
 .../model/{plc_read_request.go => plc_read.go}     |   12 +-
 plc4go/pkg/plc4go/model/plc_read_response.go       |   29 -
 ...subscription_request.go => plc_subscription.go} |   46 +-
 plc4go/pkg/plc4go/model/plc_subscription_event.go  |   31 -
 .../pkg/plc4go/model/plc_subscription_response.go  |   25 -
 ...bscription_request.go => plc_unsubscription.go} |    3 +
 .../model/{plc_write_request.go => plc_write.go}   |    3 +
 plc4go/pkg/plc4go/model/plc_write_response.go      |   22 -
 plc4go/pkg/plc4go/transports/transports.go         |    4 +-
 plc4go/pom.xml                                     |    2 +-
 .../org/apache/plc4x/java/abeth/AbEthDriver.java   |    9 +
 .../org/apache/plc4x/java/ads/ADSPlcDriver.java    |    9 +
 .../plc4x/java/ads/field/DirectAdsField.java       |    2 +-
 .../plc4x/java/ads/field/DirectAdsStringField.java |    2 +-
 .../plc4x/java/ads/field/SymbolicAdsField.java     |    2 +-
 .../java/ads/field/SymbolicAdsStringField.java     |    2 +-
 .../plc4x/java/canopen/CANOpenPlcDriver.java       |    9 +
 .../apache/plc4x/java/eip/readwrite/EIPDriver.java |    9 +
 .../java/firmata/readwrite/FirmataDriver.java      |    9 +
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |    3 +
 .../plc4x/java/knxnetip/ets5/Ets5Parser.java       |   10 +-
 .../java/knxnetip/ets5/model/GroupAddress.java     |    8 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |    9 +-
 .../org/apache/plc4x/java/modbus/ModbusDriver.java |    9 +
 .../apache/plc4x/java/s7/readwrite/S7Driver.java   |    9 +
 .../java/s7/readwrite/optimizer/S7Optimizer.java   |    4 +-
 .../plc4x/java/s7/readwrite/issues/PLC4X272.java   |   29 +
 .../s7/src/test/resources/tests/PLC4X-272.xml      | 2282 +++++++
 plc4j/integrations/apache-kafka/pom.xml            |   48 +-
 .../org/apache/plc4x/kafka/Plc4xSinkConnector.java |    1 -
 .../java/org/apache/plc4x/kafka/Plc4xSinkTask.java |    2 -
 .../apache/plc4x/kafka/Plc4xSourceConnector.java   |    3 -
 .../org/apache/plc4x/kafka/Plc4xSourceTask.java    |    5 +-
 .../apache-kafka/src/remote-resources/LICENSE      |    7 +
 .../apache-kafka/src/remote-resources/NOTICE       |    4 +
 plc4j/integrations/opcua-server/pom.xml            |   23 +-
 .../java/opcuaserver/AttributeLoggingFilter.java   |   73 -
 .../plc4x/java/opcuaserver/KeyStoreLoader.java     |  163 -
 .../apache/plc4x/java/opcuaserver/OPCUAServer.java |  244 +-
 .../opcuaserver/backend/Plc4xCommunication.java    |  238 +-
 .../java/opcuaserver/backend/Plc4xNamespace.java   |  110 +-
 .../opcuaserver/configuration/Configuration.java   |    7 -
 .../opcuaserver/context/CertificateGenerator.java  |  122 +
 .../opcuaserver/context/CertificateKeyPair.java    |   38 +
 .../plc4x/java/opcuaserver/OpcuaPlcDriverTest.java |  245 +
 .../opcua-server/src/test/resources/config.yml     |    1 -
 .../apache/plc4x/java/spi/Plc4xNettyWrapper.java   |    1 +
 .../spi/connection/DefaultNettyPlcConnection.java  |   33 +-
 .../java/spi/connection/GeneratedDriverBase.java   |   13 +
 .../plc4x/test/driver/DriverTestsuiteRunner.java   |    3 +
 pom.xml                                            |    7 +-
 protocols/knxnetip/pom.xml                         |    7 +
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |  181 +-
 .../enrich/knxnetip/ets5/Ets5DataEnrichment.java   |    8 +-
 513 files changed, 27686 insertions(+), 15200 deletions(-)

diff --cc plc4j/integrations/opcua-server/pom.xml
index f920410,3313a16..21fcc24
--- a/plc4j/integrations/opcua-server/pom.xml
+++ b/plc4j/integrations/opcua-server/pom.xml
@@@ -208,8 -203,20 +203,25 @@@
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
      </dependency>
++<<<<<<< HEAD
 +
 +    
++=======
+     <dependency>
+ 	    <groupId>commons-io</groupId>
+ 	    <artifactId>commons-io</artifactId>
+ 	</dependency>
+ 
+     <dependency>
+       <groupId>io.vavr</groupId>
+       <artifactId>vavr</artifactId>
+     </dependency>
++>>>>>>> develop
+ 
+     <dependency>
+       <groupId>org.apache.commons</groupId>
+       <artifactId>commons-lang3</artifactId>
+     </dependency>
  
    </dependencies>
  
diff --cc plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
index 1fc70ad,177ef71..2343d11
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
@@@ -47,8 -48,9 +48,13 @@@ public class DefaultNettyPlcConnection 
      protected final Configuration configuration;
      protected final ChannelFactory channelFactory;
      protected final boolean awaitSessionSetupComplete;
+     protected final boolean awaitSessionDisconnectComplete;
      protected final ProtocolStackConfigurer stackConfigurer;
++<<<<<<< HEAD
 +    private final CompletableFuture<Void> sessionDisconnectCompleteFuture = new CompletableFuture<>();
++=======
+     protected final CompletableFuture<Void> sessionDisconnectCompleteFuture = new CompletableFuture<>();
++>>>>>>> develop
  
      protected Channel channel;
      protected boolean connected;
@@@ -107,15 -111,23 +115,33 @@@
          }
      }
  
+     /**
+      * Close the connection by firstly calling disconnect and waiting for a DisconnectedEvent occurs and then calling
+      * Close() to finish up any other clean up.
+      * @throws PlcConnectionException
+      */
      @Override
      public void close() throws PlcConnectionException {
++<<<<<<< HEAD
 +        // TODO call protocols close method
 +
 +        channel.pipeline().fireUserEventTriggered(new DisconnectEvent());
 +        try {
 +            sessionDisconnectCompleteFuture.get(10000L, TimeUnit.MILLISECONDS);
 +        } catch (Exception e) {
 +            //Do Nothing
++=======
+ 
+         logger.debug("Closing connection to PLC, await for disconnect = {}", awaitSessionDisconnectComplete);
+ 
+         channel.pipeline().fireUserEventTriggered(new DisconnectEvent());
+         try {
+             if (awaitSessionDisconnectComplete) {
+                 sessionDisconnectCompleteFuture.get(DEFAULT_DISCONNECT_WAIT_TIME, TimeUnit.MILLISECONDS);
+             }
+         } catch (Exception e) {
+             logger.error("Timeout while trying to close connection");
++>>>>>>> develop
          }
          channel.pipeline().fireUserEventTriggered(new CloseConnectionEvent());
  
diff --cc protocols/knxnetip/src/main/xslt/knx-types.xsl
index 3ae4e56,65a43f4..6590625
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@@ -46,15 -47,58 +47,68 @@@
  // specific language governing permissions and limitations
  // under the License.
  //
+ [enum uint 16 'KnxDatapointType' [uint 16 'number', uint 8 'sizeInBits', string 'name']
+     ['0' DPT_UNKNOWN ['0', '0', '"Unknown Datapoint Type"']]
+     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType"/>
+ ]
+ 
+ [enum uint 32 'KnxDatapointSubtype' [uint 16 'number', KnxDatapointType 'datapointType', string 'name']
+     ['0' DPST_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown Datapoint Subtype"']]
+     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype"/>
+ ]
  
+ [enum uint 16 'KnxInterfaceObjectType' [string 'code', string 'name']
+     ['0' OT_UNKNOWN ['U', '"Unknown Interface Object Type"']]
+     ['1' OT_GENERAL ['G', '"General Interface Object Type"']]
+     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectTypes/knx:InterfaceObjectType"/>
+ ]
+ 
++<<<<<<< HEAD
 +[enum uint 8 'KnxObjectType' [string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectTypes/knx:InterfaceObjectType"/>
 +]
 +
 +[enum uint 8 'KnxObjectProperties' [string '-1' 'name', string '-1' 'dataTypeId', string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
 +]
 +
 +[enum uint 16 'KnxManufacturers' [string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
++=======
+ [enum uint 32 'KnxInterfaceObjectProperty' [uint 8 'propertyId', KnxInterfaceObjectType 'objectType', KnxPropertyDataType 'propertyDataType', string 'name']
+     ['0' PID_UNKNOWN ['0', 'KnxInterfaceObjectType.OT_UNKNOWN', 'KnxPropertyDataType.PDT_UNKNOWN', '"Unknown Interface Object Property"']]
+     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
  ]
+ 
+ [enum uint 8 'KnxPropertyDataType' [uint 8 'number', uint 8 'sizeInBytes', string 'name']
+     ['0' PDT_UNKNOWN ['0', '0', '"Unknown Property Data Type"']]
+     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:PropertyDataTypes/knx:PropertyDataType"/>
+ ]
+ 
+ [enum uint 16 'KnxManufacturer' [uint 16 'number', string 'name']
+     ['0' M_UNKNOWN ['0', '"Unknown Manufacturer"']]
+     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
++>>>>>>> develop
+ ]
+     </xsl:template>
+ 
+     <xsl:template match="knx:DatapointType">
+         <xsl:variable name="datapointTypeId">
+             <xsl:call-template name="getDatapointTypeId">
+                 <xsl:with-param name="contextNode" select="."/>
+             </xsl:call-template>
+         </xsl:variable>['<xsl:value-of select="position()"/>' <xsl:value-of select="$datapointTypeId"/> ['<xsl:value-of select="@Number"/>', '<xsl:value-of select="@SizeInBit"/>', '"<xsl:value-of select="@Text"/>"']]
+     </xsl:template>
+ 
+     <xsl:template match="knx:DatapointSubtype">
+         <xsl:variable name="datapointSubtypeId">
+             <xsl:choose>
+                 <xsl:when test="fn:starts-with(@Name, 'DPT')">DPST_<xsl:value-of select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name, '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 'DPT_')"/></xsl:when>
+                 <xsl:otherwise>DPST_<xsl:for-each select="tokenize(@Name, ' ')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 2))"/><xsl:if test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
+             </xsl:choose>
+         </xsl:variable>
+         <xsl:variable name="datapointTypeId">
+             <xsl:call-template name="getDatapointTypeId">
+                 <xsl:with-param name="contextNode" select="../.."/>
+             </xsl:call-template>
+         </xsl:variable>['<xsl:value-of select="position()"/>' <xsl:value-of select="$datapointSubtypeId"/> ['<xsl:value-of select="@Number"/>', 'KnxDatapointType.<xsl:value-of select="$datapointTypeId"/>', '"<xsl:value-of select="@Text"/>"']]
      </xsl:template>
  
      <xsl:template match="knx:InterfaceObjectType">
@@@ -140,4 -178,11 +188,15 @@@
          </xsl:choose>
      </xsl:template>
  
++<<<<<<< HEAD
++</xsl:stylesheet>
++=======
+     <xsl:template name="getIdFromText">
+         <xsl:param name="text"/>
+         <xsl:variable name="cleanedText" select="fn:replace(fn:replace(fn:replace(fn:replace(fn:upper-case($text), '/', ''), '\(', ''), '\)', ''), '&#x2013;', '_')"/>
+         <xsl:variable name="cleanedText2" select="fn:replace(fn:replace($cleanedText, '&#x00B3;', '_3'), '&#xC9;', 'E')"/>
+         <xsl:value-of select="fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(normalize-space($cleanedText2),'&#xa0;', '_'), '&amp;', 'AND'), '-', '_'), ' ', '_'), '\.', '_'), ',', '_'), '\+', 'Plus'), '/', '_'), 'Ä', 'AE'), 'Ö', 'OE'), 'Ü', 'UE'), 'ß', 'SS'), ':', '_')"/>
+     </xsl:template>
+ 
 -</xsl:stylesheet>
 +</xsl:stylesheet>
++>>>>>>> develop