You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/11/20 15:35:24 UTC

[plc4x] branch feature/plc4go updated: - Fine tuned the code generation a bit to allow accessing some additional information

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

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


The following commit(s) were added to refs/heads/feature/plc4go by this push:
     new 797908c  - Fine tuned the code generation a bit to allow accessing some additional information
797908c is described below

commit 797908c1ff9e0940d074bb7b9e847cb2fb08f8a4
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Nov 20 16:34:04 2020 +0100

    - Fine tuned the code generation a bit to allow accessing some additional information
---
 .../BaseFreemarkerLanguageTemplateHelper.java      |  11 +
 .../plc4x/language/c/CLanguageTemplateHelper.java  |  10 -
 .../main/resources/templates/go/enum-template.ftlh |  10 +
 .../resources/templates/go/model-template.ftlh     |  10 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |   6 +
 .../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     |  32 +
 .../bacnetip/readwrite/model/BACnetAddress.go      |   4 +
 .../readwrite/model/BACnetConfirmedServiceACK.go   |   6 +
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |   4 +
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |   4 +
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |   4 +
 .../model/BACnetConfirmedServiceACKCreateObject.go |   4 +
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |   4 +
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |   4 +
 ...BACnetConfirmedServiceACKGetEventInformation.go |   4 +
 .../model/BACnetConfirmedServiceACKReadProperty.go |   4 +
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |   4 +
 .../model/BACnetConfirmedServiceACKReadRange.go    |   4 +
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |   4 +
 ...rmedServiceACKRemovedReadPropertyConditional.go |   4 +
 .../model/BACnetConfirmedServiceACKVTData.go       |   4 +
 .../model/BACnetConfirmedServiceACKVTOpen.go       |   4 +
 .../model/BACnetConfirmedServiceRequest.go         |   6 +
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |   4 +
 .../BACnetConfirmedServiceRequestAddListElement.go |   4 +
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |   4 +
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |   4 +
 ...firmedServiceRequestConfirmedCOVNotification.go |   8 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |   4 +
 ...rmedServiceRequestConfirmedEventNotification.go |   4 +
 ...firmedServiceRequestConfirmedPrivateTransfer.go |   4 +
 ...tConfirmedServiceRequestConfirmedTextMessage.go |   4 +
 .../BACnetConfirmedServiceRequestCreateObject.go   |   4 +
 .../BACnetConfirmedServiceRequestDeleteObject.go   |   4 +
 ...rmedServiceRequestDeviceCommunicationControl.go |   4 +
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |   4 +
 ...etConfirmedServiceRequestGetEventInformation.go |   4 +
 ...etConfirmedServiceRequestLifeSafetyOperation.go |   4 +
 .../BACnetConfirmedServiceRequestReadProperty.go   |   8 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |   4 +
 .../BACnetConfirmedServiceRequestReadRange.go      |   4 +
 ...netConfirmedServiceRequestReinitializeDevice.go |   4 +
 ...CnetConfirmedServiceRequestRemoveListElement.go |   4 +
 ...etConfirmedServiceRequestRemovedAuthenticate.go |   4 +
 ...ServiceRequestRemovedReadPropertyConditional.go |   4 +
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |   4 +
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |   8 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |   4 +
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |   4 +
 .../model/BACnetConfirmedServiceRequestVTClose.go  |   4 +
 .../model/BACnetConfirmedServiceRequestVTData.go   |   4 +
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |   4 +
 .../BACnetConfirmedServiceRequestWriteProperty.go  |   8 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |   4 +
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |   6 +
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |   4 +
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |   4 +
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |   4 +
 .../readwrite/model/BACnetErrorCreateObject.go     |   4 +
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |   4 +
 .../model/BACnetErrorGetEnrollmentSummary.go       |   4 +
 .../model/BACnetErrorGetEventInformation.go        |   4 +
 .../readwrite/model/BACnetErrorReadProperty.go     |  12 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |   4 +
 .../readwrite/model/BACnetErrorReadRange.go        |   4 +
 .../model/BACnetErrorRemovedAuthenticate.go        |   4 +
 .../BACnetErrorRemovedReadPropertyConditional.go   |   4 +
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |   4 +
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |   4 +
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |  28 +
 .../bacnetip/readwrite/model/BACnetNodeType.go     |  50 ++
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |  12 +
 .../bacnetip/readwrite/model/BACnetObjectType.go   | 124 ++++
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |   6 +
 .../model/BACnetServiceAckAtomicReadFile.go        |   4 +
 .../model/BACnetServiceAckAtomicWriteFile.go       |   4 +
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |   4 +
 .../model/BACnetServiceAckCreateObject.go          |   4 +
 .../model/BACnetServiceAckGetAlarmSummary.go       |   4 +
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |   4 +
 .../model/BACnetServiceAckGetEventInformation.go   |   4 +
 .../model/BACnetServiceAckReadProperty.go          |   8 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |   4 +
 .../readwrite/model/BACnetServiceAckReadRange.go   |   4 +
 .../model/BACnetServiceAckRemovedAuthenticate.go   |   4 +
 ...CnetServiceAckRemovedReadPropertyConditional.go |   4 +
 .../readwrite/model/BACnetServiceAckVTData.go      |   4 +
 .../readwrite/model/BACnetServiceAckVTOpen.go      |   4 +
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |   6 +
 .../model/BACnetTagApplicationBitString.go         |   8 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |   4 +
 .../model/BACnetTagApplicationCharacterString.go   |   4 +
 .../readwrite/model/BACnetTagApplicationDate.go    |   4 +
 .../readwrite/model/BACnetTagApplicationDouble.go  |   4 +
 .../model/BACnetTagApplicationEnumerated.go        |   8 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |   4 +
 .../model/BACnetTagApplicationObjectIdentifier.go  |   4 +
 .../model/BACnetTagApplicationOctetString.go       |   4 +
 .../readwrite/model/BACnetTagApplicationReal.go    |   4 +
 .../model/BACnetTagApplicationSignedInteger.go     |   8 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |   4 +
 .../model/BACnetTagApplicationUnsignedInteger.go   |   8 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |   8 +-
 .../readwrite/model/BACnetTagWithContent.go        |   4 +
 .../model/BACnetUnconfirmedServiceRequest.go       |   6 +
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |   8 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |   4 +
 ...UnconfirmedServiceRequestTimeSynchronization.go |   4 +
 ...onfirmedServiceRequestUTCTimeSynchronization.go |   4 +
 ...rmedServiceRequestUnconfirmedCOVNotification.go |   4 +
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |   4 +
 ...edServiceRequestUnconfirmedEventNotification.go |   4 +
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |   8 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |   4 +
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |   8 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  12 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |   4 +
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |   6 +
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |   4 +
 .../model/BVLCDistributeBroadcastToNetwork.go      |   4 +
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |   4 +
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |   4 +
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |   4 +
 .../model/BVLCReadBroadcastDistributionTable.go    |   4 +
 .../model/BVLCReadBroadcastDistributionTableAck.go |   4 +
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |   4 +
 .../model/BVLCReadForeignDeviceTableAck.go         |   4 +
 .../readwrite/model/BVLCRegisterForeignDevice.go   |   4 +
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |   4 +
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |   4 +
 .../model/BVLCWideBroadcastDistributionTable.go    |   4 +
 .../plc4go/bacnetip/readwrite/model/NLM.go         |   6 +
 .../readwrite/model/NLMIAmRouterToNetwork.go       |   4 +
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |   4 +
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |   4 +
 .../internal/plc4go/knxnetip/KnxNetIpConnection.go |  28 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go  |   4 +-
 .../internal/plc4go/knxnetip/KnxNetIpSubscriber.go |   4 +-
 .../plc4go/knxnetip/KnxNetIpSubscriptionEvent.go   |   2 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go  |   1 -
 .../plc4go/knxnetip/readwrite/model/APCI.go        |  38 ++
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |   6 +
 .../readwrite/model/CEMIAdditionalInformation.go   |   6 +
 .../CEMIAdditionalInformationBusmonitorInfo.go     |   4 +
 .../CEMIAdditionalInformationRelativeTimestamp.go  |   4 +
 .../knxnetip/readwrite/model/CEMIBusmonInd.go      |   4 +
 .../plc4go/knxnetip/readwrite/model/CEMIDataCon.go |   4 +
 .../knxnetip/readwrite/model/CEMIDataFrame.go      |  12 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataInd.go |   4 +
 .../plc4go/knxnetip/readwrite/model/CEMIDataReq.go |   4 +
 .../plc4go/knxnetip/readwrite/model/CEMIFrame.go   |   6 +
 .../knxnetip/readwrite/model/CEMIFrameAck.go       |   4 +
 .../knxnetip/readwrite/model/CEMIFrameData.go      |  12 +-
 .../knxnetip/readwrite/model/CEMIFrameDataExt.go   |  12 +-
 .../readwrite/model/CEMIFramePollingData.go        |   4 +
 .../readwrite/model/CEMIFramePollingDataExt.go     |   4 +
 .../knxnetip/readwrite/model/CEMIMPropReadCon.go   |   4 +
 .../knxnetip/readwrite/model/CEMIMPropReadReq.go   |   4 +
 .../knxnetip/readwrite/model/CEMIPollDataCon.go    |   4 +
 .../knxnetip/readwrite/model/CEMIPollDataReq.go    |   4 +
 .../knxnetip/readwrite/model/CEMIPriority.go       |  14 +
 .../plc4go/knxnetip/readwrite/model/CEMIRawCon.go  |   4 +
 .../plc4go/knxnetip/readwrite/model/CEMIRawInd.go  |   4 +
 .../plc4go/knxnetip/readwrite/model/CEMIRawReq.go  |   4 +
 .../knxnetip/readwrite/model/ConnectionRequest.go  |   4 +
 .../model/ConnectionRequestInformation.go          |   6 +
 ...ConnectionRequestInformationDeviceManagement.go |   4 +
 ...ConnectionRequestInformationTunnelConnection.go |   4 +
 .../knxnetip/readwrite/model/ConnectionResponse.go |   4 +
 .../readwrite/model/ConnectionResponseDataBlock.go |   6 +
 .../ConnectionResponseDataBlockDeviceManagement.go |   4 +
 .../ConnectionResponseDataBlockTunnelConnection.go |   4 +
 .../readwrite/model/ConnectionStateRequest.go      |   4 +
 .../readwrite/model/ConnectionStateResponse.go     |   4 +
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  12 +-
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |   4 +
 .../knxnetip/readwrite/model/DescriptionRequest.go |   4 +
 .../readwrite/model/DescriptionResponse.go         |   4 +
 .../readwrite/model/DeviceConfigurationAck.go      |   4 +
 .../model/DeviceConfigurationAckDataBlock.go       |   4 +
 .../readwrite/model/DeviceConfigurationRequest.go  |   4 +
 .../model/DeviceConfigurationRequestDataBlock.go   |   4 +
 .../knxnetip/readwrite/model/DeviceStatus.go       |   4 +
 .../knxnetip/readwrite/model/DisconnectRequest.go  |   4 +
 .../knxnetip/readwrite/model/DisconnectResponse.go |   4 +
 .../readwrite/model/HPAIControlEndpoint.go         |   4 +
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |   4 +
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |   4 +
 .../knxnetip/readwrite/model/HostProtocolCode.go   |  10 +
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |   8 +-
 .../plc4go/knxnetip/readwrite/model/KnxAddress.go  |   4 +
 .../knxnetip/readwrite/model/KnxDatapointType.go   | 720 +++++++++++++++++++++
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |   6 +
 .../readwrite/model/KnxGroupAddress2Level.go       |   4 +
 .../readwrite/model/KnxGroupAddress3Level.go       |   4 +
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |   4 +
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |  12 +
 .../plc4go/knxnetip/readwrite/model/KnxMedium.go   |  18 +
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |   4 +
 .../readwrite/model/KnxNetIpDeviceManagement.go    |   4 +
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |   6 +
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |   4 +
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |   4 +
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |   4 +
 .../readwrite/model/KnxNetRemoteLogging.go         |   4 +
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |   8 +-
 .../model/ProjectInstallationIdentifier.go         |   4 +
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |   4 +
 .../knxnetip/readwrite/model/RoutingIndication.go  |   4 +
 .../knxnetip/readwrite/model/SearchRequest.go      |   4 +
 .../knxnetip/readwrite/model/SearchResponse.go     |   4 +
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |   6 +
 .../plc4go/knxnetip/readwrite/model/Status.go      |  30 +
 .../readwrite/model/SupportedPhysicalMedia.go      | 324 ++++++++++
 .../plc4go/knxnetip/readwrite/model/TPCI.go        |  14 +
 .../knxnetip/readwrite/model/TunnelingRequest.go   |   4 +
 .../readwrite/model/TunnelingRequestDataBlock.go   |   4 +
 .../knxnetip/readwrite/model/TunnelingResponse.go  |   4 +
 .../readwrite/model/TunnelingResponseDataBlock.go  |   4 +
 .../knxnetip/readwrite/model/UnknownMessage.go     |   8 +-
 plc4go/internal/plc4go/modbus/ModbusReader.go      |   8 +-
 plc4go/internal/plc4go/modbus/ModbusWriter.go      |   2 +-
 .../modbus/readwrite/model/ModbusConstants.go      |   4 +
 .../modbus/readwrite/model/ModbusDataTypeSizes.go  |  60 ++
 .../modbus/readwrite/model/ModbusErrorCode.go      |  26 +
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |   6 +
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |   4 +
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |   4 +
 .../modbus/readwrite/model/ModbusPDUError.go       |   4 +
 .../model/ModbusPDUGetComEventCounterRequest.go    |   4 +
 .../model/ModbusPDUGetComEventCounterResponse.go   |   4 +
 .../model/ModbusPDUGetComEventLogRequest.go        |   4 +
 .../model/ModbusPDUGetComEventLogResponse.go       |   8 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |   4 +
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |   4 +
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |   4 +
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |   8 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |   4 +
 .../ModbusPDUReadDeviceIdentificationResponse.go   |   4 +
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |   4 +
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |   8 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |   4 +
 .../model/ModbusPDUReadExceptionStatusResponse.go  |   4 +
 .../model/ModbusPDUReadFifoQueueRequest.go         |   4 +
 .../model/ModbusPDUReadFifoQueueResponse.go        |   4 +
 .../model/ModbusPDUReadFileRecordRequest.go        |   4 +
 .../model/ModbusPDUReadFileRecordRequestItem.go    |   4 +
 .../model/ModbusPDUReadFileRecordResponse.go       |   4 +
 .../model/ModbusPDUReadFileRecordResponseItem.go   |   8 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |   4 +
 .../model/ModbusPDUReadHoldingRegistersResponse.go |   8 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |   4 +
 .../model/ModbusPDUReadInputRegistersResponse.go   |   8 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |   8 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |   8 +-
 .../model/ModbusPDUReportServerIdRequest.go        |   4 +
 .../model/ModbusPDUReportServerIdResponse.go       |   8 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |   4 +
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |   8 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |   4 +
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |   8 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |   8 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |   4 +
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |   8 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |   4 +
 .../model/ModbusPDUWriteSingleCoilRequest.go       |   4 +
 .../model/ModbusPDUWriteSingleCoilResponse.go      |   4 +
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |   4 +
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |   4 +
 .../modbus/readwrite/model/ModbusSerialADU.go      |   4 +
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |   4 +
 .../plc4go/s7/readwrite/model/COTPPacket.go        |   6 +
 .../readwrite/model/COTPPacketConnectionRequest.go |   4 +
 .../model/COTPPacketConnectionResponse.go          |   4 +
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |   4 +
 .../readwrite/model/COTPPacketDisconnectRequest.go |   4 +
 .../model/COTPPacketDisconnectResponse.go          |   4 +
 .../s7/readwrite/model/COTPPacketTpduError.go      |   4 +
 .../plc4go/s7/readwrite/model/COTPParameter.go     |   6 +
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |   4 +
 .../s7/readwrite/model/COTPParameterCallingTsap.go |   4 +
 .../s7/readwrite/model/COTPParameterChecksum.go    |   4 +
 ...COTPParameterDisconnectAdditionalInformation.go |   4 +
 .../s7/readwrite/model/COTPParameterTpduSize.go    |   4 +
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |  16 +
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |  20 +
 .../s7/readwrite/model/DataTransportErrorCode.go   |  18 +
 .../plc4go/s7/readwrite/model/DataTransportSize.go |  20 +
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |  12 +
 .../plc4go/s7/readwrite/model/MemoryArea.go        |  24 +
 .../plc4go/s7/readwrite/model/S7Address.go         |   6 +
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |   4 +
 .../plc4go/s7/readwrite/model/S7Message.go         |   6 +
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |   4 +
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |   4 +
 .../s7/readwrite/model/S7MessageResponseData.go    |   4 +
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |   4 +
 .../plc4go/s7/readwrite/model/S7Parameter.go       |   6 +
 .../readwrite/model/S7ParameterReadVarRequest.go   |   4 +
 .../readwrite/model/S7ParameterReadVarResponse.go  |   4 +
 .../model/S7ParameterSetupCommunication.go         |   4 +
 .../s7/readwrite/model/S7ParameterUserData.go      |   4 +
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |   6 +
 .../model/S7ParameterUserDataItemCPUFunctions.go   |   4 +
 .../readwrite/model/S7ParameterWriteVarRequest.go  |   4 +
 .../readwrite/model/S7ParameterWriteVarResponse.go |   4 +
 .../plc4go/s7/readwrite/model/S7Payload.go         |   6 +
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |   4 +
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |   4 +
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |   6 +
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |   4 +
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |   4 +
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |   4 +
 .../readwrite/model/S7PayloadWriteVarResponse.go   |   4 +
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |   8 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |   4 +
 .../readwrite/model/S7VarRequestParameterItem.go   |   6 +
 .../model/S7VarRequestParameterItemAddress.go      |   4 +
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |   8 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |   4 +
 .../s7/readwrite/model/SzlModuleTypeClass.go       |  14 +
 .../plc4go/s7/readwrite/model/SzlSublist.go        |  44 ++
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |   4 +
 .../plc4go/s7/readwrite/model/TransportSize.go     |  36 ++
 plc4go/internal/plc4go/utils/CastUtils.go          |  24 +-
 333 files changed, 3117 insertions(+), 123 deletions(-)

diff --git a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
index 25a68cf..0db6445 100644
--- a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
+++ b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.plugins.codegenerator.protocol.freemarker;
 import net.objecthunter.exp4j.Expression;
 import net.objecthunter.exp4j.ExpressionBuilder;
 import org.apache.plc4x.plugins.codegenerator.types.definitions.*;
+import org.apache.plc4x.plugins.codegenerator.types.enums.EnumValue;
 import org.apache.plc4x.plugins.codegenerator.types.fields.*;
 import org.apache.plc4x.plugins.codegenerator.types.references.ComplexTypeReference;
 import org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
@@ -837,4 +838,14 @@ public abstract class BaseFreemarkerLanguageTemplateHelper implements Freemarker
         return false;
     }
 
+    public Collection<EnumValue> getUniqueEnumValues(EnumValue[] enumValues) {
+        Map<String, EnumValue> filteredEnumValues = new TreeMap<>();
+        for (EnumValue enumValue : enumValues) {
+            if (!filteredEnumValues.containsKey(enumValue.getValue())) {
+                filteredEnumValues.put(enumValue.getValue(), enumValue);
+            }
+        }
+        return filteredEnumValues.values();
+    }
+
 }
diff --git a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
index 8c48fdf..71f2f56 100644
--- a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
+++ b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
@@ -335,16 +335,6 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
         }
     }
 
-    public Collection<EnumValue> getUniqueEnumValues(EnumValue[] enumValues) {
-        Map<String, EnumValue> filteredEnumValues = new TreeMap<>();
-        for (EnumValue enumValue : enumValues) {
-            if (!filteredEnumValues.containsKey(enumValue.getValue())) {
-                filteredEnumValues.put(enumValue.getValue(), enumValue);
-            }
-        }
-        return filteredEnumValues.values();
-    }
-
     @Override
     public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String valueString) {
         switch (simpleTypeReference.getBaseType()) {
diff --git a/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh
index c41439e..6b74b63 100644
--- a/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh
@@ -136,4 +136,14 @@ func (e ${type.name}) Serialize(io utils.WriteBuffer) error {
 }
     </#if>
 </#if>
+
+func (e ${type.name}) String() string {
+    switch e {
+    <#list helper.getUniqueEnumValues(type.enumValues) as enumValue>
+    case ${type.name}_${enumValue.name}:
+        return "${enumValue.name}"
+    </#list>
+    }
+    return ""
+}
 </#outputformat>
\ No newline at end of file
diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index 323a92a..9b51436 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@ -136,11 +136,13 @@ func (m *${type.name}) ${discriminatorName?cap_first}() ${helper.getLanguageType
 
 type I${type.name}Parent interface {
     SerializeParent(io utils.WriteBuffer, child I${type.name}, serializeChildFunction func() error<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error
+    GetTypeName() string
 }
 
 type I${type.name}Child interface {
     Serialize(io utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error
     InitializeParent(parent *${type.name}<#if type.getPropertyFields()?has_content>, <#list type.getPropertyFields() as field>${field.name} <#if field.loopType??>[]</#if><#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list></#if>)
+    GetTypeName() string
     I${type.name}
 }
     <#--list helper.getDiscriminatorTypes() as discriminatorName, discriminatorType>
@@ -196,6 +198,10 @@ func Cast${type.name}(structType interface{}) *${type.name} {
     return castFunc(structType)
 }
 
+func (m *${type.name}) GetTypeName() string {
+    return "${type.name}"
+}
+
 func (m *${type.name}) LengthInBits() uint16 {
     lengthInBits := uint16(0)
     <#list type.fields as field>
@@ -895,7 +901,7 @@ func (m *${type.name}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) erro
                 if err != nil {
                     return err
                 }
-                m.${field.name?cap_first} = utils.ByteToInt8(_decoded[0:_len])
+                m.${field.name?cap_first} = utils.ByteArrayToInt8Array(_decoded[0:_len])
                 <#elseif helper.isComplexTypeReference(field.type) && helper.isDiscriminatedParentTypeDefinition(helper.getTypeDefinitionForTypeReference(field.type))>
                     <#if helper.isArrayField(field)>
                 var _values []<#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForTypeReference(field.type)}
@@ -989,7 +995,7 @@ func (m *${type.name}) MarshalXML(e *xml.Encoder, start xml.StartElement) error
             <#-- int8 arrays are serialized in Base64 encoding -->
                 <#if helper.isArrayField(field) && (helper.getLanguageTypeNameForField(field) == 'int8')>
     _encoded${field.name?cap_first} := make([]byte, base64.StdEncoding.EncodedLen(len(m.${field.name?cap_first})))
-    base64.StdEncoding.Encode(_encoded${field.name?cap_first}, utils.Int8ToByte(m.${field.name?cap_first}))
+    base64.StdEncoding.Encode(_encoded${field.name?cap_first}, utils.Int8ArrayToByteArray(m.${field.name?cap_first}))
     if err := e.EncodeElement(_encoded${field.name?cap_first}, xml.StartElement{Name: xml.Name{Local: "${field.name}"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index e9e3e9f..53c1adf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -45,11 +45,13 @@ type IAPDU interface {
 
 type IAPDUParent interface {
     SerializeParent(io utils.WriteBuffer, child IAPDU, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IAPDUChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *APDU)
+    GetTypeName() string
     IAPDU
 }
 
@@ -70,6 +72,10 @@ func CastAPDU(structType interface{}) *APDU {
     return castFunc(structType)
 }
 
+func (m *APDU) GetTypeName() string {
+    return "APDU"
+}
+
 func (m *APDU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index 5b61f76..0ffe59d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -84,6 +84,10 @@ func CastAPDUAbort(structType interface{}) *APDUAbort {
     return castFunc(structType)
 }
 
+func (m *APDUAbort) GetTypeName() string {
+    return "APDUAbort"
+}
+
 func (m *APDUAbort) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index 9d409da..afbaf2c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -90,6 +90,10 @@ func CastAPDUComplexAck(structType interface{}) *APDUComplexAck {
     return castFunc(structType)
 }
 
+func (m *APDUComplexAck) GetTypeName() string {
+    return "APDUComplexAck"
+}
+
 func (m *APDUComplexAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
index 92b9ff0..d4d7617 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -96,6 +96,10 @@ func CastAPDUConfirmedRequest(structType interface{}) *APDUConfirmedRequest {
     return castFunc(structType)
 }
 
+func (m *APDUConfirmedRequest) GetTypeName() string {
+    return "APDUConfirmedRequest"
+}
+
 func (m *APDUConfirmedRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index 9657708..5ec5827 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -82,6 +82,10 @@ func CastAPDUError(structType interface{}) *APDUError {
     return castFunc(structType)
 }
 
+func (m *APDUError) GetTypeName() string {
+    return "APDUError"
+}
+
 func (m *APDUError) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index c168daa..75db986 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -82,6 +82,10 @@ func CastAPDUReject(structType interface{}) *APDUReject {
     return castFunc(structType)
 }
 
+func (m *APDUReject) GetTypeName() string {
+    return "APDUReject"
+}
+
 func (m *APDUReject) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index 8802f73..9dd11bb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -88,6 +88,10 @@ func CastAPDUSegmentAck(structType interface{}) *APDUSegmentAck {
     return castFunc(structType)
 }
 
+func (m *APDUSegmentAck) GetTypeName() string {
+    return "APDUSegmentAck"
+}
+
 func (m *APDUSegmentAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 0456e77..09b53ba 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -82,6 +82,10 @@ func CastAPDUSimpleAck(structType interface{}) *APDUSimpleAck {
     return castFunc(structType)
 }
 
+func (m *APDUSimpleAck) GetTypeName() string {
+    return "APDUSimpleAck"
+}
+
 func (m *APDUSimpleAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
index 051a6e9..ae0ba7a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -80,6 +80,10 @@ func CastAPDUUnconfirmedRequest(structType interface{}) *APDUUnconfirmedRequest
     return castFunc(structType)
 }
 
+func (m *APDUUnconfirmedRequest) GetTypeName() string {
+    return "APDUUnconfirmedRequest"
+}
+
 func (m *APDUUnconfirmedRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
index 95fab5f..fdf40a9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
@@ -106,3 +106,35 @@ func (e ApplicationTag) Serialize(io utils.WriteBuffer) error {
     err := io.WriteInt8(4, int8(e))
     return err
 }
+
+func (e ApplicationTag) String() string {
+    switch e {
+    case ApplicationTag_NULL:
+        return "NULL"
+    case ApplicationTag_BOOLEAN:
+        return "BOOLEAN"
+    case ApplicationTag_UNSIGNED_INTEGER:
+        return "UNSIGNED_INTEGER"
+    case ApplicationTag_SIGNED_INTEGER:
+        return "SIGNED_INTEGER"
+    case ApplicationTag_REAL:
+        return "REAL"
+    case ApplicationTag_DOUBLE:
+        return "DOUBLE"
+    case ApplicationTag_OCTET_STRING:
+        return "OCTET_STRING"
+    case ApplicationTag_CHARACTER_STRING:
+        return "CHARACTER_STRING"
+    case ApplicationTag_BIT_STRING:
+        return "BIT_STRING"
+    case ApplicationTag_ENUMERATED:
+        return "ENUMERATED"
+    case ApplicationTag_DATE:
+        return "DATE"
+    case ApplicationTag_TIME:
+        return "TIME"
+    case ApplicationTag_BACNET_OBJECT_IDENTIFIER:
+        return "BACNET_OBJECT_IDENTIFIER"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
index ae6a907..e244db8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
@@ -57,6 +57,10 @@ func CastBACnetAddress(structType interface{}) *BACnetAddress {
     return castFunc(structType)
 }
 
+func (m *BACnetAddress) GetTypeName() string {
+    return "BACnetAddress"
+}
+
 func (m *BACnetAddress) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
index 8a59797..2f646e4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -45,11 +45,13 @@ type IBACnetConfirmedServiceACK interface {
 
 type IBACnetConfirmedServiceACKParent interface {
     SerializeParent(io utils.WriteBuffer, child IBACnetConfirmedServiceACK, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBACnetConfirmedServiceACKChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BACnetConfirmedServiceACK)
+    GetTypeName() string
     IBACnetConfirmedServiceACK
 }
 
@@ -70,6 +72,10 @@ func CastBACnetConfirmedServiceACK(structType interface{}) *BACnetConfirmedServi
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACK) GetTypeName() string {
+    return "BACnetConfirmedServiceACK"
+}
+
 func (m *BACnetConfirmedServiceACK) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
index bda9eaf..b598055 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKAtomicReadFile(structType interface{}) *BACnet
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKAtomicReadFile) GetTypeName() string {
+    return "BACnetConfirmedServiceACKAtomicReadFile"
+}
+
 func (m *BACnetConfirmedServiceACKAtomicReadFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
index cb1ec2a..d1cafc4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKAtomicWriteFile(structType interface{}) *BACne
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKAtomicWriteFile) GetTypeName() string {
+    return "BACnetConfirmedServiceACKAtomicWriteFile"
+}
+
 func (m *BACnetConfirmedServiceACKAtomicWriteFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
index ae64148..cdb25c2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(structType interface{
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) GetTypeName() string {
+    return "BACnetConfirmedServiceACKConfirmedPrivateTransfer"
+}
+
 func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
index 056fc83..e22fdba 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKCreateObject(structType interface{}) *BACnetCo
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKCreateObject) GetTypeName() string {
+    return "BACnetConfirmedServiceACKCreateObject"
+}
+
 func (m *BACnetConfirmedServiceACKCreateObject) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
index 46ecd82..740ee38 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKGetAlarmSummary(structType interface{}) *BACne
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKGetAlarmSummary) GetTypeName() string {
+    return "BACnetConfirmedServiceACKGetAlarmSummary"
+}
+
 func (m *BACnetConfirmedServiceACKGetAlarmSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
index dcdc3a5..60eafe9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKGetEnrollmentSummary(structType interface{}) *
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) GetTypeName() string {
+    return "BACnetConfirmedServiceACKGetEnrollmentSummary"
+}
+
 func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
index 08747f4..97e783e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKGetEventInformation(structType interface{}) *B
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKGetEventInformation) GetTypeName() string {
+    return "BACnetConfirmedServiceACKGetEventInformation"
+}
+
 func (m *BACnetConfirmedServiceACKGetEventInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
index 099af1c..ce47d34 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKReadProperty(structType interface{}) *BACnetCo
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKReadProperty) GetTypeName() string {
+    return "BACnetConfirmedServiceACKReadProperty"
+}
+
 func (m *BACnetConfirmedServiceACKReadProperty) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
index 42910d9..f85fee5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKReadPropertyMultiple(structType interface{}) *
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKReadPropertyMultiple) GetTypeName() string {
+    return "BACnetConfirmedServiceACKReadPropertyMultiple"
+}
+
 func (m *BACnetConfirmedServiceACKReadPropertyMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
index a38118a..4d0b706 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKReadRange(structType interface{}) *BACnetConfi
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKReadRange) GetTypeName() string {
+    return "BACnetConfirmedServiceACKReadRange"
+}
+
 func (m *BACnetConfirmedServiceACKReadRange) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
index 82f85fb..72e6e2e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKRemovedAuthenticate(structType interface{}) *B
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKRemovedAuthenticate) GetTypeName() string {
+    return "BACnetConfirmedServiceACKRemovedAuthenticate"
+}
+
 func (m *BACnetConfirmedServiceACKRemovedAuthenticate) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
index e2c4e21..4d3e570 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(structType inte
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) GetTypeName() string {
+    return "BACnetConfirmedServiceACKRemovedReadPropertyConditional"
+}
+
 func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
index d4387c7..4193ac9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKVTData(structType interface{}) *BACnetConfirme
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKVTData) GetTypeName() string {
+    return "BACnetConfirmedServiceACKVTData"
+}
+
 func (m *BACnetConfirmedServiceACKVTData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
index be75556..c51156f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceACKVTOpen(structType interface{}) *BACnetConfirme
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceACKVTOpen) GetTypeName() string {
+    return "BACnetConfirmedServiceACKVTOpen"
+}
+
 func (m *BACnetConfirmedServiceACKVTOpen) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index 12e13a2..67631e5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -45,11 +45,13 @@ type IBACnetConfirmedServiceRequest interface {
 
 type IBACnetConfirmedServiceRequestParent interface {
     SerializeParent(io utils.WriteBuffer, child IBACnetConfirmedServiceRequest, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBACnetConfirmedServiceRequestChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BACnetConfirmedServiceRequest)
+    GetTypeName() string
     IBACnetConfirmedServiceRequest
 }
 
@@ -70,6 +72,10 @@ func CastBACnetConfirmedServiceRequest(structType interface{}) *BACnetConfirmedS
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequest) GetTypeName() string {
+    return "BACnetConfirmedServiceRequest"
+}
+
 func (m *BACnetConfirmedServiceRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index 42d4212..506e88b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestAcknowledgeAlarm(structType interface{}) *
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestAcknowledgeAlarm"
+}
+
 func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index 08b322d..a3cbb4b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestAddListElement(structType interface{}) *BA
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestAddListElement) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestAddListElement"
+}
+
 func (m *BACnetConfirmedServiceRequestAddListElement) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index 6bcca42..dcc0896 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestAtomicReadFile(structType interface{}) *BA
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestAtomicReadFile) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestAtomicReadFile"
+}
+
 func (m *BACnetConfirmedServiceRequestAtomicReadFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index c2ab911..47844e3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestAtomicWriteFile(structType interface{}) *B
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestAtomicWriteFile) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestAtomicWriteFile"
+}
+
 func (m *BACnetConfirmedServiceRequestAtomicWriteFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index f9e366d..4a8c30c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -103,6 +103,10 @@ func CastBACnetConfirmedServiceRequestConfirmedCOVNotification(structType interf
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestConfirmedCOVNotification"
+}
+
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -454,7 +458,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) UnmarshalXML(d *
                 if err != nil {
                     return err
                 }
-                m.LifetimeSeconds = utils.ByteToInt8(_decoded[0:_len])
+                m.LifetimeSeconds = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "notifications":
                 var data []*BACnetTagWithContent
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -493,7 +497,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) MarshalXML(e *xm
         return err
     }
     _encodedLifetimeSeconds := make([]byte, base64.StdEncoding.EncodedLen(len(m.LifetimeSeconds)))
-    base64.StdEncoding.Encode(_encodedLifetimeSeconds, utils.Int8ToByte(m.LifetimeSeconds))
+    base64.StdEncoding.Encode(_encodedLifetimeSeconds, utils.Int8ArrayToByteArray(m.LifetimeSeconds))
     if err := e.EncodeElement(_encodedLifetimeSeconds, xml.StartElement{Name: xml.Name{Local: "lifetimeSeconds"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index a3ec289..516a9c1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(structTyp
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple"
+}
+
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index ef6be05..1db40dd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestConfirmedEventNotification(structType inte
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestConfirmedEventNotification"
+}
+
 func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index c3251e0..b4d8760 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(structType interf
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestConfirmedPrivateTransfer"
+}
+
 func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index f4f0a74..07f9006 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestConfirmedTextMessage(structType interface{
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestConfirmedTextMessage"
+}
+
 func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index 80cfd5f..1360d41 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestCreateObject(structType interface{}) *BACn
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestCreateObject) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestCreateObject"
+}
+
 func (m *BACnetConfirmedServiceRequestCreateObject) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index b64c638..b913c8d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestDeleteObject(structType interface{}) *BACn
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestDeleteObject) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestDeleteObject"
+}
+
 func (m *BACnetConfirmedServiceRequestDeleteObject) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index 2049f42..78bc7d1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestDeviceCommunicationControl(structType inte
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestDeviceCommunicationControl"
+}
+
 func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index dbdc8d8..ab1af9c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestGetEnrollmentSummary(structType interface{
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestGetEnrollmentSummary"
+}
+
 func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index 569c83b..9b509f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestGetEventInformation(structType interface{}
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestGetEventInformation) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestGetEventInformation"
+}
+
 func (m *BACnetConfirmedServiceRequestGetEventInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index 94a91b1..149cc5e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestLifeSafetyOperation(structType interface{}
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestLifeSafetyOperation"
+}
+
 func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index cb43ba6..d67702a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -91,6 +91,10 @@ func CastBACnetConfirmedServiceRequestReadProperty(structType interface{}) *BACn
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestReadProperty) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestReadProperty"
+}
+
 func (m *BACnetConfirmedServiceRequestReadProperty) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -270,7 +274,7 @@ func (m *BACnetConfirmedServiceRequestReadProperty) UnmarshalXML(d *xml.Decoder,
                 if err != nil {
                     return err
                 }
-                m.PropertyIdentifier = utils.ByteToInt8(_decoded[0:_len])
+                m.PropertyIdentifier = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -294,7 +298,7 @@ func (m *BACnetConfirmedServiceRequestReadProperty) MarshalXML(e *xml.Encoder, s
         return err
     }
     _encodedPropertyIdentifier := make([]byte, base64.StdEncoding.EncodedLen(len(m.PropertyIdentifier)))
-    base64.StdEncoding.Encode(_encodedPropertyIdentifier, utils.Int8ToByte(m.PropertyIdentifier))
+    base64.StdEncoding.Encode(_encodedPropertyIdentifier, utils.Int8ArrayToByteArray(m.PropertyIdentifier))
     if err := e.EncodeElement(_encodedPropertyIdentifier, xml.StartElement{Name: xml.Name{Local: "propertyIdentifier"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index 576ba7b..e898d81 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestReadPropertyMultiple(structType interface{
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestReadPropertyMultiple"
+}
+
 func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index ddfd383..729e18d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestReadRange(structType interface{}) *BACnetC
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestReadRange) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestReadRange"
+}
+
 func (m *BACnetConfirmedServiceRequestReadRange) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index 71eabf4..e099231 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestReinitializeDevice(structType interface{})
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestReinitializeDevice) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestReinitializeDevice"
+}
+
 func (m *BACnetConfirmedServiceRequestReinitializeDevice) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index c92ac7f..64a4e2d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestRemoveListElement(structType interface{})
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestRemoveListElement) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestRemoveListElement"
+}
+
 func (m *BACnetConfirmedServiceRequestRemoveListElement) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index 8a7fc44..6cbb52f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestRemovedAuthenticate(structType interface{}
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestRemovedAuthenticate"
+}
+
 func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index 45ba3cb..7464377 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(structType
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestRemovedReadPropertyConditional"
+}
+
 func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index ceca5f4..fd1304d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestRemovedRequestKey(structType interface{})
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestRemovedRequestKey) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestRemovedRequestKey"
+}
+
 func (m *BACnetConfirmedServiceRequestRemovedRequestKey) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index 99ce2d1..b4f49ad 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -98,6 +98,10 @@ func CastBACnetConfirmedServiceRequestSubscribeCOV(structType interface{}) *BACn
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestSubscribeCOV) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestSubscribeCOV"
+}
+
 func (m *BACnetConfirmedServiceRequestSubscribeCOV) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -377,7 +381,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) UnmarshalXML(d *xml.Decoder,
                 if err != nil {
                     return err
                 }
-                m.LifetimeSeconds = utils.ByteToInt8(_decoded[0:_len])
+                m.LifetimeSeconds = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -407,7 +411,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) MarshalXML(e *xml.Encoder, s
         return err
     }
     _encodedLifetimeSeconds := make([]byte, base64.StdEncoding.EncodedLen(len(m.LifetimeSeconds)))
-    base64.StdEncoding.Encode(_encodedLifetimeSeconds, utils.Int8ToByte(m.LifetimeSeconds))
+    base64.StdEncoding.Encode(_encodedLifetimeSeconds, utils.Int8ArrayToByteArray(m.LifetimeSeconds))
     if err := e.EncodeElement(_encodedLifetimeSeconds, xml.StartElement{Name: xml.Name{Local: "lifetimeSeconds"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index 331a641..03d75f9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestSubscribeCOVProperty(structType interface{
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestSubscribeCOVProperty"
+}
+
 func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index 70eac90..f1de22e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(structType in
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"
+}
+
 func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index d64acd0..987bd94 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestVTClose(structType interface{}) *BACnetCon
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestVTClose) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestVTClose"
+}
+
 func (m *BACnetConfirmedServiceRequestVTClose) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index d644250..feed0cc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestVTData(structType interface{}) *BACnetConf
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestVTData) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestVTData"
+}
+
 func (m *BACnetConfirmedServiceRequestVTData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index b3e5042..737580d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestVTOpen(structType interface{}) *BACnetConf
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestVTOpen) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestVTOpen"
+}
+
 func (m *BACnetConfirmedServiceRequestVTOpen) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 3b7f96d..1f9158f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -97,6 +97,10 @@ func CastBACnetConfirmedServiceRequestWriteProperty(structType interface{}) *BAC
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestWriteProperty) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestWriteProperty"
+}
+
 func (m *BACnetConfirmedServiceRequestWriteProperty) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -357,7 +361,7 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) UnmarshalXML(d *xml.Decoder
                 if err != nil {
                     return err
                 }
-                m.PropertyIdentifier = utils.ByteToInt8(_decoded[0:_len])
+                m.PropertyIdentifier = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "value":
                 var dt *BACnetTag
                 if err := d.DecodeElement(&dt, &tok); err != nil {
@@ -393,7 +397,7 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) MarshalXML(e *xml.Encoder,
         return err
     }
     _encodedPropertyIdentifier := make([]byte, base64.StdEncoding.EncodedLen(len(m.PropertyIdentifier)))
-    base64.StdEncoding.Encode(_encodedPropertyIdentifier, utils.Int8ToByte(m.PropertyIdentifier))
+    base64.StdEncoding.Encode(_encodedPropertyIdentifier, utils.Int8ArrayToByteArray(m.PropertyIdentifier))
     if err := e.EncodeElement(_encodedPropertyIdentifier, xml.StartElement{Name: xml.Name{Local: "propertyIdentifier"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index e656758..1849a86 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetConfirmedServiceRequestWritePropertyMultiple(structType interface
     return castFunc(structType)
 }
 
+func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) GetTypeName() string {
+    return "BACnetConfirmedServiceRequestWritePropertyMultiple"
+}
+
 func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
index dcabe3a..189aad7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -45,11 +45,13 @@ type IBACnetError interface {
 
 type IBACnetErrorParent interface {
     SerializeParent(io utils.WriteBuffer, child IBACnetError, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBACnetErrorChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BACnetError)
+    GetTypeName() string
     IBACnetError
 }
 
@@ -70,6 +72,10 @@ func CastBACnetError(structType interface{}) *BACnetError {
     return castFunc(structType)
 }
 
+func (m *BACnetError) GetTypeName() string {
+    return "BACnetError"
+}
+
 func (m *BACnetError) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
index 420e2a8..182bf0c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -76,6 +76,10 @@ func CastBACnetErrorAtomicReadFile(structType interface{}) *BACnetErrorAtomicRea
     return castFunc(structType)
 }
 
+func (m *BACnetErrorAtomicReadFile) GetTypeName() string {
+    return "BACnetErrorAtomicReadFile"
+}
+
 func (m *BACnetErrorAtomicReadFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
index cd99d21..af088f9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -76,6 +76,10 @@ func CastBACnetErrorAtomicWriteFile(structType interface{}) *BACnetErrorAtomicWr
     return castFunc(structType)
 }
 
+func (m *BACnetErrorAtomicWriteFile) GetTypeName() string {
+    return "BACnetErrorAtomicWriteFile"
+}
+
 func (m *BACnetErrorAtomicWriteFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
index d33169a..36d4bed 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -76,6 +76,10 @@ func CastBACnetErrorConfirmedPrivateTransfer(structType interface{}) *BACnetErro
     return castFunc(structType)
 }
 
+func (m *BACnetErrorConfirmedPrivateTransfer) GetTypeName() string {
+    return "BACnetErrorConfirmedPrivateTransfer"
+}
+
 func (m *BACnetErrorConfirmedPrivateTransfer) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
index 718c589..88c96dc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -76,6 +76,10 @@ func CastBACnetErrorCreateObject(structType interface{}) *BACnetErrorCreateObjec
     return castFunc(structType)
 }
 
+func (m *BACnetErrorCreateObject) GetTypeName() string {
+    return "BACnetErrorCreateObject"
+}
+
 func (m *BACnetErrorCreateObject) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
index 6823b49..fdcaef9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -76,6 +76,10 @@ func CastBACnetErrorGetAlarmSummary(structType interface{}) *BACnetErrorGetAlarm
     return castFunc(structType)
 }
 
+func (m *BACnetErrorGetAlarmSummary) GetTypeName() string {
+    return "BACnetErrorGetAlarmSummary"
+}
+
 func (m *BACnetErrorGetAlarmSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
index c28a0b1..62a62c4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -76,6 +76,10 @@ func CastBACnetErrorGetEnrollmentSummary(structType interface{}) *BACnetErrorGet
     return castFunc(structType)
 }
 
+func (m *BACnetErrorGetEnrollmentSummary) GetTypeName() string {
+    return "BACnetErrorGetEnrollmentSummary"
+}
+
 func (m *BACnetErrorGetEnrollmentSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
index 4c61ee7..a691516 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -76,6 +76,10 @@ func CastBACnetErrorGetEventInformation(structType interface{}) *BACnetErrorGetE
     return castFunc(structType)
 }
 
+func (m *BACnetErrorGetEventInformation) GetTypeName() string {
+    return "BACnetErrorGetEventInformation"
+}
+
 func (m *BACnetErrorGetEventInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index 6094456..41b8325 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -91,6 +91,10 @@ func CastBACnetErrorReadProperty(structType interface{}) *BACnetErrorReadPropert
     return castFunc(structType)
 }
 
+func (m *BACnetErrorReadProperty) GetTypeName() string {
+    return "BACnetErrorReadProperty"
+}
+
 func (m *BACnetErrorReadProperty) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -268,7 +272,7 @@ func (m *BACnetErrorReadProperty) UnmarshalXML(d *xml.Decoder, start xml.StartEl
                 if err != nil {
                     return err
                 }
-                m.ErrorClass = utils.ByteToInt8(_decoded[0:_len])
+                m.ErrorClass = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "errorCodeLength":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -285,7 +289,7 @@ func (m *BACnetErrorReadProperty) UnmarshalXML(d *xml.Decoder, start xml.StartEl
                 if err != nil {
                     return err
                 }
-                m.ErrorCode = utils.ByteToInt8(_decoded[0:_len])
+                m.ErrorCode = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -303,7 +307,7 @@ func (m *BACnetErrorReadProperty) MarshalXML(e *xml.Encoder, start xml.StartElem
         return err
     }
     _encodedErrorClass := make([]byte, base64.StdEncoding.EncodedLen(len(m.ErrorClass)))
-    base64.StdEncoding.Encode(_encodedErrorClass, utils.Int8ToByte(m.ErrorClass))
+    base64.StdEncoding.Encode(_encodedErrorClass, utils.Int8ArrayToByteArray(m.ErrorClass))
     if err := e.EncodeElement(_encodedErrorClass, xml.StartElement{Name: xml.Name{Local: "errorClass"}}); err != nil {
         return err
     }
@@ -311,7 +315,7 @@ func (m *BACnetErrorReadProperty) MarshalXML(e *xml.Encoder, start xml.StartElem
         return err
     }
     _encodedErrorCode := make([]byte, base64.StdEncoding.EncodedLen(len(m.ErrorCode)))
-    base64.StdEncoding.Encode(_encodedErrorCode, utils.Int8ToByte(m.ErrorCode))
+    base64.StdEncoding.Encode(_encodedErrorCode, utils.Int8ArrayToByteArray(m.ErrorCode))
     if err := e.EncodeElement(_encodedErrorCode, xml.StartElement{Name: xml.Name{Local: "errorCode"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
index 8d803e7..e40fc7d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetErrorReadPropertyMultiple(structType interface{}) *BACnetErrorRea
     return castFunc(structType)
 }
 
+func (m *BACnetErrorReadPropertyMultiple) GetTypeName() string {
+    return "BACnetErrorReadPropertyMultiple"
+}
+
 func (m *BACnetErrorReadPropertyMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
index 1fabddf..b05184d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -76,6 +76,10 @@ func CastBACnetErrorReadRange(structType interface{}) *BACnetErrorReadRange {
     return castFunc(structType)
 }
 
+func (m *BACnetErrorReadRange) GetTypeName() string {
+    return "BACnetErrorReadRange"
+}
+
 func (m *BACnetErrorReadRange) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
index 35f4e0e..478efac 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -76,6 +76,10 @@ func CastBACnetErrorRemovedAuthenticate(structType interface{}) *BACnetErrorRemo
     return castFunc(structType)
 }
 
+func (m *BACnetErrorRemovedAuthenticate) GetTypeName() string {
+    return "BACnetErrorRemovedAuthenticate"
+}
+
 func (m *BACnetErrorRemovedAuthenticate) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
index 93e84b0..94eb1e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -76,6 +76,10 @@ func CastBACnetErrorRemovedReadPropertyConditional(structType interface{}) *BACn
     return castFunc(structType)
 }
 
+func (m *BACnetErrorRemovedReadPropertyConditional) GetTypeName() string {
+    return "BACnetErrorRemovedReadPropertyConditional"
+}
+
 func (m *BACnetErrorRemovedReadPropertyConditional) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
index 22e7f66..3b2e74a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -76,6 +76,10 @@ func CastBACnetErrorVTData(structType interface{}) *BACnetErrorVTData {
     return castFunc(structType)
 }
 
+func (m *BACnetErrorVTData) GetTypeName() string {
+    return "BACnetErrorVTData"
+}
+
 func (m *BACnetErrorVTData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
index 9ef36a1..44df0e3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -76,6 +76,10 @@ func CastBACnetErrorVTOpen(structType interface{}) *BACnetErrorVTOpen {
     return castFunc(structType)
 }
 
+func (m *BACnetErrorVTOpen) GetTypeName() string {
+    return "BACnetErrorVTOpen"
+}
+
 func (m *BACnetErrorVTOpen) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
index 73573af..6e2e20e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
@@ -100,3 +100,31 @@ func (e BACnetNetworkType) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(4, uint8(e))
     return err
 }
+
+func (e BACnetNetworkType) String() string {
+    switch e {
+    case BACnetNetworkType_ETHERNET:
+        return "ETHERNET"
+    case BACnetNetworkType_ARCNET:
+        return "ARCNET"
+    case BACnetNetworkType_MSTP:
+        return "MSTP"
+    case BACnetNetworkType_PTP:
+        return "PTP"
+    case BACnetNetworkType_LONTALK:
+        return "LONTALK"
+    case BACnetNetworkType_IPV4:
+        return "IPV4"
+    case BACnetNetworkType_ZIGBEE:
+        return "ZIGBEE"
+    case BACnetNetworkType_VIRTUAL:
+        return "VIRTUAL"
+    case BACnetNetworkType_REMOVED_NON_BACNET:
+        return "REMOVED_NON_BACNET"
+    case BACnetNetworkType_IPV6:
+        return "IPV6"
+    case BACnetNetworkType_SERIAL:
+        return "SERIAL"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
index dadb4d0..c8306ec 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
@@ -133,3 +133,53 @@ func (e BACnetNodeType) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e BACnetNodeType) String() string {
+    switch e {
+    case BACnetNodeType_UNKNOWN:
+        return "UNKNOWN"
+    case BACnetNodeType_SYSTEM:
+        return "SYSTEM"
+    case BACnetNodeType_NETWORK:
+        return "NETWORK"
+    case BACnetNodeType_DEVICE:
+        return "DEVICE"
+    case BACnetNodeType_ORGANIZATIONAL:
+        return "ORGANIZATIONAL"
+    case BACnetNodeType_AREA:
+        return "AREA"
+    case BACnetNodeType_EQUIPMENT:
+        return "EQUIPMENT"
+    case BACnetNodeType_POINT:
+        return "POINT"
+    case BACnetNodeType_COLLECTION:
+        return "COLLECTION"
+    case BACnetNodeType_PROPERTY:
+        return "PROPERTY"
+    case BACnetNodeType_FUNCTIONAL:
+        return "FUNCTIONAL"
+    case BACnetNodeType_OTHER:
+        return "OTHER"
+    case BACnetNodeType_SUBSYSTEM:
+        return "SUBSYSTEM"
+    case BACnetNodeType_BUILDING:
+        return "BUILDING"
+    case BACnetNodeType_FLOOR:
+        return "FLOOR"
+    case BACnetNodeType_SECTION:
+        return "SECTION"
+    case BACnetNodeType_MODULE:
+        return "MODULE"
+    case BACnetNodeType_TREE:
+        return "TREE"
+    case BACnetNodeType_MEMBER:
+        return "MEMBER"
+    case BACnetNodeType_PROTOCOL:
+        return "PROTOCOL"
+    case BACnetNodeType_ROOM:
+        return "ROOM"
+    case BACnetNodeType_ZONE:
+        return "ZONE"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
index 8031e72..2af884d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
@@ -76,3 +76,15 @@ func (e BACnetNotifyType) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(4, uint8(e))
     return err
 }
+
+func (e BACnetNotifyType) String() string {
+    switch e {
+    case BACnetNotifyType_ALARM:
+        return "ALARM"
+    case BACnetNotifyType_EVENT:
+        return "EVENT"
+    case BACnetNotifyType_ACK_NOTIFICATION:
+        return "ACK_NOTIFICATION"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
index 58c65e1..f4ab3f6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
@@ -244,3 +244,127 @@ func (e BACnetObjectType) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint16(10, uint16(e))
     return err
 }
+
+func (e BACnetObjectType) String() string {
+    switch e {
+    case BACnetObjectType_ANALOG_INPUT:
+        return "ANALOG_INPUT"
+    case BACnetObjectType_ANALOG_OUTPUT:
+        return "ANALOG_OUTPUT"
+    case BACnetObjectType_ANALOG_VALUE:
+        return "ANALOG_VALUE"
+    case BACnetObjectType_BINARY_INPUT:
+        return "BINARY_INPUT"
+    case BACnetObjectType_BINARY_OUTPUT:
+        return "BINARY_OUTPUT"
+    case BACnetObjectType_BINARY_VALUE:
+        return "BINARY_VALUE"
+    case BACnetObjectType_CALENDAR:
+        return "CALENDAR"
+    case BACnetObjectType_COMMAND:
+        return "COMMAND"
+    case BACnetObjectType_DEVICE:
+        return "DEVICE"
+    case BACnetObjectType_EVENT_ENROLLMENT:
+        return "EVENT_ENROLLMENT"
+    case BACnetObjectType_FILE:
+        return "FILE"
+    case BACnetObjectType_GROUP:
+        return "GROUP"
+    case BACnetObjectType_LOOP:
+        return "LOOP"
+    case BACnetObjectType_MULTISTATE_INPUT:
+        return "MULTISTATE_INPUT"
+    case BACnetObjectType_MULTISTATE_OUTPUT:
+        return "MULTISTATE_OUTPUT"
+    case BACnetObjectType_NOTIFICATION_CLASS:
+        return "NOTIFICATION_CLASS"
+    case BACnetObjectType_PROGRAM:
+        return "PROGRAM"
+    case BACnetObjectType_SCHEDULE:
+        return "SCHEDULE"
+    case BACnetObjectType_AVERAGING:
+        return "AVERAGING"
+    case BACnetObjectType_MULTISTATE_VALUE:
+        return "MULTISTATE_VALUE"
+    case BACnetObjectType_TREND_LOG:
+        return "TREND_LOG"
+    case BACnetObjectType_LIFE_SAFETY_POINT:
+        return "LIFE_SAFETY_POINT"
+    case BACnetObjectType_LIFE_SAFETY_ZONE:
+        return "LIFE_SAFETY_ZONE"
+    case BACnetObjectType_ACCUMULATOR:
+        return "ACCUMULATOR"
+    case BACnetObjectType_PULSE_CONVERTER:
+        return "PULSE_CONVERTER"
+    case BACnetObjectType_EVENT_LOG:
+        return "EVENT_LOG"
+    case BACnetObjectType_GLOBAL_GROUP:
+        return "GLOBAL_GROUP"
+    case BACnetObjectType_TREND_LOG_MULTIPLE:
+        return "TREND_LOG_MULTIPLE"
+    case BACnetObjectType_LOAD_CONTROL:
+        return "LOAD_CONTROL"
+    case BACnetObjectType_STRUCTURED_VIEW:
+        return "STRUCTURED_VIEW"
+    case BACnetObjectType_ACCESS_DOOR:
+        return "ACCESS_DOOR"
+    case BACnetObjectType_TIMER:
+        return "TIMER"
+    case BACnetObjectType_ACCESS_CREDENTIAL:
+        return "ACCESS_CREDENTIAL"
+    case BACnetObjectType_ACCESS_POINT:
+        return "ACCESS_POINT"
+    case BACnetObjectType_ACCESS_RIGHTS:
+        return "ACCESS_RIGHTS"
+    case BACnetObjectType_ACCESS_USER:
+        return "ACCESS_USER"
+    case BACnetObjectType_ACCESS_ZONE:
+        return "ACCESS_ZONE"
+    case BACnetObjectType_CREDENTIAL_DATA_INPUT:
+        return "CREDENTIAL_DATA_INPUT"
+    case BACnetObjectType_NETWORK_SECURITY:
+        return "NETWORK_SECURITY"
+    case BACnetObjectType_BITSTRING_VALUE:
+        return "BITSTRING_VALUE"
+    case BACnetObjectType_CHARACTERSTRING_VALUE:
+        return "CHARACTERSTRING_VALUE"
+    case BACnetObjectType_DATEPATTERN_VALUE:
+        return "DATEPATTERN_VALUE"
+    case BACnetObjectType_DATE_VALUE:
+        return "DATE_VALUE"
+    case BACnetObjectType_DATETIMEPATTERN_VALUE:
+        return "DATETIMEPATTERN_VALUE"
+    case BACnetObjectType_DATETIME_VALUE:
+        return "DATETIME_VALUE"
+    case BACnetObjectType_INTEGER_VALUE:
+        return "INTEGER_VALUE"
+    case BACnetObjectType_LARGE_ANALOG_VALUE:
+        return "LARGE_ANALOG_VALUE"
+    case BACnetObjectType_OCTETSTRING_VALUE:
+        return "OCTETSTRING_VALUE"
+    case BACnetObjectType_POSITIVE_INTEGER_VALUE:
+        return "POSITIVE_INTEGER_VALUE"
+    case BACnetObjectType_TIMEPATTERN_VALUE:
+        return "TIMEPATTERN_VALUE"
+    case BACnetObjectType_TIME_VALUE:
+        return "TIME_VALUE"
+    case BACnetObjectType_NOTIFICATION_FORWARDER:
+        return "NOTIFICATION_FORWARDER"
+    case BACnetObjectType_ALERT_ENROLLMENT:
+        return "ALERT_ENROLLMENT"
+    case BACnetObjectType_CHANNEL:
+        return "CHANNEL"
+    case BACnetObjectType_LIGHTING_OUTPUT:
+        return "LIGHTING_OUTPUT"
+    case BACnetObjectType_BINARY_LIGHTING_OUTPUT:
+        return "BINARY_LIGHTING_OUTPUT"
+    case BACnetObjectType_NETWORK_PORT:
+        return "NETWORK_PORT"
+    case BACnetObjectType_ELEVATOR_GROUP:
+        return "ELEVATOR_GROUP"
+    case BACnetObjectType_ESCALATOR:
+        return "ESCALATOR"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
index 0633405..d666953 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -45,11 +45,13 @@ type IBACnetServiceAck interface {
 
 type IBACnetServiceAckParent interface {
     SerializeParent(io utils.WriteBuffer, child IBACnetServiceAck, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBACnetServiceAckChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BACnetServiceAck)
+    GetTypeName() string
     IBACnetServiceAck
 }
 
@@ -70,6 +72,10 @@ func CastBACnetServiceAck(structType interface{}) *BACnetServiceAck {
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAck) GetTypeName() string {
+    return "BACnetServiceAck"
+}
+
 func (m *BACnetServiceAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
index b358714..bbc3926 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckAtomicReadFile(structType interface{}) *BACnetServiceAc
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckAtomicReadFile) GetTypeName() string {
+    return "BACnetServiceAckAtomicReadFile"
+}
+
 func (m *BACnetServiceAckAtomicReadFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
index 240c42c..6ba480a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckAtomicWriteFile(structType interface{}) *BACnetServiceA
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckAtomicWriteFile) GetTypeName() string {
+    return "BACnetServiceAckAtomicWriteFile"
+}
+
 func (m *BACnetServiceAckAtomicWriteFile) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
index 0942953..b9a0b35 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckConfirmedPrivateTransfer(structType interface{}) *BACne
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckConfirmedPrivateTransfer) GetTypeName() string {
+    return "BACnetServiceAckConfirmedPrivateTransfer"
+}
+
 func (m *BACnetServiceAckConfirmedPrivateTransfer) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
index 67e0bfd..1304d78 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckCreateObject(structType interface{}) *BACnetServiceAckC
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckCreateObject) GetTypeName() string {
+    return "BACnetServiceAckCreateObject"
+}
+
 func (m *BACnetServiceAckCreateObject) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
index 8655cbe..00ced07 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckGetAlarmSummary(structType interface{}) *BACnetServiceA
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckGetAlarmSummary) GetTypeName() string {
+    return "BACnetServiceAckGetAlarmSummary"
+}
+
 func (m *BACnetServiceAckGetAlarmSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
index 20a9368..a70d042 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckGetEnrollmentSummary(structType interface{}) *BACnetSer
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckGetEnrollmentSummary) GetTypeName() string {
+    return "BACnetServiceAckGetEnrollmentSummary"
+}
+
 func (m *BACnetServiceAckGetEnrollmentSummary) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index f2cd9dc..43581a5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckGetEventInformation(structType interface{}) *BACnetServ
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckGetEventInformation) GetTypeName() string {
+    return "BACnetServiceAckGetEventInformation"
+}
+
 func (m *BACnetServiceAckGetEventInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index 24b8891..20251ce 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -95,6 +95,10 @@ func CastBACnetServiceAckReadProperty(structType interface{}) *BACnetServiceAckR
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckReadProperty) GetTypeName() string {
+    return "BACnetServiceAckReadProperty"
+}
+
 func (m *BACnetServiceAckReadProperty) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -326,7 +330,7 @@ func (m *BACnetServiceAckReadProperty) UnmarshalXML(d *xml.Decoder, start xml.St
                 if err != nil {
                     return err
                 }
-                m.PropertyIdentifier = utils.ByteToInt8(_decoded[0:_len])
+                m.PropertyIdentifier = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "value":
                 var dt *BACnetTag
                 if err := d.DecodeElement(&dt, &tok); err != nil {
@@ -356,7 +360,7 @@ func (m *BACnetServiceAckReadProperty) MarshalXML(e *xml.Encoder, start xml.Star
         return err
     }
     _encodedPropertyIdentifier := make([]byte, base64.StdEncoding.EncodedLen(len(m.PropertyIdentifier)))
-    base64.StdEncoding.Encode(_encodedPropertyIdentifier, utils.Int8ToByte(m.PropertyIdentifier))
+    base64.StdEncoding.Encode(_encodedPropertyIdentifier, utils.Int8ArrayToByteArray(m.PropertyIdentifier))
     if err := e.EncodeElement(_encodedPropertyIdentifier, xml.StartElement{Name: xml.Name{Local: "propertyIdentifier"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index 1b7c1b7..a628626 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckReadPropertyMultiple(structType interface{}) *BACnetSer
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckReadPropertyMultiple) GetTypeName() string {
+    return "BACnetServiceAckReadPropertyMultiple"
+}
+
 func (m *BACnetServiceAckReadPropertyMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
index 996ba09..733d68e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckReadRange(structType interface{}) *BACnetServiceAckRead
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckReadRange) GetTypeName() string {
+    return "BACnetServiceAckReadRange"
+}
+
 func (m *BACnetServiceAckReadRange) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
index 9f99f1f..ce9a16c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckRemovedAuthenticate(structType interface{}) *BACnetServ
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckRemovedAuthenticate) GetTypeName() string {
+    return "BACnetServiceAckRemovedAuthenticate"
+}
+
 func (m *BACnetServiceAckRemovedAuthenticate) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
index 9ef07ea..ba322d1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckRemovedReadPropertyConditional(structType interface{})
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckRemovedReadPropertyConditional) GetTypeName() string {
+    return "BACnetServiceAckRemovedReadPropertyConditional"
+}
+
 func (m *BACnetServiceAckRemovedReadPropertyConditional) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
index 0e74902..5588b35 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckVTData(structType interface{}) *BACnetServiceAckVTData
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckVTData) GetTypeName() string {
+    return "BACnetServiceAckVTData"
+}
+
 func (m *BACnetServiceAckVTData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
index 1bde48d..6462084 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -76,6 +76,10 @@ func CastBACnetServiceAckVTOpen(structType interface{}) *BACnetServiceAckVTOpen
     return castFunc(structType)
 }
 
+func (m *BACnetServiceAckVTOpen) GetTypeName() string {
+    return "BACnetServiceAckVTOpen"
+}
+
 func (m *BACnetServiceAckVTOpen) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
index 1c139fb..b299c3c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -49,11 +49,13 @@ type IBACnetTag interface {
 
 type IBACnetTagParent interface {
     SerializeParent(io utils.WriteBuffer, child IBACnetTag, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBACnetTagChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BACnetTag, typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8)
+    GetTypeName() string
     IBACnetTag
 }
 
@@ -74,6 +76,10 @@ func CastBACnetTag(structType interface{}) *BACnetTag {
     return castFunc(structType)
 }
 
+func (m *BACnetTag) GetTypeName() string {
+    return "BACnetTag"
+}
+
 func (m *BACnetTag) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
index ff27ed2..14a337c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -86,6 +86,10 @@ func CastBACnetTagApplicationBitString(structType interface{}) *BACnetTagApplica
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationBitString) GetTypeName() string {
+    return "BACnetTagApplicationBitString"
+}
+
 func (m *BACnetTagApplicationBitString) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -185,7 +189,7 @@ func (m *BACnetTagApplicationBitString) UnmarshalXML(d *xml.Decoder, start xml.S
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -203,7 +207,7 @@ func (m *BACnetTagApplicationBitString) MarshalXML(e *xml.Encoder, start xml.Sta
         return err
     }
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
index 88476f3..4874fd4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationBoolean(structType interface{}) *BACnetTagApplicati
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationBoolean) GetTypeName() string {
+    return "BACnetTagApplicationBoolean"
+}
+
 func (m *BACnetTagApplicationBoolean) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
index 3674083..e7ba83a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationCharacterString(structType interface{}) *BACnetTagA
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationCharacterString) GetTypeName() string {
+    return "BACnetTagApplicationCharacterString"
+}
+
 func (m *BACnetTagApplicationCharacterString) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
index 9e04af7..72602b1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationDate(structType interface{}) *BACnetTagApplicationD
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationDate) GetTypeName() string {
+    return "BACnetTagApplicationDate"
+}
+
 func (m *BACnetTagApplicationDate) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
index 2e954e0..01c1655 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
@@ -83,6 +83,10 @@ func CastBACnetTagApplicationDouble(structType interface{}) *BACnetTagApplicatio
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationDouble) GetTypeName() string {
+    return "BACnetTagApplicationDouble"
+}
+
 func (m *BACnetTagApplicationDouble) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
index 2671672..cae0ebf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -84,6 +84,10 @@ func CastBACnetTagApplicationEnumerated(structType interface{}) *BACnetTagApplic
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationEnumerated) GetTypeName() string {
+    return "BACnetTagApplicationEnumerated"
+}
+
 func (m *BACnetTagApplicationEnumerated) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -160,7 +164,7 @@ func (m *BACnetTagApplicationEnumerated) UnmarshalXML(d *xml.Decoder, start xml.
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -175,7 +179,7 @@ func (m *BACnetTagApplicationEnumerated) UnmarshalXML(d *xml.Decoder, start xml.
 
 func (m *BACnetTagApplicationEnumerated) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
index 1f08363..8e08267 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationNull(structType interface{}) *BACnetTagApplicationN
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationNull) GetTypeName() string {
+    return "BACnetTagApplicationNull"
+}
+
 func (m *BACnetTagApplicationNull) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
index c26be59..b2e9ac3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationObjectIdentifier(structType interface{}) *BACnetTag
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationObjectIdentifier) GetTypeName() string {
+    return "BACnetTagApplicationObjectIdentifier"
+}
+
 func (m *BACnetTagApplicationObjectIdentifier) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
index 508fa75..4c72171 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationOctetString(structType interface{}) *BACnetTagAppli
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationOctetString) GetTypeName() string {
+    return "BACnetTagApplicationOctetString"
+}
+
 func (m *BACnetTagApplicationOctetString) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
index 9762f05..d5b1778 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
@@ -83,6 +83,10 @@ func CastBACnetTagApplicationReal(structType interface{}) *BACnetTagApplicationR
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationReal) GetTypeName() string {
+    return "BACnetTagApplicationReal"
+}
+
 func (m *BACnetTagApplicationReal) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
index 68a9b4f..9ca2b80 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
@@ -84,6 +84,10 @@ func CastBACnetTagApplicationSignedInteger(structType interface{}) *BACnetTagApp
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationSignedInteger) GetTypeName() string {
+    return "BACnetTagApplicationSignedInteger"
+}
+
 func (m *BACnetTagApplicationSignedInteger) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -160,7 +164,7 @@ func (m *BACnetTagApplicationSignedInteger) UnmarshalXML(d *xml.Decoder, start x
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -175,7 +179,7 @@ func (m *BACnetTagApplicationSignedInteger) UnmarshalXML(d *xml.Decoder, start x
 
 func (m *BACnetTagApplicationSignedInteger) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
index cdabf02..ec3b57d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
@@ -80,6 +80,10 @@ func CastBACnetTagApplicationTime(structType interface{}) *BACnetTagApplicationT
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationTime) GetTypeName() string {
+    return "BACnetTagApplicationTime"
+}
+
 func (m *BACnetTagApplicationTime) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
index 7215bc9..aa63b3d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
@@ -84,6 +84,10 @@ func CastBACnetTagApplicationUnsignedInteger(structType interface{}) *BACnetTagA
     return castFunc(structType)
 }
 
+func (m *BACnetTagApplicationUnsignedInteger) GetTypeName() string {
+    return "BACnetTagApplicationUnsignedInteger"
+}
+
 func (m *BACnetTagApplicationUnsignedInteger) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -160,7 +164,7 @@ func (m *BACnetTagApplicationUnsignedInteger) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -175,7 +179,7 @@ func (m *BACnetTagApplicationUnsignedInteger) UnmarshalXML(d *xml.Decoder, start
 
 func (m *BACnetTagApplicationUnsignedInteger) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
index 5f8a632..3134f69 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
@@ -84,6 +84,10 @@ func CastBACnetTagContext(structType interface{}) *BACnetTagContext {
     return castFunc(structType)
 }
 
+func (m *BACnetTagContext) GetTypeName() string {
+    return "BACnetTagContext"
+}
+
 func (m *BACnetTagContext) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -160,7 +164,7 @@ func (m *BACnetTagContext) UnmarshalXML(d *xml.Decoder, start xml.StartElement)
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -175,7 +179,7 @@ func (m *BACnetTagContext) UnmarshalXML(d *xml.Decoder, start xml.StartElement)
 
 func (m *BACnetTagContext) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
index 11d9c78..86de6a1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
@@ -67,6 +67,10 @@ func CastBACnetTagWithContent(structType interface{}) *BACnetTagWithContent {
     return castFunc(structType)
 }
 
+func (m *BACnetTagWithContent) GetTypeName() string {
+    return "BACnetTagWithContent"
+}
+
 func (m *BACnetTagWithContent) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index 072580a..efed3c1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -45,11 +45,13 @@ type IBACnetUnconfirmedServiceRequest interface {
 
 type IBACnetUnconfirmedServiceRequestParent interface {
     SerializeParent(io utils.WriteBuffer, child IBACnetUnconfirmedServiceRequest, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBACnetUnconfirmedServiceRequestChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BACnetUnconfirmedServiceRequest)
+    GetTypeName() string
     IBACnetUnconfirmedServiceRequest
 }
 
@@ -70,6 +72,10 @@ func CastBACnetUnconfirmedServiceRequest(structType interface{}) *BACnetUnconfir
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequest) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequest"
+}
+
 func (m *BACnetUnconfirmedServiceRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index 5dd3447..ada65bc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -97,6 +97,10 @@ func CastBACnetUnconfirmedServiceRequestIAm(structType interface{}) *BACnetUncon
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestIAm) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestIAm"
+}
+
 func (m *BACnetUnconfirmedServiceRequestIAm) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -346,7 +350,7 @@ func (m *BACnetUnconfirmedServiceRequestIAm) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.MaximumApduLengthAccepted = utils.ByteToInt8(_decoded[0:_len])
+                m.MaximumApduLengthAccepted = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "segmentationSupported":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -382,7 +386,7 @@ func (m *BACnetUnconfirmedServiceRequestIAm) MarshalXML(e *xml.Encoder, start xm
         return err
     }
     _encodedMaximumApduLengthAccepted := make([]byte, base64.StdEncoding.EncodedLen(len(m.MaximumApduLengthAccepted)))
-    base64.StdEncoding.Encode(_encodedMaximumApduLengthAccepted, utils.Int8ToByte(m.MaximumApduLengthAccepted))
+    base64.StdEncoding.Encode(_encodedMaximumApduLengthAccepted, utils.Int8ArrayToByteArray(m.MaximumApduLengthAccepted))
     if err := e.EncodeElement(_encodedMaximumApduLengthAccepted, xml.StartElement{Name: xml.Name{Local: "maximumApduLengthAccepted"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index 4e6ef13..83502b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestIHave(structType interface{}) *BACnetUnc
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestIHave) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestIHave"
+}
+
 func (m *BACnetUnconfirmedServiceRequestIHave) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index 3166d74..44b5d9d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestTimeSynchronization(structType interface
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestTimeSynchronization"
+}
+
 func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index d32335f..1e712fc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(structType interf
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestUTCTimeSynchronization"
+}
+
 func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index 00c5d09..dfa0326 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(structType in
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification"
+}
+
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index c3a7d0d..3cfbcce 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(struc
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple"
+}
+
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index bb792bc..7b1b024 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(structType
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestUnconfirmedEventNotification"
+}
+
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index bfa051d..9bf4c51 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -91,6 +91,10 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(structType in
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer"
+}
+
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -285,7 +289,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) UnmarshalXML
                 if err != nil {
                     return err
                 }
-                m.Values = utils.ByteToInt8(_decoded[0:_len])
+                m.Values = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -306,7 +310,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) MarshalXML(e
         return err
     }
     _encodedValues := make([]byte, base64.StdEncoding.EncodedLen(len(m.Values)))
-    base64.StdEncoding.Encode(_encodedValues, utils.Int8ToByte(m.Values))
+    base64.StdEncoding.Encode(_encodedValues, utils.Int8ArrayToByteArray(m.Values))
     if err := e.EncodeElement(_encodedValues, xml.StartElement{Name: xml.Name{Local: "values"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index 7916868..e8392f5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(structType interf
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestUnconfirmedTextMessage"
+}
+
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index cc5c2e3..b041efd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -92,6 +92,10 @@ func CastBACnetUnconfirmedServiceRequestWhoHas(structType interface{}) *BACnetUn
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestWhoHas) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestWhoHas"
+}
+
 func (m *BACnetUnconfirmedServiceRequestWhoHas) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -307,7 +311,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) UnmarshalXML(d *xml.Decoder, sta
                 if err != nil {
                     return err
                 }
-                m.ObjectName = utils.ByteToInt8(_decoded[0:_len])
+                m.ObjectName = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -331,7 +335,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) MarshalXML(e *xml.Encoder, start
         return err
     }
     _encodedObjectName := make([]byte, base64.StdEncoding.EncodedLen(len(m.ObjectName)))
-    base64.StdEncoding.Encode(_encodedObjectName, utils.Int8ToByte(m.ObjectName))
+    base64.StdEncoding.Encode(_encodedObjectName, utils.Int8ArrayToByteArray(m.ObjectName))
     if err := e.EncodeElement(_encodedObjectName, xml.StartElement{Name: xml.Name{Local: "objectName"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index 525277a..89a92a9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -91,6 +91,10 @@ func CastBACnetUnconfirmedServiceRequestWhoIs(structType interface{}) *BACnetUnc
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestWhoIs) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestWhoIs"
+}
+
 func (m *BACnetUnconfirmedServiceRequestWhoIs) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -268,7 +272,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) UnmarshalXML(d *xml.Decoder, star
                 if err != nil {
                     return err
                 }
-                m.DeviceInstanceRangeLowLimit = utils.ByteToInt8(_decoded[0:_len])
+                m.DeviceInstanceRangeLowLimit = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "deviceInstanceRangeHighLimitLength":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -285,7 +289,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) UnmarshalXML(d *xml.Decoder, star
                 if err != nil {
                     return err
                 }
-                m.DeviceInstanceRangeHighLimit = utils.ByteToInt8(_decoded[0:_len])
+                m.DeviceInstanceRangeHighLimit = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -303,7 +307,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) MarshalXML(e *xml.Encoder, start
         return err
     }
     _encodedDeviceInstanceRangeLowLimit := make([]byte, base64.StdEncoding.EncodedLen(len(m.DeviceInstanceRangeLowLimit)))
-    base64.StdEncoding.Encode(_encodedDeviceInstanceRangeLowLimit, utils.Int8ToByte(m.DeviceInstanceRangeLowLimit))
+    base64.StdEncoding.Encode(_encodedDeviceInstanceRangeLowLimit, utils.Int8ArrayToByteArray(m.DeviceInstanceRangeLowLimit))
     if err := e.EncodeElement(_encodedDeviceInstanceRangeLowLimit, xml.StartElement{Name: xml.Name{Local: "deviceInstanceRangeLowLimit"}}); err != nil {
         return err
     }
@@ -311,7 +315,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) MarshalXML(e *xml.Encoder, start
         return err
     }
     _encodedDeviceInstanceRangeHighLimit := make([]byte, base64.StdEncoding.EncodedLen(len(m.DeviceInstanceRangeHighLimit)))
-    base64.StdEncoding.Encode(_encodedDeviceInstanceRangeHighLimit, utils.Int8ToByte(m.DeviceInstanceRangeHighLimit))
+    base64.StdEncoding.Encode(_encodedDeviceInstanceRangeHighLimit, utils.Int8ArrayToByteArray(m.DeviceInstanceRangeHighLimit))
     if err := e.EncodeElement(_encodedDeviceInstanceRangeHighLimit, xml.StartElement{Name: xml.Name{Local: "deviceInstanceRangeHighLimit"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index 791b7d1..f430d35 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -76,6 +76,10 @@ func CastBACnetUnconfirmedServiceRequestWriteGroup(structType interface{}) *BACn
     return castFunc(structType)
 }
 
+func (m *BACnetUnconfirmedServiceRequestWriteGroup) GetTypeName() string {
+    return "BACnetUnconfirmedServiceRequestWriteGroup"
+}
+
 func (m *BACnetUnconfirmedServiceRequestWriteGroup) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
index 8c261d1..b903865 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
@@ -49,11 +49,13 @@ type IBVLC interface {
 
 type IBVLCParent interface {
     SerializeParent(io utils.WriteBuffer, child IBVLC, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IBVLCChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *BVLC)
+    GetTypeName() string
     IBVLC
 }
 
@@ -74,6 +76,10 @@ func CastBVLC(structType interface{}) *BVLC {
     return castFunc(structType)
 }
 
+func (m *BVLC) GetTypeName() string {
+    return "BVLC"
+}
+
 func (m *BVLC) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
index 7486921..86ca035 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
@@ -76,6 +76,10 @@ func CastBVLCDeleteForeignDeviceTableEntry(structType interface{}) *BVLCDeleteFo
     return castFunc(structType)
 }
 
+func (m *BVLCDeleteForeignDeviceTableEntry) GetTypeName() string {
+    return "BVLCDeleteForeignDeviceTableEntry"
+}
+
 func (m *BVLCDeleteForeignDeviceTableEntry) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index 127999e..e73022d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -76,6 +76,10 @@ func CastBVLCDistributeBroadcastToNetwork(structType interface{}) *BVLCDistribut
     return castFunc(structType)
 }
 
+func (m *BVLCDistributeBroadcastToNetwork) GetTypeName() string {
+    return "BVLCDistributeBroadcastToNetwork"
+}
+
 func (m *BVLCDistributeBroadcastToNetwork) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index 5354683..8aeeb04 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -83,6 +83,10 @@ func CastBVLCForwardedNPDU(structType interface{}) *BVLCForwardedNPDU {
     return castFunc(structType)
 }
 
+func (m *BVLCForwardedNPDU) GetTypeName() string {
+    return "BVLCForwardedNPDU"
+}
+
 func (m *BVLCForwardedNPDU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index 69d312e..52ce84c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -79,6 +79,10 @@ func CastBVLCOriginalBroadcastNPDU(structType interface{}) *BVLCOriginalBroadcas
     return castFunc(structType)
 }
 
+func (m *BVLCOriginalBroadcastNPDU) GetTypeName() string {
+    return "BVLCOriginalBroadcastNPDU"
+}
+
 func (m *BVLCOriginalBroadcastNPDU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index 8b0df4e..ef76791 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -79,6 +79,10 @@ func CastBVLCOriginalUnicastNPDU(structType interface{}) *BVLCOriginalUnicastNPD
     return castFunc(structType)
 }
 
+func (m *BVLCOriginalUnicastNPDU) GetTypeName() string {
+    return "BVLCOriginalUnicastNPDU"
+}
+
 func (m *BVLCOriginalUnicastNPDU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
index afe57be..b43e227 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
@@ -76,6 +76,10 @@ func CastBVLCReadBroadcastDistributionTable(structType interface{}) *BVLCReadBro
     return castFunc(structType)
 }
 
+func (m *BVLCReadBroadcastDistributionTable) GetTypeName() string {
+    return "BVLCReadBroadcastDistributionTable"
+}
+
 func (m *BVLCReadBroadcastDistributionTable) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index 05db410..1182fba 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -76,6 +76,10 @@ func CastBVLCReadBroadcastDistributionTableAck(structType interface{}) *BVLCRead
     return castFunc(structType)
 }
 
+func (m *BVLCReadBroadcastDistributionTableAck) GetTypeName() string {
+    return "BVLCReadBroadcastDistributionTableAck"
+}
+
 func (m *BVLCReadBroadcastDistributionTableAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
index 7cb7fdc..077cd20 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
@@ -76,6 +76,10 @@ func CastBVLCReadForeignDeviceTable(structType interface{}) *BVLCReadForeignDevi
     return castFunc(structType)
 }
 
+func (m *BVLCReadForeignDeviceTable) GetTypeName() string {
+    return "BVLCReadForeignDeviceTable"
+}
+
 func (m *BVLCReadForeignDeviceTable) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index 5762735..f0d9810 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -76,6 +76,10 @@ func CastBVLCReadForeignDeviceTableAck(structType interface{}) *BVLCReadForeignD
     return castFunc(structType)
 }
 
+func (m *BVLCReadForeignDeviceTableAck) GetTypeName() string {
+    return "BVLCReadForeignDeviceTableAck"
+}
+
 func (m *BVLCReadForeignDeviceTableAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
index 1e13877..13247f4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
@@ -76,6 +76,10 @@ func CastBVLCRegisterForeignDevice(structType interface{}) *BVLCRegisterForeignD
     return castFunc(structType)
 }
 
+func (m *BVLCRegisterForeignDevice) GetTypeName() string {
+    return "BVLCRegisterForeignDevice"
+}
+
 func (m *BVLCRegisterForeignDevice) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
index 7b09c31..a5f5ffc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
@@ -76,6 +76,10 @@ func CastBVLCResult(structType interface{}) *BVLCResult {
     return castFunc(structType)
 }
 
+func (m *BVLCResult) GetTypeName() string {
+    return "BVLCResult"
+}
+
 func (m *BVLCResult) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
index 4f5360a..d83d1a0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -76,6 +76,10 @@ func CastBVLCSecureBVLL(structType interface{}) *BVLCSecureBVLL {
     return castFunc(structType)
 }
 
+func (m *BVLCSecureBVLL) GetTypeName() string {
+    return "BVLCSecureBVLL"
+}
+
 func (m *BVLCSecureBVLL) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
index 14eb014..f673b7c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
@@ -76,6 +76,10 @@ func CastBVLCWideBroadcastDistributionTable(structType interface{}) *BVLCWideBro
     return castFunc(structType)
 }
 
+func (m *BVLCWideBroadcastDistributionTable) GetTypeName() string {
+    return "BVLCWideBroadcastDistributionTable"
+}
+
 func (m *BVLCWideBroadcastDistributionTable) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
index 548677c..830901a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
@@ -46,11 +46,13 @@ type INLM interface {
 
 type INLMParent interface {
     SerializeParent(io utils.WriteBuffer, child INLM, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type INLMChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *NLM, vendorId *uint16)
+    GetTypeName() string
     INLM
 }
 
@@ -71,6 +73,10 @@ func CastNLM(structType interface{}) *NLM {
     return castFunc(structType)
 }
 
+func (m *NLM) GetTypeName() string {
+    return "NLM"
+}
+
 func (m *NLM) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index e24331b..b20b86f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -80,6 +80,10 @@ func CastNLMIAmRouterToNetwork(structType interface{}) *NLMIAmRouterToNetwork {
     return castFunc(structType)
 }
 
+func (m *NLMIAmRouterToNetwork) GetTypeName() string {
+    return "NLMIAmRouterToNetwork"
+}
+
 func (m *NLMIAmRouterToNetwork) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index 358736e..34b65fc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -80,6 +80,10 @@ func CastNLMWhoIsRouterToNetwork(structType interface{}) *NLMWhoIsRouterToNetwor
     return castFunc(structType)
 }
 
+func (m *NLMWhoIsRouterToNetwork) GetTypeName() string {
+    return "NLMWhoIsRouterToNetwork"
+}
+
 func (m *NLMWhoIsRouterToNetwork) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
index 10b78ca..4bd88e0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
@@ -71,6 +71,10 @@ func CastNPDU(structType interface{}) *NPDU {
     return castFunc(structType)
 }
 
+func (m *NPDU) GetTypeName() string {
+    return "NPDU"
+}
+
 func (m *NPDU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go
index d477016..2a330c0 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go
@@ -31,14 +31,14 @@ import (
     "github.com/apache/plc4x/plc4go/pkg/plc4go"
     apiModel "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
     "net"
-    "reflect"
     "strconv"
+    "strings"
     "sync"
     "time"
 )
 
 type ConnectionMetadata struct {
-    KnxMedium         string
+    KnxMedium         driverModel.KnxMedium
     GatewayName       string
     GatewayKnxAddress string
     ClientKnxAddress  string
@@ -55,9 +55,17 @@ type ConnectionMetadata struct {
 
 func (m ConnectionMetadata) GetConnectionAttributes() map[string]string {
     return map[string]string{
+        "KnxMedium":         m.KnxMedium.String(),
         "GatewayName":       m.GatewayName,
         "GatewayKnxAddress": m.GatewayKnxAddress,
         "ClientKnxAddress":  m.ClientKnxAddress,
+
+        "ProjectNumber":          strconv.Itoa(int(m.ProjectNumber)),
+        "InstallationNumber":     strconv.Itoa(int(m.InstallationNumber)),
+        "DeviceSerialNumber":     utils.Int8ArrayToString(m.DeviceSerialNumber, " "),
+        "DeviceMulticastAddress": utils.Int8ArrayToString(m.DeviceSerialNumber, "."),
+        "DeviceMacAddress":       utils.Int8ArrayToString(m.DeviceSerialNumber, ":"),
+        "SupportedServices":      strings.Join(m.SupportedServices, ", "),
     }
 }
 
@@ -136,7 +144,7 @@ func (m *KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult
                 "used transport, is not a UdpTransportInstance"))
             return
         }
-        localAddress := driverModel.NewIPAddress(utils.ByteToInt8(udpTransportInstance.LocalAddress.IP))
+        localAddress := driverModel.NewIPAddress(utils.ByteArrayToInt8Array(udpTransportInstance.LocalAddress.IP))
         discoveryEndpoint := driverModel.NewHPAIDiscoveryEndpoint(
             driverModel.HostProtocolCode_IPV4_UDP, localAddress, uint16(udpTransportInstance.LocalAddress.Port))
         searchRequest := driverModel.NewSearchRequest(discoveryEndpoint)
@@ -173,8 +181,11 @@ func (m *KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult
                 }
                 if supportsTunneling {
                     // Save some important information
-                    m.metadata.GatewayName = string(bytes.Trim(utils.Int8ToByte(
+                    m.metadata.KnxMedium = searchResponse.DibDeviceInfo.KnxMedium
+                    m.metadata.GatewayName = string(bytes.Trim(utils.Int8ArrayToByteArray(
                         searchResponse.DibDeviceInfo.DeviceFriendlyName), "\x00"))
+                    m.GatewayKnxAddress = searchResponse.DibDeviceInfo.KnxAddress
+                    m.metadata.GatewayKnxAddress = KnxAddressToString(m.GatewayKnxAddress)
                     m.metadata.ProjectNumber = searchResponse.DibDeviceInfo.ProjectInstallationIdentifier.ProjectNumber
                     m.metadata.InstallationNumber = searchResponse.DibDeviceInfo.ProjectInstallationIdentifier.InstallationNumber
                     m.metadata.DeviceSerialNumber = searchResponse.DibDeviceInfo.KnxNetIpDeviceSerialNumber
@@ -182,9 +193,8 @@ func (m *KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult
                     m.metadata.DeviceMacAddress = searchResponse.DibDeviceInfo.KnxNetIpDeviceMacAddress.Addr
                     m.metadata.SupportedServices = []string{}
                     for _, serviceId := range searchResponse.DibSuppSvcFamilies.ServiceIds {
-                        m.metadata.SupportedServices = append(m.metadata.SupportedServices, reflect.TypeOf(serviceId).Name())
+                        m.metadata.SupportedServices = append(m.metadata.SupportedServices, serviceId.Child.GetTypeName())
                     }
-                    m.GatewayKnxAddress = searchResponse.DibDeviceInfo.KnxAddress
 
                     // As soon as we got a successful search-response back, send a connection request.
                     localAddress := m.castIpToKnxAddress(udpTransportInstance.LocalAddress.IP)
@@ -386,7 +396,7 @@ func (m *KnxNetIpConnection) GetPlcValueHandler() spi.PlcValueHandler {
 }
 
 func (m *KnxNetIpConnection) castIpToKnxAddress(ip net.IP) *driverModel.IPAddress {
-    return driverModel.NewIPAddress(utils.ByteToInt8(ip)[len(ip)-4:])
+    return driverModel.NewIPAddress(utils.ByteArrayToInt8Array(ip)[len(ip)-4:])
 }
 
 func (m *KnxNetIpConnection) handleIncomingTunnelingRequest(tunnelingRequestChan chan interface{}) {
@@ -421,7 +431,7 @@ func (m *KnxNetIpConnection) handleIncomingTunnelingRequest(tunnelingRequestChan
                     // If this is a new value, we have to also provide the 3 different types of addresses.
                     if !ok {
                         destinationAddress := cemiDataInd.CemiDataFrame.DestinationAddress
-                        arb := utils.NewReadBuffer(utils.Int8ToUint8(destinationAddress))
+                        arb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(destinationAddress))
                         if address, err2 := driverModel.KnxGroupAddressParse(arb, 3); err2 == nil {
                             m.leve3AddressCache[addressData] = driverModel.CastKnxGroupAddress3Level(address)
                         }
@@ -483,6 +493,6 @@ func (m *KnxNetIpConnection) sliceEqual(a, b []int8) bool {
     return true
 }
 
-func (m *KnxNetIpConnection) knxAddressToString(knxAddress *driverModel.KnxAddress) string {
+func KnxAddressToString(knxAddress *driverModel.KnxAddress) string {
     return strconv.Itoa(int(knxAddress.MainGroup)) + "." + strconv.Itoa(int(knxAddress.MiddleGroup)) + "." + strconv.Itoa(int(knxAddress.SubGroup))
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
index 79961fd..98fc02b 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
@@ -98,7 +98,7 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 					m.connection.valueCacheMutex.RUnlock()
 
 					// Decode the data according to the fields type
-					rb := utils.NewReadBuffer(utils.Int8ToUint8(int8s))
+					rb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(int8s))
 					plcValue, err := driverModel.KnxDatapointParse(rb, field.GetTypeName())
 					// If any of the values doesn't decode correctly, we can't return any
 					if err != nil {
@@ -139,7 +139,7 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 				}
 
 				// Decode the data according to the fields type
-				rb := utils.NewReadBuffer(utils.Int8ToUint8(int8s))
+				rb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(int8s))
 				plcValue, err := driverModel.KnxDatapointParse(rb, field.GetTypeName())
 				if err != nil {
 					responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_DATA
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
index 3bb1329..f141147 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
@@ -80,7 +80,7 @@ func (m *KnxNetIpSubscriber) Unsubscribe(unsubscriptionRequest apiModel.PlcUnsub
 func (m *KnxNetIpSubscriber) handleValueChange(cemiDataFrame *driverModel.CEMIDataFrame, changed bool) {
     // Decode the group-address according to the settings in the driver
     // Group addresses can be 1, 2 or 3 levels (3 being the default)
-    garb := utils.NewReadBuffer(utils.Int8ToUint8(cemiDataFrame.DestinationAddress))
+    garb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(cemiDataFrame.DestinationAddress))
     groupAddress, err := driverModel.KnxGroupAddressParse(garb, m.connection.getGroupAddressNumLevels())
     if err != nil {
         return
@@ -109,7 +109,7 @@ func (m *KnxNetIpSubscriber) handleValueChange(cemiDataFrame *driverModel.CEMIDa
                 if subscriptionType == internalModel.SUBSCRIPTION_CHANGE_OF_STATE && changed {
                     var payload []uint8
                     payload = append(payload, uint8(cemiDataFrame.DataFirstByte))
-                    payload = append(payload, utils.Int8ToByte(cemiDataFrame.Data)...)
+                    payload = append(payload, utils.Int8ArrayToByteArray(cemiDataFrame.Data)...)
                     rb := utils.NewReadBuffer(payload)
                     plcValue, err := driverModel.KnxDatapointParse(rb, field.GetTypeName())
                     fields[fieldName] = field
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go
index 364c11c..fa3979c 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go
@@ -48,7 +48,7 @@ func NewKnxNetIpSubscriptionEvent(fields map[string]apiModel.PlcField, types map
  */
 func (m KnxNetIpSubscriptionEvent) GetAddress(name string) string {
     rawAddress := m.addresses[name]
-    rawAddressReadBuffer := utils.NewReadBuffer(utils.Int8ToUint8(rawAddress))
+    rawAddressReadBuffer := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(rawAddress))
     field := m.DefaultPlcSubscriptionEvent.GetField(name)
     var groupAddress *driverModel.KnxGroupAddress
     var err error
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
index ccf2d3e..ab3036a 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
@@ -66,7 +66,6 @@ func (m KnxNetIpWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.P
             }
             return result
         }
-        //data := utils.Uint8ToInt8(io.GetBytes())
     }
 	return result
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
index 10154e8..1bfeee8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
@@ -115,3 +115,41 @@ func (e APCI) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(4, uint8(e))
     return err
 }
+
+func (e APCI) String() string {
+    switch e {
+    case APCI_GROUP_VALUE_READ_PDU:
+        return "GROUP_VALUE_READ_PDU"
+    case APCI_GROUP_VALUE_RESPONSE_PDU:
+        return "GROUP_VALUE_RESPONSE_PDU"
+    case APCI_GROUP_VALUE_WRITE_PDU:
+        return "GROUP_VALUE_WRITE_PDU"
+    case APCI_INDIVIDUAL_ADDRESS_WRITE_PDU:
+        return "INDIVIDUAL_ADDRESS_WRITE_PDU"
+    case APCI_INDIVIDUAL_ADDRESS_READ_PDU:
+        return "INDIVIDUAL_ADDRESS_READ_PDU"
+    case APCI_INDIVIDUAL_ADDRESS_RESPONSE_PDU:
+        return "INDIVIDUAL_ADDRESS_RESPONSE_PDU"
+    case APCI_ADC_READ_PDU:
+        return "ADC_READ_PDU"
+    case APCI_ADC_RESPONSE_PDU:
+        return "ADC_RESPONSE_PDU"
+    case APCI_MEMORY_READ_PDU:
+        return "MEMORY_READ_PDU"
+    case APCI_MEMORY_RESPONSE_PDU:
+        return "MEMORY_RESPONSE_PDU"
+    case APCI_MEMORY_WRITE_PDU:
+        return "MEMORY_WRITE_PDU"
+    case APCI_USER_MESSAGE_PDU:
+        return "USER_MESSAGE_PDU"
+    case APCI_DEVICE_DESCRIPTOR_READ_PDU:
+        return "DEVICE_DESCRIPTOR_READ_PDU"
+    case APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU:
+        return "DEVICE_DESCRIPTOR_RESPONSE_PDU"
+    case APCI_RESTART_PDU:
+        return "RESTART_PDU"
+    case APCI_OTHER_PDU:
+        return "OTHER_PDU"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
index 35b8764..8da78a1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
@@ -45,11 +45,13 @@ type ICEMI interface {
 
 type ICEMIParent interface {
     SerializeParent(io utils.WriteBuffer, child ICEMI, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type ICEMIChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *CEMI)
+    GetTypeName() string
     ICEMI
 }
 
@@ -70,6 +72,10 @@ func CastCEMI(structType interface{}) *CEMI {
     return castFunc(structType)
 }
 
+func (m *CEMI) GetTypeName() string {
+    return "CEMI"
+}
+
 func (m *CEMI) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
index bc03e44..bdf29de 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
@@ -45,11 +45,13 @@ type ICEMIAdditionalInformation interface {
 
 type ICEMIAdditionalInformationParent interface {
     SerializeParent(io utils.WriteBuffer, child ICEMIAdditionalInformation, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type ICEMIAdditionalInformationChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *CEMIAdditionalInformation)
+    GetTypeName() string
     ICEMIAdditionalInformation
 }
 
@@ -70,6 +72,10 @@ func CastCEMIAdditionalInformation(structType interface{}) *CEMIAdditionalInform
     return castFunc(structType)
 }
 
+func (m *CEMIAdditionalInformation) GetTypeName() string {
+    return "CEMIAdditionalInformation"
+}
+
 func (m *CEMIAdditionalInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
index 62412e4..5378769 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
@@ -93,6 +93,10 @@ func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) *CEMIAd
     return castFunc(structType)
 }
 
+func (m *CEMIAdditionalInformationBusmonitorInfo) GetTypeName() string {
+    return "CEMIAdditionalInformationBusmonitorInfo"
+}
+
 func (m *CEMIAdditionalInformationBusmonitorInfo) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
index 75351a3..56627fe 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
@@ -83,6 +83,10 @@ func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) *CEM
     return castFunc(structType)
 }
 
+func (m *CEMIAdditionalInformationRelativeTimestamp) GetTypeName() string {
+    return "CEMIAdditionalInformationRelativeTimestamp"
+}
+
 func (m *CEMIAdditionalInformationRelativeTimestamp) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
index 706c290..fc29d36 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
@@ -83,6 +83,10 @@ func CastCEMIBusmonInd(structType interface{}) *CEMIBusmonInd {
     return castFunc(structType)
 }
 
+func (m *CEMIBusmonInd) GetTypeName() string {
+    return "CEMIBusmonInd"
+}
+
 func (m *CEMIBusmonInd) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
index d8081be..51cdced 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
@@ -83,6 +83,10 @@ func CastCEMIDataCon(structType interface{}) *CEMIDataCon {
     return castFunc(structType)
 }
 
+func (m *CEMIDataCon) GetTypeName() string {
+    return "CEMIDataCon"
+}
+
 func (m *CEMIDataCon) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
index 36927a0..aaea988 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
@@ -74,6 +74,10 @@ func CastCEMIDataFrame(structType interface{}) *CEMIDataFrame {
     return castFunc(structType)
 }
 
+func (m *CEMIDataFrame) GetTypeName() string {
+    return "CEMIDataFrame"
+}
+
 func (m *CEMIDataFrame) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -493,7 +497,7 @@ func (m *CEMIDataFrame) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
                 if err != nil {
                     return err
                 }
-                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
+                m.DestinationAddress = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "dataLength":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -534,7 +538,7 @@ func (m *CEMIDataFrame) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -581,7 +585,7 @@ func (m *CEMIDataFrame) MarshalXML(e *xml.Encoder, start xml.StartElement) error
         return err
     }
     _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
-    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
+    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ArrayToByteArray(m.DestinationAddress))
     if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
         return err
     }
@@ -601,7 +605,7 @@ func (m *CEMIDataFrame) MarshalXML(e *xml.Encoder, start xml.StartElement) error
         return err
     }
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
index e5e7a09..8cb74fb 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
@@ -83,6 +83,10 @@ func CastCEMIDataInd(structType interface{}) *CEMIDataInd {
     return castFunc(structType)
 }
 
+func (m *CEMIDataInd) GetTypeName() string {
+    return "CEMIDataInd"
+}
+
 func (m *CEMIDataInd) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
index e008ace..3e6acd5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
@@ -83,6 +83,10 @@ func CastCEMIDataReq(structType interface{}) *CEMIDataReq {
     return castFunc(structType)
 }
 
+func (m *CEMIDataReq) GetTypeName() string {
+    return "CEMIDataReq"
+}
+
 func (m *CEMIDataReq) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
index 87a19d5..ecb419c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
@@ -51,11 +51,13 @@ type ICEMIFrame interface {
 
 type ICEMIFrameParent interface {
     SerializeParent(io utils.WriteBuffer, child ICEMIFrame, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type ICEMIFrameChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool)
+    GetTypeName() string
     ICEMIFrame
 }
 
@@ -76,6 +78,10 @@ func CastCEMIFrame(structType interface{}) *CEMIFrame {
     return castFunc(structType)
 }
 
+func (m *CEMIFrame) GetTypeName() string {
+    return "CEMIFrame"
+}
+
 func (m *CEMIFrame) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
index 99c6ea3..aa5678f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
@@ -88,6 +88,10 @@ func CastCEMIFrameAck(structType interface{}) *CEMIFrameAck {
     return castFunc(structType)
 }
 
+func (m *CEMIFrameAck) GetTypeName() string {
+    return "CEMIFrameAck"
+}
+
 func (m *CEMIFrameAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
index 91ac30f..e57dd65 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
@@ -112,6 +112,10 @@ func CastCEMIFrameData(structType interface{}) *CEMIFrameData {
     return castFunc(structType)
 }
 
+func (m *CEMIFrameData) GetTypeName() string {
+    return "CEMIFrameData"
+}
+
 func (m *CEMIFrameData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -371,7 +375,7 @@ func (m *CEMIFrameData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
                 if err != nil {
                     return err
                 }
-                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
+                m.DestinationAddress = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "groupAddress":
                 var data bool
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -424,7 +428,7 @@ func (m *CEMIFrameData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "crc":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -448,7 +452,7 @@ func (m *CEMIFrameData) MarshalXML(e *xml.Encoder, start xml.StartElement) error
         return err
     }
     _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
-    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
+    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ArrayToByteArray(m.DestinationAddress))
     if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
         return err
     }
@@ -474,7 +478,7 @@ func (m *CEMIFrameData) MarshalXML(e *xml.Encoder, start xml.StartElement) error
         return err
     }
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
index a4bc769..9088443 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
@@ -114,6 +114,10 @@ func CastCEMIFrameDataExt(structType interface{}) *CEMIFrameDataExt {
     return castFunc(structType)
 }
 
+func (m *CEMIFrameDataExt) GetTypeName() string {
+    return "CEMIFrameDataExt"
+}
+
 func (m *CEMIFrameDataExt) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -408,7 +412,7 @@ func (m *CEMIFrameDataExt) UnmarshalXML(d *xml.Decoder, start xml.StartElement)
                 if err != nil {
                     return err
                 }
-                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
+                m.DestinationAddress = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "dataLength":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -449,7 +453,7 @@ func (m *CEMIFrameDataExt) UnmarshalXML(d *xml.Decoder, start xml.StartElement)
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "crc":
                 var data uint8
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -482,7 +486,7 @@ func (m *CEMIFrameDataExt) MarshalXML(e *xml.Encoder, start xml.StartElement) er
         return err
     }
     _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
-    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
+    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ArrayToByteArray(m.DestinationAddress))
     if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
         return err
     }
@@ -502,7 +506,7 @@ func (m *CEMIFrameDataExt) MarshalXML(e *xml.Encoder, start xml.StartElement) er
         return err
     }
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
index 5fe3bbc..ff14d5a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
@@ -88,6 +88,10 @@ func CastCEMIFramePollingData(structType interface{}) *CEMIFramePollingData {
     return castFunc(structType)
 }
 
+func (m *CEMIFramePollingData) GetTypeName() string {
+    return "CEMIFramePollingData"
+}
+
 func (m *CEMIFramePollingData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
index 8c038da..b4e8d44 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
@@ -88,6 +88,10 @@ func CastCEMIFramePollingDataExt(structType interface{}) *CEMIFramePollingDataEx
     return castFunc(structType)
 }
 
+func (m *CEMIFramePollingDataExt) GetTypeName() string {
+    return "CEMIFramePollingDataExt"
+}
+
 func (m *CEMIFramePollingDataExt) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
index a383e6c..98001da 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
@@ -89,6 +89,10 @@ func CastCEMIMPropReadCon(structType interface{}) *CEMIMPropReadCon {
     return castFunc(structType)
 }
 
+func (m *CEMIMPropReadCon) GetTypeName() string {
+    return "CEMIMPropReadCon"
+}
+
 func (m *CEMIMPropReadCon) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
index 7ee37e5..10075cc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
@@ -87,6 +87,10 @@ func CastCEMIMPropReadReq(structType interface{}) *CEMIMPropReadReq {
     return castFunc(structType)
 }
 
+func (m *CEMIMPropReadReq) GetTypeName() string {
+    return "CEMIMPropReadReq"
+}
+
 func (m *CEMIMPropReadReq) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
index 84777ab..c5a309e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
@@ -76,6 +76,10 @@ func CastCEMIPollDataCon(structType interface{}) *CEMIPollDataCon {
     return castFunc(structType)
 }
 
+func (m *CEMIPollDataCon) GetTypeName() string {
+    return "CEMIPollDataCon"
+}
+
 func (m *CEMIPollDataCon) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
index da602ac..8be9e28 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
@@ -76,6 +76,10 @@ func CastCEMIPollDataReq(structType interface{}) *CEMIPollDataReq {
     return castFunc(structType)
 }
 
+func (m *CEMIPollDataReq) GetTypeName() string {
+    return "CEMIPollDataReq"
+}
+
 func (m *CEMIPollDataReq) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
index 61746b6..eae6bd8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
@@ -79,3 +79,17 @@ func (e CEMIPriority) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(2, uint8(e))
     return err
 }
+
+func (e CEMIPriority) String() string {
+    switch e {
+    case CEMIPriority_SYSTEM:
+        return "SYSTEM"
+    case CEMIPriority_NORMAL:
+        return "NORMAL"
+    case CEMIPriority_URGENT:
+        return "URGENT"
+    case CEMIPriority_LOW:
+        return "LOW"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
index bbed2f7..c15fd72 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
@@ -76,6 +76,10 @@ func CastCEMIRawCon(structType interface{}) *CEMIRawCon {
     return castFunc(structType)
 }
 
+func (m *CEMIRawCon) GetTypeName() string {
+    return "CEMIRawCon"
+}
+
 func (m *CEMIRawCon) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
index fa532a0..06a4222 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
@@ -76,6 +76,10 @@ func CastCEMIRawInd(structType interface{}) *CEMIRawInd {
     return castFunc(structType)
 }
 
+func (m *CEMIRawInd) GetTypeName() string {
+    return "CEMIRawInd"
+}
+
 func (m *CEMIRawInd) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
index de64b4d..7fee101 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
@@ -76,6 +76,10 @@ func CastCEMIRawReq(structType interface{}) *CEMIRawReq {
     return castFunc(structType)
 }
 
+func (m *CEMIRawReq) GetTypeName() string {
+    return "CEMIRawReq"
+}
+
 func (m *CEMIRawReq) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
index e823023..0b1d2c9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
@@ -83,6 +83,10 @@ func CastConnectionRequest(structType interface{}) *ConnectionRequest {
     return castFunc(structType)
 }
 
+func (m *ConnectionRequest) GetTypeName() string {
+    return "ConnectionRequest"
+}
+
 func (m *ConnectionRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
index 6fce3be..19c9c35 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
@@ -45,11 +45,13 @@ type IConnectionRequestInformation interface {
 
 type IConnectionRequestInformationParent interface {
     SerializeParent(io utils.WriteBuffer, child IConnectionRequestInformation, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IConnectionRequestInformationChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *ConnectionRequestInformation)
+    GetTypeName() string
     IConnectionRequestInformation
 }
 
@@ -70,6 +72,10 @@ func CastConnectionRequestInformation(structType interface{}) *ConnectionRequest
     return castFunc(structType)
 }
 
+func (m *ConnectionRequestInformation) GetTypeName() string {
+    return "ConnectionRequestInformation"
+}
+
 func (m *ConnectionRequestInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
index 8a2c744..04503fd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
@@ -76,6 +76,10 @@ func CastConnectionRequestInformationDeviceManagement(structType interface{}) *C
     return castFunc(structType)
 }
 
+func (m *ConnectionRequestInformationDeviceManagement) GetTypeName() string {
+    return "ConnectionRequestInformationDeviceManagement"
+}
+
 func (m *ConnectionRequestInformationDeviceManagement) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
index 9393c96..0c48298 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
@@ -80,6 +80,10 @@ func CastConnectionRequestInformationTunnelConnection(structType interface{}) *C
     return castFunc(structType)
 }
 
+func (m *ConnectionRequestInformationTunnelConnection) GetTypeName() string {
+    return "ConnectionRequestInformationTunnelConnection"
+}
+
 func (m *ConnectionRequestInformationTunnelConnection) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
index 7c093a7..7cefdd8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
@@ -85,6 +85,10 @@ func CastConnectionResponse(structType interface{}) *ConnectionResponse {
     return castFunc(structType)
 }
 
+func (m *ConnectionResponse) GetTypeName() string {
+    return "ConnectionResponse"
+}
+
 func (m *ConnectionResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
index 2562baa..61e92b4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
@@ -45,11 +45,13 @@ type IConnectionResponseDataBlock interface {
 
 type IConnectionResponseDataBlockParent interface {
     SerializeParent(io utils.WriteBuffer, child IConnectionResponseDataBlock, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IConnectionResponseDataBlockChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *ConnectionResponseDataBlock)
+    GetTypeName() string
     IConnectionResponseDataBlock
 }
 
@@ -70,6 +72,10 @@ func CastConnectionResponseDataBlock(structType interface{}) *ConnectionResponse
     return castFunc(structType)
 }
 
+func (m *ConnectionResponseDataBlock) GetTypeName() string {
+    return "ConnectionResponseDataBlock"
+}
+
 func (m *ConnectionResponseDataBlock) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
index 2e7a62b..1f8a2a9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
@@ -76,6 +76,10 @@ func CastConnectionResponseDataBlockDeviceManagement(structType interface{}) *Co
     return castFunc(structType)
 }
 
+func (m *ConnectionResponseDataBlockDeviceManagement) GetTypeName() string {
+    return "ConnectionResponseDataBlockDeviceManagement"
+}
+
 func (m *ConnectionResponseDataBlockDeviceManagement) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
index bcb60fc..8678cde 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
@@ -79,6 +79,10 @@ func CastConnectionResponseDataBlockTunnelConnection(structType interface{}) *Co
     return castFunc(structType)
 }
 
+func (m *ConnectionResponseDataBlockTunnelConnection) GetTypeName() string {
+    return "ConnectionResponseDataBlockTunnelConnection"
+}
+
 func (m *ConnectionResponseDataBlockTunnelConnection) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
index f975a13..4345d0d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
@@ -82,6 +82,10 @@ func CastConnectionStateRequest(structType interface{}) *ConnectionStateRequest
     return castFunc(structType)
 }
 
+func (m *ConnectionStateRequest) GetTypeName() string {
+    return "ConnectionStateRequest"
+}
+
 func (m *ConnectionStateRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
index 5031ce1..68edf70 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
@@ -81,6 +81,10 @@ func CastConnectionStateResponse(structType interface{}) *ConnectionStateRespons
     return castFunc(structType)
 }
 
+func (m *ConnectionStateResponse) GetTypeName() string {
+    return "ConnectionStateResponse"
+}
+
 func (m *ConnectionStateResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
index 2a96408..8689e6d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
@@ -65,6 +65,10 @@ func CastDIBDeviceInfo(structType interface{}) *DIBDeviceInfo {
     return castFunc(structType)
 }
 
+func (m *DIBDeviceInfo) GetTypeName() string {
+    return "DIBDeviceInfo"
+}
+
 func (m *DIBDeviceInfo) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -316,7 +320,7 @@ func (m *DIBDeviceInfo) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
                 if err != nil {
                     return err
                 }
-                m.KnxNetIpDeviceSerialNumber = utils.ByteToInt8(_decoded[0:_len])
+                m.KnxNetIpDeviceSerialNumber = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "knxNetIpDeviceMulticastAddress":
                 var data *IPAddress
                 if err := d.DecodeElement(data, &tok); err != nil {
@@ -339,7 +343,7 @@ func (m *DIBDeviceInfo) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
                 if err != nil {
                     return err
                 }
-                m.DeviceFriendlyName = utils.ByteToInt8(_decoded[0:_len])
+                m.DeviceFriendlyName = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -368,7 +372,7 @@ func (m *DIBDeviceInfo) MarshalXML(e *xml.Encoder, start xml.StartElement) error
         return err
     }
     _encodedKnxNetIpDeviceSerialNumber := make([]byte, base64.StdEncoding.EncodedLen(len(m.KnxNetIpDeviceSerialNumber)))
-    base64.StdEncoding.Encode(_encodedKnxNetIpDeviceSerialNumber, utils.Int8ToByte(m.KnxNetIpDeviceSerialNumber))
+    base64.StdEncoding.Encode(_encodedKnxNetIpDeviceSerialNumber, utils.Int8ArrayToByteArray(m.KnxNetIpDeviceSerialNumber))
     if err := e.EncodeElement(_encodedKnxNetIpDeviceSerialNumber, xml.StartElement{Name: xml.Name{Local: "knxNetIpDeviceSerialNumber"}}); err != nil {
         return err
     }
@@ -379,7 +383,7 @@ func (m *DIBDeviceInfo) MarshalXML(e *xml.Encoder, start xml.StartElement) error
         return err
     }
     _encodedDeviceFriendlyName := make([]byte, base64.StdEncoding.EncodedLen(len(m.DeviceFriendlyName)))
-    base64.StdEncoding.Encode(_encodedDeviceFriendlyName, utils.Int8ToByte(m.DeviceFriendlyName))
+    base64.StdEncoding.Encode(_encodedDeviceFriendlyName, utils.Int8ArrayToByteArray(m.DeviceFriendlyName))
     if err := e.EncodeElement(_encodedDeviceFriendlyName, xml.StartElement{Name: xml.Name{Local: "deviceFriendlyName"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
index 6d6b0b3..8548577 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
@@ -57,6 +57,10 @@ func CastDIBSuppSvcFamilies(structType interface{}) *DIBSuppSvcFamilies {
     return castFunc(structType)
 }
 
+func (m *DIBSuppSvcFamilies) GetTypeName() string {
+    return "DIBSuppSvcFamilies"
+}
+
 func (m *DIBSuppSvcFamilies) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
index 29abe6b..1c14104 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
@@ -79,6 +79,10 @@ func CastDescriptionRequest(structType interface{}) *DescriptionRequest {
     return castFunc(structType)
 }
 
+func (m *DescriptionRequest) GetTypeName() string {
+    return "DescriptionRequest"
+}
+
 func (m *DescriptionRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
index 46e4e00..83328cd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
@@ -81,6 +81,10 @@ func CastDescriptionResponse(structType interface{}) *DescriptionResponse {
     return castFunc(structType)
 }
 
+func (m *DescriptionResponse) GetTypeName() string {
+    return "DescriptionResponse"
+}
+
 func (m *DescriptionResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
index 276f865..e1096c3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
@@ -79,6 +79,10 @@ func CastDeviceConfigurationAck(structType interface{}) *DeviceConfigurationAck
     return castFunc(structType)
 }
 
+func (m *DeviceConfigurationAck) GetTypeName() string {
+    return "DeviceConfigurationAck"
+}
+
 func (m *DeviceConfigurationAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
index 15c06d0..c588dc7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
@@ -58,6 +58,10 @@ func CastDeviceConfigurationAckDataBlock(structType interface{}) *DeviceConfigur
     return castFunc(structType)
 }
 
+func (m *DeviceConfigurationAckDataBlock) GetTypeName() string {
+    return "DeviceConfigurationAckDataBlock"
+}
+
 func (m *DeviceConfigurationAckDataBlock) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
index 7f203e5..86fbda2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
@@ -81,6 +81,10 @@ func CastDeviceConfigurationRequest(structType interface{}) *DeviceConfiguration
     return castFunc(structType)
 }
 
+func (m *DeviceConfigurationRequest) GetTypeName() string {
+    return "DeviceConfigurationRequest"
+}
+
 func (m *DeviceConfigurationRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
index 9e3c6ff..ffb0b0e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
@@ -58,6 +58,10 @@ func CastDeviceConfigurationRequestDataBlock(structType interface{}) *DeviceConf
     return castFunc(structType)
 }
 
+func (m *DeviceConfigurationRequestDataBlock) GetTypeName() string {
+    return "DeviceConfigurationRequestDataBlock"
+}
+
 func (m *DeviceConfigurationRequestDataBlock) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
index e46350b..3360c37 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
@@ -57,6 +57,10 @@ func CastDeviceStatus(structType interface{}) *DeviceStatus {
     return castFunc(structType)
 }
 
+func (m *DeviceStatus) GetTypeName() string {
+    return "DeviceStatus"
+}
+
 func (m *DeviceStatus) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
index 0e35ced..621d7f7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
@@ -82,6 +82,10 @@ func CastDisconnectRequest(structType interface{}) *DisconnectRequest {
     return castFunc(structType)
 }
 
+func (m *DisconnectRequest) GetTypeName() string {
+    return "DisconnectRequest"
+}
+
 func (m *DisconnectRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
index eb91f47..eb0e14b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
@@ -81,6 +81,10 @@ func CastDisconnectResponse(structType interface{}) *DisconnectResponse {
     return castFunc(structType)
 }
 
+func (m *DisconnectResponse) GetTypeName() string {
+    return "DisconnectResponse"
+}
+
 func (m *DisconnectResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go
index 2e39163..ea8d7c0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go
@@ -58,6 +58,10 @@ func CastHPAIControlEndpoint(structType interface{}) *HPAIControlEndpoint {
     return castFunc(structType)
 }
 
+func (m *HPAIControlEndpoint) GetTypeName() string {
+    return "HPAIControlEndpoint"
+}
+
 func (m *HPAIControlEndpoint) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go
index ee345d2..82018f7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go
@@ -58,6 +58,10 @@ func CastHPAIDataEndpoint(structType interface{}) *HPAIDataEndpoint {
     return castFunc(structType)
 }
 
+func (m *HPAIDataEndpoint) GetTypeName() string {
+    return "HPAIDataEndpoint"
+}
+
 func (m *HPAIDataEndpoint) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go
index 76681db..e25ebd0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go
@@ -58,6 +58,10 @@ func CastHPAIDiscoveryEndpoint(structType interface{}) *HPAIDiscoveryEndpoint {
     return castFunc(structType)
 }
 
+func (m *HPAIDiscoveryEndpoint) GetTypeName() string {
+    return "HPAIDiscoveryEndpoint"
+}
+
 func (m *HPAIDiscoveryEndpoint) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go
index d584100..113eadc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go
@@ -73,3 +73,13 @@ func (e HostProtocolCode) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e HostProtocolCode) String() string {
+    switch e {
+    case HostProtocolCode_IPV4_UDP:
+        return "IPV4_UDP"
+    case HostProtocolCode_IPV4_TCP:
+        return "IPV4_TCP"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
index a14a2f7..513f0c2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
@@ -57,6 +57,10 @@ func CastIPAddress(structType interface{}) *IPAddress {
     return castFunc(structType)
 }
 
+func (m *IPAddress) GetTypeName() string {
+    return "IPAddress"
+}
+
 func (m *IPAddress) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -129,7 +133,7 @@ func (m *IPAddress) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                 if err != nil {
                     return err
                 }
-                m.Addr = utils.ByteToInt8(_decoded[0:_len])
+                m.Addr = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -143,7 +147,7 @@ func (m *IPAddress) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
         return err
     }
     _encodedAddr := make([]byte, base64.StdEncoding.EncodedLen(len(m.Addr)))
-    base64.StdEncoding.Encode(_encodedAddr, utils.Int8ToByte(m.Addr))
+    base64.StdEncoding.Encode(_encodedAddr, utils.Int8ArrayToByteArray(m.Addr))
     if err := e.EncodeElement(_encodedAddr, xml.StartElement{Name: xml.Name{Local: "addr"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go
index 6bf26a6..7013ced 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go
@@ -58,6 +58,10 @@ func CastKnxAddress(structType interface{}) *KnxAddress {
     return castFunc(structType)
 }
 
+func (m *KnxAddress) GetTypeName() string {
+    return "KnxAddress"
+}
+
 func (m *KnxAddress) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go
index 45a30d8..9c51241 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go
@@ -4366,3 +4366,723 @@ func (m KnxDatapointType) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
+
+func (e KnxDatapointType) String() string {
+    switch e {
+    case KnxDatapointType_DPT_ADAType:
+        return "DPT_ADAType"
+    case KnxDatapointType_DPT_Access_Data:
+        return "DPT_Access_Data"
+    case KnxDatapointType_DPT_Ack:
+        return "DPT_Ack"
+    case KnxDatapointType_DPT_ActPosDemAbs:
+        return "DPT_ActPosDemAbs"
+    case KnxDatapointType_DPT_ActiveEnergy:
+        return "DPT_ActiveEnergy"
+    case KnxDatapointType_DPT_ActiveEnergy_V64:
+        return "DPT_ActiveEnergy_V64"
+    case KnxDatapointType_DPT_ActiveEnergy_kWh:
+        return "DPT_ActiveEnergy_kWh"
+    case KnxDatapointType_DPT_ActuatorConnectType:
+        return "DPT_ActuatorConnectType"
+    case KnxDatapointType_DPT_AddInfoTypes:
+        return "DPT_AddInfoTypes"
+    case KnxDatapointType_DPT_Alarm:
+        return "DPT_Alarm"
+    case KnxDatapointType_DPT_AlarmClassType:
+        return "DPT_AlarmClassType"
+    case KnxDatapointType_DPT_AlarmInfo:
+        return "DPT_AlarmInfo"
+    case KnxDatapointType_DPT_Alarm_Control:
+        return "DPT_Alarm_Control"
+    case KnxDatapointType_DPT_Alarm_Reaction:
+        return "DPT_Alarm_Reaction"
+    case KnxDatapointType_DPT_Angle:
+        return "DPT_Angle"
+    case KnxDatapointType_DPT_ApparantEnergy:
+        return "DPT_ApparantEnergy"
+    case KnxDatapointType_DPT_ApparantEnergy_V64:
+        return "DPT_ApparantEnergy_V64"
+    case KnxDatapointType_DPT_ApparantEnergy_kVAh:
+        return "DPT_ApparantEnergy_kVAh"
+    case KnxDatapointType_DPT_ApplicationArea:
+        return "DPT_ApplicationArea"
+    case KnxDatapointType_DPT_AtmPressureAbs_Z:
+        return "DPT_AtmPressureAbs_Z"
+    case KnxDatapointType_DPT_BackupMode:
+        return "DPT_BackupMode"
+    case KnxDatapointType_DPT_Beaufort_Wind_Force_Scale:
+        return "DPT_Beaufort_Wind_Force_Scale"
+    case KnxDatapointType_DPT_Behaviour_Bus_Power_Up_Down:
+        return "DPT_Behaviour_Bus_Power_Up_Down"
+    case KnxDatapointType_DPT_Behaviour_Lock_Unlock:
+        return "DPT_Behaviour_Lock_Unlock"
+    case KnxDatapointType_DPT_BinaryValue:
+        return "DPT_BinaryValue"
+    case KnxDatapointType_DPT_BinaryValue_Control:
+        return "DPT_BinaryValue_Control"
+    case KnxDatapointType_DPT_BinaryValue_Z:
+        return "DPT_BinaryValue_Z"
+    case KnxDatapointType_DPT_BlindsControlMode:
+        return "DPT_BlindsControlMode"
+    case KnxDatapointType_DPT_BlinkingMode:
+        return "DPT_BlinkingMode"
+    case KnxDatapointType_DPT_Bool:
+        return "DPT_Bool"
+    case KnxDatapointType_DPT_Bool_Control:
+        return "DPT_Bool_Control"
+    case KnxDatapointType_DPT_Brightness:
+        return "DPT_Brightness"
+    case KnxDatapointType_DPT_BuildingMode:
+        return "DPT_BuildingMode"
+    case KnxDatapointType_DPT_BuildingModeNext:
+        return "DPT_BuildingModeNext"
+    case KnxDatapointType_DPT_BuildingMode_Z:
+        return "DPT_BuildingMode_Z"
+    case KnxDatapointType_DPT_BurnerType:
+        return "DPT_BurnerType"
+    case KnxDatapointType_DPT_ChangeoverMode:
+        return "DPT_ChangeoverMode"
+    case KnxDatapointType_DPT_Channel_Activation_16:
+        return "DPT_Channel_Activation_16"
+    case KnxDatapointType_DPT_Channel_Activation_24:
+        return "DPT_Channel_Activation_24"
+    case KnxDatapointType_DPT_Channel_Activation_8:
+        return "DPT_Channel_Activation_8"
+    case KnxDatapointType_DPT_Char_8859_1:
+        return "DPT_Char_8859_1"
+    case KnxDatapointType_DPT_Char_ASCII:
+        return "DPT_Char_ASCII"
+    case KnxDatapointType_DPT_Colour_RGB:
+        return "DPT_Colour_RGB"
+    case KnxDatapointType_DPT_CombinedInfoOnOff:
+        return "DPT_CombinedInfoOnOff"
+    case KnxDatapointType_DPT_CombinedPosition:
+        return "DPT_CombinedPosition"
+    case KnxDatapointType_DPT_CommMode:
+        return "DPT_CommMode"
+    case KnxDatapointType_DPT_Control_Blinds:
+        return "DPT_Control_Blinds"
+    case KnxDatapointType_DPT_Control_Dimming:
+        return "DPT_Control_Dimming"
+    case KnxDatapointType_DPT_DALI_Control_Gear_Diagnostic:
+        return "DPT_DALI_Control_Gear_Diagnostic"
+    case KnxDatapointType_DPT_DALI_Diagnostics:
+        return "DPT_DALI_Diagnostics"
+    case KnxDatapointType_DPT_DALI_Fade_Time:
+        return "DPT_DALI_Fade_Time"
+    case KnxDatapointType_DPT_DHWMode:
+        return "DPT_DHWMode"
+    case KnxDatapointType_DPT_DHWModeNext:
+        return "DPT_DHWModeNext"
+    case KnxDatapointType_DPT_DHWMode_Z:
+        return "DPT_DHWMode_Z"
+    case KnxDatapointType_DPT_DamperMode:
+        return "DPT_DamperMode"
+    case KnxDatapointType_DPT_Date:
+        return "DPT_Date"
+    case KnxDatapointType_DPT_DateTime:
+        return "DPT_DateTime"
+    case KnxDatapointType_DPT_DecimalFactor:
+        return "DPT_DecimalFactor"
+    case KnxDatapointType_DPT_DeltaTime100MSec:
+        return "DPT_DeltaTime100MSec"
+    case KnxDatapointType_DPT_DeltaTime100Msec_Z:
+        return "DPT_DeltaTime100Msec_Z"
+    case KnxDatapointType_DPT_DeltaTime10MSec:
+        return "DPT_DeltaTime10MSec"
+    case KnxDatapointType_DPT_DeltaTime10Msec_Z:
+        return "DPT_DeltaTime10Msec_Z"
+    case KnxDatapointType_DPT_DeltaTimeHrs:
+        return "DPT_DeltaTimeHrs"
+    case KnxDatapointType_DPT_DeltaTimeHrs_Z:
+        return "DPT_DeltaTimeHrs_Z"
+    case KnxDatapointType_DPT_DeltaTimeMin:
+        return "DPT_DeltaTimeMin"
+    case KnxDatapointType_DPT_DeltaTimeMin_Z:
+        return "DPT_DeltaTimeMin_Z"
+    case KnxDatapointType_DPT_DeltaTimeMsec:
+        return "DPT_DeltaTimeMsec"
+    case KnxDatapointType_DPT_DeltaTimeMsec_Z:
+        return "DPT_DeltaTimeMsec_Z"
+    case KnxDatapointType_DPT_DeltaTimeSec:
+        return "DPT_DeltaTimeSec"
+    case KnxDatapointType_DPT_DeltaTimeSec_Z:
+        return "DPT_DeltaTimeSec_Z"
+    case KnxDatapointType_DPT_Device_Control:
+        return "DPT_Device_Control"
+    case KnxDatapointType_DPT_DimSendStyle:
+        return "DPT_DimSendStyle"
+    case KnxDatapointType_DPT_DimmPBModel:
+        return "DPT_DimmPBModel"
+    case KnxDatapointType_DPT_Direction1_Control:
+        return "DPT_Direction1_Control"
+    case KnxDatapointType_DPT_Direction2_Control:
+        return "DPT_Direction2_Control"
+    case KnxDatapointType_DPT_DoubleNibble:
+        return "DPT_DoubleNibble"
+    case KnxDatapointType_DPT_EnablH_Cstage_Z_DPT_EnablH_CStage:
+        return "DPT_EnablH_Cstage_Z_DPT_EnablH_CStage"
+    case KnxDatapointType_DPT_Enable:
+        return "DPT_Enable"
+    case KnxDatapointType_DPT_Enable_Control:
+        return "DPT_Enable_Control"
+    case KnxDatapointType_DPT_EnergyDemAir:
+        return "DPT_EnergyDemAir"
+    case KnxDatapointType_DPT_EnergyDemWater:
+        return "DPT_EnergyDemWater"
+    case KnxDatapointType_DPT_ErrorClass_HVAC:
+        return "DPT_ErrorClass_HVAC"
+    case KnxDatapointType_DPT_ErrorClass_System:
+        return "DPT_ErrorClass_System"
+    case KnxDatapointType_DPT_FanMode:
+        return "DPT_FanMode"
+    case KnxDatapointType_DPT_FlaggedScaling:
+        return "DPT_FlaggedScaling"
+    case KnxDatapointType_DPT_FlowRate_m3h:
+        return "DPT_FlowRate_m3h"
+    case KnxDatapointType_DPT_FlowRate_m3h_Z:
+        return "DPT_FlowRate_m3h_Z"
+    case KnxDatapointType_DPT_ForceSign:
+        return "DPT_ForceSign"
+    case KnxDatapointType_DPT_ForceSignCool:
+        return "DPT_ForceSignCool"
+    case KnxDatapointType_DPT_FuelType:
+        return "DPT_FuelType"
+    case KnxDatapointType_DPT_FuelTypeSet:
+        return "DPT_FuelTypeSet"
+    case KnxDatapointType_DPT_HVACAirFlowAbs_Z:
+        return "DPT_HVACAirFlowAbs_Z"
+    case KnxDatapointType_DPT_HVACAirFlowRel_Z:
+        return "DPT_HVACAirFlowRel_Z"
+    case KnxDatapointType_DPT_HVACAirQual_Z:
+        return "DPT_HVACAirQual_Z"
+    case KnxDatapointType_DPT_HVACContrMode:
+        return "DPT_HVACContrMode"
+    case KnxDatapointType_DPT_HVACContrMode_Z:
+        return "DPT_HVACContrMode_Z"
+    case KnxDatapointType_DPT_HVACEmergMode:
+        return "DPT_HVACEmergMode"
+    case KnxDatapointType_DPT_HVACEmergMode_Z:
+        return "DPT_HVACEmergMode_Z"
+    case KnxDatapointType_DPT_HVACMode:
+        return "DPT_HVACMode"
+    case KnxDatapointType_DPT_HVACModeNext:
+        return "DPT_HVACModeNext"
+    case KnxDatapointType_DPT_HVACMode_Z:
+        return "DPT_HVACMode_Z"
+    case KnxDatapointType_DPT_HVAC_PB_Action:
+        return "DPT_HVAC_PB_Action"
+    case KnxDatapointType_DPT_Heat_Cool:
+        return "DPT_Heat_Cool"
+    case KnxDatapointType_DPT_Heat_Cool_Z:
+        return "DPT_Heat_Cool_Z"
+    case KnxDatapointType_DPT_HeaterMode:
+        return "DPT_HeaterMode"
+    case KnxDatapointType_DPT_InputSource:
+        return "DPT_InputSource"
+    case KnxDatapointType_DPT_Invert:
+        return "DPT_Invert"
+    case KnxDatapointType_DPT_Invert_Control:
+        return "DPT_Invert_Control"
+    case KnxDatapointType_DPT_KelvinPerPercent:
+        return "DPT_KelvinPerPercent"
+    case KnxDatapointType_DPT_LanguageCodeAlpha2_ASCII:
+        return "DPT_LanguageCodeAlpha2_ASCII"
+    case KnxDatapointType_DPT_Length_mm:
+        return "DPT_Length_mm"
+    case KnxDatapointType_DPT_LightActuatorErrorInfo:
+        return "DPT_LightActuatorErrorInfo"
+    case KnxDatapointType_DPT_LightApplicationMode:
+        return "DPT_LightApplicationMode"
+    case KnxDatapointType_DPT_LightControlMode:
+        return "DPT_LightControlMode"
+    case KnxDatapointType_DPT_LoadPriority:
+        return "DPT_LoadPriority"
+    case KnxDatapointType_DPT_LoadTypeDetected:
+        return "DPT_LoadTypeDetected"
+    case KnxDatapointType_DPT_LoadTypeSet:
+        return "DPT_LoadTypeSet"
+    case KnxDatapointType_DPT_Locale_ASCII:
+        return "DPT_Locale_ASCII"
+    case KnxDatapointType_DPT_LockSign:
+        return "DPT_LockSign"
+    case KnxDatapointType_DPT_LogicalFunction:
+        return "DPT_LogicalFunction"
+    case KnxDatapointType_DPT_LongDeltaTimeSec:
+        return "DPT_LongDeltaTimeSec"
+    case KnxDatapointType_DPT_MBus_Address:
+        return "DPT_MBus_Address"
+    case KnxDatapointType_DPT_MasterSlaveMode:
+        return "DPT_MasterSlaveMode"
+    case KnxDatapointType_DPT_Media:
+        return "DPT_Media"
+    case KnxDatapointType_DPT_MeteringValue:
+        return "DPT_MeteringValue"
+    case KnxDatapointType_DPT_OccMode:
+        return "DPT_OccMode"
+    case KnxDatapointType_DPT_OccModeNext:
+        return "DPT_OccModeNext"
+    case KnxDatapointType_DPT_OccMode_Z:
+        return "DPT_OccMode_Z"
+    case KnxDatapointType_DPT_Occupancy:
+        return "DPT_Occupancy"
+    case KnxDatapointType_DPT_OnOff_Action:
+        return "DPT_OnOff_Action"
+    case KnxDatapointType_DPT_OpenClose:
+        return "DPT_OpenClose"
+    case KnxDatapointType_DPT_PBAction:
+        return "DPT_PBAction"
+    case KnxDatapointType_DPT_PB_Action_HVAC_Extended:
+        return "DPT_PB_Action_HVAC_Extended"
+    case KnxDatapointType_DPT_PSUMode:
+        return "DPT_PSUMode"
+    case KnxDatapointType_DPT_PercentU16_Z:
+        return "DPT_PercentU16_Z"
+    case KnxDatapointType_DPT_Percent_U8:
+        return "DPT_Percent_U8"
+    case KnxDatapointType_DPT_Percent_V16:
+        return "DPT_Percent_V16"
+    case KnxDatapointType_DPT_Percent_V16_Z:
+        return "DPT_Percent_V16_Z"
+    case KnxDatapointType_DPT_Percent_V8:
+        return "DPT_Percent_V8"
+    case KnxDatapointType_DPT_Power:
+        return "DPT_Power"
+    case KnxDatapointType_DPT_PowerDensity:
+        return "DPT_PowerDensity"
+    case KnxDatapointType_DPT_PowerFlowWaterDemCPM:
+        return "DPT_PowerFlowWaterDemCPM"
+    case KnxDatapointType_DPT_PowerFlowWaterDemHPM:
+        return "DPT_PowerFlowWaterDemHPM"
+    case KnxDatapointType_DPT_PowerKW_Z:
+        return "DPT_PowerKW_Z"
+    case KnxDatapointType_DPT_Prioritised_Mode_Control:
+        return "DPT_Prioritised_Mode_Control"
+    case KnxDatapointType_DPT_Priority:
+        return "DPT_Priority"
+    case KnxDatapointType_DPT_PropDataType:
+        return "DPT_PropDataType"
+    case KnxDatapointType_DPT_RF_FilterInfo:
+        return "DPT_RF_FilterInfo"
+    case KnxDatapointType_DPT_RF_FilterSelect:
+        return "DPT_RF_FilterSelect"
+    case KnxDatapointType_DPT_RF_ModeInfo:
+        return "DPT_RF_ModeInfo"
+    case KnxDatapointType_DPT_RF_ModeSelect:
+        return "DPT_RF_ModeSelect"
+    case KnxDatapointType_DPT_Rain_Amount:
+        return "DPT_Rain_Amount"
+    case KnxDatapointType_DPT_Ramp:
+        return "DPT_Ramp"
+    case KnxDatapointType_DPT_Ramp_Control:
+        return "DPT_Ramp_Control"
+    case KnxDatapointType_DPT_ReactiveEnergy:
+        return "DPT_ReactiveEnergy"
+    case KnxDatapointType_DPT_ReactiveEnergy_V64:
+        return "DPT_ReactiveEnergy_V64"
+    case KnxDatapointType_DPT_ReactiveEnergy_kVARh:
+        return "DPT_ReactiveEnergy_kVARh"
+    case KnxDatapointType_DPT_RegionCodeAlpha2_ASCII:
+        return "DPT_RegionCodeAlpha2_ASCII"
+    case KnxDatapointType_DPT_RelSignedValue_Z:
+        return "DPT_RelSignedValue_Z"
+    case KnxDatapointType_DPT_RelValue_Z:
+        return "DPT_RelValue_Z"
+    case KnxDatapointType_DPT_Reset:
+        return "DPT_Reset"
+    case KnxDatapointType_DPT_Rotation_Angle:
+        return "DPT_Rotation_Angle"
+    case KnxDatapointType_DPT_SABBehaviour_Lock_Unlock:
+        return "DPT_SABBehaviour_Lock_Unlock"
+    case KnxDatapointType_DPT_SABExceptBehaviour:
+        return "DPT_SABExceptBehaviour"
+    case KnxDatapointType_DPT_SCLOMode:
+        return "DPT_SCLOMode"
+    case KnxDatapointType_DPT_SSSBMode:
+        return "DPT_SSSBMode"
+    case KnxDatapointType_DPT_Scaling:
+        return "DPT_Scaling"
+    case KnxDatapointType_DPT_ScalingSpeed:
+        return "DPT_ScalingSpeed"
+    case KnxDatapointType_DPT_Scaling_Step_Time:
+        return "DPT_Scaling_Step_Time"
+    case KnxDatapointType_DPT_SceneConfig:
+        return "DPT_SceneConfig"
+    case KnxDatapointType_DPT_SceneControl:
+        return "DPT_SceneControl"
+    case KnxDatapointType_DPT_SceneInfo:
+        return "DPT_SceneInfo"
+    case KnxDatapointType_DPT_SceneNumber:
+        return "DPT_SceneNumber"
+    case KnxDatapointType_DPT_Scene_AB:
+        return "DPT_Scene_AB"
+    case KnxDatapointType_DPT_SensorSelect:
+        return "DPT_SensorSelect"
+    case KnxDatapointType_DPT_SerNum:
+        return "DPT_SerNum"
+    case KnxDatapointType_DPT_ShutterBlinds_Mode:
+        return "DPT_ShutterBlinds_Mode"
+    case KnxDatapointType_DPT_SpecHeatProd:
+        return "DPT_SpecHeatProd"
+    case KnxDatapointType_DPT_Start:
+        return "DPT_Start"
+    case KnxDatapointType_DPT_StartSynchronization:
+        return "DPT_StartSynchronization"
+    case KnxDatapointType_DPT_Start_Control:
+        return "DPT_Start_Control"
+    case KnxDatapointType_DPT_State:
+        return "DPT_State"
+    case KnxDatapointType_DPT_State_Control:
+        return "DPT_State_Control"
+    case KnxDatapointType_DPT_StatusAHU:
+        return "DPT_StatusAHU"
+    case KnxDatapointType_DPT_StatusAct:
+        return "DPT_StatusAct"
+    case KnxDatapointType_DPT_StatusBOC:
+        return "DPT_StatusBOC"
+    case KnxDatapointType_DPT_StatusBUC:
+        return "DPT_StatusBUC"
+    case KnxDatapointType_DPT_StatusCC:
+        return "DPT_StatusCC"
+    case KnxDatapointType_DPT_StatusCPM:
+        return "DPT_StatusCPM"
+    case KnxDatapointType_DPT_StatusDHWC:
+        return "DPT_StatusDHWC"
+    case KnxDatapointType_DPT_StatusGen:
+        return "DPT_StatusGen"
+    case KnxDatapointType_DPT_StatusHPM:
+        return "DPT_StatusHPM"
+    case KnxDatapointType_DPT_StatusLightingActuator:
+        return "DPT_StatusLightingActuator"
+    case KnxDatapointType_DPT_StatusRCC:
+        return "DPT_StatusRCC"
+    case KnxDatapointType_DPT_StatusRHC:
+        return "DPT_StatusRHC"
+    case KnxDatapointType_DPT_StatusRHCC:
+        return "DPT_StatusRHCC"
+    case KnxDatapointType_DPT_StatusRoomSetp:
+        return "DPT_StatusRoomSetp"
+    case KnxDatapointType_DPT_StatusSAB:
+        return "DPT_StatusSAB"
+    case KnxDatapointType_DPT_StatusSDHWC:
+        return "DPT_StatusSDHWC"
+    case KnxDatapointType_DPT_StatusWTC:
+        return "DPT_StatusWTC"
+    case KnxDatapointType_DPT_Status_Mode3:
+        return "DPT_Status_Mode3"
+    case KnxDatapointType_DPT_Step:
+        return "DPT_Step"
+    case KnxDatapointType_DPT_Step_Control:
+        return "DPT_Step_Control"
+    case KnxDatapointType_DPT_String_8859_1:
+        return "DPT_String_8859_1"
+    case KnxDatapointType_DPT_String_ASCII:
+        return "DPT_String_ASCII"
+    case KnxDatapointType_DPT_SunIntensity_Z:
+        return "DPT_SunIntensity_Z"
+    case KnxDatapointType_DPT_Switch:
+        return "DPT_Switch"
+    case KnxDatapointType_DPT_SwitchOnMode:
+        return "DPT_SwitchOnMode"
+    case KnxDatapointType_DPT_SwitchPBModel:
+        return "DPT_SwitchPBModel"
+    case KnxDatapointType_DPT_Switch_Control:
+        return "DPT_Switch_Control"
+    case KnxDatapointType_DPT_Tariff:
+        return "DPT_Tariff"
+    case KnxDatapointType_DPT_TariffNext:
+        return "DPT_TariffNext"
+    case KnxDatapointType_DPT_Tariff_ActiveEnergy:
+        return "DPT_Tariff_ActiveEnergy"
+    case KnxDatapointType_DPT_TempDHWSetpSet4:
+        return "DPT_TempDHWSetpSet4"
+    case KnxDatapointType_DPT_TempFlowWaterDemAbs:
+        return "DPT_TempFlowWaterDemAbs"
+    case KnxDatapointType_DPT_TempHVACAbsNext:
+        return "DPT_TempHVACAbsNext"
+    case KnxDatapointType_DPT_TempHVACAbs_Z:
+        return "DPT_TempHVACAbs_Z"
+    case KnxDatapointType_DPT_TempHVACRel_Z:
+        return "DPT_TempHVACRel_Z"
+    case KnxDatapointType_DPT_TempRoomDemAbs:
+        return "DPT_TempRoomDemAbs"
+    case KnxDatapointType_DPT_TempRoomSetpSet3:
+        return "DPT_TempRoomSetpSet3"
+    case KnxDatapointType_DPT_TempRoomSetpSet4:
+        return "DPT_TempRoomSetpSet4"
+    case KnxDatapointType_DPT_TempRoomSetpSetF163:
+        return "DPT_TempRoomSetpSetF163"
+    case KnxDatapointType_DPT_TempRoomSetpSetShift3:
+        return "DPT_TempRoomSetpSetShift3"
+    case KnxDatapointType_DPT_TempRoomSetpSetShift4:
+        return "DPT_TempRoomSetpSetShift4"
+    case KnxDatapointType_DPT_TempRoomSetpSetShiftF163:
+        return "DPT_TempRoomSetpSetShiftF163"
+    case KnxDatapointType_DPT_TempSupply_AirSetpSet:
+        return "DPT_TempSupply_AirSetpSet"
+    case KnxDatapointType_DPT_TimeOfDay:
+        return "DPT_TimeOfDay"
+    case KnxDatapointType_DPT_TimePeriod100MSec:
+        return "DPT_TimePeriod100MSec"
+    case KnxDatapointType_DPT_TimePeriod100Msec_Z:
+        return "DPT_TimePeriod100Msec_Z"
+    case KnxDatapointType_DPT_TimePeriod10MSec:
+        return "DPT_TimePeriod10MSec"
+    case KnxDatapointType_DPT_TimePeriod10Msec_Z:
+        return "DPT_TimePeriod10Msec_Z"
+    case KnxDatapointType_DPT_TimePeriodHrs:
+        return "DPT_TimePeriodHrs"
+    case KnxDatapointType_DPT_TimePeriodHrs_Z:
+        return "DPT_TimePeriodHrs_Z"
+    case KnxDatapointType_DPT_TimePeriodMin:
+        return "DPT_TimePeriodMin"
+    case KnxDatapointType_DPT_TimePeriodMin_Z:
+        return "DPT_TimePeriodMin_Z"
+    case KnxDatapointType_DPT_TimePeriodMsec:
+        return "DPT_TimePeriodMsec"
+    case KnxDatapointType_DPT_TimePeriodMsec_Z:
+        return "DPT_TimePeriodMsec_Z"
+    case KnxDatapointType_DPT_TimePeriodSec:
+        return "DPT_TimePeriodSec"
+    case KnxDatapointType_DPT_TimePeriodSec_Z:
+        return "DPT_TimePeriodSec_Z"
+    case KnxDatapointType_DPT_Time_Delay:
+        return "DPT_Time_Delay"
+    case KnxDatapointType_DPT_Trigger:
+        return "DPT_Trigger"
+    case KnxDatapointType_DPT_UCountValue16_Z:
+        return "DPT_UCountValue16_Z"
+    case KnxDatapointType_DPT_UCountValue8_Z:
+        return "DPT_UCountValue8_Z"
+    case KnxDatapointType_DPT_UElCurrentmA:
+        return "DPT_UElCurrentmA"
+    case KnxDatapointType_DPT_UElCurrentyA_Z:
+        return "DPT_UElCurrentyA_Z"
+    case KnxDatapointType_DPT_UFlowRateLiter_h_Z:
+        return "DPT_UFlowRateLiter_h_Z"
+    case KnxDatapointType_DPT_UTF_8:
+        return "DPT_UTF_8"
+    case KnxDatapointType_DPT_UpDown:
+        return "DPT_UpDown"
+    case KnxDatapointType_DPT_UpDown_Action:
+        return "DPT_UpDown_Action"
+    case KnxDatapointType_DPT_ValueDemBOC:
+        return "DPT_ValueDemBOC"
+    case KnxDatapointType_DPT_Value_1_Count:
+        return "DPT_Value_1_Count"
+    case KnxDatapointType_DPT_Value_1_Ucount:
+        return "DPT_Value_1_Ucount"
+    case KnxDatapointType_DPT_Value_2_Count:
+        return "DPT_Value_2_Count"
+    case KnxDatapointType_DPT_Value_2_Ucount:
+        return "DPT_Value_2_Ucount"
+    case KnxDatapointType_DPT_Value_4_Count:
+        return "DPT_Value_4_Count"
+    case KnxDatapointType_DPT_Value_4_Ucount:
+        return "DPT_Value_4_Ucount"
+    case KnxDatapointType_DPT_Value_Absolute_Temperature:
+        return "DPT_Value_Absolute_Temperature"
+    case KnxDatapointType_DPT_Value_Acceleration:
+        return "DPT_Value_Acceleration"
+    case KnxDatapointType_DPT_Value_Acceleration_Angular:
+        return "DPT_Value_Acceleration_Angular"
+    case KnxDatapointType_DPT_Value_Activation_Energy:
+        return "DPT_Value_Activation_Energy"
+    case KnxDatapointType_DPT_Value_Activity:
+        return "DPT_Value_Activity"
+    case KnxDatapointType_DPT_Value_AirQuality:
+        return "DPT_Value_AirQuality"
+    case KnxDatapointType_DPT_Value_Amplitude:
+        return "DPT_Value_Amplitude"
+    case KnxDatapointType_DPT_Value_AngleDeg:
+        return "DPT_Value_AngleDeg"
+    case KnxDatapointType_DPT_Value_AngleRad:
+        return "DPT_Value_AngleRad"
+    case KnxDatapointType_DPT_Value_Angular_Frequency:
+        return "DPT_Value_Angular_Frequency"
+    case KnxDatapointType_DPT_Value_Angular_Momentum:
+        return "DPT_Value_Angular_Momentum"
+    case KnxDatapointType_DPT_Value_Angular_Velocity:
+        return "DPT_Value_Angular_Velocity"
+    case KnxDatapointType_DPT_Value_Area:
+        return "DPT_Value_Area"
+    case KnxDatapointType_DPT_Value_Capacitance:
+        return "DPT_Value_Capacitance"
+    case KnxDatapointType_DPT_Value_Charge_DensitySurface:
+        return "DPT_Value_Charge_DensitySurface"
+    case KnxDatapointType_DPT_Value_Charge_DensityVolume:
+        return "DPT_Value_Charge_DensityVolume"
+    case KnxDatapointType_DPT_Value_Common_Temperature:
+        return "DPT_Value_Common_Temperature"
+    case KnxDatapointType_DPT_Value_Compressibility:
+        return "DPT_Value_Compressibility"
+    case KnxDatapointType_DPT_Value_Conductance:
+        return "DPT_Value_Conductance"
+    case KnxDatapointType_DPT_Value_Curr:
+        return "DPT_Value_Curr"
+    case KnxDatapointType_DPT_Value_Density:
+        return "DPT_Value_Density"
+    case KnxDatapointType_DPT_Value_Electric_Charge:
+        return "DPT_Value_Electric_Charge"
+    case KnxDatapointType_DPT_Value_Electric_Current:
+        return "DPT_Value_Electric_Current"
+    case KnxDatapointType_DPT_Value_Electric_CurrentDensity:
+        return "DPT_Value_Electric_CurrentDensity"
+    case KnxDatapointType_DPT_Value_Electric_DipoleMoment:
+        return "DPT_Value_Electric_DipoleMoment"
+    case KnxDatapointType_DPT_Value_Electric_Displacement:
+        return "DPT_Value_Electric_Displacement"
+    case KnxDatapointType_DPT_Value_Electric_FieldStrength:
+        return "DPT_Value_Electric_FieldStrength"
+    case KnxDatapointType_DPT_Value_Electric_Flux:
+        return "DPT_Value_Electric_Flux"
+    case KnxDatapointType_DPT_Value_Electric_FluxDensity:
+        return "DPT_Value_Electric_FluxDensity"
+    case KnxDatapointType_DPT_Value_Electric_Polarization:
+        return "DPT_Value_Electric_Polarization"
+    case KnxDatapointType_DPT_Value_Electric_Potential:
+        return "DPT_Value_Electric_Potential"
+    case KnxDatapointType_DPT_Value_Electric_PotentialDifference:
+        return "DPT_Value_Electric_PotentialDifference"
+    case KnxDatapointType_DPT_Value_Electrical_Conductivity:
+        return "DPT_Value_Electrical_Conductivity"
+    case KnxDatapointType_DPT_Value_ElectromagneticMoment:
+        return "DPT_Value_ElectromagneticMoment"
+    case KnxDatapointType_DPT_Value_Electromotive_Force:
+        return "DPT_Value_Electromotive_Force"
+    case KnxDatapointType_DPT_Value_Energy:
+        return "DPT_Value_Energy"
+    case KnxDatapointType_DPT_Value_Force:
+        return "DPT_Value_Force"
+    case KnxDatapointType_DPT_Value_Frequency:
+        return "DPT_Value_Frequency"
+    case KnxDatapointType_DPT_Value_Heat_Capacity:
+        return "DPT_Value_Heat_Capacity"
+    case KnxDatapointType_DPT_Value_Heat_FlowRate:
+        return "DPT_Value_Heat_FlowRate"
+    case KnxDatapointType_DPT_Value_Heat_Quantity:
+        return "DPT_Value_Heat_Quantity"
+    case KnxDatapointType_DPT_Value_Humidity:
+        return "DPT_Value_Humidity"
+    case KnxDatapointType_DPT_Value_Impedance:
+        return "DPT_Value_Impedance"
+    case KnxDatapointType_DPT_Value_Length:
+        return "DPT_Value_Length"
+    case KnxDatapointType_DPT_Value_Light_Quantity:
+        return "DPT_Value_Light_Quantity"
+    case KnxDatapointType_DPT_Value_Luminance:
+        return "DPT_Value_Luminance"
+    case KnxDatapointType_DPT_Value_Luminous_Flux:
+        return "DPT_Value_Luminous_Flux"
+    case KnxDatapointType_DPT_Value_Luminous_Intensity:
+        return "DPT_Value_Luminous_Intensity"
+    case KnxDatapointType_DPT_Value_Lux:
+        return "DPT_Value_Lux"
+    case KnxDatapointType_DPT_Value_Magnetic_FieldStrength:
+        return "DPT_Value_Magnetic_FieldStrength"
+    case KnxDatapointType_DPT_Value_Magnetic_Flux:
+        return "DPT_Value_Magnetic_Flux"
+    case KnxDatapointType_DPT_Value_Magnetic_FluxDensity:
+        return "DPT_Value_Magnetic_FluxDensity"
+    case KnxDatapointType_DPT_Value_Magnetic_Moment:
+        return "DPT_Value_Magnetic_Moment"
+    case KnxDatapointType_DPT_Value_Magnetic_Polarization:
+        return "DPT_Value_Magnetic_Polarization"
+    case KnxDatapointType_DPT_Value_Magnetization:
+        return "DPT_Value_Magnetization"
+    case KnxDatapointType_DPT_Value_MagnetomotiveForce:
+        return "DPT_Value_MagnetomotiveForce"
+    case KnxDatapointType_DPT_Value_Mass:
+        return "DPT_Value_Mass"
+    case KnxDatapointType_DPT_Value_MassFlux:
+        return "DPT_Value_MassFlux"
+    case KnxDatapointType_DPT_Value_Mol:
+        return "DPT_Value_Mol"
+    case KnxDatapointType_DPT_Value_Momentum:
+        return "DPT_Value_Momentum"
+    case KnxDatapointType_DPT_Value_Phase_AngleDeg:
+        return "DPT_Value_Phase_AngleDeg"
+    case KnxDatapointType_DPT_Value_Phase_AngleRad:
+        return "DPT_Value_Phase_AngleRad"
+    case KnxDatapointType_DPT_Value_Power:
+        return "DPT_Value_Power"
+    case KnxDatapointType_DPT_Value_Power_Factor:
+        return "DPT_Value_Power_Factor"
+    case KnxDatapointType_DPT_Value_Pres:
+        return "DPT_Value_Pres"
+    case KnxDatapointType_DPT_Value_Pressure:
+        return "DPT_Value_Pressure"
+    case KnxDatapointType_DPT_Value_Reactance:
+        return "DPT_Value_Reactance"
+    case KnxDatapointType_DPT_Value_Resistance:
+        return "DPT_Value_Resistance"
+    case KnxDatapointType_DPT_Value_Resistivity:
+        return "DPT_Value_Resistivity"
+    case KnxDatapointType_DPT_Value_SelfInductance:
+        return "DPT_Value_SelfInductance"
+    case KnxDatapointType_DPT_Value_SolidAngle:
+        return "DPT_Value_SolidAngle"
+    case KnxDatapointType_DPT_Value_Sound_Intensity:
+        return "DPT_Value_Sound_Intensity"
+    case KnxDatapointType_DPT_Value_Speed:
+        return "DPT_Value_Speed"
+    case KnxDatapointType_DPT_Value_Stress:
+        return "DPT_Value_Stress"
+    case KnxDatapointType_DPT_Value_Surface_Tension:
+        return "DPT_Value_Surface_Tension"
+    case KnxDatapointType_DPT_Value_Temp:
+        return "DPT_Value_Temp"
+    case KnxDatapointType_DPT_Value_Temp_F:
+        return "DPT_Value_Temp_F"
+    case KnxDatapointType_DPT_Value_Tempa:
+        return "DPT_Value_Tempa"
+    case KnxDatapointType_DPT_Value_Tempd:
+        return "DPT_Value_Tempd"
+    case KnxDatapointType_DPT_Value_TemperatureDifference:
+        return "DPT_Value_TemperatureDifference"
+    case KnxDatapointType_DPT_Value_Thermal_Capacity:
+        return "DPT_Value_Thermal_Capacity"
+    case KnxDatapointType_DPT_Value_Thermal_Conductivity:
+        return "DPT_Value_Thermal_Conductivity"
+    case KnxDatapointType_DPT_Value_ThermoelectricPower:
+        return "DPT_Value_ThermoelectricPower"
+    case KnxDatapointType_DPT_Value_Time:
+        return "DPT_Value_Time"
+    case KnxDatapointType_DPT_Value_Time1:
+        return "DPT_Value_Time1"
+    case KnxDatapointType_DPT_Value_Time2:
+        return "DPT_Value_Time2"
+    case KnxDatapointType_DPT_Value_Torque:
+        return "DPT_Value_Torque"
+    case KnxDatapointType_DPT_Value_Volt:
+        return "DPT_Value_Volt"
+    case KnxDatapointType_DPT_Value_Volume:
+        return "DPT_Value_Volume"
+    case KnxDatapointType_DPT_Value_Volume_Flow:
+        return "DPT_Value_Volume_Flow"
+    case KnxDatapointType_DPT_Value_Volume_Flux:
+        return "DPT_Value_Volume_Flux"
+    case KnxDatapointType_DPT_Value_Weight:
+        return "DPT_Value_Weight"
+    case KnxDatapointType_DPT_Value_Work:
+        return "DPT_Value_Work"
+    case KnxDatapointType_DPT_Value_Wsp:
+        return "DPT_Value_Wsp"
+    case KnxDatapointType_DPT_Value_Wsp_kmh:
+        return "DPT_Value_Wsp_kmh"
+    case KnxDatapointType_DPT_ValveMode:
+        return "DPT_ValveMode"
+    case KnxDatapointType_DPT_VarString_8859_1:
+        return "DPT_VarString_8859_1"
+    case KnxDatapointType_DPT_Version:
+        return "DPT_Version"
+    case KnxDatapointType_DPT_VolumeLiter_Z:
+        return "DPT_VolumeLiter_Z"
+    case KnxDatapointType_DPT_WindSpeed_Z_DPT_WindSpeed:
+        return "DPT_WindSpeed_Z_DPT_WindSpeed"
+    case KnxDatapointType_DPT_Window_Door:
+        return "DPT_Window_Door"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
index 106ed07..508e88e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
@@ -45,11 +45,13 @@ type IKnxGroupAddress interface {
 
 type IKnxGroupAddressParent interface {
     SerializeParent(io utils.WriteBuffer, child IKnxGroupAddress, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IKnxGroupAddressChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *KnxGroupAddress)
+    GetTypeName() string
     IKnxGroupAddress
 }
 
@@ -70,6 +72,10 @@ func CastKnxGroupAddress(structType interface{}) *KnxGroupAddress {
     return castFunc(structType)
 }
 
+func (m *KnxGroupAddress) GetTypeName() string {
+    return "KnxGroupAddress"
+}
+
 func (m *KnxGroupAddress) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
index 3a07a10..05d8e73 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
@@ -81,6 +81,10 @@ func CastKnxGroupAddress2Level(structType interface{}) *KnxGroupAddress2Level {
     return castFunc(structType)
 }
 
+func (m *KnxGroupAddress2Level) GetTypeName() string {
+    return "KnxGroupAddress2Level"
+}
+
 func (m *KnxGroupAddress2Level) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
index b69ae8b..ecaa180 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
@@ -83,6 +83,10 @@ func CastKnxGroupAddress3Level(structType interface{}) *KnxGroupAddress3Level {
     return castFunc(structType)
 }
 
+func (m *KnxGroupAddress3Level) GetTypeName() string {
+    return "KnxGroupAddress3Level"
+}
+
 func (m *KnxGroupAddress3Level) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
index e2860e5..d46f84f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
@@ -79,6 +79,10 @@ func CastKnxGroupAddressFreeLevel(structType interface{}) *KnxGroupAddressFreeLe
     return castFunc(structType)
 }
 
+func (m *KnxGroupAddressFreeLevel) GetTypeName() string {
+    return "KnxGroupAddressFreeLevel"
+}
+
 func (m *KnxGroupAddressFreeLevel) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go
index d49729e..9148091 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go
@@ -76,3 +76,15 @@ func (e KnxLayer) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e KnxLayer) String() string {
+    switch e {
+    case KnxLayer_TUNNEL_LINK_LAYER:
+        return "TUNNEL_LINK_LAYER"
+    case KnxLayer_TUNNEL_RAW:
+        return "TUNNEL_RAW"
+    case KnxLayer_TUNNEL_BUSMONITOR:
+        return "TUNNEL_BUSMONITOR"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxMedium.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxMedium.go
index c05347e..7e8db84 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxMedium.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxMedium.go
@@ -85,3 +85,21 @@ func (e KnxMedium) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e KnxMedium) String() string {
+    switch e {
+    case KnxMedium_MEDIUM_RESERVED_1:
+        return "MEDIUM_RESERVED_1"
+    case KnxMedium_MEDIUM_TP1:
+        return "MEDIUM_TP1"
+    case KnxMedium_MEDIUM_PL110:
+        return "MEDIUM_PL110"
+    case KnxMedium_MEDIUM_RESERVED_2:
+        return "MEDIUM_RESERVED_2"
+    case KnxMedium_MEDIUM_RF:
+        return "MEDIUM_RF"
+    case KnxMedium_MEDIUM_KNX_IP:
+        return "MEDIUM_KNX_IP"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
index 31000ed..f4642d2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
@@ -79,6 +79,10 @@ func CastKnxNetIpCore(structType interface{}) *KnxNetIpCore {
     return castFunc(structType)
 }
 
+func (m *KnxNetIpCore) GetTypeName() string {
+    return "KnxNetIpCore"
+}
+
 func (m *KnxNetIpCore) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
index 21ae2c8..df2a09f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
@@ -79,6 +79,10 @@ func CastKnxNetIpDeviceManagement(structType interface{}) *KnxNetIpDeviceManagem
     return castFunc(structType)
 }
 
+func (m *KnxNetIpDeviceManagement) GetTypeName() string {
+    return "KnxNetIpDeviceManagement"
+}
+
 func (m *KnxNetIpDeviceManagement) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
index ac63a3d..1dbdf70 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
@@ -49,11 +49,13 @@ type IKnxNetIpMessage interface {
 
 type IKnxNetIpMessageParent interface {
     SerializeParent(io utils.WriteBuffer, child IKnxNetIpMessage, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IKnxNetIpMessageChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *KnxNetIpMessage)
+    GetTypeName() string
     IKnxNetIpMessage
 }
 
@@ -74,6 +76,10 @@ func CastKnxNetIpMessage(structType interface{}) *KnxNetIpMessage {
     return castFunc(structType)
 }
 
+func (m *KnxNetIpMessage) GetTypeName() string {
+    return "KnxNetIpMessage"
+}
+
 func (m *KnxNetIpMessage) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
index 29b7f09..28b8173 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
@@ -79,6 +79,10 @@ func CastKnxNetIpTunneling(structType interface{}) *KnxNetIpTunneling {
     return castFunc(structType)
 }
 
+func (m *KnxNetIpTunneling) GetTypeName() string {
+    return "KnxNetIpTunneling"
+}
+
 func (m *KnxNetIpTunneling) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
index 00f382c..3a312db 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
@@ -79,6 +79,10 @@ func CastKnxNetObjectServer(structType interface{}) *KnxNetObjectServer {
     return castFunc(structType)
 }
 
+func (m *KnxNetObjectServer) GetTypeName() string {
+    return "KnxNetObjectServer"
+}
+
 func (m *KnxNetObjectServer) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
index 766c193..21ccc90 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
@@ -79,6 +79,10 @@ func CastKnxNetRemoteConfigurationAndDiagnosis(structType interface{}) *KnxNetRe
     return castFunc(structType)
 }
 
+func (m *KnxNetRemoteConfigurationAndDiagnosis) GetTypeName() string {
+    return "KnxNetRemoteConfigurationAndDiagnosis"
+}
+
 func (m *KnxNetRemoteConfigurationAndDiagnosis) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
index 2110cd7..175edf1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
@@ -79,6 +79,10 @@ func CastKnxNetRemoteLogging(structType interface{}) *KnxNetRemoteLogging {
     return castFunc(structType)
 }
 
+func (m *KnxNetRemoteLogging) GetTypeName() string {
+    return "KnxNetRemoteLogging"
+}
+
 func (m *KnxNetRemoteLogging) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
index ba66073..ceec805 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
@@ -57,6 +57,10 @@ func CastMACAddress(structType interface{}) *MACAddress {
     return castFunc(structType)
 }
 
+func (m *MACAddress) GetTypeName() string {
+    return "MACAddress"
+}
+
 func (m *MACAddress) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -129,7 +133,7 @@ func (m *MACAddress) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
                 if err != nil {
                     return err
                 }
-                m.Addr = utils.ByteToInt8(_decoded[0:_len])
+                m.Addr = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -143,7 +147,7 @@ func (m *MACAddress) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
         return err
     }
     _encodedAddr := make([]byte, base64.StdEncoding.EncodedLen(len(m.Addr)))
-    base64.StdEncoding.Encode(_encodedAddr, utils.Int8ToByte(m.Addr))
+    base64.StdEncoding.Encode(_encodedAddr, utils.Int8ArrayToByteArray(m.Addr))
     if err := e.EncodeElement(_encodedAddr, xml.StartElement{Name: xml.Name{Local: "addr"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go
index 302acd6..85bebb8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go
@@ -57,6 +57,10 @@ func CastProjectInstallationIdentifier(structType interface{}) *ProjectInstallat
     return castFunc(structType)
 }
 
+func (m *ProjectInstallationIdentifier) GetTypeName() string {
+    return "ProjectInstallationIdentifier"
+}
+
 func (m *ProjectInstallationIdentifier) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go
index 2e50d47..0b12451 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go
@@ -56,6 +56,10 @@ func CastRelativeTimestamp(structType interface{}) *RelativeTimestamp {
     return castFunc(structType)
 }
 
+func (m *RelativeTimestamp) GetTypeName() string {
+    return "RelativeTimestamp"
+}
+
 func (m *RelativeTimestamp) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
index 85d44fb..1c64da7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
@@ -76,6 +76,10 @@ func CastRoutingIndication(structType interface{}) *RoutingIndication {
     return castFunc(structType)
 }
 
+func (m *RoutingIndication) GetTypeName() string {
+    return "RoutingIndication"
+}
+
 func (m *RoutingIndication) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
index 8cf78d9..498a3e4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
@@ -79,6 +79,10 @@ func CastSearchRequest(structType interface{}) *SearchRequest {
     return castFunc(structType)
 }
 
+func (m *SearchRequest) GetTypeName() string {
+    return "SearchRequest"
+}
+
 func (m *SearchRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
index 1fdbb1e..68d2d03 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
@@ -83,6 +83,10 @@ func CastSearchResponse(structType interface{}) *SearchResponse {
     return castFunc(structType)
 }
 
+func (m *SearchResponse) GetTypeName() string {
+    return "SearchResponse"
+}
+
 func (m *SearchResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
index 00367fa..34b36ee 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
@@ -45,11 +45,13 @@ type IServiceId interface {
 
 type IServiceIdParent interface {
     SerializeParent(io utils.WriteBuffer, child IServiceId, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IServiceIdChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *ServiceId)
+    GetTypeName() string
     IServiceId
 }
 
@@ -70,6 +72,10 @@ func CastServiceId(structType interface{}) *ServiceId {
     return castFunc(structType)
 }
 
+func (m *ServiceId) GetTypeName() string {
+    return "ServiceId"
+}
+
 func (m *ServiceId) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go
index 89408bf..9e8fc66 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go
@@ -103,3 +103,33 @@ func (e Status) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e Status) String() string {
+    switch e {
+    case Status_NO_ERROR:
+        return "NO_ERROR"
+    case Status_PROTOCOL_TYPE_NOT_SUPPORTED:
+        return "PROTOCOL_TYPE_NOT_SUPPORTED"
+    case Status_UNSUPPORTED_PROTOCOL_VERSION:
+        return "UNSUPPORTED_PROTOCOL_VERSION"
+    case Status_OUT_OF_ORDER_SEQUENCE_NUMBER:
+        return "OUT_OF_ORDER_SEQUENCE_NUMBER"
+    case Status_INVALID_CONNECTION_ID:
+        return "INVALID_CONNECTION_ID"
+    case Status_CONNECTION_TYPE_NOT_SUPPORTED:
+        return "CONNECTION_TYPE_NOT_SUPPORTED"
+    case Status_CONNECTION_OPTION_NOT_SUPPORTED:
+        return "CONNECTION_OPTION_NOT_SUPPORTED"
+    case Status_NO_MORE_CONNECTIONS:
+        return "NO_MORE_CONNECTIONS"
+    case Status_NO_MORE_UNIQUE_CONNECTIONS:
+        return "NO_MORE_UNIQUE_CONNECTIONS"
+    case Status_DATA_CONNECTION:
+        return "DATA_CONNECTION"
+    case Status_KNX_CONNECTION:
+        return "KNX_CONNECTION"
+    case Status_TUNNELLING_LAYER_NOT_SUPPORTED:
+        return "TUNNELLING_LAYER_NOT_SUPPORTED"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SupportedPhysicalMedia.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SupportedPhysicalMedia.go
new file mode 100644
index 0000000..09e921c
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SupportedPhysicalMedia.go
@@ -0,0 +1,324 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "github.com/apache/plc4x/plc4go/internal/plc4go/utils"
+)
+
+type SupportedPhysicalMedia uint8
+
+type ISupportedPhysicalMedia interface {
+    KnxSupport() bool
+    Description() string
+    Serialize(io utils.WriteBuffer) error
+}
+
+const(
+    SupportedPhysicalMedia_OTHER SupportedPhysicalMedia = 0x00
+    SupportedPhysicalMedia_OIL_METER SupportedPhysicalMedia = 0x01
+    SupportedPhysicalMedia_ELECTRICITY_METER SupportedPhysicalMedia = 0x02
+    SupportedPhysicalMedia_GAS_METER SupportedPhysicalMedia = 0x03
+    SupportedPhysicalMedia_HEAT_METER SupportedPhysicalMedia = 0x04
+    SupportedPhysicalMedia_STEAM_METER SupportedPhysicalMedia = 0x05
+    SupportedPhysicalMedia_WARM_WATER_METER SupportedPhysicalMedia = 0x06
+    SupportedPhysicalMedia_WATER_METER SupportedPhysicalMedia = 0x07
+    SupportedPhysicalMedia_HEAT_COST_ALLOCATOR SupportedPhysicalMedia = 0x08
+    SupportedPhysicalMedia_COMPRESSED_AIR SupportedPhysicalMedia = 0x09
+    SupportedPhysicalMedia_COOLING_LOAD_METER_INLET SupportedPhysicalMedia = 0x0A
+    SupportedPhysicalMedia_COOLING_LOAD_METER_OUTLET SupportedPhysicalMedia = 0x0B
+    SupportedPhysicalMedia_HEAT_INLET SupportedPhysicalMedia = 0x0C
+    SupportedPhysicalMedia_HEAT_AND_COOL SupportedPhysicalMedia = 0x0D
+    SupportedPhysicalMedia_BUS_OR_SYSTEM SupportedPhysicalMedia = 0x0E
+    SupportedPhysicalMedia_UNKNOWN_DEVICE_TYPE SupportedPhysicalMedia = 0x0F
+    SupportedPhysicalMedia_BREAKER SupportedPhysicalMedia = 0x20
+    SupportedPhysicalMedia_VALVE SupportedPhysicalMedia = 0x21
+    SupportedPhysicalMedia_WASTE_WATER_METER SupportedPhysicalMedia = 0x28
+    SupportedPhysicalMedia_GARBAGE SupportedPhysicalMedia = 0x29
+    SupportedPhysicalMedia_RADIO_CONVERTER SupportedPhysicalMedia = 0x37
+)
+
+
+func (e SupportedPhysicalMedia) KnxSupport() bool {
+    switch e  {
+        case 0x00: { /* '0x00' */
+            return true
+        }
+        case 0x01: { /* '0x01' */
+            return true
+        }
+        case 0x02: { /* '0x02' */
+            return true
+        }
+        case 0x03: { /* '0x03' */
+            return true
+        }
+        case 0x04: { /* '0x04' */
+            return true
+        }
+        case 0x05: { /* '0x05' */
+            return true
+        }
+        case 0x06: { /* '0x06' */
+            return true
+        }
+        case 0x07: { /* '0x07' */
+            return true
+        }
+        case 0x08: { /* '0x08' */
+            return true
+        }
+        case 0x09: { /* '0x09' */
+            return false
+        }
+        case 0x0A: { /* '0x0A' */
+            return true
+        }
+        case 0x0B: { /* '0x0B' */
+            return true
+        }
+        case 0x0C: { /* '0x0C' */
+            return true
+        }
+        case 0x0D: { /* '0x0D' */
+            return true
+        }
+        case 0x0E: { /* '0x0E' */
+            return false
+        }
+        case 0x0F: { /* '0x0F' */
+            return false
+        }
+        case 0x20: { /* '0x20' */
+            return true
+        }
+        case 0x21: { /* '0x21' */
+            return true
+        }
+        case 0x28: { /* '0x28' */
+            return true
+        }
+        case 0x29: { /* '0x29' */
+            return true
+        }
+        case 0x37: { /* '0x37' */
+            return false
+        }
+        default: {
+            return false
+        }
+    }
+}
+
+func (e SupportedPhysicalMedia) Description() string {
+    switch e  {
+        case 0x00: { /* '0x00' */
+            return "used_for_undefined_physical_medium"
+        }
+        case 0x01: { /* '0x01' */
+            return "measures_volume_of_oil"
+        }
+        case 0x02: { /* '0x02' */
+            return "measures_electric_energy"
+        }
+        case 0x03: { /* '0x03' */
+            return "measures_volume_of_gaseous_energy"
+        }
+        case 0x04: { /* '0x04' */
+            return "heat_energy_measured_in_outlet_pipe"
+        }
+        case 0x05: { /* '0x05' */
+            return "measures_weight_of_hot_steam"
+        }
+        case 0x06: { /* '0x06' */
+            return "measured_heated_water_volume"
+        }
+        case 0x07: { /* '0x07' */
+            return "measured_water_volume"
+        }
+        case 0x08: { /* '0x08' */
+            return "measured_relative_cumulated_heat_consumption"
+        }
+        case 0x09: { /* '0x09' */
+            return "measures_weight_of_compressed_air"
+        }
+        case 0x0A: { /* '0x0A' */
+            return "cooling_energy_measured_in_inlet_pipe"
+        }
+        case 0x0B: { /* '0x0B' */
+            return "cooling_energy_measured_in_outlet_pipe"
+        }
+        case 0x0C: { /* '0x0C' */
+            return "heat_energy_measured_in_inlet_pipe"
+        }
+        case 0x0D: { /* '0x0D' */
+            return "measures_both_heat_and_cool"
+        }
+        case 0x0E: { /* '0x0E' */
+            return "no_meter"
+        }
+        case 0x0F: { /* '0x0F' */
+            return "used_for_undefined_physical_medium"
+        }
+        case 0x20: { /* '0x20' */
+            return "status_of_electric_energy_supply"
+        }
+        case 0x21: { /* '0x21' */
+            return "status_of_supply_of_Gas_or_water"
+        }
+        case 0x28: { /* '0x28' */
+            return "measured_volume_of_disposed_water"
+        }
+        case 0x29: { /* '0x29' */
+            return "measured_weight_of_disposed_rubbish"
+        }
+        case 0x37: { /* '0x37' */
+            return "enables_the_radio_transmission_of_a_meter_without_a_radio_interface"
+        }
+        default: {
+            return ""
+        }
+    }
+}
+func SupportedPhysicalMediaValueOf(value uint8) SupportedPhysicalMedia {
+    switch value {
+        case 0x00:
+            return SupportedPhysicalMedia_OTHER
+        case 0x01:
+            return SupportedPhysicalMedia_OIL_METER
+        case 0x02:
+            return SupportedPhysicalMedia_ELECTRICITY_METER
+        case 0x03:
+            return SupportedPhysicalMedia_GAS_METER
+        case 0x04:
+            return SupportedPhysicalMedia_HEAT_METER
+        case 0x05:
+            return SupportedPhysicalMedia_STEAM_METER
+        case 0x06:
+            return SupportedPhysicalMedia_WARM_WATER_METER
+        case 0x07:
+            return SupportedPhysicalMedia_WATER_METER
+        case 0x08:
+            return SupportedPhysicalMedia_HEAT_COST_ALLOCATOR
+        case 0x09:
+            return SupportedPhysicalMedia_COMPRESSED_AIR
+        case 0x0A:
+            return SupportedPhysicalMedia_COOLING_LOAD_METER_INLET
+        case 0x0B:
+            return SupportedPhysicalMedia_COOLING_LOAD_METER_OUTLET
+        case 0x0C:
+            return SupportedPhysicalMedia_HEAT_INLET
+        case 0x0D:
+            return SupportedPhysicalMedia_HEAT_AND_COOL
+        case 0x0E:
+            return SupportedPhysicalMedia_BUS_OR_SYSTEM
+        case 0x0F:
+            return SupportedPhysicalMedia_UNKNOWN_DEVICE_TYPE
+        case 0x20:
+            return SupportedPhysicalMedia_BREAKER
+        case 0x21:
+            return SupportedPhysicalMedia_VALVE
+        case 0x28:
+            return SupportedPhysicalMedia_WASTE_WATER_METER
+        case 0x29:
+            return SupportedPhysicalMedia_GARBAGE
+        case 0x37:
+            return SupportedPhysicalMedia_RADIO_CONVERTER
+    }
+    return 0
+}
+
+func CastSupportedPhysicalMedia(structType interface{}) SupportedPhysicalMedia {
+    castFunc := func(typ interface{}) SupportedPhysicalMedia {
+        if sSupportedPhysicalMedia, ok := typ.(SupportedPhysicalMedia); ok {
+            return sSupportedPhysicalMedia
+        }
+        return 0
+    }
+    return castFunc(structType)
+}
+
+func (m SupportedPhysicalMedia) LengthInBits() uint16 {
+    return 8
+}
+
+func (m SupportedPhysicalMedia) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func SupportedPhysicalMediaParse(io *utils.ReadBuffer) (SupportedPhysicalMedia, error) {
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return SupportedPhysicalMediaValueOf(val), nil
+}
+
+func (e SupportedPhysicalMedia) Serialize(io utils.WriteBuffer) error {
+    err := io.WriteUint8(8, uint8(e))
+    return err
+}
+
+func (e SupportedPhysicalMedia) String() string {
+    switch e {
+    case SupportedPhysicalMedia_OTHER:
+        return "OTHER"
+    case SupportedPhysicalMedia_OIL_METER:
+        return "OIL_METER"
+    case SupportedPhysicalMedia_ELECTRICITY_METER:
+        return "ELECTRICITY_METER"
+    case SupportedPhysicalMedia_GAS_METER:
+        return "GAS_METER"
+    case SupportedPhysicalMedia_HEAT_METER:
+        return "HEAT_METER"
+    case SupportedPhysicalMedia_STEAM_METER:
+        return "STEAM_METER"
+    case SupportedPhysicalMedia_WARM_WATER_METER:
+        return "WARM_WATER_METER"
+    case SupportedPhysicalMedia_WATER_METER:
+        return "WATER_METER"
+    case SupportedPhysicalMedia_HEAT_COST_ALLOCATOR:
+        return "HEAT_COST_ALLOCATOR"
+    case SupportedPhysicalMedia_COMPRESSED_AIR:
+        return "COMPRESSED_AIR"
+    case SupportedPhysicalMedia_COOLING_LOAD_METER_INLET:
+        return "COOLING_LOAD_METER_INLET"
+    case SupportedPhysicalMedia_COOLING_LOAD_METER_OUTLET:
+        return "COOLING_LOAD_METER_OUTLET"
+    case SupportedPhysicalMedia_HEAT_INLET:
+        return "HEAT_INLET"
+    case SupportedPhysicalMedia_HEAT_AND_COOL:
+        return "HEAT_AND_COOL"
+    case SupportedPhysicalMedia_BUS_OR_SYSTEM:
+        return "BUS_OR_SYSTEM"
+    case SupportedPhysicalMedia_UNKNOWN_DEVICE_TYPE:
+        return "UNKNOWN_DEVICE_TYPE"
+    case SupportedPhysicalMedia_BREAKER:
+        return "BREAKER"
+    case SupportedPhysicalMedia_VALVE:
+        return "VALVE"
+    case SupportedPhysicalMedia_WASTE_WATER_METER:
+        return "WASTE_WATER_METER"
+    case SupportedPhysicalMedia_GARBAGE:
+        return "GARBAGE"
+    case SupportedPhysicalMedia_RADIO_CONVERTER:
+        return "RADIO_CONVERTER"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go
index 63c4fa5..8a7e6ed 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go
@@ -79,3 +79,17 @@ func (e TPCI) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(2, uint8(e))
     return err
 }
+
+func (e TPCI) String() string {
+    switch e {
+    case TPCI_UNNUMBERED_DATA_PACKET:
+        return "UNNUMBERED_DATA_PACKET"
+    case TPCI_UNNUMBERED:
+        return "UNNUMBERED"
+    case TPCI_NUMBERED_DATA_PACKET:
+        return "NUMBERED_DATA_PACKET"
+    case TPCI_NUMBERED_CONTROL_DATA:
+        return "NUMBERED_CONTROL_DATA"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
index ba8683e..7eaf01c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
@@ -81,6 +81,10 @@ func CastTunnelingRequest(structType interface{}) *TunnelingRequest {
     return castFunc(structType)
 }
 
+func (m *TunnelingRequest) GetTypeName() string {
+    return "TunnelingRequest"
+}
+
 func (m *TunnelingRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go
index 48389f2..aaaba97 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go
@@ -58,6 +58,10 @@ func CastTunnelingRequestDataBlock(structType interface{}) *TunnelingRequestData
     return castFunc(structType)
 }
 
+func (m *TunnelingRequestDataBlock) GetTypeName() string {
+    return "TunnelingRequestDataBlock"
+}
+
 func (m *TunnelingRequestDataBlock) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
index 67389a1..ab044bc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
@@ -79,6 +79,10 @@ func CastTunnelingResponse(structType interface{}) *TunnelingResponse {
     return castFunc(structType)
 }
 
+func (m *TunnelingResponse) GetTypeName() string {
+    return "TunnelingResponse"
+}
+
 func (m *TunnelingResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go
index b200f6c..1c2a0b4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go
@@ -58,6 +58,10 @@ func CastTunnelingResponseDataBlock(structType interface{}) *TunnelingResponseDa
     return castFunc(structType)
 }
 
+func (m *TunnelingResponseDataBlock) GetTypeName() string {
+    return "TunnelingResponseDataBlock"
+}
+
 func (m *TunnelingResponseDataBlock) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
index 5fd6ad4..15cbcc3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
@@ -80,6 +80,10 @@ func CastUnknownMessage(structType interface{}) *UnknownMessage {
     return castFunc(structType)
 }
 
+func (m *UnknownMessage) GetTypeName() string {
+    return "UnknownMessage"
+}
+
 func (m *UnknownMessage) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -154,7 +158,7 @@ func (m *UnknownMessage) UnmarshalXML(d *xml.Decoder, start xml.StartElement) er
                 if err != nil {
                     return err
                 }
-                m.UnknownData = utils.ByteToInt8(_decoded[0:_len])
+                m.UnknownData = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -169,7 +173,7 @@ func (m *UnknownMessage) UnmarshalXML(d *xml.Decoder, start xml.StartElement) er
 
 func (m *UnknownMessage) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedUnknownData := make([]byte, base64.StdEncoding.EncodedLen(len(m.UnknownData)))
-    base64.StdEncoding.Encode(_encodedUnknownData, utils.Int8ToByte(m.UnknownData))
+    base64.StdEncoding.Encode(_encodedUnknownData, utils.Int8ArrayToByteArray(m.UnknownData))
     if err := e.EncodeElement(_encodedUnknownData, xml.StartElement{Name: xml.Name{Local: "unknownData"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/ModbusReader.go b/plc4go/internal/plc4go/modbus/ModbusReader.go
index 400cd1e..1e0a4cf 100644
--- a/plc4go/internal/plc4go/modbus/ModbusReader.go
+++ b/plc4go/internal/plc4go/modbus/ModbusReader.go
@@ -153,19 +153,19 @@ func (m *ModbusReader) ToPlc4xReadResponse(responseAdu modbusModel.ModbusTcpADU,
 	switch responseAdu.Pdu.Child.(type) {
 	case *modbusModel.ModbusPDUReadDiscreteInputsResponse:
 		pdu := modbusModel.CastModbusPDUReadDiscreteInputsResponse(responseAdu.Pdu)
-		data = utils.Int8ToUint8(pdu.Value)
+		data = utils.Int8ArrayToUint8Array(pdu.Value)
 		// Pure Boolean ...
 	case *modbusModel.ModbusPDUReadCoilsResponse:
 		pdu := modbusModel.CastModbusPDUReadCoilsResponse(&responseAdu.Pdu)
-		data = utils.Int8ToUint8(pdu.Value)
+		data = utils.Int8ArrayToUint8Array(pdu.Value)
 		// Pure Boolean ...
 	case *modbusModel.ModbusPDUReadInputRegistersResponse:
 		pdu := modbusModel.CastModbusPDUReadInputRegistersResponse(responseAdu.Pdu)
-		data = utils.Int8ToUint8(pdu.Value)
+		data = utils.Int8ArrayToUint8Array(pdu.Value)
 		// DataIo ...
 	case *modbusModel.ModbusPDUReadHoldingRegistersResponse:
 		pdu := modbusModel.CastModbusPDUReadHoldingRegistersResponse(responseAdu.Pdu)
-		data = utils.Int8ToUint8(pdu.Value)
+		data = utils.Int8ArrayToUint8Array(pdu.Value)
 	case *modbusModel.ModbusPDUError:
 		return nil, errors.New("got an error from remote")
 	default:
diff --git a/plc4go/internal/plc4go/modbus/ModbusWriter.go b/plc4go/internal/plc4go/modbus/ModbusWriter.go
index adc51e6..654080b 100644
--- a/plc4go/internal/plc4go/modbus/ModbusWriter.go
+++ b/plc4go/internal/plc4go/modbus/ModbusWriter.go
@@ -74,7 +74,7 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 			}
 			return result
 		}
-		data := utils.Uint8ToInt8(io.GetBytes())
+		data := utils.Uint8ArrayToInt8Array(io.GetBytes())
 
 		// Calculate the number of words needed to send the data
 		numWords := uint16(math.Ceil(float64(len(data)) / 2))
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go
index 3c06b36..3e1b506 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go
@@ -59,6 +59,10 @@ func CastModbusConstants(structType interface{}) *ModbusConstants {
     return castFunc(structType)
 }
 
+func (m *ModbusConstants) GetTypeName() string {
+    return "ModbusConstants"
+}
+
 func (m *ModbusConstants) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go
index a1a6e9f..3e3a7f6 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go
@@ -226,3 +226,63 @@ func (m ModbusDataTypeSizes) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
+
+func (e ModbusDataTypeSizes) String() string {
+    switch e {
+    case ModbusDataTypeSizes_BOOL:
+        return "BOOL"
+    case ModbusDataTypeSizes_BYTE:
+        return "BYTE"
+    case ModbusDataTypeSizes_CHAR:
+        return "CHAR"
+    case ModbusDataTypeSizes_DATE:
+        return "DATE"
+    case ModbusDataTypeSizes_DATE_AND_TIME:
+        return "DATE_AND_TIME"
+    case ModbusDataTypeSizes_DINT:
+        return "DINT"
+    case ModbusDataTypeSizes_DWORD:
+        return "DWORD"
+    case ModbusDataTypeSizes_INT:
+        return "INT"
+    case ModbusDataTypeSizes_LDATE:
+        return "LDATE"
+    case ModbusDataTypeSizes_LDATE_AND_TIME:
+        return "LDATE_AND_TIME"
+    case ModbusDataTypeSizes_LINT:
+        return "LINT"
+    case ModbusDataTypeSizes_LREAL:
+        return "LREAL"
+    case ModbusDataTypeSizes_LTIME:
+        return "LTIME"
+    case ModbusDataTypeSizes_LTIME_OF_DAY:
+        return "LTIME_OF_DAY"
+    case ModbusDataTypeSizes_LWORD:
+        return "LWORD"
+    case ModbusDataTypeSizes_REAL:
+        return "REAL"
+    case ModbusDataTypeSizes_SINT:
+        return "SINT"
+    case ModbusDataTypeSizes_STRING:
+        return "STRING"
+    case ModbusDataTypeSizes_TIME:
+        return "TIME"
+    case ModbusDataTypeSizes_TIME_OF_DAY:
+        return "TIME_OF_DAY"
+    case ModbusDataTypeSizes_UDINT:
+        return "UDINT"
+    case ModbusDataTypeSizes_UINT:
+        return "UINT"
+    case ModbusDataTypeSizes_ULINT:
+        return "ULINT"
+    case ModbusDataTypeSizes_USINT:
+        return "USINT"
+    case ModbusDataTypeSizes_WCHAR:
+        return "WCHAR"
+    case ModbusDataTypeSizes_WORD:
+        return "WORD"
+    case ModbusDataTypeSizes_WSTRING:
+        return "WSTRING"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go
index 9074700..e296290 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go
@@ -97,3 +97,29 @@ func (e ModbusErrorCode) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e ModbusErrorCode) String() string {
+    switch e {
+    case ModbusErrorCode_ILLEGAL_FUNCTION:
+        return "ILLEGAL_FUNCTION"
+    case ModbusErrorCode_GATEWAY_PATH_UNAVAILABLE:
+        return "GATEWAY_PATH_UNAVAILABLE"
+    case ModbusErrorCode_GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND:
+        return "GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND"
+    case ModbusErrorCode_ILLEGAL_DATA_ADDRESS:
+        return "ILLEGAL_DATA_ADDRESS"
+    case ModbusErrorCode_ILLEGAL_DATA_VALUE:
+        return "ILLEGAL_DATA_VALUE"
+    case ModbusErrorCode_SLAVE_DEVICE_FAILURE:
+        return "SLAVE_DEVICE_FAILURE"
+    case ModbusErrorCode_ACKNOWLEDGE:
+        return "ACKNOWLEDGE"
+    case ModbusErrorCode_SLAVE_DEVICE_BUSY:
+        return "SLAVE_DEVICE_BUSY"
+    case ModbusErrorCode_NEGATIVE_ACKNOWLEDGE:
+        return "NEGATIVE_ACKNOWLEDGE"
+    case ModbusErrorCode_MEMORY_PARITY_ERROR:
+        return "MEMORY_PARITY_ERROR"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
index 5505242..86afafd 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
@@ -47,11 +47,13 @@ type IModbusPDU interface {
 
 type IModbusPDUParent interface {
     SerializeParent(io utils.WriteBuffer, child IModbusPDU, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IModbusPDUChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *ModbusPDU)
+    GetTypeName() string
     IModbusPDU
 }
 
@@ -72,6 +74,10 @@ func CastModbusPDU(structType interface{}) *ModbusPDU {
     return castFunc(structType)
 }
 
+func (m *ModbusPDU) GetTypeName() string {
+    return "ModbusPDU"
+}
+
 func (m *ModbusPDU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
index a614934..03cf450 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUDiagnosticRequest(structType interface{}) *ModbusPDUDiagnostic
     return castFunc(structType)
 }
 
+func (m *ModbusPDUDiagnosticRequest) GetTypeName() string {
+    return "ModbusPDUDiagnosticRequest"
+}
+
 func (m *ModbusPDUDiagnosticRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
index 5a03487..d11e471 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
@@ -89,6 +89,10 @@ func CastModbusPDUDiagnosticResponse(structType interface{}) *ModbusPDUDiagnosti
     return castFunc(structType)
 }
 
+func (m *ModbusPDUDiagnosticResponse) GetTypeName() string {
+    return "ModbusPDUDiagnosticResponse"
+}
+
 func (m *ModbusPDUDiagnosticResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
index c61e7fa..f4d8fcb 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
@@ -87,6 +87,10 @@ func CastModbusPDUError(structType interface{}) *ModbusPDUError {
     return castFunc(structType)
 }
 
+func (m *ModbusPDUError) GetTypeName() string {
+    return "ModbusPDUError"
+}
+
 func (m *ModbusPDUError) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
index df8011e..4026bc5 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
@@ -84,6 +84,10 @@ func CastModbusPDUGetComEventCounterRequest(structType interface{}) *ModbusPDUGe
     return castFunc(structType)
 }
 
+func (m *ModbusPDUGetComEventCounterRequest) GetTypeName() string {
+    return "ModbusPDUGetComEventCounterRequest"
+}
+
 func (m *ModbusPDUGetComEventCounterRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
index f97201a..7493aba 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
@@ -89,6 +89,10 @@ func CastModbusPDUGetComEventCounterResponse(structType interface{}) *ModbusPDUG
     return castFunc(structType)
 }
 
+func (m *ModbusPDUGetComEventCounterResponse) GetTypeName() string {
+    return "ModbusPDUGetComEventCounterResponse"
+}
+
 func (m *ModbusPDUGetComEventCounterResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
index 44df88f..bdd2388 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
@@ -84,6 +84,10 @@ func CastModbusPDUGetComEventLogRequest(structType interface{}) *ModbusPDUGetCom
     return castFunc(structType)
 }
 
+func (m *ModbusPDUGetComEventLogRequest) GetTypeName() string {
+    return "ModbusPDUGetComEventLogRequest"
+}
+
 func (m *ModbusPDUGetComEventLogRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
index c845c2c..5a9236b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
@@ -94,6 +94,10 @@ func CastModbusPDUGetComEventLogResponse(structType interface{}) *ModbusPDUGetCo
     return castFunc(structType)
 }
 
+func (m *ModbusPDUGetComEventLogResponse) GetTypeName() string {
+    return "ModbusPDUGetComEventLogResponse"
+}
+
 func (m *ModbusPDUGetComEventLogResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -253,7 +257,7 @@ func (m *ModbusPDUGetComEventLogResponse) UnmarshalXML(d *xml.Decoder, start xml
                 if err != nil {
                     return err
                 }
-                m.Events = utils.ByteToInt8(_decoded[0:_len])
+                m.Events = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -277,7 +281,7 @@ func (m *ModbusPDUGetComEventLogResponse) MarshalXML(e *xml.Encoder, start xml.S
         return err
     }
     _encodedEvents := make([]byte, base64.StdEncoding.EncodedLen(len(m.Events)))
-    base64.StdEncoding.Encode(_encodedEvents, utils.Int8ToByte(m.Events))
+    base64.StdEncoding.Encode(_encodedEvents, utils.Int8ArrayToByteArray(m.Events))
     if err := e.EncodeElement(_encodedEvents, xml.StartElement{Name: xml.Name{Local: "events"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
index 23e9e2a..8f4e759 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
@@ -91,6 +91,10 @@ func CastModbusPDUMaskWriteHoldingRegisterRequest(structType interface{}) *Modbu
     return castFunc(structType)
 }
 
+func (m *ModbusPDUMaskWriteHoldingRegisterRequest) GetTypeName() string {
+    return "ModbusPDUMaskWriteHoldingRegisterRequest"
+}
+
 func (m *ModbusPDUMaskWriteHoldingRegisterRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
index 3b62cc6..84f7f04 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
@@ -91,6 +91,10 @@ func CastModbusPDUMaskWriteHoldingRegisterResponse(structType interface{}) *Modb
     return castFunc(structType)
 }
 
+func (m *ModbusPDUMaskWriteHoldingRegisterResponse) GetTypeName() string {
+    return "ModbusPDUMaskWriteHoldingRegisterResponse"
+}
+
 func (m *ModbusPDUMaskWriteHoldingRegisterResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
index 5260975..408110d 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUReadCoilsRequest(structType interface{}) *ModbusPDUReadCoilsRe
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadCoilsRequest) GetTypeName() string {
+    return "ModbusPDUReadCoilsRequest"
+}
+
 func (m *ModbusPDUReadCoilsRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
index 00e1736..f19b37f 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
@@ -88,6 +88,10 @@ func CastModbusPDUReadCoilsResponse(structType interface{}) *ModbusPDUReadCoilsR
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadCoilsResponse) GetTypeName() string {
+    return "ModbusPDUReadCoilsResponse"
+}
+
 func (m *ModbusPDUReadCoilsResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -178,7 +182,7 @@ func (m *ModbusPDUReadCoilsResponse) UnmarshalXML(d *xml.Decoder, start xml.Star
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -193,7 +197,7 @@ func (m *ModbusPDUReadCoilsResponse) UnmarshalXML(d *xml.Decoder, start xml.Star
 
 func (m *ModbusPDUReadCoilsResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
index 63fa32e..640eaaf 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
@@ -84,6 +84,10 @@ func CastModbusPDUReadDeviceIdentificationRequest(structType interface{}) *Modbu
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadDeviceIdentificationRequest) GetTypeName() string {
+    return "ModbusPDUReadDeviceIdentificationRequest"
+}
+
 func (m *ModbusPDUReadDeviceIdentificationRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
index 5e7cd4f..10ec209 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
@@ -84,6 +84,10 @@ func CastModbusPDUReadDeviceIdentificationResponse(structType interface{}) *Modb
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadDeviceIdentificationResponse) GetTypeName() string {
+    return "ModbusPDUReadDeviceIdentificationResponse"
+}
+
 func (m *ModbusPDUReadDeviceIdentificationResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
index ba92f52..69018fd 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUReadDiscreteInputsRequest(structType interface{}) *ModbusPDURe
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadDiscreteInputsRequest) GetTypeName() string {
+    return "ModbusPDUReadDiscreteInputsRequest"
+}
+
 func (m *ModbusPDUReadDiscreteInputsRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
index c632ec5..ace85c6 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
@@ -88,6 +88,10 @@ func CastModbusPDUReadDiscreteInputsResponse(structType interface{}) *ModbusPDUR
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadDiscreteInputsResponse) GetTypeName() string {
+    return "ModbusPDUReadDiscreteInputsResponse"
+}
+
 func (m *ModbusPDUReadDiscreteInputsResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -178,7 +182,7 @@ func (m *ModbusPDUReadDiscreteInputsResponse) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -193,7 +197,7 @@ func (m *ModbusPDUReadDiscreteInputsResponse) UnmarshalXML(d *xml.Decoder, start
 
 func (m *ModbusPDUReadDiscreteInputsResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
index 90ee9cd..f219f4c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
@@ -84,6 +84,10 @@ func CastModbusPDUReadExceptionStatusRequest(structType interface{}) *ModbusPDUR
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadExceptionStatusRequest) GetTypeName() string {
+    return "ModbusPDUReadExceptionStatusRequest"
+}
+
 func (m *ModbusPDUReadExceptionStatusRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
index 05efe3a..666cccf 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
@@ -87,6 +87,10 @@ func CastModbusPDUReadExceptionStatusResponse(structType interface{}) *ModbusPDU
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadExceptionStatusResponse) GetTypeName() string {
+    return "ModbusPDUReadExceptionStatusResponse"
+}
+
 func (m *ModbusPDUReadExceptionStatusResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
index 00bf63a..315cddc 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
@@ -87,6 +87,10 @@ func CastModbusPDUReadFifoQueueRequest(structType interface{}) *ModbusPDUReadFif
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadFifoQueueRequest) GetTypeName() string {
+    return "ModbusPDUReadFifoQueueRequest"
+}
+
 func (m *ModbusPDUReadFifoQueueRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
index d689cf8..528f011 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
@@ -87,6 +87,10 @@ func CastModbusPDUReadFifoQueueResponse(structType interface{}) *ModbusPDUReadFi
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadFifoQueueResponse) GetTypeName() string {
+    return "ModbusPDUReadFifoQueueResponse"
+}
+
 func (m *ModbusPDUReadFifoQueueResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
index 8aab988..dee4003 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
@@ -87,6 +87,10 @@ func CastModbusPDUReadFileRecordRequest(structType interface{}) *ModbusPDUReadFi
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadFileRecordRequest) GetTypeName() string {
+    return "ModbusPDUReadFileRecordRequest"
+}
+
 func (m *ModbusPDUReadFileRecordRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go
index 6e6b5b4..b13e733 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go
@@ -59,6 +59,10 @@ func CastModbusPDUReadFileRecordRequestItem(structType interface{}) *ModbusPDURe
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadFileRecordRequestItem) GetTypeName() string {
+    return "ModbusPDUReadFileRecordRequestItem"
+}
+
 func (m *ModbusPDUReadFileRecordRequestItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
index ea35b43..fc00d6a 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
@@ -87,6 +87,10 @@ func CastModbusPDUReadFileRecordResponse(structType interface{}) *ModbusPDUReadF
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadFileRecordResponse) GetTypeName() string {
+    return "ModbusPDUReadFileRecordResponse"
+}
+
 func (m *ModbusPDUReadFileRecordResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
index 281cf4b..171ce15 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
@@ -58,6 +58,10 @@ func CastModbusPDUReadFileRecordResponseItem(structType interface{}) *ModbusPDUR
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadFileRecordResponseItem) GetTypeName() string {
+    return "ModbusPDUReadFileRecordResponseItem"
+}
+
 func (m *ModbusPDUReadFileRecordResponseItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -170,7 +174,7 @@ func (m *ModbusPDUReadFileRecordResponseItem) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -187,7 +191,7 @@ func (m *ModbusPDUReadFileRecordResponseItem) MarshalXML(e *xml.Encoder, start x
         return err
     }
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
index 7e83bbf..09c35a0 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUReadHoldingRegistersRequest(structType interface{}) *ModbusPDU
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadHoldingRegistersRequest) GetTypeName() string {
+    return "ModbusPDUReadHoldingRegistersRequest"
+}
+
 func (m *ModbusPDUReadHoldingRegistersRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
index 0a70915..c248452 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
@@ -88,6 +88,10 @@ func CastModbusPDUReadHoldingRegistersResponse(structType interface{}) *ModbusPD
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadHoldingRegistersResponse) GetTypeName() string {
+    return "ModbusPDUReadHoldingRegistersResponse"
+}
+
 func (m *ModbusPDUReadHoldingRegistersResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -178,7 +182,7 @@ func (m *ModbusPDUReadHoldingRegistersResponse) UnmarshalXML(d *xml.Decoder, sta
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -193,7 +197,7 @@ func (m *ModbusPDUReadHoldingRegistersResponse) UnmarshalXML(d *xml.Decoder, sta
 
 func (m *ModbusPDUReadHoldingRegistersResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
index fab3ffd..5bbedcf 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUReadInputRegistersRequest(structType interface{}) *ModbusPDURe
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadInputRegistersRequest) GetTypeName() string {
+    return "ModbusPDUReadInputRegistersRequest"
+}
+
 func (m *ModbusPDUReadInputRegistersRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
index bd2673a..c58c54a 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
@@ -88,6 +88,10 @@ func CastModbusPDUReadInputRegistersResponse(structType interface{}) *ModbusPDUR
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadInputRegistersResponse) GetTypeName() string {
+    return "ModbusPDUReadInputRegistersResponse"
+}
+
 func (m *ModbusPDUReadInputRegistersResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -178,7 +182,7 @@ func (m *ModbusPDUReadInputRegistersResponse) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -193,7 +197,7 @@ func (m *ModbusPDUReadInputRegistersResponse) UnmarshalXML(d *xml.Decoder, start
 
 func (m *ModbusPDUReadInputRegistersResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
index 24222cf..4072d55 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
@@ -96,6 +96,10 @@ func CastModbusPDUReadWriteMultipleHoldingRegistersRequest(structType interface{
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) GetTypeName() string {
+    return "ModbusPDUReadWriteMultipleHoldingRegistersRequest"
+}
+
 func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -278,7 +282,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) UnmarshalXML(d *xml.
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -305,7 +309,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) MarshalXML(e *xml.En
         return err
     }
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
index e60aa32..d2de76e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
@@ -88,6 +88,10 @@ func CastModbusPDUReadWriteMultipleHoldingRegistersResponse(structType interface
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) GetTypeName() string {
+    return "ModbusPDUReadWriteMultipleHoldingRegistersResponse"
+}
+
 func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -178,7 +182,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) UnmarshalXML(d *xml
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -193,7 +197,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) UnmarshalXML(d *xml
 
 func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
index 7ebcd2f..7c29030 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
@@ -84,6 +84,10 @@ func CastModbusPDUReportServerIdRequest(structType interface{}) *ModbusPDUReport
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReportServerIdRequest) GetTypeName() string {
+    return "ModbusPDUReportServerIdRequest"
+}
+
 func (m *ModbusPDUReportServerIdRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
index 8e4a029..7b2886b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
@@ -88,6 +88,10 @@ func CastModbusPDUReportServerIdResponse(structType interface{}) *ModbusPDURepor
     return castFunc(structType)
 }
 
+func (m *ModbusPDUReportServerIdResponse) GetTypeName() string {
+    return "ModbusPDUReportServerIdResponse"
+}
+
 func (m *ModbusPDUReportServerIdResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -178,7 +182,7 @@ func (m *ModbusPDUReportServerIdResponse) UnmarshalXML(d *xml.Decoder, start xml
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -193,7 +197,7 @@ func (m *ModbusPDUReportServerIdResponse) UnmarshalXML(d *xml.Decoder, start xml
 
 func (m *ModbusPDUReportServerIdResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
index b4f1eff..635c1e9 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
@@ -87,6 +87,10 @@ func CastModbusPDUWriteFileRecordRequest(structType interface{}) *ModbusPDUWrite
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteFileRecordRequest) GetTypeName() string {
+    return "ModbusPDUWriteFileRecordRequest"
+}
+
 func (m *ModbusPDUWriteFileRecordRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
index a6f4663..1c0af99 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
@@ -60,6 +60,10 @@ func CastModbusPDUWriteFileRecordRequestItem(structType interface{}) *ModbusPDUW
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteFileRecordRequestItem) GetTypeName() string {
+    return "ModbusPDUWriteFileRecordRequestItem"
+}
+
 func (m *ModbusPDUWriteFileRecordRequestItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -216,7 +220,7 @@ func (m *ModbusPDUWriteFileRecordRequestItem) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.RecordData = utils.ByteToInt8(_decoded[0:_len])
+                m.RecordData = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -239,7 +243,7 @@ func (m *ModbusPDUWriteFileRecordRequestItem) MarshalXML(e *xml.Encoder, start x
         return err
     }
     _encodedRecordData := make([]byte, base64.StdEncoding.EncodedLen(len(m.RecordData)))
-    base64.StdEncoding.Encode(_encodedRecordData, utils.Int8ToByte(m.RecordData))
+    base64.StdEncoding.Encode(_encodedRecordData, utils.Int8ArrayToByteArray(m.RecordData))
     if err := e.EncodeElement(_encodedRecordData, xml.StartElement{Name: xml.Name{Local: "recordData"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
index e396256..ab74ff9 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
@@ -87,6 +87,10 @@ func CastModbusPDUWriteFileRecordResponse(structType interface{}) *ModbusPDUWrit
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteFileRecordResponse) GetTypeName() string {
+    return "ModbusPDUWriteFileRecordResponse"
+}
+
 func (m *ModbusPDUWriteFileRecordResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
index 645425f..54526a4 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
@@ -60,6 +60,10 @@ func CastModbusPDUWriteFileRecordResponseItem(structType interface{}) *ModbusPDU
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteFileRecordResponseItem) GetTypeName() string {
+    return "ModbusPDUWriteFileRecordResponseItem"
+}
+
 func (m *ModbusPDUWriteFileRecordResponseItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -216,7 +220,7 @@ func (m *ModbusPDUWriteFileRecordResponseItem) UnmarshalXML(d *xml.Decoder, star
                 if err != nil {
                     return err
                 }
-                m.RecordData = utils.ByteToInt8(_decoded[0:_len])
+                m.RecordData = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -239,7 +243,7 @@ func (m *ModbusPDUWriteFileRecordResponseItem) MarshalXML(e *xml.Encoder, start
         return err
     }
     _encodedRecordData := make([]byte, base64.StdEncoding.EncodedLen(len(m.RecordData)))
-    base64.StdEncoding.Encode(_encodedRecordData, utils.Int8ToByte(m.RecordData))
+    base64.StdEncoding.Encode(_encodedRecordData, utils.Int8ArrayToByteArray(m.RecordData))
     if err := e.EncodeElement(_encodedRecordData, xml.StartElement{Name: xml.Name{Local: "recordData"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
index 2934e55..a838a6f 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
@@ -92,6 +92,10 @@ func CastModbusPDUWriteMultipleCoilsRequest(structType interface{}) *ModbusPDUWr
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteMultipleCoilsRequest) GetTypeName() string {
+    return "ModbusPDUWriteMultipleCoilsRequest"
+}
+
 func (m *ModbusPDUWriteMultipleCoilsRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -228,7 +232,7 @@ func (m *ModbusPDUWriteMultipleCoilsRequest) UnmarshalXML(d *xml.Decoder, start
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -249,7 +253,7 @@ func (m *ModbusPDUWriteMultipleCoilsRequest) MarshalXML(e *xml.Encoder, start xm
         return err
     }
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
index e8c7231..6c28984 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
@@ -89,6 +89,10 @@ func CastModbusPDUWriteMultipleCoilsResponse(structType interface{}) *ModbusPDUW
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteMultipleCoilsResponse) GetTypeName() string {
+    return "ModbusPDUWriteMultipleCoilsResponse"
+}
+
 func (m *ModbusPDUWriteMultipleCoilsResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
index ff0c5c5..5224534 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
@@ -92,6 +92,10 @@ func CastModbusPDUWriteMultipleHoldingRegistersRequest(structType interface{}) *
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) GetTypeName() string {
+    return "ModbusPDUWriteMultipleHoldingRegistersRequest"
+}
+
 func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -228,7 +232,7 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) UnmarshalXML(d *xml.Deco
                 if err != nil {
                     return err
                 }
-                m.Value = utils.ByteToInt8(_decoded[0:_len])
+                m.Value = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -249,7 +253,7 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) MarshalXML(e *xml.Encode
         return err
     }
     _encodedValue := make([]byte, base64.StdEncoding.EncodedLen(len(m.Value)))
-    base64.StdEncoding.Encode(_encodedValue, utils.Int8ToByte(m.Value))
+    base64.StdEncoding.Encode(_encodedValue, utils.Int8ArrayToByteArray(m.Value))
     if err := e.EncodeElement(_encodedValue, xml.StartElement{Name: xml.Name{Local: "value"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
index 05cc378..96cd977 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
@@ -89,6 +89,10 @@ func CastModbusPDUWriteMultipleHoldingRegistersResponse(structType interface{})
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteMultipleHoldingRegistersResponse) GetTypeName() string {
+    return "ModbusPDUWriteMultipleHoldingRegistersResponse"
+}
+
 func (m *ModbusPDUWriteMultipleHoldingRegistersResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
index 410faa4..d482c58 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUWriteSingleCoilRequest(structType interface{}) *ModbusPDUWrite
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteSingleCoilRequest) GetTypeName() string {
+    return "ModbusPDUWriteSingleCoilRequest"
+}
+
 func (m *ModbusPDUWriteSingleCoilRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
index 8eeddfd..137153e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
@@ -89,6 +89,10 @@ func CastModbusPDUWriteSingleCoilResponse(structType interface{}) *ModbusPDUWrit
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteSingleCoilResponse) GetTypeName() string {
+    return "ModbusPDUWriteSingleCoilResponse"
+}
+
 func (m *ModbusPDUWriteSingleCoilResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
index 02675b0..c818d33 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
@@ -89,6 +89,10 @@ func CastModbusPDUWriteSingleRegisterRequest(structType interface{}) *ModbusPDUW
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteSingleRegisterRequest) GetTypeName() string {
+    return "ModbusPDUWriteSingleRegisterRequest"
+}
+
 func (m *ModbusPDUWriteSingleRegisterRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
index 18c3c87..c480b49 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
@@ -89,6 +89,10 @@ func CastModbusPDUWriteSingleRegisterResponse(structType interface{}) *ModbusPDU
     return castFunc(structType)
 }
 
+func (m *ModbusPDUWriteSingleRegisterResponse) GetTypeName() string {
+    return "ModbusPDUWriteSingleRegisterResponse"
+}
+
 func (m *ModbusPDUWriteSingleRegisterResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go
index cbc124f..3a9c80c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go
@@ -60,6 +60,10 @@ func CastModbusSerialADU(structType interface{}) *ModbusSerialADU {
     return castFunc(structType)
 }
 
+func (m *ModbusSerialADU) GetTypeName() string {
+    return "ModbusSerialADU"
+}
+
 func (m *ModbusSerialADU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go
index 3646bda..b4a6dd3 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go
@@ -62,6 +62,10 @@ func CastModbusTcpADU(structType interface{}) *ModbusTcpADU {
     return castFunc(structType)
 }
 
+func (m *ModbusTcpADU) GetTypeName() string {
+    return "ModbusTcpADU"
+}
+
 func (m *ModbusTcpADU) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index 93b563d..8acdf88 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -47,11 +47,13 @@ type ICOTPPacket interface {
 
 type ICOTPPacketParent interface {
     SerializeParent(io utils.WriteBuffer, child ICOTPPacket, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type ICOTPPacketChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *COTPPacket, parameters []*COTPParameter, payload *S7Message)
+    GetTypeName() string
     ICOTPPacket
 }
 
@@ -72,6 +74,10 @@ func CastCOTPPacket(structType interface{}) *COTPPacket {
     return castFunc(structType)
 }
 
+func (m *COTPPacket) GetTypeName() string {
+    return "COTPPacket"
+}
+
 func (m *COTPPacket) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
index f80c65e..47b7ee6 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
@@ -85,6 +85,10 @@ func CastCOTPPacketConnectionRequest(structType interface{}) *COTPPacketConnecti
     return castFunc(structType)
 }
 
+func (m *COTPPacketConnectionRequest) GetTypeName() string {
+    return "COTPPacketConnectionRequest"
+}
+
 func (m *COTPPacketConnectionRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
index 3252770..c6fcddb 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
@@ -85,6 +85,10 @@ func CastCOTPPacketConnectionResponse(structType interface{}) *COTPPacketConnect
     return castFunc(structType)
 }
 
+func (m *COTPPacketConnectionResponse) GetTypeName() string {
+    return "COTPPacketConnectionResponse"
+}
+
 func (m *COTPPacketConnectionResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
index 39c8912..d55617d 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
@@ -83,6 +83,10 @@ func CastCOTPPacketData(structType interface{}) *COTPPacketData {
     return castFunc(structType)
 }
 
+func (m *COTPPacketData) GetTypeName() string {
+    return "COTPPacketData"
+}
+
 func (m *COTPPacketData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
index d081faa..588c03b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
@@ -85,6 +85,10 @@ func CastCOTPPacketDisconnectRequest(structType interface{}) *COTPPacketDisconne
     return castFunc(structType)
 }
 
+func (m *COTPPacketDisconnectRequest) GetTypeName() string {
+    return "COTPPacketDisconnectRequest"
+}
+
 func (m *COTPPacketDisconnectRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
index 8fc740b..b7a7d16 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
@@ -83,6 +83,10 @@ func CastCOTPPacketDisconnectResponse(structType interface{}) *COTPPacketDisconn
     return castFunc(structType)
 }
 
+func (m *COTPPacketDisconnectResponse) GetTypeName() string {
+    return "COTPPacketDisconnectResponse"
+}
+
 func (m *COTPPacketDisconnectResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
index bbb52dc..0d88e08 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
@@ -83,6 +83,10 @@ func CastCOTPPacketTpduError(structType interface{}) *COTPPacketTpduError {
     return castFunc(structType)
 }
 
+func (m *COTPPacketTpduError) GetTypeName() string {
+    return "COTPPacketTpduError"
+}
+
 func (m *COTPPacketTpduError) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
index 4520da2..9a23938 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
@@ -45,11 +45,13 @@ type ICOTPParameter interface {
 
 type ICOTPParameterParent interface {
     SerializeParent(io utils.WriteBuffer, child ICOTPParameter, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type ICOTPParameterChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *COTPParameter)
+    GetTypeName() string
     ICOTPParameter
 }
 
@@ -70,6 +72,10 @@ func CastCOTPParameter(structType interface{}) *COTPParameter {
     return castFunc(structType)
 }
 
+func (m *COTPParameter) GetTypeName() string {
+    return "COTPParameter"
+}
+
 func (m *COTPParameter) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
index 0a61862..536c4c5 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
@@ -79,6 +79,10 @@ func CastCOTPParameterCalledTsap(structType interface{}) *COTPParameterCalledTsa
     return castFunc(structType)
 }
 
+func (m *COTPParameterCalledTsap) GetTypeName() string {
+    return "COTPParameterCalledTsap"
+}
+
 func (m *COTPParameterCalledTsap) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
index 1067967..53e2178 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
@@ -79,6 +79,10 @@ func CastCOTPParameterCallingTsap(structType interface{}) *COTPParameterCallingT
     return castFunc(structType)
 }
 
+func (m *COTPParameterCallingTsap) GetTypeName() string {
+    return "COTPParameterCallingTsap"
+}
+
 func (m *COTPParameterCallingTsap) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
index a4b64a9..57cc8a9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
@@ -79,6 +79,10 @@ func CastCOTPParameterChecksum(structType interface{}) *COTPParameterChecksum {
     return castFunc(structType)
 }
 
+func (m *COTPParameterChecksum) GetTypeName() string {
+    return "COTPParameterChecksum"
+}
+
 func (m *COTPParameterChecksum) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
index b38e053..d721c5f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
@@ -79,6 +79,10 @@ func CastCOTPParameterDisconnectAdditionalInformation(structType interface{}) *C
     return castFunc(structType)
 }
 
+func (m *COTPParameterDisconnectAdditionalInformation) GetTypeName() string {
+    return "COTPParameterDisconnectAdditionalInformation"
+}
+
 func (m *COTPParameterDisconnectAdditionalInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
index 992105b..f0f8ab8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
@@ -79,6 +79,10 @@ func CastCOTPParameterTpduSize(structType interface{}) *COTPParameterTpduSize {
     return castFunc(structType)
 }
 
+func (m *COTPParameterTpduSize) GetTypeName() string {
+    return "COTPParameterTpduSize"
+}
+
 func (m *COTPParameterTpduSize) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go
index 9b39b40..0ea26ed 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go
@@ -82,3 +82,19 @@ func (e COTPProtocolClass) Serialize(io utils.WriteBuffer) error {
     err := io.WriteInt8(8, int8(e))
     return err
 }
+
+func (e COTPProtocolClass) String() string {
+    switch e {
+    case COTPProtocolClass_CLASS_0:
+        return "CLASS_0"
+    case COTPProtocolClass_CLASS_1:
+        return "CLASS_1"
+    case COTPProtocolClass_CLASS_2:
+        return "CLASS_2"
+    case COTPProtocolClass_CLASS_3:
+        return "CLASS_3"
+    case COTPProtocolClass_CLASS_4:
+        return "CLASS_4"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go
index 8e57af9..38e6f30 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go
@@ -118,3 +118,23 @@ func (e COTPTpduSize) Serialize(io utils.WriteBuffer) error {
     err := io.WriteInt8(8, int8(e))
     return err
 }
+
+func (e COTPTpduSize) String() string {
+    switch e {
+    case COTPTpduSize_SIZE_128:
+        return "SIZE_128"
+    case COTPTpduSize_SIZE_256:
+        return "SIZE_256"
+    case COTPTpduSize_SIZE_512:
+        return "SIZE_512"
+    case COTPTpduSize_SIZE_1024:
+        return "SIZE_1024"
+    case COTPTpduSize_SIZE_2048:
+        return "SIZE_2048"
+    case COTPTpduSize_SIZE_4096:
+        return "SIZE_4096"
+    case COTPTpduSize_SIZE_8192:
+        return "SIZE_8192"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go
index b46d7f6..a142475 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go
@@ -85,3 +85,21 @@ func (e DataTransportErrorCode) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e DataTransportErrorCode) String() string {
+    switch e {
+    case DataTransportErrorCode_RESERVED:
+        return "RESERVED"
+    case DataTransportErrorCode_ACCESS_DENIED:
+        return "ACCESS_DENIED"
+    case DataTransportErrorCode_INVALID_ADDRESS:
+        return "INVALID_ADDRESS"
+    case DataTransportErrorCode_DATA_TYPE_NOT_SUPPORTED:
+        return "DATA_TYPE_NOT_SUPPORTED"
+    case DataTransportErrorCode_NOT_FOUND:
+        return "NOT_FOUND"
+    case DataTransportErrorCode_OK:
+        return "OK"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go
index 3a266e3..0e0d51c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go
@@ -118,3 +118,23 @@ func (e DataTransportSize) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e DataTransportSize) String() string {
+    switch e {
+    case DataTransportSize_NULL:
+        return "NULL"
+    case DataTransportSize_BIT:
+        return "BIT"
+    case DataTransportSize_BYTE_WORD_DWORD:
+        return "BYTE_WORD_DWORD"
+    case DataTransportSize_INTEGER:
+        return "INTEGER"
+    case DataTransportSize_DINTEGER:
+        return "DINTEGER"
+    case DataTransportSize_REAL:
+        return "REAL"
+    case DataTransportSize_OCTET_STRING:
+        return "OCTET_STRING"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go b/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go
index 4d05848..799cbdd 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go
@@ -76,3 +76,15 @@ func (e DeviceGroup) Serialize(io utils.WriteBuffer) error {
     err := io.WriteInt8(8, int8(e))
     return err
 }
+
+func (e DeviceGroup) String() string {
+    switch e {
+    case DeviceGroup_PG_OR_PC:
+        return "PG_OR_PC"
+    case DeviceGroup_OS:
+        return "OS"
+    case DeviceGroup_OTHERS:
+        return "OTHERS"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go b/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go
index 0408b41..475d667 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go
@@ -130,3 +130,27 @@ func (e MemoryArea) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e MemoryArea) String() string {
+    switch e {
+    case MemoryArea_COUNTERS:
+        return "COUNTERS"
+    case MemoryArea_TIMERS:
+        return "TIMERS"
+    case MemoryArea_DIRECT_PERIPHERAL_ACCESS:
+        return "DIRECT_PERIPHERAL_ACCESS"
+    case MemoryArea_INPUTS:
+        return "INPUTS"
+    case MemoryArea_OUTPUTS:
+        return "OUTPUTS"
+    case MemoryArea_FLAGS_MARKERS:
+        return "FLAGS_MARKERS"
+    case MemoryArea_DATA_BLOCKS:
+        return "DATA_BLOCKS"
+    case MemoryArea_INSTANCE_DATA_BLOCKS:
+        return "INSTANCE_DATA_BLOCKS"
+    case MemoryArea_LOCAL_DATA:
+        return "LOCAL_DATA"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
index e917ac1..485ef69 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
@@ -45,11 +45,13 @@ type IS7Address interface {
 
 type IS7AddressParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7Address, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7AddressChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7Address)
+    GetTypeName() string
     IS7Address
 }
 
@@ -70,6 +72,10 @@ func CastS7Address(structType interface{}) *S7Address {
     return castFunc(structType)
 }
 
+func (m *S7Address) GetTypeName() string {
+    return "S7Address"
+}
+
 func (m *S7Address) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go b/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
index 1fb9e2b..6ea7150 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
@@ -90,6 +90,10 @@ func CastS7AddressAny(structType interface{}) *S7AddressAny {
     return castFunc(structType)
 }
 
+func (m *S7AddressAny) GetTypeName() string {
+    return "S7AddressAny"
+}
+
 func (m *S7AddressAny) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
index fff7521..3637b82 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
@@ -53,11 +53,13 @@ type IS7Message interface {
 
 type IS7MessageParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7Message, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7MessageChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7Message, tpduReference uint16, parameter *S7Parameter, payload *S7Payload)
+    GetTypeName() string
     IS7Message
 }
 
@@ -78,6 +80,10 @@ func CastS7Message(structType interface{}) *S7Message {
     return castFunc(structType)
 }
 
+func (m *S7Message) GetTypeName() string {
+    return "S7Message"
+}
+
 func (m *S7Message) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
index b9db406..c4f3783 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
@@ -79,6 +79,10 @@ func CastS7MessageRequest(structType interface{}) *S7MessageRequest {
     return castFunc(structType)
 }
 
+func (m *S7MessageRequest) GetTypeName() string {
+    return "S7MessageRequest"
+}
+
 func (m *S7MessageRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
index 4892ee2..12e26a1 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
@@ -84,6 +84,10 @@ func CastS7MessageResponse(structType interface{}) *S7MessageResponse {
     return castFunc(structType)
 }
 
+func (m *S7MessageResponse) GetTypeName() string {
+    return "S7MessageResponse"
+}
+
 func (m *S7MessageResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
index 45087e5..7ce6cc3 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
@@ -84,6 +84,10 @@ func CastS7MessageResponseData(structType interface{}) *S7MessageResponseData {
     return castFunc(structType)
 }
 
+func (m *S7MessageResponseData) GetTypeName() string {
+    return "S7MessageResponseData"
+}
+
 func (m *S7MessageResponseData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
index 038bbd8..d242c06 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
@@ -79,6 +79,10 @@ func CastS7MessageUserData(structType interface{}) *S7MessageUserData {
     return castFunc(structType)
 }
 
+func (m *S7MessageUserData) GetTypeName() string {
+    return "S7MessageUserData"
+}
+
 func (m *S7MessageUserData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
index cfd5b90..8b24b99 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
@@ -46,11 +46,13 @@ type IS7Parameter interface {
 
 type IS7ParameterParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7Parameter, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7ParameterChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7Parameter)
+    GetTypeName() string
     IS7Parameter
 }
 
@@ -71,6 +73,10 @@ func CastS7Parameter(structType interface{}) *S7Parameter {
     return castFunc(structType)
 }
 
+func (m *S7Parameter) GetTypeName() string {
+    return "S7Parameter"
+}
+
 func (m *S7Parameter) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
index f6baa55..1908359 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
@@ -83,6 +83,10 @@ func CastS7ParameterReadVarRequest(structType interface{}) *S7ParameterReadVarRe
     return castFunc(structType)
 }
 
+func (m *S7ParameterReadVarRequest) GetTypeName() string {
+    return "S7ParameterReadVarRequest"
+}
+
 func (m *S7ParameterReadVarRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
index 3a078b4..2205142 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
@@ -83,6 +83,10 @@ func CastS7ParameterReadVarResponse(structType interface{}) *S7ParameterReadVarR
     return castFunc(structType)
 }
 
+func (m *S7ParameterReadVarResponse) GetTypeName() string {
+    return "S7ParameterReadVarResponse"
+}
+
 func (m *S7ParameterReadVarResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
index 316ccbd..88a124b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
@@ -88,6 +88,10 @@ func CastS7ParameterSetupCommunication(structType interface{}) *S7ParameterSetup
     return castFunc(structType)
 }
 
+func (m *S7ParameterSetupCommunication) GetTypeName() string {
+    return "S7ParameterSetupCommunication"
+}
+
 func (m *S7ParameterSetupCommunication) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
index 4c9b7b0..aa00f4c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
@@ -83,6 +83,10 @@ func CastS7ParameterUserData(structType interface{}) *S7ParameterUserData {
     return castFunc(structType)
 }
 
+func (m *S7ParameterUserData) GetTypeName() string {
+    return "S7ParameterUserData"
+}
+
 func (m *S7ParameterUserData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
index 5c4296d..0b8dbfa 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
@@ -45,11 +45,13 @@ type IS7ParameterUserDataItem interface {
 
 type IS7ParameterUserDataItemParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7ParameterUserDataItem, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7ParameterUserDataItemChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7ParameterUserDataItem)
+    GetTypeName() string
     IS7ParameterUserDataItem
 }
 
@@ -70,6 +72,10 @@ func CastS7ParameterUserDataItem(structType interface{}) *S7ParameterUserDataIte
     return castFunc(structType)
 }
 
+func (m *S7ParameterUserDataItem) GetTypeName() string {
+    return "S7ParameterUserDataItem"
+}
+
 func (m *S7ParameterUserDataItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
index 67cbd28..0fc0939 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
@@ -93,6 +93,10 @@ func CastS7ParameterUserDataItemCPUFunctions(structType interface{}) *S7Paramete
     return castFunc(structType)
 }
 
+func (m *S7ParameterUserDataItemCPUFunctions) GetTypeName() string {
+    return "S7ParameterUserDataItemCPUFunctions"
+}
+
 func (m *S7ParameterUserDataItemCPUFunctions) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
index 41a931f..37d7280 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
@@ -83,6 +83,10 @@ func CastS7ParameterWriteVarRequest(structType interface{}) *S7ParameterWriteVar
     return castFunc(structType)
 }
 
+func (m *S7ParameterWriteVarRequest) GetTypeName() string {
+    return "S7ParameterWriteVarRequest"
+}
+
 func (m *S7ParameterWriteVarRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
index 1ab1391..af8041c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
@@ -83,6 +83,10 @@ func CastS7ParameterWriteVarResponse(structType interface{}) *S7ParameterWriteVa
     return castFunc(structType)
 }
 
+func (m *S7ParameterWriteVarResponse) GetTypeName() string {
+    return "S7ParameterWriteVarResponse"
+}
+
 func (m *S7ParameterWriteVarResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
index 927375d..9a7992f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
@@ -46,11 +46,13 @@ type IS7Payload interface {
 
 type IS7PayloadParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7Payload, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7PayloadChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7Payload)
+    GetTypeName() string
     IS7Payload
 }
 
@@ -71,6 +73,10 @@ func CastS7Payload(structType interface{}) *S7Payload {
     return castFunc(structType)
 }
 
+func (m *S7Payload) GetTypeName() string {
+    return "S7Payload"
+}
+
 func (m *S7Payload) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
index 8864b6c..aa6f75c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
@@ -83,6 +83,10 @@ func CastS7PayloadReadVarResponse(structType interface{}) *S7PayloadReadVarRespo
     return castFunc(structType)
 }
 
+func (m *S7PayloadReadVarResponse) GetTypeName() string {
+    return "S7PayloadReadVarResponse"
+}
+
 func (m *S7PayloadReadVarResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
index 685fd5a..5fad5da 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
@@ -83,6 +83,10 @@ func CastS7PayloadUserData(structType interface{}) *S7PayloadUserData {
     return castFunc(structType)
 }
 
+func (m *S7PayloadUserData) GetTypeName() string {
+    return "S7PayloadUserData"
+}
+
 func (m *S7PayloadUserData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
index 90a0adc..91b2d22 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
@@ -49,11 +49,13 @@ type IS7PayloadUserDataItem interface {
 
 type IS7PayloadUserDataItemParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7PayloadUserDataItem, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7PayloadUserDataItemChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7PayloadUserDataItem, returnCode DataTransportErrorCode, transportSize DataTransportSize, szlId *SzlId, szlIndex uint16)
+    GetTypeName() string
     IS7PayloadUserDataItem
 }
 
@@ -74,6 +76,10 @@ func CastS7PayloadUserDataItem(structType interface{}) *S7PayloadUserDataItem {
     return castFunc(structType)
 }
 
+func (m *S7PayloadUserDataItem) GetTypeName() string {
+    return "S7PayloadUserDataItem"
+}
+
 func (m *S7PayloadUserDataItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
index 8794641..bce5399 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
@@ -80,6 +80,10 @@ func CastS7PayloadUserDataItemCpuFunctionReadSzlRequest(structType interface{})
     return castFunc(structType)
 }
 
+func (m *S7PayloadUserDataItemCpuFunctionReadSzlRequest) GetTypeName() string {
+    return "S7PayloadUserDataItemCpuFunctionReadSzlRequest"
+}
+
 func (m *S7PayloadUserDataItemCpuFunctionReadSzlRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
index d25a2d2..883dc5e 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
@@ -87,6 +87,10 @@ func CastS7PayloadUserDataItemCpuFunctionReadSzlResponse(structType interface{})
     return castFunc(structType)
 }
 
+func (m *S7PayloadUserDataItemCpuFunctionReadSzlResponse) GetTypeName() string {
+    return "S7PayloadUserDataItemCpuFunctionReadSzlResponse"
+}
+
 func (m *S7PayloadUserDataItemCpuFunctionReadSzlResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
index f39fe4c..7147e3f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
@@ -83,6 +83,10 @@ func CastS7PayloadWriteVarRequest(structType interface{}) *S7PayloadWriteVarRequ
     return castFunc(structType)
 }
 
+func (m *S7PayloadWriteVarRequest) GetTypeName() string {
+    return "S7PayloadWriteVarRequest"
+}
+
 func (m *S7PayloadWriteVarRequest) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
index b26e505..19322ee 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
@@ -83,6 +83,10 @@ func CastS7PayloadWriteVarResponse(structType interface{}) *S7PayloadWriteVarRes
     return castFunc(structType)
 }
 
+func (m *S7PayloadWriteVarResponse) GetTypeName() string {
+    return "S7PayloadWriteVarResponse"
+}
+
 func (m *S7PayloadWriteVarResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
index d91d06d..125c9de 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
@@ -60,6 +60,10 @@ func CastS7VarPayloadDataItem(structType interface{}) *S7VarPayloadDataItem {
     return castFunc(structType)
 }
 
+func (m *S7VarPayloadDataItem) GetTypeName() string {
+    return "S7VarPayloadDataItem"
+}
+
 func (m *S7VarPayloadDataItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -222,7 +226,7 @@ func (m *S7VarPayloadDataItem) UnmarshalXML(d *xml.Decoder, start xml.StartEleme
                 if err != nil {
                     return err
                 }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
     }
@@ -242,7 +246,7 @@ func (m *S7VarPayloadDataItem) MarshalXML(e *xml.Encoder, start xml.StartElement
         return err
     }
     _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
     if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadStatusItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadStatusItem.go
index b6788c3..5f9ad6a 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadStatusItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadStatusItem.go
@@ -56,6 +56,10 @@ func CastS7VarPayloadStatusItem(structType interface{}) *S7VarPayloadStatusItem
     return castFunc(structType)
 }
 
+func (m *S7VarPayloadStatusItem) GetTypeName() string {
+    return "S7VarPayloadStatusItem"
+}
+
 func (m *S7VarPayloadStatusItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go
index 7db99b6..db44a69 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go
@@ -45,11 +45,13 @@ type IS7VarRequestParameterItem interface {
 
 type IS7VarRequestParameterItemParent interface {
     SerializeParent(io utils.WriteBuffer, child IS7VarRequestParameterItem, serializeChildFunction func() error) error
+    GetTypeName() string
 }
 
 type IS7VarRequestParameterItemChild interface {
     Serialize(io utils.WriteBuffer) error
     InitializeParent(parent *S7VarRequestParameterItem)
+    GetTypeName() string
     IS7VarRequestParameterItem
 }
 
@@ -70,6 +72,10 @@ func CastS7VarRequestParameterItem(structType interface{}) *S7VarRequestParamete
     return castFunc(structType)
 }
 
+func (m *S7VarRequestParameterItem) GetTypeName() string {
+    return "S7VarRequestParameterItem"
+}
+
 func (m *S7VarRequestParameterItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go
index 3930b5c..0aa9240 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go
@@ -79,6 +79,10 @@ func CastS7VarRequestParameterItemAddress(structType interface{}) *S7VarRequestP
     return castFunc(structType)
 }
 
+func (m *S7VarRequestParameterItemAddress) GetTypeName() string {
+    return "S7VarRequestParameterItemAddress"
+}
+
 func (m *S7VarRequestParameterItemAddress) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go b/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
index cebf4ec..fd7cb7b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
@@ -61,6 +61,10 @@ func CastSzlDataTreeItem(structType interface{}) *SzlDataTreeItem {
     return castFunc(structType)
 }
 
+func (m *SzlDataTreeItem) GetTypeName() string {
+    return "SzlDataTreeItem"
+}
+
 func (m *SzlDataTreeItem) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
@@ -203,7 +207,7 @@ func (m *SzlDataTreeItem) UnmarshalXML(d *xml.Decoder, start xml.StartElement) e
                 if err != nil {
                     return err
                 }
-                m.Mlfb = utils.ByteToInt8(_decoded[0:_len])
+                m.Mlfb = utils.ByteArrayToInt8Array(_decoded[0:_len])
             case "moduleTypeId":
                 var data uint16
                 if err := d.DecodeElement(&data, &tok); err != nil {
@@ -238,7 +242,7 @@ func (m *SzlDataTreeItem) MarshalXML(e *xml.Encoder, start xml.StartElement) err
         return err
     }
     _encodedMlfb := make([]byte, base64.StdEncoding.EncodedLen(len(m.Mlfb)))
-    base64.StdEncoding.Encode(_encodedMlfb, utils.Int8ToByte(m.Mlfb))
+    base64.StdEncoding.Encode(_encodedMlfb, utils.Int8ArrayToByteArray(m.Mlfb))
     if err := e.EncodeElement(_encodedMlfb, xml.StartElement{Name: xml.Name{Local: "mlfb"}}); err != nil {
         return err
     }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/SzlId.go b/plc4go/internal/plc4go/s7/readwrite/model/SzlId.go
index a513529..55a9bf9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/SzlId.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/SzlId.go
@@ -58,6 +58,10 @@ func CastSzlId(structType interface{}) *SzlId {
     return castFunc(structType)
 }
 
+func (m *SzlId) GetTypeName() string {
+    return "SzlId"
+}
+
 func (m *SzlId) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/SzlModuleTypeClass.go b/plc4go/internal/plc4go/s7/readwrite/model/SzlModuleTypeClass.go
index db25b2b..d751140 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/SzlModuleTypeClass.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/SzlModuleTypeClass.go
@@ -79,3 +79,17 @@ func (e SzlModuleTypeClass) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(4, uint8(e))
     return err
 }
+
+func (e SzlModuleTypeClass) String() string {
+    switch e {
+    case SzlModuleTypeClass_CPU:
+        return "CPU"
+    case SzlModuleTypeClass_IM:
+        return "IM"
+    case SzlModuleTypeClass_FM:
+        return "FM"
+    case SzlModuleTypeClass_CP:
+        return "CP"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/SzlSublist.go b/plc4go/internal/plc4go/s7/readwrite/model/SzlSublist.go
index 1db8990..2a3a650 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/SzlSublist.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/SzlSublist.go
@@ -124,3 +124,47 @@ func (e SzlSublist) Serialize(io utils.WriteBuffer) error {
     err := io.WriteUint8(8, uint8(e))
     return err
 }
+
+func (e SzlSublist) String() string {
+    switch e {
+    case SzlSublist_MODULE_IDENTIFICATION:
+        return "MODULE_IDENTIFICATION"
+    case SzlSublist_CPU_FEATURES:
+        return "CPU_FEATURES"
+    case SzlSublist_USER_MEMORY_AREA:
+        return "USER_MEMORY_AREA"
+    case SzlSublist_SYSTEM_AREAS:
+        return "SYSTEM_AREAS"
+    case SzlSublist_BLOCK_TYPES:
+        return "BLOCK_TYPES"
+    case SzlSublist_STATUS_MODULE_LEDS:
+        return "STATUS_MODULE_LEDS"
+    case SzlSublist_COMPONENT_IDENTIFICATION:
+        return "COMPONENT_IDENTIFICATION"
+    case SzlSublist_INTERRUPT_STATUS:
+        return "INTERRUPT_STATUS"
+    case SzlSublist_ASSIGNMENT_BETWEEN_PROCESS_IMAGE_PARTITIONS_AND_OBS:
+        return "ASSIGNMENT_BETWEEN_PROCESS_IMAGE_PARTITIONS_AND_OBS"
+    case SzlSublist_COMMUNICATION_STATUS_DATA:
+        return "COMMUNICATION_STATUS_DATA"
+    case SzlSublist_STATUS_SINGLE_MODULE_LED:
+        return "STATUS_SINGLE_MODULE_LED"
+    case SzlSublist_DP_MASTER_SYSTEM_INFORMATION:
+        return "DP_MASTER_SYSTEM_INFORMATION"
+    case SzlSublist_MODULE_STATUS_INFORMATION:
+        return "MODULE_STATUS_INFORMATION"
+    case SzlSublist_RACK_OR_STATION_STATUS_INFORMATION:
+        return "RACK_OR_STATION_STATUS_INFORMATION"
+    case SzlSublist_RACK_OR_STATION_STATUS_INFORMATION_2:
+        return "RACK_OR_STATION_STATUS_INFORMATION_2"
+    case SzlSublist_ADDITIONAL_DP_MASTER_SYSTEM_OR_PROFINET_IO_SYSTEM_INFORMATION:
+        return "ADDITIONAL_DP_MASTER_SYSTEM_OR_PROFINET_IO_SYSTEM_INFORMATION"
+    case SzlSublist_MODULE_STATUS_INFORMATION_PROFINET_IO_AND_PROFIBUS_DP:
+        return "MODULE_STATUS_INFORMATION_PROFINET_IO_AND_PROFIBUS_DP"
+    case SzlSublist_DIAGNOSTIC_BUFFER:
+        return "DIAGNOSTIC_BUFFER"
+    case SzlSublist_MODULE_DIAGNOSTIC_DATA:
+        return "MODULE_DIAGNOSTIC_DATA"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/TPKTPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/TPKTPacket.go
index 8172753..a37f737 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/TPKTPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/TPKTPacket.go
@@ -61,6 +61,10 @@ func CastTPKTPacket(structType interface{}) *TPKTPacket {
     return castFunc(structType)
 }
 
+func (m *TPKTPacket) GetTypeName() string {
+    return "TPKTPacket"
+}
+
 func (m *TPKTPacket) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go b/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go
index f33d668..ed2d13b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go
@@ -664,3 +664,39 @@ func (e TransportSize) Serialize(io utils.WriteBuffer) error {
     err := io.WriteInt8(8, int8(e))
     return err
 }
+
+func (e TransportSize) String() string {
+    switch e {
+    case TransportSize_LWORD:
+        return "LWORD"
+    case TransportSize_BOOL:
+        return "BOOL"
+    case TransportSize_BYTE:
+        return "BYTE"
+    case TransportSize_CHAR:
+        return "CHAR"
+    case TransportSize_WORD:
+        return "WORD"
+    case TransportSize_INT:
+        return "INT"
+    case TransportSize_DWORD:
+        return "DWORD"
+    case TransportSize_DINT:
+        return "DINT"
+    case TransportSize_REAL:
+        return "REAL"
+    case TransportSize_DATE:
+        return "DATE"
+    case TransportSize_TIME:
+        return "TIME"
+    case TransportSize_S5TIME:
+        return "S5TIME"
+    case TransportSize_DATE_AND_TIME:
+        return "DATE_AND_TIME"
+    case TransportSize_WCHAR:
+        return "WCHAR"
+    case TransportSize_LREAL:
+        return "LREAL"
+    }
+    return ""
+}
diff --git a/plc4go/internal/plc4go/utils/CastUtils.go b/plc4go/internal/plc4go/utils/CastUtils.go
index 4af21af..1b9302c 100644
--- a/plc4go/internal/plc4go/utils/CastUtils.go
+++ b/plc4go/internal/plc4go/utils/CastUtils.go
@@ -18,9 +18,12 @@
 //
 package utils
 
-import "strconv"
+import (
+    "strconv"
+    "strings"
+)
 
-func Int8ToUint8(input []int8) []uint8 {
+func Int8ArrayToUint8Array(input []int8) []uint8 {
 	output := make([]uint8, len(input))
 	for i, _val := range input {
 		output[i] = uint8(_val)
@@ -28,7 +31,18 @@ func Int8ToUint8(input []int8) []uint8 {
 	return output
 }
 
-func Uint8ToInt8(input []uint8) []int8 {
+func Int8ArrayToString(data []int8, separator string) string {
+    var sb strings.Builder
+    for i, element := range data {
+        sb.WriteString(strconv.Itoa(int(uint8(element))))
+        if i < (len(data) - 1) {
+            sb.WriteString(separator)
+        }
+    }
+    return sb.String()
+}
+
+func Uint8ArrayToInt8Array(input []uint8) []int8 {
 	output := make([]int8, len(input))
 	for i, _val := range input {
 		output[i] = int8(_val)
@@ -36,7 +50,7 @@ func Uint8ToInt8(input []uint8) []int8 {
 	return output
 }
 
-func Int8ToByte(input []int8) []byte {
+func Int8ArrayToByteArray(input []int8) []byte {
 	output := make([]byte, len(input))
 	for i, _val := range input {
 		output[i] = byte(_val)
@@ -44,7 +58,7 @@ func Int8ToByte(input []int8) []byte {
 	return output
 }
 
-func ByteToInt8(input []byte) []int8 {
+func ByteArrayToInt8Array(input []byte) []int8 {
 	output := make([]int8, len(input))
 	for i, _val := range input {
 		output[i] = int8(_val)