You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/08/01 15:00:53 UTC

[plc4x] branch develop updated (b5195e253 -> f20adc917)

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

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


    from b5195e253 chore(plc4go/ads): Updates for the latest changes in ADS.
     new 4336ebe8e fix(codegen/plc4go): fix access to params
     new f44d59737 feat(cbus): properly parser parameter values
     new 8ddb30175 feat(plc-simulator/cbus): implement proper option support
     new f20adc917 fix(plc4go/cbus): implement connection setup

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../templates/go/complex-type-template.go.ftlh     |   14 +
 plc4go/internal/cbus/Connection.go                 |  142 ++-
 .../model/CIPEncapsulationReadResponse.go          |   10 +
 .../abeth/readwrite/model/DF1ResponseMessage.go    |   10 +
 plc4go/protocols/bacnetip/readwrite/model/APDU.go  |   10 +
 .../readwrite/model/BACnetAbortReasonTagged.go     |   10 +
 ...ACnetAccessAuthenticationFactorDisableTagged.go |   13 +
 .../BACnetAccessCredentialDisableReasonTagged.go   |   13 +
 .../model/BACnetAccessCredentialDisableTagged.go   |   13 +
 .../readwrite/model/BACnetAccessEventTagged.go     |   13 +
 .../model/BACnetAccessPassbackModeTagged.go        |   13 +
 .../BACnetAccessRuleLocationSpecifierTagged.go     |   13 +
 .../BACnetAccessRuleTimeRangeSpecifierTagged.go    |   13 +
 .../readwrite/model/BACnetAccessUserTypeTagged.go  |   13 +
 .../model/BACnetAccessZoneOccupancyStateTagged.go  |   13 +
 ...CnetAccumulatorRecordAccumulatorStatusTagged.go |   13 +
 .../bacnetip/readwrite/model/BACnetActionTagged.go |   13 +
 .../readwrite/model/BACnetAddressEnclosed.go       |   10 +
 .../BACnetAssignedLandingCallsLandingCallsList.go  |   10 +
 .../model/BACnetAuthenticationFactorEnclosed.go    |   10 +
 .../model/BACnetAuthenticationFactorTypeTagged.go  |   13 +
 .../model/BACnetAuthenticationPolicyList.go        |   10 +
 .../model/BACnetAuthenticationStatusTagged.go      |   13 +
 .../model/BACnetAuthorizationExemptionTagged.go    |   13 +
 .../model/BACnetAuthorizationModeTagged.go         |   13 +
 .../readwrite/model/BACnetBackupStateTagged.go     |   13 +
 .../model/BACnetBinaryLightingPVTagged.go          |   13 +
 .../readwrite/model/BACnetBinaryPVTagged.go        |   13 +
 ...bscriptionListOfCovSubscriptionSpecification.go |   10 +
 ...riptionSpecificationEntryListOfCovReferences.go |   10 +
 .../readwrite/model/BACnetCalendarEntryEnclosed.go |   10 +
 .../bacnetip/readwrite/model/BACnetClosingTag.go   |   10 +
 .../model/BACnetConfirmedServiceRequest.go         |   10 +
 .../BACnetConfirmedServiceRequestAuthenticate.go   |   10 +
 ...rviceRequestConfirmedTextMessageMessageClass.go |   10 +
 ...estConfirmedTextMessageMessagePriorityTagged.go |   13 +
 ...medServiceRequestCreateObjectObjectSpecifier.go |   10 +
 ...eviceCommunicationControlEnableDisableTagged.go |   13 +
 ...EnrollmentSummaryAcknowledgementFilterTagged.go |   13 +
 ...stGetEnrollmentSummaryEventStateFilterTagged.go |   13 +
 ...iceRequestGetEnrollmentSummaryPriorityFilter.go |   10 +
 ...nfirmedServiceRequestReadPropertyConditional.go |   10 +
 ...tConfirmedServiceRequestReadPropertyMultiple.go |   10 +
 ...ializeDeviceReinitializedStateOfDeviceTagged.go |   13 +
 .../BACnetConfirmedServiceRequestRequestKey.go     |   10 +
 ...tipleListOfCovSubscriptionSpecificationsList.go |   10 +
 .../model/BACnetConfirmedServiceRequestUnknown.go  |   10 +
 .../model/BACnetConfirmedServiceRequestVTClose.go  |   10 +
 ...ConfirmedServiceRequestWritePropertyMultiple.go |   10 +
 .../readwrite/model/BACnetConstructedData.go       |   13 +
 .../model/BACnetConstructedDataElement.go          |   16 +
 .../bacnetip/readwrite/model/BACnetContextTag.go   |   10 +
 .../readwrite/model/BACnetContextTagUnknown.go     |   10 +
 .../readwrite/model/BACnetDateRangeEnclosed.go     |   10 +
 .../readwrite/model/BACnetDateTimeEnclosed.go      |   10 +
 .../readwrite/model/BACnetDaysOfWeekTagged.go      |   13 +
 .../BACnetDeviceObjectPropertyReferenceEnclosed.go |   10 +
 .../model/BACnetDeviceObjectReferenceEnclosed.go   |   10 +
 .../readwrite/model/BACnetDeviceStatusTagged.go    |   13 +
 .../readwrite/model/BACnetDoorAlarmStateTagged.go  |   13 +
 .../model/BACnetDoorSecuredStatusTagged.go         |   13 +
 .../readwrite/model/BACnetDoorStatusTagged.go      |   13 +
 .../readwrite/model/BACnetDoorValueTagged.go       |   13 +
 .../model/BACnetEngineeringUnitsTagged.go          |   13 +
 .../readwrite/model/BACnetEscalatorFaultTagged.go  |   13 +
 .../readwrite/model/BACnetEscalatorModeTagged.go   |   13 +
 .../BACnetEscalatorOperationDirectionTagged.go     |   13 +
 .../model/BACnetEventLogRecordLogDatum.go          |   10 +
 ...tEventParameterAccessEventListOfAccessEvents.go |   10 +
 ...ameterChangeOfBitstringListOfBitstringValues.go |   10 +
 ...eterChangeOfCharacterStringListOfAlarmValues.go |   10 +
 ...ParameterChangeOfLifeSavetyListOfAlarmValues.go |   10 +
 ...hangeOfLifeSavetyListOfLifeSavetyAlarmValues.go |   10 +
 ...ACnetEventParameterChangeOfStateListOfValues.go |   10 +
 .../BACnetEventParameterChangeOfTimerAlarmValue.go |   10 +
 ...BACnetEventParameterChangeOfValueCivCriteria.go |   10 +
 .../BACnetEventParameterExtendedParameters.go      |   10 +
 .../readwrite/model/BACnetEventPriorities.go       |   10 +
 .../readwrite/model/BACnetEventStateTagged.go      |   13 +
 .../readwrite/model/BACnetEventSummariesList.go    |   10 +
 .../model/BACnetEventTimestampsEnclosed.go         |   10 +
 .../model/BACnetEventTransitionBitsTagged.go       |   13 +
 .../readwrite/model/BACnetEventTypeTagged.go       |   13 +
 ...rameterFaultCharacterStringListOfFaultValues.go |   10 +
 .../BACnetFaultParameterFaultExtendedParameters.go |   10 +
 ...ultParameterFaultLifeSafetyListOfFaultValues.go |   10 +
 ...tFaultParameterFaultOutOfRangeMaxNormalValue.go |   10 +
 ...tFaultParameterFaultOutOfRangeMinNormalValue.go |   10 +
 ...netFaultParameterFaultStateListOfFaultValues.go |   10 +
 .../readwrite/model/BACnetFaultTypeTagged.go       |   13 +
 .../model/BACnetFileAccessMethodTagged.go          |   13 +
 .../readwrite/model/BACnetGroupChannelValueList.go |   10 +
 .../readwrite/model/BACnetHostAddressEnclosed.go   |   10 +
 .../readwrite/model/BACnetHostNPortEnclosed.go     |   10 +
 .../bacnetip/readwrite/model/BACnetIPModeTagged.go |   13 +
 .../BACnetLandingDoorStatusLandingDoorsList.go     |   10 +
 .../readwrite/model/BACnetLifeSafetyModeTagged.go  |   13 +
 .../model/BACnetLifeSafetyOperationTagged.go       |   13 +
 .../readwrite/model/BACnetLifeSafetyStateTagged.go |   13 +
 .../model/BACnetLiftCarCallListFloorList.go        |   10 +
 .../model/BACnetLiftCarDirectionTagged.go          |   13 +
 .../model/BACnetLiftCarDoorCommandTagged.go        |   13 +
 .../model/BACnetLiftCarDriveStatusTagged.go        |   13 +
 .../readwrite/model/BACnetLiftCarModeTagged.go     |   13 +
 .../readwrite/model/BACnetLiftFaultTagged.go       |   13 +
 .../readwrite/model/BACnetLiftGroupModeTagged.go   |   13 +
 .../model/BACnetLightingCommandEnclosed.go         |   10 +
 .../model/BACnetLightingInProgressTagged.go        |   13 +
 .../model/BACnetLightingOperationTagged.go         |   13 +
 .../model/BACnetLightingTransitionTagged.go        |   13 +
 .../readwrite/model/BACnetLimitEnableTagged.go     |   13 +
 .../readwrite/model/BACnetLockStatusTagged.go      |   13 +
 .../bacnetip/readwrite/model/BACnetLogData.go      |   10 +
 .../readwrite/model/BACnetLogRecordLogDatum.go     |   10 +
 .../readwrite/model/BACnetLogStatusTagged.go       |   13 +
 .../readwrite/model/BACnetLoggingTypeTagged.go     |   13 +
 .../readwrite/model/BACnetMaintenanceTagged.go     |   13 +
 .../readwrite/model/BACnetNameValueCollection.go   |   10 +
 .../model/BACnetNetworkNumberQualityTagged.go      |   13 +
 .../model/BACnetNetworkPortCommandTagged.go        |   13 +
 .../readwrite/model/BACnetNetworkTypeTagged.go     |   13 +
 .../readwrite/model/BACnetNodeTypeTagged.go        |   13 +
 .../model/BACnetNotificationParameters.go          |   13 +
 ...ationParametersChangeOfDiscreteValueNewValue.go |   10 +
 ...tNotificationParametersChangeOfValueNewValue.go |   10 +
 ...CnetNotificationParametersExtendedParameters.go |   10 +
 .../readwrite/model/BACnetNotifyTypeTagged.go      |   13 +
 .../model/BACnetObjectPropertyReferenceEnclosed.go |   10 +
 .../readwrite/model/BACnetObjectTypeTagged.go      |   13 +
 .../model/BACnetObjectTypesSupportedTagged.go      |   13 +
 .../bacnetip/readwrite/model/BACnetOpeningTag.go   |   10 +
 .../readwrite/model/BACnetPolarityTagged.go        |   13 +
 .../readwrite/model/BACnetPriorityArray.go         |   16 +
 .../readwrite/model/BACnetPriorityValue.go         |   10 +
 .../readwrite/model/BACnetProgramErrorTagged.go    |   13 +
 .../readwrite/model/BACnetProgramRequestTagged.go  |   13 +
 .../readwrite/model/BACnetProgramStateTagged.go    |   13 +
 .../BACnetPropertyAccessResultAccessResult.go      |   16 +
 .../model/BACnetPropertyIdentifierTagged.go        |   13 +
 .../model/BACnetPropertyReferenceEnclosed.go       |   10 +
 .../model/BACnetPropertyStatesEnclosed.go          |   10 +
 .../readwrite/model/BACnetPropertyValue.go         |   10 +
 .../readwrite/model/BACnetPropertyValues.go        |   13 +
 .../model/BACnetPropertyWriteDefinition.go         |   10 +
 .../readwrite/model/BACnetProtocolLevelTagged.go   |   13 +
 .../readwrite/model/BACnetReadAccessProperty.go    |   10 +
 .../model/BACnetReadAccessPropertyReadResult.go    |   16 +
 .../model/BACnetReadAccessResultListOfResults.go   |   13 +
 .../readwrite/model/BACnetRecipientEnclosed.go     |   10 +
 .../model/BACnetRecipientProcessEnclosed.go        |   10 +
 .../readwrite/model/BACnetRejectReasonTagged.go    |   10 +
 .../readwrite/model/BACnetRelationshipTagged.go    |   13 +
 .../readwrite/model/BACnetReliabilityTagged.go     |   13 +
 .../readwrite/model/BACnetRestartReasonTagged.go   |   13 +
 .../readwrite/model/BACnetResultFlagsTagged.go     |   13 +
 .../model/BACnetRouterEntryStatusTagged.go         |   13 +
 .../readwrite/model/BACnetSecurityKeySetKeyIds.go  |   10 +
 .../readwrite/model/BACnetSecurityLevelTagged.go   |   13 +
 .../readwrite/model/BACnetSecurityPolicyTagged.go  |   13 +
 .../readwrite/model/BACnetSegmentationTagged.go    |   13 +
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |   10 +
 .../model/BACnetServiceAckAuthenticate.go          |   10 +
 .../BACnetServiceAckReadPropertyConditional.go     |   10 +
 .../model/BACnetServiceAckReadPropertyMultiple.go  |   10 +
 .../readwrite/model/BACnetServiceAckRequestKey.go  |   10 +
 .../model/BACnetServicesSupportedTagged.go         |   13 +
 .../readwrite/model/BACnetShedStateTagged.go       |   13 +
 .../readwrite/model/BACnetSilencedStateTagged.go   |   13 +
 .../model/BACnetSpecialEventListOfTimeValues.go    |   10 +
 .../readwrite/model/BACnetStatusFlagsTagged.go     |   13 +
 .../readwrite/model/BACnetTagPayloadBitString.go   |   10 +
 .../readwrite/model/BACnetTagPayloadBoolean.go     |   10 +
 .../model/BACnetTagPayloadCharacterString.go       |   10 +
 .../readwrite/model/BACnetTagPayloadEnumerated.go  |   10 +
 .../readwrite/model/BACnetTagPayloadOctetString.go |   10 +
 .../model/BACnetTagPayloadSignedInteger.go         |   10 +
 .../model/BACnetTagPayloadUnsignedInteger.go       |   10 +
 .../readwrite/model/BACnetTimeStampEnclosed.go     |   10 +
 .../readwrite/model/BACnetTimeStampsEnclosed.go    |   10 +
 .../readwrite/model/BACnetTimerStateChangeValue.go |   10 +
 .../readwrite/model/BACnetTimerStateTagged.go      |   13 +
 .../readwrite/model/BACnetTimerTransitionTagged.go |   13 +
 .../model/BACnetUnconfirmedServiceChoiceTagged.go  |   13 +
 .../model/BACnetUnconfirmedServiceRequest.go       |   10 +
 .../readwrite/model/BACnetVTClassTagged.go         |   13 +
 .../readwrite/model/BACnetVendorIdTagged.go        |   13 +
 .../readwrite/model/BACnetWeekNDayTagged.go        |   13 +
 .../readwrite/model/BACnetWriteStatusTagged.go     |   13 +
 .../model/BVLCDistributeBroadcastToNetwork.go      |   10 +
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |   10 +
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |   10 +
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |   10 +
 .../model/BVLCReadBroadcastDistributionTableAck.go |   10 +
 .../model/BVLCReadForeignDeviceTableAck.go         |   10 +
 .../readwrite/model/BVLCResultCodeTagged.go        |   13 +
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |   10 +
 .../model/BVLCWriteBroadcastDistributionTable.go   |   10 +
 .../bacnetip/readwrite/model/ErrorClassTagged.go   |   13 +
 .../bacnetip/readwrite/model/ErrorCodeTagged.go    |   13 +
 .../bacnetip/readwrite/model/ErrorEnclosed.go      |   10 +
 .../readwrite/model/ListOfCovNotificationsList.go  |   10 +
 .../readwrite/model/ListOfCovNotificationsValue.go |   10 +
 .../readwrite/model/MaxApduLengthAcceptedTagged.go |   13 +
 .../readwrite/model/MaxSegmentsAcceptedTagged.go   |   13 +
 plc4go/protocols/bacnetip/readwrite/model/NLM.go   |   10 +
 plc4go/protocols/bacnetip/readwrite/model/NPDU.go  |   10 +
 .../readwrite/model/NPDUNetworkPriorityTagged.go   |   13 +
 ...PropertyMultipleErrorFirstFailedSubscription.go |   10 +
 .../VTCloseErrorListOfVTSessionIdentifiers.go      |   10 +
 plc4go/protocols/cbus/readwrite/ParserHelper.go    |  159 +--
 plc4go/protocols/cbus/readwrite/XmlParserHelper.go |  172 ++--
 plc4go/protocols/cbus/readwrite/model/CALData.go   |   10 +
 .../protocols/cbus/readwrite/model/CALDataReply.go |   61 +-
 .../protocols/cbus/readwrite/model/CALDataWrite.go |   67 +-
 plc4go/protocols/cbus/readwrite/model/CALReply.go  |   13 +
 .../protocols/cbus/readwrite/model/CBusCommand.go  |   10 +
 .../protocols/cbus/readwrite/model/CBusMessage.go  |   13 +
 .../model/CBusPointToMultiPointCommand.go          |   10 +
 .../readwrite/model/CBusPointToPointCommand.go     |   10 +
 .../model/CBusPointToPointToMultiPointCommand.go   |   10 +
 .../cbus/readwrite/model/CustomManufacturer.go     |   27 +-
 .../protocols/cbus/readwrite/model/CustomTypes.go  |   27 +-
 .../protocols/cbus/readwrite/model/EncodedReply.go |   13 +
 .../cbus/readwrite/model/IdentifyReplyCommand.go   |   10 +
 .../protocols/cbus/readwrite/model/MonitoredSAL.go |   10 +
 plc4go/protocols/cbus/readwrite/model/Parameter.go | 1043 ++++++++++++++++++++
 .../cbus/readwrite/model/ParameterType.go          |  201 ++++
 .../cbus/readwrite/model/ParameterValue.go         |  205 ++++
 .../model/ParameterValueApplicationAddress1.go     |  210 ++++
 .../model/ParameterValueApplicationAddress2.go     |  210 ++++
 .../model/ParameterValueBaudRateSelector.go        |  210 ++++
 .../model/ParameterValueCustomManufacturer.go      |  205 ++++
 .../readwrite/model/ParameterValueCustomTypes.go   |  205 ++++
 .../model/ParameterValueInterfaceOptions1.go       |  210 ++++
 ...rameterValueInterfaceOptions1PowerUpSettings.go |  210 ++++
 .../model/ParameterValueInterfaceOptions2.go       |  210 ++++
 .../model/ParameterValueInterfaceOptions3.go       |  210 ++++
 .../{SecurityDataOn.go => ParameterValueRaw.go}    |  101 +-
 .../readwrite/model/ParameterValueSerialNumber.go  |  210 ++++
 plc4go/protocols/cbus/readwrite/model/Reply.go     |   13 +
 .../cbus/readwrite/model/ReplyOrConfirmation.go    |   13 +
 plc4go/protocols/cbus/readwrite/model/Request.go   |   10 +
 .../protocols/eip/readwrite/model/CipExchange.go   |   10 +
 plc4go/protocols/eip/readwrite/model/CipRRData.go  |   10 +
 plc4go/protocols/eip/readwrite/model/CipService.go |   10 +
 plc4go/protocols/eip/readwrite/model/Services.go   |   10 +
 .../firmata/readwrite/model/FirmataCommand.go      |   10 +
 .../firmata/readwrite/model/FirmataMessage.go      |   10 +
 plc4go/protocols/knxnetip/readwrite/model/Apdu.go  |   10 +
 .../protocols/knxnetip/readwrite/model/ApduData.go |   10 +
 .../knxnetip/readwrite/model/ApduDataExt.go        |   10 +
 plc4go/protocols/knxnetip/readwrite/model/CEMI.go  |   10 +
 .../readwrite/model/DeviceConfigurationRequest.go  |   10 +
 .../knxnetip/readwrite/model/TunnelingRequest.go   |   10 +
 .../knxnetip/readwrite/model/UnknownMessage.go     |   10 +
 .../protocols/modbus/readwrite/model/ModbusADU.go  |   10 +
 plc4go/protocols/s7/readwrite/model/COTPPacket.go  |   10 +
 .../protocols/s7/readwrite/model/COTPParameter.go  |   10 +
 plc4go/protocols/s7/readwrite/model/S7Payload.go   |   10 +
 plc4go/tools/plc4xbrowser/main.go                  |    1 -
 .../apache/plc4x/java/cbus/RandomPackagesTest.java |    2 +
 .../org/apache/plc4x/java/cbus/ReferenceTest.java  |   53 +
 .../src/main/resources/protocols/cbus/c-bus.mspec  |  592 ++++++-----
 .../org/apache/plc4x/simulator/PlcSimulator.java   |    2 +-
 .../server/cbus/protocol/CBusServerAdapter.java    |  201 +++-
 265 files changed, 7266 insertions(+), 597 deletions(-)
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterType.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValue.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress1.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress2.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueBaudRateSelector.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueCustomManufacturer.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueCustomTypes.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1PowerUpSettings.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions2.go
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions3.go
 copy plc4go/protocols/cbus/readwrite/model/{SecurityDataOn.go => ParameterValueRaw.go} (55%)
 create mode 100644 plc4go/protocols/cbus/readwrite/model/ParameterValueSerialNumber.go


[plc4x] 03/04: feat(plc-simulator/cbus): implement proper option support

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

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

commit 8ddb301752193e2c4de6bcdce260eacaa7a101fc
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Aug 1 16:50:52 2022 +0200

    feat(plc-simulator/cbus): implement proper option support
---
 .../org/apache/plc4x/simulator/PlcSimulator.java   |   2 +-
 .../server/cbus/protocol/CBusServerAdapter.java    | 201 ++++++++++++++++-----
 2 files changed, 161 insertions(+), 42 deletions(-)

diff --git a/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/PlcSimulator.java b/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/PlcSimulator.java
index 43dc0ae27..579a3e209 100644
--- a/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/PlcSimulator.java
+++ b/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/PlcSimulator.java
@@ -153,7 +153,7 @@ public class PlcSimulator {
         CommandLine cmd = parser.parse(options, args);
 
         // Map options
-        config.host = cmd.getOptionValue("--host", "localhost");
+        config.host = cmd.getOptionValue("host", "localhost");
 
         return config;
     }
diff --git a/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/cbus/protocol/CBusServerAdapter.java b/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/cbus/protocol/CBusServerAdapter.java
index 2f33c7f56..593678061 100644
--- a/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/cbus/protocol/CBusServerAdapter.java
+++ b/sandbox/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/cbus/protocol/CBusServerAdapter.java
@@ -38,56 +38,37 @@ public class CBusServerAdapter extends ChannelInboundHandlerAdapter {
     private Context context;
 
     private static final RequestContext requestContext = new RequestContext(false, false, false);
-    private static final CBusOptions cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
 
-    private Lock writeLock = new ReentrantLock();
+    private static boolean connect;
+    private static boolean smart;
+    private static boolean idmon;
+    private static boolean exstat;
+    private static boolean monitor;
+    private static boolean monall;
+    private static boolean pun;
+    private static boolean pcn;
+    private static boolean srchk;
+    private static CBusOptions cBusOptions;
+
+    private final Lock writeLock = new ReentrantLock();
 
     private ScheduledFuture<?> sf;
 
     public CBusServerAdapter(Context context) {
         this.context = context;
+        cBusOptions = new CBusOptions(connect, smart, idmon, exstat, monitor, monall, pun, pcn, srchk);
     }
 
-    @Override
-    public void channelActive(ChannelHandlerContext ctx) throws Exception {
-        super.channelActive(ctx);
-        sf = ctx.executor().scheduleAtFixedRate(() -> {
-            try {
-                writeLock.lock();
-                MonitoredSAL monitoredSAL;
-                if (cBusOptions.getExstat()) {
-                    // TODO implement long from
-                    throw new IllegalStateException("Not implemented");
-                } else {
-                    LightingData lightingData;
-                    double random = Math.random();
-                    if (random < 0.25) {
-                        lightingData = new LightingDataOn(LightingCommandTypeContainer.LightingCommandOn, (byte) 0xAF);
-                    } else if (random > 0.25 && random < 0.5) {
-                        lightingData = new LightingDataOff(LightingCommandTypeContainer.LightingCommandOff, (byte) 0xAF);
-                    } else if (random > 0.5 && random < 0.75) {
-                        lightingData = new LightingDataRampToLevel(LightingCommandTypeContainer.LightingCommandRampToLevel_20Second, (byte) 0xAF, (byte) 0xE0);
-                    } else {
-                        lightingData = new LightingDataTerminateRamp(LightingCommandTypeContainer.LightingCommandTerminateRamp, (byte) 0xAF);
-                    }
-                    SALData salData = new SALDataLighting(null, lightingData);
-                    monitoredSAL = new MonitoredSALShortFormBasicMode((byte) 0x0, (byte) 0x0, (short) 0x0, (short) 0x0, (byte) 0x0, ApplicationIdContainer.LIGHTING_38, salData, cBusOptions);
-                }
-                EncodedReply encodedReply = new MonitoredSALReply((byte) 0x0, monitoredSAL, cBusOptions, requestContext);
-                Reply reply = new ReplyEncodedReply((byte) 0x0, encodedReply, null, cBusOptions, requestContext);
-                ReplyOrConfirmation replyOrConfirmation = new ReplyOrConfirmationReply((byte) 0x00, reply, new ResponseTermination(), cBusOptions, requestContext);
-                CBusMessage message = new CBusMessageToClient(replyOrConfirmation, requestContext, cBusOptions);
-                LOGGER.info("[Monitor] Sending out\n{}\n{}", message, encodedReply);
-                ctx.writeAndFlush(message);
-            } finally {
-                writeLock.unlock();
-            }
-        }, 5, 5, TimeUnit.SECONDS);
+    private static void buildCBusOptions() {
+        LOGGER.info("Updating options {}", cBusOptions);
+        cBusOptions = new CBusOptions(connect, smart, idmon, exstat, monitor, monall, pun, pcn, srchk);
+        LOGGER.info("Updated options {}", cBusOptions);
     }
 
     @Override
     public void channelInactive(ChannelHandlerContext ctx) throws Exception {
-        sf.cancel(false);
+        if (sf != null)
+            sf.cancel(false);
         super.channelInactive(ctx);
     }
 
@@ -111,8 +92,81 @@ public class CBusServerAdapter extends ChannelInboundHandlerAdapter {
             }
             if (request instanceof RequestDirectCommandAccess) {
                 RequestDirectCommandAccess requestDirectCommandAccess = (RequestDirectCommandAccess) request;
-                LOGGER.info("Handling RequestDirectCommandAccess\n{}", requestDirectCommandAccess);
-                // TODO: handle this
+                CALData calData = requestDirectCommandAccess.getCalData();
+                LOGGER.info("Handling RequestDirectCommandAccess\n{}\n{}", requestDirectCommandAccess, calData);
+
+                // TODO: handle other cal data type
+                if (calData instanceof CALDataWrite) {
+                    CALDataWrite calDataWrite = (CALDataWrite) calData;
+                    switch (calDataWrite.getParamNo().getParameterType()) {
+                        case APPLICATION_ADDRESS_1:
+                            // TODO: check settings for subscription etc.
+                            return;
+                        case APPLICATION_ADDRESS_2:
+                            // TODO: check settings for subscription etc.
+                            return;
+                        case INTERFACE_OPTIONS_1:
+                            InterfaceOptions1 interfaceOptions1 = ((ParameterValueInterfaceOptions1) calDataWrite.getParameterValue()).getValue();
+                            idmon = interfaceOptions1.getIdmon();
+                            monitor = interfaceOptions1.getMonitor();
+                            if (monitor) startMonitor(ctx);
+                            else stopMonitor();
+                            smart = interfaceOptions1.getSmart();
+                            srchk = interfaceOptions1.getSrchk();
+                            // TODO: add support for xonxoff
+                            // xonxoff = interfaceOptions1.getXonXoff();
+                            connect = interfaceOptions1.getConnect();
+                            buildCBusOptions();
+                            return;
+                        case INTERFACE_OPTIONS_2:
+                            InterfaceOptions2 interfaceOptions2 = ((ParameterValueInterfaceOptions2) calDataWrite.getParameterValue()).getValue();
+                            // TODO: add support for burden
+                            // burden =  interfaceOptions2.getBurden();
+                            // TODO: add support for clockgen
+                            // clockgen = interfaceOptions2.getClockGen();
+                            buildCBusOptions();
+                            return;
+                        case INTERFACE_OPTIONS_3:
+                            InterfaceOptions3 interfaceOptions3Value = ((ParameterValueInterfaceOptions3) calDataWrite.getParameterValue()).getValue();
+                            exstat = interfaceOptions3Value.getExstat();
+                            pun = interfaceOptions3Value.getPun();
+                            // TODO: add support for localsal
+                            // localsal = interfaceOptions3Value.getLocalSal();
+                            pcn = interfaceOptions3Value.getPcn();
+                            buildCBusOptions();
+                            return;
+                        case BAUD_RATE_SELECTOR:
+                            BaudRateSelector baudRateSelector = ((ParameterValueBaudRateSelector) calDataWrite.getParameterValue()).getValue();
+                            // TODO: add support for baudrate
+                            // baudrate = baudRateSelector.getValue();
+                            buildCBusOptions();
+                            return;
+                        case INTERFACE_OPTIONS_1_POWER_UP_SETTINGS:
+                            InterfaceOptions1 interfaceOptions1PowerUpSettings = ((ParameterValueInterfaceOptions1PowerUpSettings) calDataWrite.getParameterValue()).getValue().getInterfaceOptions1();
+                            idmon = interfaceOptions1PowerUpSettings.getIdmon();
+                            monitor = interfaceOptions1PowerUpSettings.getMonitor();
+                            if (monitor) startMonitor(ctx);
+                            else stopMonitor();
+                            smart = interfaceOptions1PowerUpSettings.getSmart();
+                            srchk = interfaceOptions1PowerUpSettings.getSrchk();
+                            // TODO: add support for xonxoff
+                            // xonxoff = interfaceOptions1PowerUpSettings.getXonXoff();
+                            connect = interfaceOptions1PowerUpSettings.getConnect();
+                            buildCBusOptions();
+                            return;
+                        case CUSTOM_MANUFACTURER:
+                            // TODO: handle other parm typed
+                            return;
+                        case SERIAL_NUMBER:
+                            // TODO: handle other parm typed
+                            return;
+                        case CUSTOM_TYPE:
+                            // TODO: handle other parm typed
+                            return;
+                        default:
+                            throw new IllegalStateException("Unmapped type");
+                    }
+                }
                 return;
             }
             if (request instanceof RequestCommand) {
@@ -223,7 +277,15 @@ public class CBusServerAdapter extends ChannelInboundHandlerAdapter {
             if (request instanceof RequestReset) {
                 RequestReset requestReset = (RequestReset) request;
                 LOGGER.info("Handling RequestReset\n{}", requestReset);
-                // TODO: handle this
+                connect = false;
+                smart = false;
+                idmon = false;
+                exstat = false;
+                monitor = false;
+                monall = false;
+                pun = false;
+                pcn = false;
+                srchk = false;
                 return;
             }
             if (request instanceof RequestSmartConnectShortcut) {
@@ -237,4 +299,61 @@ public class CBusServerAdapter extends ChannelInboundHandlerAdapter {
         }
     }
 
+    private void startMonitor(ChannelHandlerContext ctx) {
+        if (sf != null) {
+            LOGGER.debug("Monitor already running");
+            return;
+        }
+        LOGGER.info("Starting monitor");
+        sf = ctx.executor().scheduleAtFixedRate(() -> {
+            try {
+                writeLock.lock();
+                MonitoredSAL monitoredSAL;
+                if (cBusOptions.getExstat()) {
+                    LightingData lightingData;
+                    double random = Math.random();
+                    if (random < 0.25) {
+                        lightingData = new LightingDataOn(LightingCommandTypeContainer.LightingCommandOn, (byte) 0xAF);
+                    } else if (random > 0.25 && random < 0.5) {
+                        lightingData = new LightingDataOff(LightingCommandTypeContainer.LightingCommandOff, (byte) 0xAF);
+                    } else if (random > 0.5 && random < 0.75) {
+                        lightingData = new LightingDataRampToLevel(LightingCommandTypeContainer.LightingCommandRampToLevel_20Second, (byte) 0xAF, (byte) 0xE0);
+                    } else {
+                        lightingData = new LightingDataTerminateRamp(LightingCommandTypeContainer.LightingCommandTerminateRamp, (byte) 0xAF);
+                    }
+                    SALData salData = new SALDataLighting(null, lightingData);
+                    monitoredSAL = new MonitoredSALLongFormSmartMode((byte) 0x05, (byte) 0x00, new UnitAddress((byte) 0x0), null, ApplicationIdContainer.LIGHTING_38, (byte) 0x00, null, salData, cBusOptions);
+                } else {
+                    LightingData lightingData;
+                    double random = Math.random();
+                    if (random < 0.25) {
+                        lightingData = new LightingDataOn(LightingCommandTypeContainer.LightingCommandOn, (byte) 0xAF);
+                    } else if (random > 0.25 && random < 0.5) {
+                        lightingData = new LightingDataOff(LightingCommandTypeContainer.LightingCommandOff, (byte) 0xAF);
+                    } else if (random > 0.5 && random < 0.75) {
+                        lightingData = new LightingDataRampToLevel(LightingCommandTypeContainer.LightingCommandRampToLevel_20Second, (byte) 0xAF, (byte) 0xE0);
+                    } else {
+                        lightingData = new LightingDataTerminateRamp(LightingCommandTypeContainer.LightingCommandTerminateRamp, (byte) 0xAF);
+                    }
+                    SALData salData = new SALDataLighting(null, lightingData);
+                    monitoredSAL = new MonitoredSALShortFormBasicMode((byte) 0x0, (byte) 0x0, (short) 0x0, (short) 0x0, (byte) 0x0, ApplicationIdContainer.LIGHTING_38, salData, cBusOptions);
+                }
+                EncodedReply encodedReply = new MonitoredSALReply((byte) 0x0, monitoredSAL, cBusOptions, requestContext);
+                Reply reply = new ReplyEncodedReply((byte) 0x0, encodedReply, null, cBusOptions, requestContext);
+                ReplyOrConfirmation replyOrConfirmation = new ReplyOrConfirmationReply((byte) 0x00, reply, new ResponseTermination(), cBusOptions, requestContext);
+                CBusMessage message = new CBusMessageToClient(replyOrConfirmation, requestContext, cBusOptions);
+                LOGGER.info("[Monitor] Sending out\n{}\n{}", message, encodedReply);
+                ctx.writeAndFlush(message);
+            } finally {
+                writeLock.unlock();
+            }
+        }, 5, 5, TimeUnit.SECONDS);
+    }
+
+    private void stopMonitor() {
+        LOGGER.info("Stopping monitor");
+        sf.cancel(false);
+        sf = null;
+    }
+
 }


[plc4x] 01/04: fix(codegen/plc4go): fix access to params

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

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

commit 4336ebe8ef551373ca5dbba0676fa44788258099
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Aug 1 14:24:32 2022 +0200

    fix(codegen/plc4go): fix access to params
---
 .../templates/go/complex-type-template.go.ftlh     |  14 ++
 .../model/CIPEncapsulationReadResponse.go          |  10 ++
 .../abeth/readwrite/model/DF1ResponseMessage.go    |  10 ++
 plc4go/protocols/bacnetip/readwrite/model/APDU.go  |  10 ++
 .../readwrite/model/BACnetAbortReasonTagged.go     |  10 ++
 ...ACnetAccessAuthenticationFactorDisableTagged.go |  13 ++
 .../BACnetAccessCredentialDisableReasonTagged.go   |  13 ++
 .../model/BACnetAccessCredentialDisableTagged.go   |  13 ++
 .../readwrite/model/BACnetAccessEventTagged.go     |  13 ++
 .../model/BACnetAccessPassbackModeTagged.go        |  13 ++
 .../BACnetAccessRuleLocationSpecifierTagged.go     |  13 ++
 .../BACnetAccessRuleTimeRangeSpecifierTagged.go    |  13 ++
 .../readwrite/model/BACnetAccessUserTypeTagged.go  |  13 ++
 .../model/BACnetAccessZoneOccupancyStateTagged.go  |  13 ++
 ...CnetAccumulatorRecordAccumulatorStatusTagged.go |  13 ++
 .../bacnetip/readwrite/model/BACnetActionTagged.go |  13 ++
 .../readwrite/model/BACnetAddressEnclosed.go       |  10 ++
 .../BACnetAssignedLandingCallsLandingCallsList.go  |  10 ++
 .../model/BACnetAuthenticationFactorEnclosed.go    |  10 ++
 .../model/BACnetAuthenticationFactorTypeTagged.go  |  13 ++
 .../model/BACnetAuthenticationPolicyList.go        |  10 ++
 .../model/BACnetAuthenticationStatusTagged.go      |  13 ++
 .../model/BACnetAuthorizationExemptionTagged.go    |  13 ++
 .../model/BACnetAuthorizationModeTagged.go         |  13 ++
 .../readwrite/model/BACnetBackupStateTagged.go     |  13 ++
 .../model/BACnetBinaryLightingPVTagged.go          |  13 ++
 .../readwrite/model/BACnetBinaryPVTagged.go        |  13 ++
 ...bscriptionListOfCovSubscriptionSpecification.go |  10 ++
 ...riptionSpecificationEntryListOfCovReferences.go |  10 ++
 .../readwrite/model/BACnetCalendarEntryEnclosed.go |  10 ++
 .../bacnetip/readwrite/model/BACnetClosingTag.go   |  10 ++
 .../model/BACnetConfirmedServiceRequest.go         |  10 ++
 .../BACnetConfirmedServiceRequestAuthenticate.go   |  10 ++
 ...rviceRequestConfirmedTextMessageMessageClass.go |  10 ++
 ...estConfirmedTextMessageMessagePriorityTagged.go |  13 ++
 ...medServiceRequestCreateObjectObjectSpecifier.go |  10 ++
 ...eviceCommunicationControlEnableDisableTagged.go |  13 ++
 ...EnrollmentSummaryAcknowledgementFilterTagged.go |  13 ++
 ...stGetEnrollmentSummaryEventStateFilterTagged.go |  13 ++
 ...iceRequestGetEnrollmentSummaryPriorityFilter.go |  10 ++
 ...nfirmedServiceRequestReadPropertyConditional.go |  10 ++
 ...tConfirmedServiceRequestReadPropertyMultiple.go |  10 ++
 ...ializeDeviceReinitializedStateOfDeviceTagged.go |  13 ++
 .../BACnetConfirmedServiceRequestRequestKey.go     |  10 ++
 ...tipleListOfCovSubscriptionSpecificationsList.go |  10 ++
 .../model/BACnetConfirmedServiceRequestUnknown.go  |  10 ++
 .../model/BACnetConfirmedServiceRequestVTClose.go  |  10 ++
 ...ConfirmedServiceRequestWritePropertyMultiple.go |  10 ++
 .../readwrite/model/BACnetConstructedData.go       |  13 ++
 .../model/BACnetConstructedDataElement.go          |  16 ++
 .../bacnetip/readwrite/model/BACnetContextTag.go   |  10 ++
 .../readwrite/model/BACnetContextTagUnknown.go     |  10 ++
 .../readwrite/model/BACnetDateRangeEnclosed.go     |  10 ++
 .../readwrite/model/BACnetDateTimeEnclosed.go      |  10 ++
 .../readwrite/model/BACnetDaysOfWeekTagged.go      |  13 ++
 .../BACnetDeviceObjectPropertyReferenceEnclosed.go |  10 ++
 .../model/BACnetDeviceObjectReferenceEnclosed.go   |  10 ++
 .../readwrite/model/BACnetDeviceStatusTagged.go    |  13 ++
 .../readwrite/model/BACnetDoorAlarmStateTagged.go  |  13 ++
 .../model/BACnetDoorSecuredStatusTagged.go         |  13 ++
 .../readwrite/model/BACnetDoorStatusTagged.go      |  13 ++
 .../readwrite/model/BACnetDoorValueTagged.go       |  13 ++
 .../model/BACnetEngineeringUnitsTagged.go          |  13 ++
 .../readwrite/model/BACnetEscalatorFaultTagged.go  |  13 ++
 .../readwrite/model/BACnetEscalatorModeTagged.go   |  13 ++
 .../BACnetEscalatorOperationDirectionTagged.go     |  13 ++
 .../model/BACnetEventLogRecordLogDatum.go          |  10 ++
 ...tEventParameterAccessEventListOfAccessEvents.go |  10 ++
 ...ameterChangeOfBitstringListOfBitstringValues.go |  10 ++
 ...eterChangeOfCharacterStringListOfAlarmValues.go |  10 ++
 ...ParameterChangeOfLifeSavetyListOfAlarmValues.go |  10 ++
 ...hangeOfLifeSavetyListOfLifeSavetyAlarmValues.go |  10 ++
 ...ACnetEventParameterChangeOfStateListOfValues.go |  10 ++
 .../BACnetEventParameterChangeOfTimerAlarmValue.go |  10 ++
 ...BACnetEventParameterChangeOfValueCivCriteria.go |  10 ++
 .../BACnetEventParameterExtendedParameters.go      |  10 ++
 .../readwrite/model/BACnetEventPriorities.go       |  10 ++
 .../readwrite/model/BACnetEventStateTagged.go      |  13 ++
 .../readwrite/model/BACnetEventSummariesList.go    |  10 ++
 .../model/BACnetEventTimestampsEnclosed.go         |  10 ++
 .../model/BACnetEventTransitionBitsTagged.go       |  13 ++
 .../readwrite/model/BACnetEventTypeTagged.go       |  13 ++
 ...rameterFaultCharacterStringListOfFaultValues.go |  10 ++
 .../BACnetFaultParameterFaultExtendedParameters.go |  10 ++
 ...ultParameterFaultLifeSafetyListOfFaultValues.go |  10 ++
 ...tFaultParameterFaultOutOfRangeMaxNormalValue.go |  10 ++
 ...tFaultParameterFaultOutOfRangeMinNormalValue.go |  10 ++
 ...netFaultParameterFaultStateListOfFaultValues.go |  10 ++
 .../readwrite/model/BACnetFaultTypeTagged.go       |  13 ++
 .../model/BACnetFileAccessMethodTagged.go          |  13 ++
 .../readwrite/model/BACnetGroupChannelValueList.go |  10 ++
 .../readwrite/model/BACnetHostAddressEnclosed.go   |  10 ++
 .../readwrite/model/BACnetHostNPortEnclosed.go     |  10 ++
 .../bacnetip/readwrite/model/BACnetIPModeTagged.go |  13 ++
 .../BACnetLandingDoorStatusLandingDoorsList.go     |  10 ++
 .../readwrite/model/BACnetLifeSafetyModeTagged.go  |  13 ++
 .../model/BACnetLifeSafetyOperationTagged.go       |  13 ++
 .../readwrite/model/BACnetLifeSafetyStateTagged.go |  13 ++
 .../model/BACnetLiftCarCallListFloorList.go        |  10 ++
 .../model/BACnetLiftCarDirectionTagged.go          |  13 ++
 .../model/BACnetLiftCarDoorCommandTagged.go        |  13 ++
 .../model/BACnetLiftCarDriveStatusTagged.go        |  13 ++
 .../readwrite/model/BACnetLiftCarModeTagged.go     |  13 ++
 .../readwrite/model/BACnetLiftFaultTagged.go       |  13 ++
 .../readwrite/model/BACnetLiftGroupModeTagged.go   |  13 ++
 .../model/BACnetLightingCommandEnclosed.go         |  10 ++
 .../model/BACnetLightingInProgressTagged.go        |  13 ++
 .../model/BACnetLightingOperationTagged.go         |  13 ++
 .../model/BACnetLightingTransitionTagged.go        |  13 ++
 .../readwrite/model/BACnetLimitEnableTagged.go     |  13 ++
 .../readwrite/model/BACnetLockStatusTagged.go      |  13 ++
 .../bacnetip/readwrite/model/BACnetLogData.go      |  10 ++
 .../readwrite/model/BACnetLogRecordLogDatum.go     |  10 ++
 .../readwrite/model/BACnetLogStatusTagged.go       |  13 ++
 .../readwrite/model/BACnetLoggingTypeTagged.go     |  13 ++
 .../readwrite/model/BACnetMaintenanceTagged.go     |  13 ++
 .../readwrite/model/BACnetNameValueCollection.go   |  10 ++
 .../model/BACnetNetworkNumberQualityTagged.go      |  13 ++
 .../model/BACnetNetworkPortCommandTagged.go        |  13 ++
 .../readwrite/model/BACnetNetworkTypeTagged.go     |  13 ++
 .../readwrite/model/BACnetNodeTypeTagged.go        |  13 ++
 .../model/BACnetNotificationParameters.go          |  13 ++
 ...ationParametersChangeOfDiscreteValueNewValue.go |  10 ++
 ...tNotificationParametersChangeOfValueNewValue.go |  10 ++
 ...CnetNotificationParametersExtendedParameters.go |  10 ++
 .../readwrite/model/BACnetNotifyTypeTagged.go      |  13 ++
 .../model/BACnetObjectPropertyReferenceEnclosed.go |  10 ++
 .../readwrite/model/BACnetObjectTypeTagged.go      |  13 ++
 .../model/BACnetObjectTypesSupportedTagged.go      |  13 ++
 .../bacnetip/readwrite/model/BACnetOpeningTag.go   |  10 ++
 .../readwrite/model/BACnetPolarityTagged.go        |  13 ++
 .../readwrite/model/BACnetPriorityArray.go         |  16 ++
 .../readwrite/model/BACnetPriorityValue.go         |  10 ++
 .../readwrite/model/BACnetProgramErrorTagged.go    |  13 ++
 .../readwrite/model/BACnetProgramRequestTagged.go  |  13 ++
 .../readwrite/model/BACnetProgramStateTagged.go    |  13 ++
 .../BACnetPropertyAccessResultAccessResult.go      |  16 ++
 .../model/BACnetPropertyIdentifierTagged.go        |  13 ++
 .../model/BACnetPropertyReferenceEnclosed.go       |  10 ++
 .../model/BACnetPropertyStatesEnclosed.go          |  10 ++
 .../readwrite/model/BACnetPropertyValue.go         |  10 ++
 .../readwrite/model/BACnetPropertyValues.go        |  13 ++
 .../model/BACnetPropertyWriteDefinition.go         |  10 ++
 .../readwrite/model/BACnetProtocolLevelTagged.go   |  13 ++
 .../readwrite/model/BACnetReadAccessProperty.go    |  10 ++
 .../model/BACnetReadAccessPropertyReadResult.go    |  16 ++
 .../model/BACnetReadAccessResultListOfResults.go   |  13 ++
 .../readwrite/model/BACnetRecipientEnclosed.go     |  10 ++
 .../model/BACnetRecipientProcessEnclosed.go        |  10 ++
 .../readwrite/model/BACnetRejectReasonTagged.go    |  10 ++
 .../readwrite/model/BACnetRelationshipTagged.go    |  13 ++
 .../readwrite/model/BACnetReliabilityTagged.go     |  13 ++
 .../readwrite/model/BACnetRestartReasonTagged.go   |  13 ++
 .../readwrite/model/BACnetResultFlagsTagged.go     |  13 ++
 .../model/BACnetRouterEntryStatusTagged.go         |  13 ++
 .../readwrite/model/BACnetSecurityKeySetKeyIds.go  |  10 ++
 .../readwrite/model/BACnetSecurityLevelTagged.go   |  13 ++
 .../readwrite/model/BACnetSecurityPolicyTagged.go  |  13 ++
 .../readwrite/model/BACnetSegmentationTagged.go    |  13 ++
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |  10 ++
 .../model/BACnetServiceAckAuthenticate.go          |  10 ++
 .../BACnetServiceAckReadPropertyConditional.go     |  10 ++
 .../model/BACnetServiceAckReadPropertyMultiple.go  |  10 ++
 .../readwrite/model/BACnetServiceAckRequestKey.go  |  10 ++
 .../model/BACnetServicesSupportedTagged.go         |  13 ++
 .../readwrite/model/BACnetShedStateTagged.go       |  13 ++
 .../readwrite/model/BACnetSilencedStateTagged.go   |  13 ++
 .../model/BACnetSpecialEventListOfTimeValues.go    |  10 ++
 .../readwrite/model/BACnetStatusFlagsTagged.go     |  13 ++
 .../readwrite/model/BACnetTagPayloadBitString.go   |  10 ++
 .../readwrite/model/BACnetTagPayloadBoolean.go     |  10 ++
 .../model/BACnetTagPayloadCharacterString.go       |  10 ++
 .../readwrite/model/BACnetTagPayloadEnumerated.go  |  10 ++
 .../readwrite/model/BACnetTagPayloadOctetString.go |  10 ++
 .../model/BACnetTagPayloadSignedInteger.go         |  10 ++
 .../model/BACnetTagPayloadUnsignedInteger.go       |  10 ++
 .../readwrite/model/BACnetTimeStampEnclosed.go     |  10 ++
 .../readwrite/model/BACnetTimeStampsEnclosed.go    |  10 ++
 .../readwrite/model/BACnetTimerStateChangeValue.go |  10 ++
 .../readwrite/model/BACnetTimerStateTagged.go      |  13 ++
 .../readwrite/model/BACnetTimerTransitionTagged.go |  13 ++
 .../model/BACnetUnconfirmedServiceChoiceTagged.go  |  13 ++
 .../model/BACnetUnconfirmedServiceRequest.go       |  10 ++
 .../readwrite/model/BACnetVTClassTagged.go         |  13 ++
 .../readwrite/model/BACnetVendorIdTagged.go        |  13 ++
 .../readwrite/model/BACnetWeekNDayTagged.go        |  13 ++
 .../readwrite/model/BACnetWriteStatusTagged.go     |  13 ++
 .../model/BVLCDistributeBroadcastToNetwork.go      |  10 ++
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  10 ++
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |  10 ++
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |  10 ++
 .../model/BVLCReadBroadcastDistributionTableAck.go |  10 ++
 .../model/BVLCReadForeignDeviceTableAck.go         |  10 ++
 .../readwrite/model/BVLCResultCodeTagged.go        |  13 ++
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |  10 ++
 .../model/BVLCWriteBroadcastDistributionTable.go   |  10 ++
 .../bacnetip/readwrite/model/ErrorClassTagged.go   |  13 ++
 .../bacnetip/readwrite/model/ErrorCodeTagged.go    |  13 ++
 .../bacnetip/readwrite/model/ErrorEnclosed.go      |  10 ++
 .../readwrite/model/ListOfCovNotificationsList.go  |  10 ++
 .../readwrite/model/ListOfCovNotificationsValue.go |  10 ++
 .../readwrite/model/MaxApduLengthAcceptedTagged.go |  13 ++
 .../readwrite/model/MaxSegmentsAcceptedTagged.go   |  13 ++
 plc4go/protocols/bacnetip/readwrite/model/NLM.go   |  10 ++
 plc4go/protocols/bacnetip/readwrite/model/NPDU.go  |  10 ++
 .../readwrite/model/NPDUNetworkPriorityTagged.go   |  13 ++
 ...PropertyMultipleErrorFirstFailedSubscription.go |  10 ++
 .../VTCloseErrorListOfVTSessionIdentifiers.go      |  10 ++
 plc4go/protocols/cbus/readwrite/ParserHelper.go    | 159 ++++++++++---------
 plc4go/protocols/cbus/readwrite/XmlParserHelper.go | 172 ++++++++++++---------
 plc4go/protocols/cbus/readwrite/model/CALData.go   |  10 ++
 .../protocols/cbus/readwrite/model/CALDataReply.go |  61 +++++---
 .../protocols/cbus/readwrite/model/CALDataWrite.go |  67 ++++----
 plc4go/protocols/cbus/readwrite/model/CALReply.go  |  13 ++
 .../protocols/cbus/readwrite/model/CBusCommand.go  |  10 ++
 .../protocols/cbus/readwrite/model/CBusMessage.go  |  13 ++
 .../model/CBusPointToMultiPointCommand.go          |  10 ++
 .../readwrite/model/CBusPointToPointCommand.go     |  10 ++
 .../model/CBusPointToPointToMultiPointCommand.go   |  10 ++
 .../cbus/readwrite/model/CustomManufacturer.go     |  27 +++-
 .../protocols/cbus/readwrite/model/CustomTypes.go  |  27 +++-
 .../protocols/cbus/readwrite/model/EncodedReply.go |  13 ++
 .../cbus/readwrite/model/IdentifyReplyCommand.go   |  10 ++
 .../protocols/cbus/readwrite/model/MonitoredSAL.go |  10 ++
 plc4go/protocols/cbus/readwrite/model/Reply.go     |  13 ++
 .../cbus/readwrite/model/ReplyOrConfirmation.go    |  13 ++
 plc4go/protocols/cbus/readwrite/model/Request.go   |  10 ++
 .../protocols/eip/readwrite/model/CipExchange.go   |  10 ++
 plc4go/protocols/eip/readwrite/model/CipRRData.go  |  10 ++
 plc4go/protocols/eip/readwrite/model/CipService.go |  10 ++
 plc4go/protocols/eip/readwrite/model/Services.go   |  10 ++
 .../firmata/readwrite/model/FirmataCommand.go      |  10 ++
 .../firmata/readwrite/model/FirmataMessage.go      |  10 ++
 plc4go/protocols/knxnetip/readwrite/model/Apdu.go  |  10 ++
 .../protocols/knxnetip/readwrite/model/ApduData.go |  10 ++
 .../knxnetip/readwrite/model/ApduDataExt.go        |  10 ++
 plc4go/protocols/knxnetip/readwrite/model/CEMI.go  |  10 ++
 .../readwrite/model/DeviceConfigurationRequest.go  |  10 ++
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  10 ++
 .../knxnetip/readwrite/model/UnknownMessage.go     |  10 ++
 .../protocols/modbus/readwrite/model/ModbusADU.go  |  10 ++
 plc4go/protocols/s7/readwrite/model/COTPPacket.go  |  10 ++
 .../protocols/s7/readwrite/model/COTPParameter.go  |  10 ++
 plc4go/protocols/s7/readwrite/model/S7Payload.go   |  10 ++
 244 files changed, 3014 insertions(+), 216 deletions(-)

diff --git a/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh
index a6ee0abc4..101820506 100644
--- a/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh
@@ -1849,6 +1849,20 @@ func (m *_${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
 	</#if>
 }
 
+<#if filteredParserArgumentsLocalToType?has_content>
+
+////
+// Arguments Getter
+
+    <#list filteredParserArgumentsLocalToType as parserArgument>
+func (m *_${type.name}) Get${parserArgument.name?cap_first}() ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)} {
+	return m.${parserArgument.name?cap_first}
+}
+    </#list>
+//
+////
+</#if>
+
 func (m *_${type.name}) is${type.name}() bool {
 	return true
 }
diff --git a/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationReadResponse.go b/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationReadResponse.go
index 3156f3474..b60957362 100644
--- a/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationReadResponse.go
+++ b/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationReadResponse.go
@@ -195,6 +195,16 @@ func (m *_CIPEncapsulationReadResponse) Serialize(writeBuffer utils.WriteBuffer)
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_CIPEncapsulationReadResponse) GetPacketLen() uint16 {
+	return m.PacketLen
+}
+
+//
+////
+
 func (m *_CIPEncapsulationReadResponse) isCIPEncapsulationReadResponse() bool {
 	return true
 }
diff --git a/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go b/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go
index b0b73af1f..be9d97f56 100644
--- a/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go
+++ b/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go
@@ -332,6 +332,16 @@ func (pm *_DF1ResponseMessage) SerializeParent(writeBuffer utils.WriteBuffer, ch
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_DF1ResponseMessage) GetPayloadLength() uint16 {
+	return m.PayloadLength
+}
+
+//
+////
+
 func (m *_DF1ResponseMessage) isDF1ResponseMessage() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/APDU.go b/plc4go/protocols/bacnetip/readwrite/model/APDU.go
index e1f8ade8d..c92cae5b9 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/APDU.go
@@ -204,6 +204,16 @@ func (pm *_APDU) SerializeParent(writeBuffer utils.WriteBuffer, child APDU, seri
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_APDU) GetApduLength() uint16 {
+	return m.ApduLength
+}
+
+//
+////
+
 func (m *_APDU) isAPDU() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAbortReasonTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAbortReasonTagged.go
index bef60e045..331e0d2d3 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAbortReasonTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAbortReasonTagged.go
@@ -198,6 +198,16 @@ func (m *_BACnetAbortReasonTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAbortReasonTagged) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetAbortReasonTagged) isBACnetAbortReasonTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisableTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisableTagged.go
index f29539cdf..1674573a7 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisableTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisableTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAccessAuthenticationFactorDisableTagged) Serialize(writeBuffer u
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessAuthenticationFactorDisableTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessAuthenticationFactorDisableTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessAuthenticationFactorDisableTagged) isBACnetAccessAuthenticationFactorDisableTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableReasonTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableReasonTagged.go
index 7246a408f..7474412b5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableReasonTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableReasonTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAccessCredentialDisableReasonTagged) Serialize(writeBuffer utils
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessCredentialDisableReasonTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessCredentialDisableReasonTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessCredentialDisableReasonTagged) isBACnetAccessCredentialDisableReasonTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableTagged.go
index ffc996589..1e920d63b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessCredentialDisableTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAccessCredentialDisableTagged) Serialize(writeBuffer utils.Write
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessCredentialDisableTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessCredentialDisableTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessCredentialDisableTagged) isBACnetAccessCredentialDisableTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessEventTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessEventTagged.go
index bf0c065f9..cd2016df0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessEventTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessEventTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAccessEventTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessEventTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessEventTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessEventTagged) isBACnetAccessEventTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessPassbackModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessPassbackModeTagged.go
index 5569758a5..b99482f5e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessPassbackModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessPassbackModeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetAccessPassbackModeTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessPassbackModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessPassbackModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessPassbackModeTagged) isBACnetAccessPassbackModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleLocationSpecifierTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleLocationSpecifierTagged.go
index 8ec3f5a35..6120b0e40 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleLocationSpecifierTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleLocationSpecifierTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetAccessRuleLocationSpecifierTagged) Serialize(writeBuffer utils.W
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessRuleLocationSpecifierTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessRuleLocationSpecifierTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessRuleLocationSpecifierTagged) isBACnetAccessRuleLocationSpecifierTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleTimeRangeSpecifierTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleTimeRangeSpecifierTagged.go
index a09a87725..8ae2a489f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleTimeRangeSpecifierTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessRuleTimeRangeSpecifierTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetAccessRuleTimeRangeSpecifierTagged) Serialize(writeBuffer utils.
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessRuleTimeRangeSpecifierTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessRuleTimeRangeSpecifierTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessRuleTimeRangeSpecifierTagged) isBACnetAccessRuleTimeRangeSpecifierTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessUserTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessUserTypeTagged.go
index fa252b0f6..5399f027a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessUserTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessUserTypeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAccessUserTypeTagged) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessUserTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessUserTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessUserTypeTagged) isBACnetAccessUserTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessZoneOccupancyStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessZoneOccupancyStateTagged.go
index cf1de4c3c..1c94d999c 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessZoneOccupancyStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccessZoneOccupancyStateTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAccessZoneOccupancyStateTagged) Serialize(writeBuffer utils.Writ
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccessZoneOccupancyStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccessZoneOccupancyStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccessZoneOccupancyStateTagged) isBACnetAccessZoneOccupancyStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccumulatorRecordAccumulatorStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccumulatorRecordAccumulatorStatusTagged.go
index cbbc48874..d8c0383f6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAccumulatorRecordAccumulatorStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAccumulatorRecordAccumulatorStatusTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetAccumulatorRecordAccumulatorStatusTagged) Serialize(writeBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAccumulatorRecordAccumulatorStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAccumulatorRecordAccumulatorStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAccumulatorRecordAccumulatorStatusTagged) isBACnetAccumulatorRecordAccumulatorStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetActionTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetActionTagged.go
index e6dcd11df..7cbdcf03e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetActionTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetActionTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetActionTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetActionTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetActionTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetActionTagged) isBACnetActionTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAddressEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAddressEnclosed.go
index a68524f75..99c336f70 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAddressEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAddressEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetAddressEnclosed) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAddressEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetAddressEnclosed) isBACnetAddressEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAssignedLandingCallsLandingCallsList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAssignedLandingCallsLandingCallsList.go
index 99bd33e78..f8741ce9e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAssignedLandingCallsLandingCallsList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAssignedLandingCallsLandingCallsList.go
@@ -238,6 +238,16 @@ func (m *_BACnetAssignedLandingCallsLandingCallsList) Serialize(writeBuffer util
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAssignedLandingCallsLandingCallsList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetAssignedLandingCallsLandingCallsList) isBACnetAssignedLandingCallsLandingCallsList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorEnclosed.go
index 983aa9810..c71f33983 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetAuthenticationFactorEnclosed) Serialize(writeBuffer utils.WriteB
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAuthenticationFactorEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetAuthenticationFactorEnclosed) isBACnetAuthenticationFactorEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorTypeTagged.go
index 07eca8118..2a9d6bd48 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationFactorTypeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetAuthenticationFactorTypeTagged) Serialize(writeBuffer utils.Writ
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAuthenticationFactorTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAuthenticationFactorTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAuthenticationFactorTypeTagged) isBACnetAuthenticationFactorTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationPolicyList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationPolicyList.go
index 1b8b06c77..ce788bf94 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationPolicyList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationPolicyList.go
@@ -238,6 +238,16 @@ func (m *_BACnetAuthenticationPolicyList) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAuthenticationPolicyList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetAuthenticationPolicyList) isBACnetAuthenticationPolicyList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationStatusTagged.go
index 402f6933c..c265c31d1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthenticationStatusTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetAuthenticationStatusTagged) Serialize(writeBuffer utils.WriteBuf
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAuthenticationStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAuthenticationStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAuthenticationStatusTagged) isBACnetAuthenticationStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationExemptionTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationExemptionTagged.go
index cea19ff11..4289ce0d0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationExemptionTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationExemptionTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAuthorizationExemptionTagged) Serialize(writeBuffer utils.WriteB
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAuthorizationExemptionTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAuthorizationExemptionTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAuthorizationExemptionTagged) isBACnetAuthorizationExemptionTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationModeTagged.go
index 3e4378893..6082ccdf3 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetAuthorizationModeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetAuthorizationModeTagged) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetAuthorizationModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetAuthorizationModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetAuthorizationModeTagged) isBACnetAuthorizationModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetBackupStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetBackupStateTagged.go
index 0e19f9c74..b5aff5ca0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetBackupStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetBackupStateTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetBackupStateTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetBackupStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetBackupStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetBackupStateTagged) isBACnetBackupStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryLightingPVTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryLightingPVTagged.go
index fa5997617..458da3eaa 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryLightingPVTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryLightingPVTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetBinaryLightingPVTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetBinaryLightingPVTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetBinaryLightingPVTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetBinaryLightingPVTagged) isBACnetBinaryLightingPVTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryPVTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryPVTagged.go
index 4b769e683..4f4cb2dd5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryPVTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetBinaryPVTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetBinaryPVTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetBinaryPVTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetBinaryPVTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetBinaryPVTagged) isBACnetBinaryPVTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification.go
index f6567abcf..7087b2168 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification.go
@@ -238,6 +238,16 @@ func (m *_BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification) Seria
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification) isBACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecification() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences.go
index f1f055fea..12331cd76 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences.go
@@ -238,6 +238,16 @@ func (m *_BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryLi
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences) isBACnetCOVMultipleSubscriptionListOfCovSubscriptionSpecificationEntryListOfCovReferences() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntryEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntryEnclosed.go
index 28085651a..4547bdd7e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntryEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntryEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetCalendarEntryEnclosed) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetCalendarEntryEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetCalendarEntryEnclosed) isBACnetCalendarEntryEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetClosingTag.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetClosingTag.go
index 5fa249210..46c629e8e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetClosingTag.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetClosingTag.go
@@ -170,6 +170,16 @@ func (m *_BACnetClosingTag) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetClosingTag) GetTagNumberArgument() uint8 {
+	return m.TagNumberArgument
+}
+
+//
+////
+
 func (m *_BACnetClosingTag) isBACnetClosingTag() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index 700be6e05..7dbbe502c 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -277,6 +277,16 @@ func (pm *_BACnetConfirmedServiceRequest) SerializeParent(writeBuffer utils.Writ
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequest) GetServiceRequestLength() uint16 {
+	return m.ServiceRequestLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequest) isBACnetConfirmedServiceRequest() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAuthenticate.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAuthenticate.go
index 25e0d5be4..470ba4268 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAuthenticate.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAuthenticate.go
@@ -182,6 +182,16 @@ func (m *_BACnetConfirmedServiceRequestAuthenticate) Serialize(writeBuffer utils
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestAuthenticate) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestAuthenticate) isBACnetConfirmedServiceRequestAuthenticate() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go
index 1eebfabad..8b10aa42c 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go
@@ -279,6 +279,16 @@ func (pm *_BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass) Serial
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass) isBACnetConfirmedServiceRequestConfirmedTextMessageMessageClass() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged.go
index 607f384c8..0a40b20d1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged) isBACnetConfirmedServiceRequestConfirmedTextMessageMessagePriorityTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObjectObjectSpecifier.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObjectObjectSpecifier.go
index bfb96d121..1be49902d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObjectObjectSpecifier.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObjectObjectSpecifier.go
@@ -369,6 +369,16 @@ func (m *_BACnetConfirmedServiceRequestCreateObjectObjectSpecifier) Serialize(wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestCreateObjectObjectSpecifier) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestCreateObjectObjectSpecifier) isBACnetConfirmedServiceRequestCreateObjectObjectSpecifier() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged.go
index c3502a8cd..817461801 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTa
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged) isBACnetConfirmedServiceRequestDeviceCommunicationControlEnableDisableTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged.go
index 7ee0a6cba..bffe0d2c8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilter
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged) isBACnetConfirmedServiceRequestGetEnrollmentSummaryAcknowledgementFilterTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged.go
index 7c20c9dae..32f36391e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagge
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged) isBACnetConfirmedServiceRequestGetEnrollmentSummaryEventStateFilterTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter.go
index 7aab0d954..1ca921698 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter.go
@@ -260,6 +260,16 @@ func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter) Seria
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter) isBACnetConfirmedServiceRequestGetEnrollmentSummaryPriorityFilter() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyConditional.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyConditional.go
index 60eeef895..187b2f4d5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyConditional.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyConditional.go
@@ -182,6 +182,16 @@ func (m *_BACnetConfirmedServiceRequestReadPropertyConditional) Serialize(writeB
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestReadPropertyConditional) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestReadPropertyConditional) isBACnetConfirmedServiceRequestReadPropertyConditional() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index a3499e291..c3e132ba2 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -207,6 +207,16 @@ func (m *_BACnetConfirmedServiceRequestReadPropertyMultiple) Serialize(writeBuff
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestReadPropertyMultiple) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestReadPropertyMultiple) isBACnetConfirmedServiceRequestReadPropertyMultiple() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged.go
index 80c4357eb..20f63758d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDev
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged) isBACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDeviceTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRequestKey.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRequestKey.go
index ac1e45335..eb8f36ce3 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRequestKey.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRequestKey.go
@@ -182,6 +182,16 @@ func (m *_BACnetConfirmedServiceRequestRequestKey) Serialize(writeBuffer utils.W
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestRequestKey) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestRequestKey) isBACnetConfirmedServiceRequestRequestKey() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
index 4c552122c..3b157db33 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
@@ -238,6 +238,16 @@ func (m *_BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubs
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) isBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestUnknown.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestUnknown.go
index 607361e8c..83640c548 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestUnknown.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestUnknown.go
@@ -182,6 +182,16 @@ func (m *_BACnetConfirmedServiceRequestUnknown) Serialize(writeBuffer utils.Writ
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestUnknown) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestUnknown) isBACnetConfirmedServiceRequestUnknown() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index 2070b0897..371e97f1d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -207,6 +207,16 @@ func (m *_BACnetConfirmedServiceRequestVTClose) Serialize(writeBuffer utils.Writ
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestVTClose) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestVTClose) isBACnetConfirmedServiceRequestVTClose() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index 6c5750834..cd0a59f29 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -207,6 +207,16 @@ func (m *_BACnetConfirmedServiceRequestWritePropertyMultiple) Serialize(writeBuf
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConfirmedServiceRequestWritePropertyMultiple) GetServiceRequestPayloadLength() uint16 {
+	return m.ServiceRequestPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetConfirmedServiceRequestWritePropertyMultiple) isBACnetConfirmedServiceRequestWritePropertyMultiple() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go
index 11df61022..25d8554a0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go
@@ -1598,6 +1598,19 @@ func (pm *_BACnetConstructedData) SerializeParent(writeBuffer utils.WriteBuffer,
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConstructedData) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetConstructedData) GetArrayIndexArgument() BACnetTagPayloadUnsignedInteger {
+	return m.ArrayIndexArgument
+}
+
+//
+////
+
 func (m *_BACnetConstructedData) isBACnetConstructedData() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedDataElement.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedDataElement.go
index 4c898115b..967898bd6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedDataElement.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedDataElement.go
@@ -400,6 +400,22 @@ func (m *_BACnetConstructedDataElement) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetConstructedDataElement) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+func (m *_BACnetConstructedDataElement) GetPropertyIdentifierArgument() BACnetPropertyIdentifier {
+	return m.PropertyIdentifierArgument
+}
+func (m *_BACnetConstructedDataElement) GetArrayIndexArgument() BACnetTagPayloadUnsignedInteger {
+	return m.ArrayIndexArgument
+}
+
+//
+////
+
 func (m *_BACnetConstructedDataElement) isBACnetConstructedDataElement() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go
index 35a534ecf..5c002a06f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go
@@ -288,6 +288,16 @@ func (pm *_BACnetContextTag) SerializeParent(writeBuffer utils.WriteBuffer, chil
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetContextTag) GetTagNumberArgument() uint8 {
+	return m.TagNumberArgument
+}
+
+//
+////
+
 func (m *_BACnetContextTag) isBACnetContextTag() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTagUnknown.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTagUnknown.go
index 0c4c8627e..da4f77765 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTagUnknown.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTagUnknown.go
@@ -183,6 +183,16 @@ func (m *_BACnetContextTagUnknown) Serialize(writeBuffer utils.WriteBuffer) erro
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetContextTagUnknown) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetContextTagUnknown) isBACnetContextTagUnknown() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDateRangeEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDateRangeEnclosed.go
index 7114623e5..5f6448020 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDateRangeEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDateRangeEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetDateRangeEnclosed) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDateRangeEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetDateRangeEnclosed) isBACnetDateRangeEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDateTimeEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDateTimeEnclosed.go
index 7e29c33c6..43bf0f6bb 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDateTimeEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDateTimeEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetDateTimeEnclosed) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDateTimeEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetDateTimeEnclosed) isBACnetDateTimeEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDaysOfWeekTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDaysOfWeekTagged.go
index 9a43ed8e0..3cfee42a8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDaysOfWeekTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDaysOfWeekTagged.go
@@ -329,6 +329,19 @@ func (m *_BACnetDaysOfWeekTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDaysOfWeekTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetDaysOfWeekTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetDaysOfWeekTagged) isBACnetDaysOfWeekTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectPropertyReferenceEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectPropertyReferenceEnclosed.go
index aee184dc4..129890aa0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectPropertyReferenceEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectPropertyReferenceEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetDeviceObjectPropertyReferenceEnclosed) Serialize(writeBuffer uti
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDeviceObjectPropertyReferenceEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetDeviceObjectPropertyReferenceEnclosed) isBACnetDeviceObjectPropertyReferenceEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectReferenceEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectReferenceEnclosed.go
index 57c86ebbe..ce8b84a78 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectReferenceEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceObjectReferenceEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetDeviceObjectReferenceEnclosed) Serialize(writeBuffer utils.Write
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDeviceObjectReferenceEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetDeviceObjectReferenceEnclosed) isBACnetDeviceObjectReferenceEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceStatusTagged.go
index 0f26b4ea0..b8a3be84c 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDeviceStatusTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetDeviceStatusTagged) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDeviceStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetDeviceStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetDeviceStatusTagged) isBACnetDeviceStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorAlarmStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorAlarmStateTagged.go
index f3d554251..30c407875 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorAlarmStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorAlarmStateTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetDoorAlarmStateTagged) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDoorAlarmStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetDoorAlarmStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetDoorAlarmStateTagged) isBACnetDoorAlarmStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorSecuredStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorSecuredStatusTagged.go
index 279fc05b7..8cb55bc94 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorSecuredStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorSecuredStatusTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetDoorSecuredStatusTagged) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDoorSecuredStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetDoorSecuredStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetDoorSecuredStatusTagged) isBACnetDoorSecuredStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorStatusTagged.go
index 57af94dab..1982c9965 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorStatusTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetDoorStatusTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDoorStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetDoorStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetDoorStatusTagged) isBACnetDoorStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorValueTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorValueTagged.go
index 1335e85f0..2611d6663 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorValueTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetDoorValueTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetDoorValueTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetDoorValueTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetDoorValueTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetDoorValueTagged) isBACnetDoorValueTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEngineeringUnitsTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEngineeringUnitsTagged.go
index 60c47b12d..9f6daf1f4 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEngineeringUnitsTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEngineeringUnitsTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetEngineeringUnitsTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEngineeringUnitsTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEngineeringUnitsTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEngineeringUnitsTagged) isBACnetEngineeringUnitsTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorFaultTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorFaultTagged.go
index 33c30770a..393bc2294 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorFaultTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorFaultTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetEscalatorFaultTagged) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEscalatorFaultTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEscalatorFaultTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEscalatorFaultTagged) isBACnetEscalatorFaultTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorModeTagged.go
index c2bbfadff..5d4feb94e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorModeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetEscalatorModeTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEscalatorModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEscalatorModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEscalatorModeTagged) isBACnetEscalatorModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorOperationDirectionTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorOperationDirectionTagged.go
index 050badec0..c57723c4a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorOperationDirectionTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEscalatorOperationDirectionTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetEscalatorOperationDirectionTagged) Serialize(writeBuffer utils.W
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEscalatorOperationDirectionTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEscalatorOperationDirectionTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEscalatorOperationDirectionTagged) isBACnetEscalatorOperationDirectionTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go
index 71f793a04..efd4f8c8b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go
@@ -281,6 +281,16 @@ func (pm *_BACnetEventLogRecordLogDatum) SerializeParent(writeBuffer utils.Write
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventLogRecordLogDatum) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventLogRecordLogDatum) isBACnetEventLogRecordLogDatum() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterAccessEventListOfAccessEvents.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterAccessEventListOfAccessEvents.go
index 73b500b6c..d2eec35b4 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterAccessEventListOfAccessEvents.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterAccessEventListOfAccessEvents.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterAccessEventListOfAccessEvents) Serialize(writeBuff
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterAccessEventListOfAccessEvents) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterAccessEventListOfAccessEvents) isBACnetEventParameterAccessEventListOfAccessEvents() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfBitstringListOfBitstringValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfBitstringListOfBitstringValues.go
index 6b82af5da..ba9ad8ee1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfBitstringListOfBitstringValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfBitstringListOfBitstringValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterChangeOfBitstringListOfBitstringValues) Serialize(
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfBitstringListOfBitstringValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfBitstringListOfBitstringValues) isBACnetEventParameterChangeOfBitstringListOfBitstringValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfCharacterStringListOfAlarmValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfCharacterStringListOfAlarmValues.go
index e85308804..87c1092cc 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfCharacterStringListOfAlarmValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfCharacterStringListOfAlarmValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterChangeOfCharacterStringListOfAlarmValues) Serializ
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfCharacterStringListOfAlarmValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfCharacterStringListOfAlarmValues) isBACnetEventParameterChangeOfCharacterStringListOfAlarmValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues.go
index 286677113..22d84f7cb 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues) Serialize(wri
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfLifeSavetyListOfAlarmValues) isBACnetEventParameterChangeOfLifeSavetyListOfAlarmValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues.go
index 67abb7975..86125c2f9 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues) Ser
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues) isBACnetEventParameterChangeOfLifeSavetyListOfLifeSavetyAlarmValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfStateListOfValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfStateListOfValues.go
index da7377abc..07780ea12 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfStateListOfValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfStateListOfValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterChangeOfStateListOfValues) Serialize(writeBuffer u
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfStateListOfValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfStateListOfValues) isBACnetEventParameterChangeOfStateListOfValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfTimerAlarmValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfTimerAlarmValue.go
index 7aab051bc..c344c2b20 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfTimerAlarmValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfTimerAlarmValue.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventParameterChangeOfTimerAlarmValue) Serialize(writeBuffer uti
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfTimerAlarmValue) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfTimerAlarmValue) isBACnetEventParameterChangeOfTimerAlarmValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go
index f9fe0392f..e26ab2f40 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go
@@ -279,6 +279,16 @@ func (pm *_BACnetEventParameterChangeOfValueCivCriteria) SerializeParent(writeBu
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterChangeOfValueCivCriteria) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterChangeOfValueCivCriteria) isBACnetEventParameterChangeOfValueCivCriteria() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterExtendedParameters.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterExtendedParameters.go
index 2979023c6..0d267630f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterExtendedParameters.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterExtendedParameters.go
@@ -1051,6 +1051,16 @@ func (m *_BACnetEventParameterExtendedParameters) Serialize(writeBuffer utils.Wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventParameterExtendedParameters) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventParameterExtendedParameters) isBACnetEventParameterExtendedParameters() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventPriorities.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventPriorities.go
index ca4a295c6..1c5ae7b86 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventPriorities.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventPriorities.go
@@ -295,6 +295,16 @@ func (m *_BACnetEventPriorities) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventPriorities) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventPriorities) isBACnetEventPriorities() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventStateTagged.go
index 98c396bf1..7b796e8a1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventStateTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetEventStateTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEventStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEventStateTagged) isBACnetEventStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventSummariesList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventSummariesList.go
index 3bcd3bf76..756beb75e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventSummariesList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventSummariesList.go
@@ -238,6 +238,16 @@ func (m *_BACnetEventSummariesList) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventSummariesList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventSummariesList) isBACnetEventSummariesList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTimestampsEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTimestampsEnclosed.go
index 0512036b0..dbd6cd23e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTimestampsEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTimestampsEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetEventTimestampsEnclosed) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventTimestampsEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetEventTimestampsEnclosed) isBACnetEventTimestampsEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTransitionBitsTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTransitionBitsTagged.go
index b5881d703..dad69f8a2 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTransitionBitsTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTransitionBitsTagged.go
@@ -261,6 +261,19 @@ func (m *_BACnetEventTransitionBitsTagged) Serialize(writeBuffer utils.WriteBuff
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventTransitionBitsTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEventTransitionBitsTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEventTransitionBitsTagged) isBACnetEventTransitionBitsTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTypeTagged.go
index d960f7ac6..bec5d612e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventTypeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetEventTypeTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetEventTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetEventTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetEventTypeTagged) isBACnetEventTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultCharacterStringListOfFaultValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultCharacterStringListOfFaultValues.go
index 11abbe7fe..0a1d79f15 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultCharacterStringListOfFaultValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultCharacterStringListOfFaultValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetFaultParameterFaultCharacterStringListOfFaultValues) Serialize(w
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultParameterFaultCharacterStringListOfFaultValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetFaultParameterFaultCharacterStringListOfFaultValues) isBACnetFaultParameterFaultCharacterStringListOfFaultValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParameters.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParameters.go
index 87bb1aae8..17cf21181 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParameters.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParameters.go
@@ -238,6 +238,16 @@ func (m *_BACnetFaultParameterFaultExtendedParameters) Serialize(writeBuffer uti
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultParameterFaultExtendedParameters) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetFaultParameterFaultExtendedParameters) isBACnetFaultParameterFaultExtendedParameters() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultLifeSafetyListOfFaultValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultLifeSafetyListOfFaultValues.go
index a3bb65b3a..c35d86571 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultLifeSafetyListOfFaultValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultLifeSafetyListOfFaultValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetFaultParameterFaultLifeSafetyListOfFaultValues) Serialize(writeB
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultParameterFaultLifeSafetyListOfFaultValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetFaultParameterFaultLifeSafetyListOfFaultValues) isBACnetFaultParameterFaultLifeSafetyListOfFaultValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go
index 0b7659458..f5ec18836 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go
@@ -288,6 +288,16 @@ func (pm *_BACnetFaultParameterFaultOutOfRangeMaxNormalValue) SerializeParent(wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultParameterFaultOutOfRangeMaxNormalValue) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetFaultParameterFaultOutOfRangeMaxNormalValue) isBACnetFaultParameterFaultOutOfRangeMaxNormalValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go
index de620ac83..6419e93ef 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go
@@ -288,6 +288,16 @@ func (pm *_BACnetFaultParameterFaultOutOfRangeMinNormalValue) SerializeParent(wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultParameterFaultOutOfRangeMinNormalValue) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetFaultParameterFaultOutOfRangeMinNormalValue) isBACnetFaultParameterFaultOutOfRangeMinNormalValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultStateListOfFaultValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultStateListOfFaultValues.go
index 4ec2da6b0..e862d62a1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultStateListOfFaultValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultStateListOfFaultValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetFaultParameterFaultStateListOfFaultValues) Serialize(writeBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultParameterFaultStateListOfFaultValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetFaultParameterFaultStateListOfFaultValues) isBACnetFaultParameterFaultStateListOfFaultValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultTypeTagged.go
index 22b9e23d7..a908688e6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultTypeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetFaultTypeTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFaultTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetFaultTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetFaultTypeTagged) isBACnetFaultTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFileAccessMethodTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFileAccessMethodTagged.go
index e3f95f0db..dc2f01c6e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFileAccessMethodTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFileAccessMethodTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetFileAccessMethodTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetFileAccessMethodTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetFileAccessMethodTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetFileAccessMethodTagged) isBACnetFileAccessMethodTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetGroupChannelValueList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetGroupChannelValueList.go
index 7d4ea9b5f..485c38705 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetGroupChannelValueList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetGroupChannelValueList.go
@@ -238,6 +238,16 @@ func (m *_BACnetGroupChannelValueList) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetGroupChannelValueList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetGroupChannelValueList) isBACnetGroupChannelValueList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddressEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddressEnclosed.go
index a042df69d..fc8206288 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddressEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddressEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetHostAddressEnclosed) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetHostAddressEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetHostAddressEnclosed) isBACnetHostAddressEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetHostNPortEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetHostNPortEnclosed.go
index 052bbba04..39a27291a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetHostNPortEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetHostNPortEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetHostNPortEnclosed) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetHostNPortEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetHostNPortEnclosed) isBACnetHostNPortEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetIPModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetIPModeTagged.go
index b8722e2e9..ccd98f005 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetIPModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetIPModeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetIPModeTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetIPModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetIPModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetIPModeTagged) isBACnetIPModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingDoorStatusLandingDoorsList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingDoorStatusLandingDoorsList.go
index 0803aa7b4..264635839 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingDoorStatusLandingDoorsList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingDoorStatusLandingDoorsList.go
@@ -238,6 +238,16 @@ func (m *_BACnetLandingDoorStatusLandingDoorsList) Serialize(writeBuffer utils.W
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLandingDoorStatusLandingDoorsList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetLandingDoorStatusLandingDoorsList) isBACnetLandingDoorStatusLandingDoorsList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyModeTagged.go
index 792d62b13..f0af15fc6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyModeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLifeSafetyModeTagged) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLifeSafetyModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLifeSafetyModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLifeSafetyModeTagged) isBACnetLifeSafetyModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyOperationTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyOperationTagged.go
index 22a512101..933b1ebc8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyOperationTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyOperationTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLifeSafetyOperationTagged) Serialize(writeBuffer utils.WriteBuff
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLifeSafetyOperationTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLifeSafetyOperationTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLifeSafetyOperationTagged) isBACnetLifeSafetyOperationTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyStateTagged.go
index 09afb6045..ba4b9e67f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLifeSafetyStateTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLifeSafetyStateTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLifeSafetyStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLifeSafetyStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLifeSafetyStateTagged) isBACnetLifeSafetyStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarCallListFloorList.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarCallListFloorList.go
index 939a03eaf..4d14487c8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarCallListFloorList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarCallListFloorList.go
@@ -238,6 +238,16 @@ func (m *_BACnetLiftCarCallListFloorList) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftCarCallListFloorList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetLiftCarCallListFloorList) isBACnetLiftCarCallListFloorList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDirectionTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDirectionTagged.go
index f9eb2369f..d4ae645af 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDirectionTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDirectionTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLiftCarDirectionTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftCarDirectionTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLiftCarDirectionTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLiftCarDirectionTagged) isBACnetLiftCarDirectionTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDoorCommandTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDoorCommandTagged.go
index 9e30c199b..b53367129 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDoorCommandTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDoorCommandTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetLiftCarDoorCommandTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftCarDoorCommandTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLiftCarDoorCommandTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLiftCarDoorCommandTagged) isBACnetLiftCarDoorCommandTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDriveStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDriveStatusTagged.go
index 45b9a6b6d..8572e5bd0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDriveStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarDriveStatusTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLiftCarDriveStatusTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftCarDriveStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLiftCarDriveStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLiftCarDriveStatusTagged) isBACnetLiftCarDriveStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarModeTagged.go
index e45a858fd..dcffb4d95 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftCarModeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLiftCarModeTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftCarModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLiftCarModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLiftCarModeTagged) isBACnetLiftCarModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftFaultTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftFaultTagged.go
index a2923b295..0a942c5e0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftFaultTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftFaultTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLiftFaultTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftFaultTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLiftFaultTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLiftFaultTagged) isBACnetLiftFaultTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftGroupModeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftGroupModeTagged.go
index ed9939357..8b72b2aac 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftGroupModeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLiftGroupModeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetLiftGroupModeTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLiftGroupModeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLiftGroupModeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLiftGroupModeTagged) isBACnetLiftGroupModeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingCommandEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingCommandEnclosed.go
index a47636a36..d31d6b9c1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingCommandEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingCommandEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetLightingCommandEnclosed) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLightingCommandEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetLightingCommandEnclosed) isBACnetLightingCommandEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingInProgressTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingInProgressTagged.go
index 81157f15a..c3b177db1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingInProgressTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingInProgressTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetLightingInProgressTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLightingInProgressTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLightingInProgressTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLightingInProgressTagged) isBACnetLightingInProgressTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingOperationTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingOperationTagged.go
index 7793dec27..595b51d69 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingOperationTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingOperationTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLightingOperationTagged) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLightingOperationTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLightingOperationTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLightingOperationTagged) isBACnetLightingOperationTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingTransitionTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingTransitionTagged.go
index 427899467..f252da367 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingTransitionTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLightingTransitionTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLightingTransitionTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLightingTransitionTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLightingTransitionTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLightingTransitionTagged) isBACnetLightingTransitionTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLimitEnableTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLimitEnableTagged.go
index 7bb34e49c..c3b1963f6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLimitEnableTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLimitEnableTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLimitEnableTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLimitEnableTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLimitEnableTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLimitEnableTagged) isBACnetLimitEnableTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLockStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLockStatusTagged.go
index a6e30c1d2..825dcce54 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLockStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLockStatusTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetLockStatusTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLockStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLockStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLockStatusTagged) isBACnetLockStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go
index 8a7303b05..753456518 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go
@@ -281,6 +281,16 @@ func (pm *_BACnetLogData) SerializeParent(writeBuffer utils.WriteBuffer, child B
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLogData) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetLogData) isBACnetLogData() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go
index 77e2d5df0..ecf44cfed 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go
@@ -297,6 +297,16 @@ func (pm *_BACnetLogRecordLogDatum) SerializeParent(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLogRecordLogDatum) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetLogRecordLogDatum) isBACnetLogRecordLogDatum() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogStatusTagged.go
index e6d34e71e..77afddf82 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogStatusTagged.go
@@ -261,6 +261,19 @@ func (m *_BACnetLogStatusTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLogStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLogStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLogStatusTagged) isBACnetLogStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLoggingTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLoggingTypeTagged.go
index 9fee56e4d..c6d49dc67 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLoggingTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLoggingTypeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetLoggingTypeTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetLoggingTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetLoggingTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetLoggingTypeTagged) isBACnetLoggingTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetMaintenanceTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetMaintenanceTagged.go
index b94e1d937..73731bd0a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetMaintenanceTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetMaintenanceTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetMaintenanceTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetMaintenanceTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetMaintenanceTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetMaintenanceTagged) isBACnetMaintenanceTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNameValueCollection.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNameValueCollection.go
index 1ac9755e3..ea6be424b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNameValueCollection.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNameValueCollection.go
@@ -238,6 +238,16 @@ func (m *_BACnetNameValueCollection) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNameValueCollection) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetNameValueCollection) isBACnetNameValueCollection() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkNumberQualityTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkNumberQualityTagged.go
index 96d1fe4fc..fa234f74a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkNumberQualityTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkNumberQualityTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetNetworkNumberQualityTagged) Serialize(writeBuffer utils.WriteBuf
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNetworkNumberQualityTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetNetworkNumberQualityTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetNetworkNumberQualityTagged) isBACnetNetworkNumberQualityTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkPortCommandTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkPortCommandTagged.go
index fa6658be2..029ed3283 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkPortCommandTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkPortCommandTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetNetworkPortCommandTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNetworkPortCommandTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetNetworkPortCommandTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetNetworkPortCommandTagged) isBACnetNetworkPortCommandTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkTypeTagged.go
index aea1b9129..d5d34e4f0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNetworkTypeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetNetworkTypeTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNetworkTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetNetworkTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetNetworkTypeTagged) isBACnetNetworkTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNodeTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNodeTypeTagged.go
index 8a6ed2a78..d098cede2 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNodeTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNodeTypeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetNodeTypeTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNodeTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetNodeTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetNodeTypeTagged) isBACnetNodeTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go
index f8fc68038..c5c2278aa 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go
@@ -316,6 +316,19 @@ func (pm *_BACnetNotificationParameters) SerializeParent(writeBuffer utils.Write
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNotificationParameters) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetNotificationParameters) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetNotificationParameters) isBACnetNotificationParameters() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go
index 1bd9df38f..e192ce11f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go
@@ -317,6 +317,16 @@ func (pm *_BACnetNotificationParametersChangeOfDiscreteValueNewValue) SerializeP
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNotificationParametersChangeOfDiscreteValueNewValue) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetNotificationParametersChangeOfDiscreteValueNewValue) isBACnetNotificationParametersChangeOfDiscreteValueNewValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
index e18cabe24..2194200a0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
@@ -279,6 +279,16 @@ func (pm *_BACnetNotificationParametersChangeOfValueNewValue) SerializeParent(wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNotificationParametersChangeOfValueNewValue) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetNotificationParametersChangeOfValueNewValue) isBACnetNotificationParametersChangeOfValueNewValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersExtendedParameters.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersExtendedParameters.go
index 43d8b6d0c..fa5478bea 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersExtendedParameters.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersExtendedParameters.go
@@ -1051,6 +1051,16 @@ func (m *_BACnetNotificationParametersExtendedParameters) Serialize(writeBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNotificationParametersExtendedParameters) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetNotificationParametersExtendedParameters) isBACnetNotificationParametersExtendedParameters() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotifyTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotifyTypeTagged.go
index d4a6c3d0c..ed2b417f6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotifyTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotifyTypeTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetNotifyTypeTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetNotifyTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetNotifyTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetNotifyTypeTagged) isBACnetNotifyTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectPropertyReferenceEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectPropertyReferenceEnclosed.go
index e908fdd4b..7c2225072 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectPropertyReferenceEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectPropertyReferenceEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetObjectPropertyReferenceEnclosed) Serialize(writeBuffer utils.Wri
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetObjectPropertyReferenceEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetObjectPropertyReferenceEnclosed) isBACnetObjectPropertyReferenceEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypeTagged.go
index 7e484f22c..30017491f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypeTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetObjectTypeTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetObjectTypeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetObjectTypeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetObjectTypeTagged) isBACnetObjectTypeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypesSupportedTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypesSupportedTagged.go
index f63ca8c60..efdc6d959 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypesSupportedTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetObjectTypesSupportedTagged.go
@@ -380,6 +380,19 @@ func (m *_BACnetObjectTypesSupportedTagged) Serialize(writeBuffer utils.WriteBuf
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetObjectTypesSupportedTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetObjectTypesSupportedTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetObjectTypesSupportedTagged) isBACnetObjectTypesSupportedTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetOpeningTag.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetOpeningTag.go
index ec7182aac..bb7150985 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetOpeningTag.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetOpeningTag.go
@@ -170,6 +170,16 @@ func (m *_BACnetOpeningTag) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetOpeningTag) GetTagNumberArgument() uint8 {
+	return m.TagNumberArgument
+}
+
+//
+////
+
 func (m *_BACnetOpeningTag) isBACnetOpeningTag() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPolarityTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPolarityTagged.go
index cb1d92fa0..da77b7efc 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPolarityTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPolarityTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetPolarityTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPolarityTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetPolarityTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetPolarityTagged) isBACnetPolarityTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityArray.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityArray.go
index 4bd3718be..ff06ed57b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityArray.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityArray.go
@@ -597,6 +597,22 @@ func (m *_BACnetPriorityArray) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPriorityArray) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+func (m *_BACnetPriorityArray) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetPriorityArray) GetArrayIndexArgument() BACnetTagPayloadUnsignedInteger {
+	return m.ArrayIndexArgument
+}
+
+//
+////
+
 func (m *_BACnetPriorityArray) isBACnetPriorityArray() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go
index 3d25ace65..ba4b3591d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go
@@ -257,6 +257,16 @@ func (pm *_BACnetPriorityValue) SerializeParent(writeBuffer utils.WriteBuffer, c
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPriorityValue) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetPriorityValue) isBACnetPriorityValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramErrorTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramErrorTagged.go
index 2d2a7be7c..5ae791e37 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramErrorTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramErrorTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetProgramErrorTagged) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetProgramErrorTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetProgramErrorTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetProgramErrorTagged) isBACnetProgramErrorTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramRequestTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramRequestTagged.go
index f3e6adc06..9ed508ffe 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramRequestTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramRequestTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetProgramRequestTagged) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetProgramRequestTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetProgramRequestTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetProgramRequestTagged) isBACnetProgramRequestTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramStateTagged.go
index a8eb86bf6..6e1ff738c 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetProgramStateTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetProgramStateTagged) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetProgramStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetProgramStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetProgramStateTagged) isBACnetProgramStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go
index c5cca2dd1..f78da2dd6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go
@@ -211,6 +211,22 @@ func (pm *_BACnetPropertyAccessResultAccessResult) SerializeParent(writeBuffer u
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyAccessResultAccessResult) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+func (m *_BACnetPropertyAccessResultAccessResult) GetPropertyIdentifierArgument() BACnetPropertyIdentifier {
+	return m.PropertyIdentifierArgument
+}
+func (m *_BACnetPropertyAccessResultAccessResult) GetPropertyArrayIndexArgument() BACnetTagPayloadUnsignedInteger {
+	return m.PropertyArrayIndexArgument
+}
+
+//
+////
+
 func (m *_BACnetPropertyAccessResultAccessResult) isBACnetPropertyAccessResultAccessResult() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyIdentifierTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyIdentifierTagged.go
index 59763d48b..bfe609c44 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyIdentifierTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyIdentifierTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetPropertyIdentifierTagged) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyIdentifierTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetPropertyIdentifierTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetPropertyIdentifierTagged) isBACnetPropertyIdentifierTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyReferenceEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyReferenceEnclosed.go
index 79e7f1766..ff3a4a279 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyReferenceEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyReferenceEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetPropertyReferenceEnclosed) Serialize(writeBuffer utils.WriteBuff
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyReferenceEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetPropertyReferenceEnclosed) isBACnetPropertyReferenceEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStatesEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStatesEnclosed.go
index 55c32cd6c..93312731f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStatesEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStatesEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetPropertyStatesEnclosed) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyStatesEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetPropertyStatesEnclosed) isBACnetPropertyStatesEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValue.go
index cc07e24fe..6ea56aa04 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValue.go
@@ -307,6 +307,16 @@ func (m *_BACnetPropertyValue) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyValue) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetPropertyValue) isBACnetPropertyValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValues.go
index 37c9d437d..3a7e79cb1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyValues.go
@@ -239,6 +239,19 @@ func (m *_BACnetPropertyValues) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetPropertyValues) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetPropertyValues) isBACnetPropertyValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyWriteDefinition.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyWriteDefinition.go
index a7cf987fc..eef7676c0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyWriteDefinition.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyWriteDefinition.go
@@ -307,6 +307,16 @@ func (m *_BACnetPropertyWriteDefinition) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetPropertyWriteDefinition) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetPropertyWriteDefinition) isBACnetPropertyWriteDefinition() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetProtocolLevelTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetProtocolLevelTagged.go
index 6d0ce1ba7..9e895867a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetProtocolLevelTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetProtocolLevelTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetProtocolLevelTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetProtocolLevelTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetProtocolLevelTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetProtocolLevelTagged) isBACnetProtocolLevelTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessProperty.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessProperty.go
index 17a0d0e84..319543794 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessProperty.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessProperty.go
@@ -257,6 +257,16 @@ func (m *_BACnetReadAccessProperty) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetReadAccessProperty) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetReadAccessProperty) isBACnetReadAccessProperty() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessPropertyReadResult.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessPropertyReadResult.go
index 86f022f86..e60130a5f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessPropertyReadResult.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessPropertyReadResult.go
@@ -284,6 +284,22 @@ func (m *_BACnetReadAccessPropertyReadResult) Serialize(writeBuffer utils.WriteB
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetReadAccessPropertyReadResult) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+func (m *_BACnetReadAccessPropertyReadResult) GetPropertyIdentifierArgument() BACnetPropertyIdentifier {
+	return m.PropertyIdentifierArgument
+}
+func (m *_BACnetReadAccessPropertyReadResult) GetArrayIndexArgument() BACnetTagPayloadUnsignedInteger {
+	return m.ArrayIndexArgument
+}
+
+//
+////
+
 func (m *_BACnetReadAccessPropertyReadResult) isBACnetReadAccessPropertyReadResult() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessResultListOfResults.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessResultListOfResults.go
index 329461962..87bf49d2f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessResultListOfResults.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetReadAccessResultListOfResults.go
@@ -239,6 +239,19 @@ func (m *_BACnetReadAccessResultListOfResults) Serialize(writeBuffer utils.Write
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetReadAccessResultListOfResults) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetReadAccessResultListOfResults) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetReadAccessResultListOfResults) isBACnetReadAccessResultListOfResults() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientEnclosed.go
index 662f69611..a93e77ea9 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetRecipientEnclosed) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetRecipientEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetRecipientEnclosed) isBACnetRecipientEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientProcessEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientProcessEnclosed.go
index 70a72b328..fde0dc3c4 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientProcessEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipientProcessEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetRecipientProcessEnclosed) Serialize(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetRecipientProcessEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetRecipientProcessEnclosed) isBACnetRecipientProcessEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRejectReasonTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRejectReasonTagged.go
index 6ed06b121..6303988a9 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRejectReasonTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRejectReasonTagged.go
@@ -198,6 +198,16 @@ func (m *_BACnetRejectReasonTagged) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetRejectReasonTagged) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetRejectReasonTagged) isBACnetRejectReasonTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRelationshipTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRelationshipTagged.go
index b2b59273f..1926c4e01 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRelationshipTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRelationshipTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetRelationshipTagged) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetRelationshipTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetRelationshipTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetRelationshipTagged) isBACnetRelationshipTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetReliabilityTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetReliabilityTagged.go
index 62e895789..293cb57ea 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetReliabilityTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetReliabilityTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetReliabilityTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetReliabilityTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetReliabilityTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetReliabilityTagged) isBACnetReliabilityTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRestartReasonTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRestartReasonTagged.go
index 0e01cb745..fac21bc56 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRestartReasonTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRestartReasonTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetRestartReasonTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetRestartReasonTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetRestartReasonTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetRestartReasonTagged) isBACnetRestartReasonTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetResultFlagsTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetResultFlagsTagged.go
index 97ba8d58b..c81fdf5ac 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetResultFlagsTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetResultFlagsTagged.go
@@ -261,6 +261,19 @@ func (m *_BACnetResultFlagsTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetResultFlagsTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetResultFlagsTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetResultFlagsTagged) isBACnetResultFlagsTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRouterEntryStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRouterEntryStatusTagged.go
index d17c83726..24757a403 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRouterEntryStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRouterEntryStatusTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetRouterEntryStatusTagged) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetRouterEntryStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetRouterEntryStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetRouterEntryStatusTagged) isBACnetRouterEntryStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityKeySetKeyIds.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityKeySetKeyIds.go
index 4a49f85ea..e12da9a1d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityKeySetKeyIds.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityKeySetKeyIds.go
@@ -238,6 +238,16 @@ func (m *_BACnetSecurityKeySetKeyIds) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetSecurityKeySetKeyIds) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetSecurityKeySetKeyIds) isBACnetSecurityKeySetKeyIds() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityLevelTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityLevelTagged.go
index ee640d26f..28613a77f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityLevelTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityLevelTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetSecurityLevelTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetSecurityLevelTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetSecurityLevelTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetSecurityLevelTagged) isBACnetSecurityLevelTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityPolicyTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityPolicyTagged.go
index 730b9c2ce..c653074fe 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityPolicyTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSecurityPolicyTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetSecurityPolicyTagged) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetSecurityPolicyTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetSecurityPolicyTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetSecurityPolicyTagged) isBACnetSecurityPolicyTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSegmentationTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSegmentationTagged.go
index 57331f658..84ec1507b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSegmentationTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSegmentationTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetSegmentationTagged) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetSegmentationTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetSegmentationTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetSegmentationTagged) isBACnetSegmentationTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go
index c40ccb7da..fff969c54 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -243,6 +243,16 @@ func (pm *_BACnetServiceAck) SerializeParent(writeBuffer utils.WriteBuffer, chil
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetServiceAck) GetServiceAckLength() uint16 {
+	return m.ServiceAckLength
+}
+
+//
+////
+
 func (m *_BACnetServiceAck) isBACnetServiceAck() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAuthenticate.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAuthenticate.go
index 007863219..366b8ac55 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAuthenticate.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAuthenticate.go
@@ -181,6 +181,16 @@ func (m *_BACnetServiceAckAuthenticate) Serialize(writeBuffer utils.WriteBuffer)
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetServiceAckAuthenticate) GetServiceAckPayloadLength() uint16 {
+	return m.ServiceAckPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetServiceAckAuthenticate) isBACnetServiceAckAuthenticate() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyConditional.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyConditional.go
index 064fd04d4..d75a76597 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyConditional.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyConditional.go
@@ -181,6 +181,16 @@ func (m *_BACnetServiceAckReadPropertyConditional) Serialize(writeBuffer utils.W
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetServiceAckReadPropertyConditional) GetServiceAckPayloadLength() uint16 {
+	return m.ServiceAckPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetServiceAckReadPropertyConditional) isBACnetServiceAckReadPropertyConditional() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index 30afc0278..f77384a8b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -206,6 +206,16 @@ func (m *_BACnetServiceAckReadPropertyMultiple) Serialize(writeBuffer utils.Writ
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetServiceAckReadPropertyMultiple) GetServiceAckPayloadLength() uint16 {
+	return m.ServiceAckPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetServiceAckReadPropertyMultiple) isBACnetServiceAckReadPropertyMultiple() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckRequestKey.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckRequestKey.go
index 0af434dcb..ac6be7b61 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckRequestKey.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckRequestKey.go
@@ -181,6 +181,16 @@ func (m *_BACnetServiceAckRequestKey) Serialize(writeBuffer utils.WriteBuffer) e
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetServiceAckRequestKey) GetServiceAckPayloadLength() uint16 {
+	return m.ServiceAckPayloadLength
+}
+
+//
+////
+
 func (m *_BACnetServiceAckRequestKey) isBACnetServiceAckRequestKey() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServicesSupportedTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServicesSupportedTagged.go
index b9593984b..8cb59fa17 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServicesSupportedTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServicesSupportedTagged.go
@@ -380,6 +380,19 @@ func (m *_BACnetServicesSupportedTagged) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetServicesSupportedTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetServicesSupportedTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetServicesSupportedTagged) isBACnetServicesSupportedTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetShedStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetShedStateTagged.go
index a8e7fdc9e..d5f0aa000 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetShedStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetShedStateTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetShedStateTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetShedStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetShedStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetShedStateTagged) isBACnetShedStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSilencedStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSilencedStateTagged.go
index ee9604dc9..14d68bfa1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSilencedStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSilencedStateTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetSilencedStateTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetSilencedStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetSilencedStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetSilencedStateTagged) isBACnetSilencedStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventListOfTimeValues.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventListOfTimeValues.go
index 6a58f749c..2d0d3d9a9 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventListOfTimeValues.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventListOfTimeValues.go
@@ -238,6 +238,16 @@ func (m *_BACnetSpecialEventListOfTimeValues) Serialize(writeBuffer utils.WriteB
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetSpecialEventListOfTimeValues) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetSpecialEventListOfTimeValues) isBACnetSpecialEventListOfTimeValues() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetStatusFlagsTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetStatusFlagsTagged.go
index d1ea3d06e..8d1f972ad 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetStatusFlagsTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetStatusFlagsTagged.go
@@ -278,6 +278,19 @@ func (m *_BACnetStatusFlagsTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetStatusFlagsTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetStatusFlagsTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetStatusFlagsTagged) isBACnetStatusFlagsTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBitString.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBitString.go
index 40d749533..0ebc6a6e0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBitString.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBitString.go
@@ -242,6 +242,16 @@ func (m *_BACnetTagPayloadBitString) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadBitString) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadBitString) isBACnetTagPayloadBitString() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBoolean.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBoolean.go
index 2ab27380c..7fa8d985a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBoolean.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadBoolean.go
@@ -171,6 +171,16 @@ func (m *_BACnetTagPayloadBoolean) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadBoolean) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadBoolean) isBACnetTagPayloadBoolean() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadCharacterString.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadCharacterString.go
index 184a93ca5..707fa7b00 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadCharacterString.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadCharacterString.go
@@ -205,6 +205,16 @@ func (m *_BACnetTagPayloadCharacterString) Serialize(writeBuffer utils.WriteBuff
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadCharacterString) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadCharacterString) isBACnetTagPayloadCharacterString() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadEnumerated.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadEnumerated.go
index 57ac87815..d7c4f63d3 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadEnumerated.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadEnumerated.go
@@ -170,6 +170,16 @@ func (m *_BACnetTagPayloadEnumerated) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadEnumerated) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadEnumerated) isBACnetTagPayloadEnumerated() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadOctetString.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadOctetString.go
index 43fb2002a..b62ed2484 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadOctetString.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadOctetString.go
@@ -144,6 +144,16 @@ func (m *_BACnetTagPayloadOctetString) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadOctetString) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadOctetString) isBACnetTagPayloadOctetString() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadSignedInteger.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadSignedInteger.go
index 1933889a1..a57ac1f5f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadSignedInteger.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadSignedInteger.go
@@ -711,6 +711,16 @@ func (m *_BACnetTagPayloadSignedInteger) Serialize(writeBuffer utils.WriteBuffer
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadSignedInteger) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadSignedInteger) isBACnetTagPayloadSignedInteger() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadUnsignedInteger.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadUnsignedInteger.go
index f13754aab..4d0b285e1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadUnsignedInteger.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTagPayloadUnsignedInteger.go
@@ -711,6 +711,16 @@ func (m *_BACnetTagPayloadUnsignedInteger) Serialize(writeBuffer utils.WriteBuff
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTagPayloadUnsignedInteger) GetActualLength() uint32 {
+	return m.ActualLength
+}
+
+//
+////
+
 func (m *_BACnetTagPayloadUnsignedInteger) isBACnetTagPayloadUnsignedInteger() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampEnclosed.go
index d8c6c9b10..05511dc8d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampEnclosed.go
@@ -225,6 +225,16 @@ func (m *_BACnetTimeStampEnclosed) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTimeStampEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetTimeStampEnclosed) isBACnetTimeStampEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampsEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampsEnclosed.go
index f47418ae1..4b56aa683 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampsEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStampsEnclosed.go
@@ -238,6 +238,16 @@ func (m *_BACnetTimeStampsEnclosed) Serialize(writeBuffer utils.WriteBuffer) err
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTimeStampsEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_BACnetTimeStampsEnclosed) isBACnetTimeStampsEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go
index 53f115b37..a238290a0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go
@@ -261,6 +261,16 @@ func (pm *_BACnetTimerStateChangeValue) SerializeParent(writeBuffer utils.WriteB
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTimerStateChangeValue) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_BACnetTimerStateChangeValue) isBACnetTimerStateChangeValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateTagged.go
index 1a0167b59..3c510eaf4 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetTimerStateTagged) Serialize(writeBuffer utils.WriteBuffer) error
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTimerStateTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetTimerStateTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetTimerStateTagged) isBACnetTimerStateTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerTransitionTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerTransitionTagged.go
index 6d4a90ecb..0276c8d25 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerTransitionTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerTransitionTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetTimerTransitionTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetTimerTransitionTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetTimerTransitionTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetTimerTransitionTagged) isBACnetTimerTransitionTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceChoiceTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceChoiceTagged.go
index 65667bbf8..afda24fd1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceChoiceTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceChoiceTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetUnconfirmedServiceChoiceTagged) Serialize(writeBuffer utils.Writ
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetUnconfirmedServiceChoiceTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetUnconfirmedServiceChoiceTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetUnconfirmedServiceChoiceTagged) isBACnetUnconfirmedServiceChoiceTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index a579c1f12..20c41726f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -212,6 +212,16 @@ func (pm *_BACnetUnconfirmedServiceRequest) SerializeParent(writeBuffer utils.Wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetUnconfirmedServiceRequest) GetServiceRequestLength() uint16 {
+	return m.ServiceRequestLength
+}
+
+//
+////
+
 func (m *_BACnetUnconfirmedServiceRequest) isBACnetUnconfirmedServiceRequest() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetVTClassTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetVTClassTagged.go
index 2b4ee5973..3202910ae 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetVTClassTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetVTClassTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetVTClassTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetVTClassTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetVTClassTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetVTClassTagged) isBACnetVTClassTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorIdTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorIdTagged.go
index 18c4e5514..5742bbd7a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorIdTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorIdTagged.go
@@ -244,6 +244,19 @@ func (m *_BACnetVendorIdTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetVendorIdTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetVendorIdTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetVendorIdTagged) isBACnetVendorIdTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetWeekNDayTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetWeekNDayTagged.go
index 4ef4ced51..26f6a6e53 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetWeekNDayTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetWeekNDayTagged.go
@@ -490,6 +490,19 @@ func (m *_BACnetWeekNDayTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetWeekNDayTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetWeekNDayTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetWeekNDayTagged) isBACnetWeekNDayTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetWriteStatusTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetWriteStatusTagged.go
index cf5cdedae..8902499e1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetWriteStatusTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetWriteStatusTagged.go
@@ -192,6 +192,19 @@ func (m *_BACnetWriteStatusTagged) Serialize(writeBuffer utils.WriteBuffer) erro
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BACnetWriteStatusTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BACnetWriteStatusTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BACnetWriteStatusTagged) isBACnetWriteStatusTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index 62694e69d..65fc09bf1 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -190,6 +190,16 @@ func (m *_BVLCDistributeBroadcastToNetwork) Serialize(writeBuffer utils.WriteBuf
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCDistributeBroadcastToNetwork) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCDistributeBroadcastToNetwork) isBVLCDistributeBroadcastToNetwork() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index 145854680..3d374e2e8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -267,6 +267,16 @@ func (m *_BVLCForwardedNPDU) Serialize(writeBuffer utils.WriteBuffer) error {
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCForwardedNPDU) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCForwardedNPDU) isBVLCForwardedNPDU() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index c2736b438..f0ab16891 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -190,6 +190,16 @@ func (m *_BVLCOriginalBroadcastNPDU) Serialize(writeBuffer utils.WriteBuffer) er
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCOriginalBroadcastNPDU) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCOriginalBroadcastNPDU) isBVLCOriginalBroadcastNPDU() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index 98cff53eb..ad703f3b0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -190,6 +190,16 @@ func (m *_BVLCOriginalUnicastNPDU) Serialize(writeBuffer utils.WriteBuffer) erro
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCOriginalUnicastNPDU) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCOriginalUnicastNPDU) isBVLCOriginalUnicastNPDU() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index 59621c5b1..1db8b501f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -204,6 +204,16 @@ func (m *_BVLCReadBroadcastDistributionTableAck) Serialize(writeBuffer utils.Wri
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCReadBroadcastDistributionTableAck) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCReadBroadcastDistributionTableAck) isBVLCReadBroadcastDistributionTableAck() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index 188960d04..8bf5edbaf 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -204,6 +204,16 @@ func (m *_BVLCReadForeignDeviceTableAck) Serialize(writeBuffer utils.WriteBuffer
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCReadForeignDeviceTableAck) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCReadForeignDeviceTableAck) isBVLCReadForeignDeviceTableAck() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCResultCodeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCResultCodeTagged.go
index 9b52c1b10..ca2a77c87 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCResultCodeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCResultCodeTagged.go
@@ -192,6 +192,19 @@ func (m *_BVLCResultCodeTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCResultCodeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_BVLCResultCodeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_BVLCResultCodeTagged) isBVLCResultCodeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCSecureBVLL.go
index 72b041c2e..3fb58e054 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -179,6 +179,16 @@ func (m *_BVLCSecureBVLL) Serialize(writeBuffer utils.WriteBuffer) error {
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCSecureBVLL) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCSecureBVLL) isBVLCSecureBVLL() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go b/plc4go/protocols/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
index b0e1367ba..48c0e0511 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
@@ -204,6 +204,16 @@ func (m *_BVLCWriteBroadcastDistributionTable) Serialize(writeBuffer utils.Write
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_BVLCWriteBroadcastDistributionTable) GetBvlcPayloadLength() uint16 {
+	return m.BvlcPayloadLength
+}
+
+//
+////
+
 func (m *_BVLCWriteBroadcastDistributionTable) isBVLCWriteBroadcastDistributionTable() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/ErrorClassTagged.go b/plc4go/protocols/bacnetip/readwrite/model/ErrorClassTagged.go
index 3b94937da..517cee18f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/ErrorClassTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/ErrorClassTagged.go
@@ -244,6 +244,19 @@ func (m *_ErrorClassTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ErrorClassTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_ErrorClassTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_ErrorClassTagged) isErrorClassTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/ErrorCodeTagged.go b/plc4go/protocols/bacnetip/readwrite/model/ErrorCodeTagged.go
index 5c3ebb019..7b01f138d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/ErrorCodeTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/ErrorCodeTagged.go
@@ -244,6 +244,19 @@ func (m *_ErrorCodeTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ErrorCodeTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_ErrorCodeTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_ErrorCodeTagged) isErrorCodeTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/ErrorEnclosed.go b/plc4go/protocols/bacnetip/readwrite/model/ErrorEnclosed.go
index b7cd43531..161a086b8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/ErrorEnclosed.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/ErrorEnclosed.go
@@ -225,6 +225,16 @@ func (m *_ErrorEnclosed) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ErrorEnclosed) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_ErrorEnclosed) isErrorEnclosed() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsList.go b/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsList.go
index f7b09374d..1714471c5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsList.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsList.go
@@ -238,6 +238,16 @@ func (m *_ListOfCovNotificationsList) Serialize(writeBuffer utils.WriteBuffer) e
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ListOfCovNotificationsList) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_ListOfCovNotificationsList) isListOfCovNotificationsList() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsValue.go b/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsValue.go
index 05140e8cb..c45ae2f64 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/ListOfCovNotificationsValue.go
@@ -292,6 +292,16 @@ func (m *_ListOfCovNotificationsValue) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ListOfCovNotificationsValue) GetObjectTypeArgument() BACnetObjectType {
+	return m.ObjectTypeArgument
+}
+
+//
+////
+
 func (m *_ListOfCovNotificationsValue) isListOfCovNotificationsValue() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/MaxApduLengthAcceptedTagged.go b/plc4go/protocols/bacnetip/readwrite/model/MaxApduLengthAcceptedTagged.go
index f6f81ee2d..35ab74002 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/MaxApduLengthAcceptedTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/MaxApduLengthAcceptedTagged.go
@@ -192,6 +192,19 @@ func (m *_MaxApduLengthAcceptedTagged) Serialize(writeBuffer utils.WriteBuffer)
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_MaxApduLengthAcceptedTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_MaxApduLengthAcceptedTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_MaxApduLengthAcceptedTagged) isMaxApduLengthAcceptedTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/MaxSegmentsAcceptedTagged.go b/plc4go/protocols/bacnetip/readwrite/model/MaxSegmentsAcceptedTagged.go
index 9cbdab8bf..e9949859a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/MaxSegmentsAcceptedTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/MaxSegmentsAcceptedTagged.go
@@ -192,6 +192,19 @@ func (m *_MaxSegmentsAcceptedTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_MaxSegmentsAcceptedTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_MaxSegmentsAcceptedTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_MaxSegmentsAcceptedTagged) isMaxSegmentsAcceptedTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/NLM.go b/plc4go/protocols/bacnetip/readwrite/model/NLM.go
index 9701d3e15..659f012f3 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/NLM.go
@@ -247,6 +247,16 @@ func (pm *_NLM) SerializeParent(writeBuffer utils.WriteBuffer, child NLM, serial
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_NLM) GetApduLength() uint16 {
+	return m.ApduLength
+}
+
+//
+////
+
 func (m *_NLM) isNLM() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/NPDU.go b/plc4go/protocols/bacnetip/readwrite/model/NPDU.go
index 8feb973f0..eaefa2520 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/NPDU.go
@@ -646,6 +646,16 @@ func (m *_NPDU) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_NPDU) GetNpduLength() uint16 {
+	return m.NpduLength
+}
+
+//
+////
+
 func (m *_NPDU) isNPDU() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/NPDUNetworkPriorityTagged.go b/plc4go/protocols/bacnetip/readwrite/model/NPDUNetworkPriorityTagged.go
index 0cca39a42..3e1aee882 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/NPDUNetworkPriorityTagged.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/NPDUNetworkPriorityTagged.go
@@ -192,6 +192,19 @@ func (m *_NPDUNetworkPriorityTagged) Serialize(writeBuffer utils.WriteBuffer) er
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_NPDUNetworkPriorityTagged) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+func (m *_NPDUNetworkPriorityTagged) GetTagClass() TagClass {
+	return m.TagClass
+}
+
+//
+////
+
 func (m *_NPDUNetworkPriorityTagged) isNPDUNetworkPriorityTagged() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/SubscribeCOVPropertyMultipleErrorFirstFailedSubscription.go b/plc4go/protocols/bacnetip/readwrite/model/SubscribeCOVPropertyMultipleErrorFirstFailedSubscription.go
index fdda0d000..2244d008e 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/SubscribeCOVPropertyMultipleErrorFirstFailedSubscription.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/SubscribeCOVPropertyMultipleErrorFirstFailedSubscription.go
@@ -295,6 +295,16 @@ func (m *_SubscribeCOVPropertyMultipleErrorFirstFailedSubscription) Serialize(wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_SubscribeCOVPropertyMultipleErrorFirstFailedSubscription) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_SubscribeCOVPropertyMultipleErrorFirstFailedSubscription) isSubscribeCOVPropertyMultipleErrorFirstFailedSubscription() bool {
 	return true
 }
diff --git a/plc4go/protocols/bacnetip/readwrite/model/VTCloseErrorListOfVTSessionIdentifiers.go b/plc4go/protocols/bacnetip/readwrite/model/VTCloseErrorListOfVTSessionIdentifiers.go
index 3f72cd602..0f44bf299 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/VTCloseErrorListOfVTSessionIdentifiers.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/VTCloseErrorListOfVTSessionIdentifiers.go
@@ -238,6 +238,16 @@ func (m *_VTCloseErrorListOfVTSessionIdentifiers) Serialize(writeBuffer utils.Wr
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_VTCloseErrorListOfVTSessionIdentifiers) GetTagNumber() uint8 {
+	return m.TagNumber
+}
+
+//
+////
+
 func (m *_VTCloseErrorListOfVTSessionIdentifiers) isVTCloseErrorListOfVTSessionIdentifiers() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/ParserHelper.go b/plc4go/protocols/cbus/readwrite/ParserHelper.go
index 4a1e89cad..cbb811509 100644
--- a/plc4go/protocols/cbus/readwrite/ParserHelper.go
+++ b/plc4go/protocols/cbus/readwrite/ParserHelper.go
@@ -34,6 +34,83 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 	switch typeName {
 	case "HVACStatusFlags":
 		return model.HVACStatusFlagsParse(io)
+	case "ParameterValue":
+		parameterType, _ := model.ParameterTypeByName(arguments[0])
+		numBytes, err := utils.StrToUint8(arguments[1])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.ParameterValueParse(io, parameterType, numBytes)
+	case "ReplyOrConfirmation":
+		var cBusOptions model.CBusOptions
+		var requestContext model.RequestContext
+		return model.ReplyOrConfirmationParse(io, cBusOptions, requestContext)
+	case "CBusOptions":
+		return model.CBusOptionsParse(io)
+	case "TemperatureBroadcastData":
+		return model.TemperatureBroadcastDataParse(io)
+	case "PanicStatus":
+		return model.PanicStatusParse(io)
+	case "IdentifyReplyCommandUnitSummary":
+		return model.IdentifyReplyCommandUnitSummaryParse(io)
+	case "InterfaceOptions1PowerUpSettings":
+		return model.InterfaceOptions1PowerUpSettingsParse(io)
+	case "MonitoredSAL":
+		var cBusOptions model.CBusOptions
+		return model.MonitoredSALParse(io, cBusOptions)
+	case "ReplyNetwork":
+		return model.ReplyNetworkParse(io)
+	case "SerialNumber":
+		return model.SerialNumberParse(io)
+	case "CBusPointToMultiPointCommand":
+		var cBusOptions model.CBusOptions
+		return model.CBusPointToMultiPointCommandParse(io, cBusOptions)
+	case "StatusRequest":
+		return model.StatusRequestParse(io)
+	case "InterfaceOptions3":
+		return model.InterfaceOptions3Parse(io)
+	case "InterfaceOptions1":
+		return model.InterfaceOptions1Parse(io)
+	case "InterfaceOptions2":
+		return model.InterfaceOptions2Parse(io)
+	case "HVACModeAndFlags":
+		return model.HVACModeAndFlagsParse(io)
+	case "LightingData":
+		return model.LightingDataParse(io)
+	case "SALData":
+		applicationId, _ := model.ApplicationIdByName(arguments[0])
+		return model.SALDataParse(io, applicationId)
+	case "CBusCommand":
+		var cBusOptions model.CBusOptions
+		return model.CBusCommandParse(io, cBusOptions)
+	case "HVACHumidity":
+		return model.HVACHumidityParse(io)
+	case "HVACHumidityModeAndFlags":
+		return model.HVACHumidityModeAndFlagsParse(io)
+	case "CBusConstants":
+		return model.CBusConstantsParse(io)
+	case "SerialInterfaceAddress":
+		return model.SerialInterfaceAddressParse(io)
+	case "MeasurementData":
+		return model.MeasurementDataParse(io)
+	case "HVACZoneList":
+		return model.HVACZoneListParse(io)
+	case "MediaTransportControlData":
+		return model.MediaTransportControlDataParse(io)
+	case "StatusByte":
+		return model.StatusByteParse(io)
+	case "ExtendedStatusHeader":
+		return model.ExtendedStatusHeaderParse(io)
+	case "TriggerControlLabelOptions":
+		return model.TriggerControlLabelOptionsParse(io)
+	case "HVACAuxiliaryLevel":
+		return model.HVACAuxiliaryLevelParse(io)
+	case "ErrorReportingData":
+		return model.ErrorReportingDataParse(io)
+	case "UnitAddress":
+		return model.UnitAddressParse(io)
+	case "SecurityArmCode":
+		return model.SecurityArmCodeParse(io)
 	case "MeteringData":
 		return model.MeteringDataParse(io)
 	case "EnableControlData":
@@ -52,10 +129,6 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		return model.HVACTemperatureParse(io)
 	case "RequestTermination":
 		return model.RequestTerminationParse(io)
-	case "ReplyOrConfirmation":
-		var cBusOptions model.CBusOptions
-		var requestContext model.RequestContext
-		return model.ReplyOrConfirmationParse(io, cBusOptions, requestContext)
 	case "CBusMessage":
 		isResponse, err := utils.StrToBool(arguments[0])
 		if err != nil {
@@ -64,16 +137,8 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		var requestContext model.RequestContext
 		var cBusOptions model.CBusOptions
 		return model.CBusMessageParse(io, isResponse, requestContext, cBusOptions)
-	case "CBusOptions":
-		return model.CBusOptionsParse(io)
-	case "TemperatureBroadcastData":
-		return model.TemperatureBroadcastDataParse(io)
 	case "ErrorReportingSystemCategory":
 		return model.ErrorReportingSystemCategoryParse(io)
-	case "PanicStatus":
-		return model.PanicStatusParse(io)
-	case "IdentifyReplyCommandUnitSummary":
-		return model.IdentifyReplyCommandUnitSummaryParse(io)
 	case "PowerUp":
 		return model.PowerUpParse(io)
 	case "Reply":
@@ -84,33 +149,13 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		return model.TelephonyDataParse(io)
 	case "HVACHumidityStatusFlags":
 		return model.HVACHumidityStatusFlagsParse(io)
-	case "InterfaceOptions1PowerUpSettings":
-		return model.InterfaceOptions1PowerUpSettingsParse(io)
-	case "MonitoredSAL":
-		var cBusOptions model.CBusOptions
-		return model.MonitoredSALParse(io, cBusOptions)
 	case "ParameterChange":
 		return model.ParameterChangeParse(io)
-	case "ReplyNetwork":
-		return model.ReplyNetworkParse(io)
-	case "SerialNumber":
-		return model.SerialNumberParse(io)
 	case "ErrorReportingSystemCategoryType":
 		errorReportingSystemCategoryClass, _ := model.ErrorReportingSystemCategoryClassByName(arguments[0])
 		return model.ErrorReportingSystemCategoryTypeParse(io, errorReportingSystemCategoryClass)
 	case "Confirmation":
 		return model.ConfirmationParse(io)
-	case "CBusPointToMultiPointCommand":
-		var cBusOptions model.CBusOptions
-		return model.CBusPointToMultiPointCommandParse(io, cBusOptions)
-	case "StatusRequest":
-		return model.StatusRequestParse(io)
-	case "InterfaceOptions3":
-		return model.InterfaceOptions3Parse(io)
-	case "InterfaceOptions1":
-		return model.InterfaceOptions1Parse(io)
-	case "InterfaceOptions2":
-		return model.InterfaceOptions2Parse(io)
 	case "SecurityData":
 		return model.SecurityDataParse(io)
 	case "NetworkProtocolControlInformation":
@@ -120,8 +165,6 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 	case "Request":
 		var cBusOptions model.CBusOptions
 		return model.RequestParse(io, cBusOptions)
-	case "HVACModeAndFlags":
-		return model.HVACModeAndFlagsParse(io)
 	case "Alpha":
 		return model.AlphaParse(io)
 	case "CALData":
@@ -134,9 +177,11 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		var requestContext model.RequestContext
 		return model.CALReplyParse(io, cBusOptions, requestContext)
 	case "CustomManufacturer":
-		return model.CustomManufacturerParse(io)
-	case "LightingData":
-		return model.LightingDataParse(io)
+		numBytes, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.CustomManufacturerParse(io, numBytes)
 	case "AccessControlData":
 		return model.AccessControlDataParse(io)
 	case "ClockAndTimekeepingData":
@@ -149,14 +194,8 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		return model.ResponseTerminationParse(io)
 	case "LevelInformation":
 		return model.LevelInformationParse(io)
-	case "SALData":
-		applicationId, _ := model.ApplicationIdByName(arguments[0])
-		return model.SALDataParse(io, applicationId)
 	case "TamperStatus":
 		return model.TamperStatusParse(io)
-	case "CBusCommand":
-		var cBusOptions model.CBusOptions
-		return model.CBusCommandParse(io, cBusOptions)
 	case "IdentifyReplyCommand":
 		attribute, _ := model.AttributeByName(arguments[0])
 		numBytes, err := utils.StrToUint8(arguments[1])
@@ -164,55 +203,31 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.IdentifyReplyCommandParse(io, attribute, numBytes)
-	case "HVACHumidity":
-		return model.HVACHumidityParse(io)
-	case "HVACHumidityModeAndFlags":
-		return model.HVACHumidityModeAndFlagsParse(io)
 	case "HVACRawLevels":
 		return model.HVACRawLevelsParse(io)
-	case "CBusConstants":
-		return model.CBusConstantsParse(io)
-	case "SerialInterfaceAddress":
-		return model.SerialInterfaceAddressParse(io)
-	case "MeasurementData":
-		return model.MeasurementDataParse(io)
-	case "HVACZoneList":
-		return model.HVACZoneListParse(io)
 	case "ZoneStatus":
 		return model.ZoneStatusParse(io)
 	case "BridgeAddress":
 		return model.BridgeAddressParse(io)
-	case "MediaTransportControlData":
-		return model.MediaTransportControlDataParse(io)
-	case "StatusByte":
-		return model.StatusByteParse(io)
 	case "LightingLabelOptions":
 		return model.LightingLabelOptionsParse(io)
-	case "ExtendedStatusHeader":
-		return model.ExtendedStatusHeaderParse(io)
 	case "CustomTypes":
-		return model.CustomTypesParse(io)
-	case "TriggerControlLabelOptions":
-		return model.TriggerControlLabelOptionsParse(io)
-	case "HVACAuxiliaryLevel":
-		return model.HVACAuxiliaryLevelParse(io)
+		numBytes, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.CustomTypesParse(io, numBytes)
 	case "StatusHeader":
 		return model.StatusHeaderParse(io)
 	case "EncodedReply":
 		var cBusOptions model.CBusOptions
 		var requestContext model.RequestContext
 		return model.EncodedReplyParse(io, cBusOptions, requestContext)
-	case "ErrorReportingData":
-		return model.ErrorReportingDataParse(io)
 	case "CBusPointToPointToMultiPointCommand":
 		var cBusOptions model.CBusOptions
 		return model.CBusPointToPointToMultiPointCommandParse(io, cBusOptions)
-	case "UnitAddress":
-		return model.UnitAddressParse(io)
 	case "ExtendedFormatStatusReply":
 		return model.ExtendedFormatStatusReplyParse(io)
-	case "SecurityArmCode":
-		return model.SecurityArmCodeParse(io)
 	case "CBusPointToPointCommand":
 		var cBusOptions model.CBusOptions
 		return model.CBusPointToPointCommandParse(io, cBusOptions)
diff --git a/plc4go/protocols/cbus/readwrite/XmlParserHelper.go b/plc4go/protocols/cbus/readwrite/XmlParserHelper.go
index c48a2fa3d..766f45cfa 100644
--- a/plc4go/protocols/cbus/readwrite/XmlParserHelper.go
+++ b/plc4go/protocols/cbus/readwrite/XmlParserHelper.go
@@ -44,6 +44,89 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 	switch typeName {
 	case "HVACStatusFlags":
 		return model.HVACStatusFlagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "ParameterValue":
+		parameterType, _ := model.ParameterTypeByName(parserArguments[0])
+		parsedUint1, err := strconv.ParseUint(parserArguments[1], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		numBytes := uint8(parsedUint1)
+		return model.ParameterValueParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), parameterType, numBytes)
+	case "ReplyOrConfirmation":
+		// TODO: find a way to parse the sub types
+		var cBusOptions model.CBusOptions
+		// TODO: find a way to parse the sub types
+		var requestContext model.RequestContext
+		return model.ReplyOrConfirmationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions, requestContext)
+	case "CBusOptions":
+		return model.CBusOptionsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "TemperatureBroadcastData":
+		return model.TemperatureBroadcastDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "PanicStatus":
+		return model.PanicStatusParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "IdentifyReplyCommandUnitSummary":
+		return model.IdentifyReplyCommandUnitSummaryParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "InterfaceOptions1PowerUpSettings":
+		return model.InterfaceOptions1PowerUpSettingsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "MonitoredSAL":
+		// TODO: find a way to parse the sub types
+		var cBusOptions model.CBusOptions
+		return model.MonitoredSALParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
+	case "ReplyNetwork":
+		return model.ReplyNetworkParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "SerialNumber":
+		return model.SerialNumberParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "CBusPointToMultiPointCommand":
+		// TODO: find a way to parse the sub types
+		var cBusOptions model.CBusOptions
+		return model.CBusPointToMultiPointCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
+	case "StatusRequest":
+		return model.StatusRequestParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "InterfaceOptions3":
+		return model.InterfaceOptions3Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "InterfaceOptions1":
+		return model.InterfaceOptions1Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "InterfaceOptions2":
+		return model.InterfaceOptions2Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "HVACModeAndFlags":
+		return model.HVACModeAndFlagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "LightingData":
+		return model.LightingDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "SALData":
+		applicationId, _ := model.ApplicationIdByName(parserArguments[0])
+		return model.SALDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), applicationId)
+	case "CBusCommand":
+		// TODO: find a way to parse the sub types
+		var cBusOptions model.CBusOptions
+		return model.CBusCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
+	case "HVACHumidity":
+		return model.HVACHumidityParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "HVACHumidityModeAndFlags":
+		return model.HVACHumidityModeAndFlagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "CBusConstants":
+		return model.CBusConstantsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "SerialInterfaceAddress":
+		return model.SerialInterfaceAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "MeasurementData":
+		return model.MeasurementDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "HVACZoneList":
+		return model.HVACZoneListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "MediaTransportControlData":
+		return model.MediaTransportControlDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "StatusByte":
+		return model.StatusByteParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "ExtendedStatusHeader":
+		return model.ExtendedStatusHeaderParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "TriggerControlLabelOptions":
+		return model.TriggerControlLabelOptionsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "HVACAuxiliaryLevel":
+		return model.HVACAuxiliaryLevelParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "ErrorReportingData":
+		return model.ErrorReportingDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "UnitAddress":
+		return model.UnitAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "SecurityArmCode":
+		return model.SecurityArmCodeParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "MeteringData":
 		return model.MeteringDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "EnableControlData":
@@ -62,12 +145,6 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		return model.HVACTemperatureParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "RequestTermination":
 		return model.RequestTerminationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "ReplyOrConfirmation":
-		// TODO: find a way to parse the sub types
-		var cBusOptions model.CBusOptions
-		// TODO: find a way to parse the sub types
-		var requestContext model.RequestContext
-		return model.ReplyOrConfirmationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions, requestContext)
 	case "CBusMessage":
 		isResponse := parserArguments[0] == "true"
 		// TODO: find a way to parse the sub types
@@ -75,16 +152,8 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
 		return model.CBusMessageParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), isResponse, requestContext, cBusOptions)
-	case "CBusOptions":
-		return model.CBusOptionsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "TemperatureBroadcastData":
-		return model.TemperatureBroadcastDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ErrorReportingSystemCategory":
 		return model.ErrorReportingSystemCategoryParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "PanicStatus":
-		return model.PanicStatusParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "IdentifyReplyCommandUnitSummary":
-		return model.IdentifyReplyCommandUnitSummaryParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "PowerUp":
 		return model.PowerUpParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "Reply":
@@ -97,35 +166,13 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		return model.TelephonyDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "HVACHumidityStatusFlags":
 		return model.HVACHumidityStatusFlagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "InterfaceOptions1PowerUpSettings":
-		return model.InterfaceOptions1PowerUpSettingsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "MonitoredSAL":
-		// TODO: find a way to parse the sub types
-		var cBusOptions model.CBusOptions
-		return model.MonitoredSALParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
 	case "ParameterChange":
 		return model.ParameterChangeParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "ReplyNetwork":
-		return model.ReplyNetworkParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "SerialNumber":
-		return model.SerialNumberParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ErrorReportingSystemCategoryType":
 		errorReportingSystemCategoryClass, _ := model.ErrorReportingSystemCategoryClassByName(parserArguments[0])
 		return model.ErrorReportingSystemCategoryTypeParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), errorReportingSystemCategoryClass)
 	case "Confirmation":
 		return model.ConfirmationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "CBusPointToMultiPointCommand":
-		// TODO: find a way to parse the sub types
-		var cBusOptions model.CBusOptions
-		return model.CBusPointToMultiPointCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
-	case "StatusRequest":
-		return model.StatusRequestParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "InterfaceOptions3":
-		return model.InterfaceOptions3Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "InterfaceOptions1":
-		return model.InterfaceOptions1Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "InterfaceOptions2":
-		return model.InterfaceOptions2Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "SecurityData":
 		return model.SecurityDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "NetworkProtocolControlInformation":
@@ -136,8 +183,6 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
 		return model.RequestParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
-	case "HVACModeAndFlags":
-		return model.HVACModeAndFlagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "Alpha":
 		return model.AlphaParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "CALData":
@@ -153,9 +198,12 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		var requestContext model.RequestContext
 		return model.CALReplyParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions, requestContext)
 	case "CustomManufacturer":
-		return model.CustomManufacturerParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "LightingData":
-		return model.LightingDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		numBytes := uint8(parsedUint0)
+		return model.CustomManufacturerParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), numBytes)
 	case "AccessControlData":
 		return model.AccessControlDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ClockAndTimekeepingData":
@@ -168,15 +216,8 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		return model.ResponseTerminationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "LevelInformation":
 		return model.LevelInformationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "SALData":
-		applicationId, _ := model.ApplicationIdByName(parserArguments[0])
-		return model.SALDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), applicationId)
 	case "TamperStatus":
 		return model.TamperStatusParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "CBusCommand":
-		// TODO: find a way to parse the sub types
-		var cBusOptions model.CBusOptions
-		return model.CBusCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
 	case "IdentifyReplyCommand":
 		attribute, _ := model.AttributeByName(parserArguments[0])
 		parsedUint1, err := strconv.ParseUint(parserArguments[1], 10, 5)
@@ -185,38 +226,21 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		}
 		numBytes := uint8(parsedUint1)
 		return model.IdentifyReplyCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), attribute, numBytes)
-	case "HVACHumidity":
-		return model.HVACHumidityParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "HVACHumidityModeAndFlags":
-		return model.HVACHumidityModeAndFlagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "HVACRawLevels":
 		return model.HVACRawLevelsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "CBusConstants":
-		return model.CBusConstantsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "SerialInterfaceAddress":
-		return model.SerialInterfaceAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "MeasurementData":
-		return model.MeasurementDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "HVACZoneList":
-		return model.HVACZoneListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ZoneStatus":
 		return model.ZoneStatusParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BridgeAddress":
 		return model.BridgeAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "MediaTransportControlData":
-		return model.MediaTransportControlDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "StatusByte":
-		return model.StatusByteParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "LightingLabelOptions":
 		return model.LightingLabelOptionsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "ExtendedStatusHeader":
-		return model.ExtendedStatusHeaderParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "CustomTypes":
-		return model.CustomTypesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "TriggerControlLabelOptions":
-		return model.TriggerControlLabelOptionsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "HVACAuxiliaryLevel":
-		return model.HVACAuxiliaryLevelParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		numBytes := uint8(parsedUint0)
+		return model.CustomTypesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), numBytes)
 	case "StatusHeader":
 		return model.StatusHeaderParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "EncodedReply":
@@ -225,18 +249,12 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		// TODO: find a way to parse the sub types
 		var requestContext model.RequestContext
 		return model.EncodedReplyParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions, requestContext)
-	case "ErrorReportingData":
-		return model.ErrorReportingDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "CBusPointToPointToMultiPointCommand":
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
 		return model.CBusPointToPointToMultiPointCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
-	case "UnitAddress":
-		return model.UnitAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ExtendedFormatStatusReply":
 		return model.ExtendedFormatStatusReplyParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "SecurityArmCode":
-		return model.SecurityArmCodeParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "CBusPointToPointCommand":
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
diff --git a/plc4go/protocols/cbus/readwrite/model/CALData.go b/plc4go/protocols/cbus/readwrite/model/CALData.go
index a03043e25..8b4f2e98c 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALData.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALData.go
@@ -323,6 +323,16 @@ func (pm *_CALData) SerializeParent(writeBuffer utils.WriteBuffer, child CALData
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CALData) GetRequestContext() RequestContext {
+	return m.RequestContext
+}
+
+//
+////
+
 func (m *_CALData) isCALData() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CALDataReply.go b/plc4go/protocols/cbus/readwrite/model/CALDataReply.go
index ed5d2317f..3170f8907 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALDataReply.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALDataReply.go
@@ -33,8 +33,8 @@ type CALDataReply interface {
 	CALData
 	// GetParamNo returns ParamNo (property field)
 	GetParamNo() Parameter
-	// GetData returns Data (property field)
-	GetData() []byte
+	// GetParameterValue returns ParameterValue (property field)
+	GetParameterValue() ParameterValue
 }
 
 // CALDataReplyExactly can be used when we want exactly this type and not a type which fulfills CALDataReply.
@@ -47,8 +47,8 @@ type CALDataReplyExactly interface {
 // _CALDataReply is the data-structure of this message
 type _CALDataReply struct {
 	*_CALData
-	ParamNo Parameter
-	Data    []byte
+	ParamNo        Parameter
+	ParameterValue ParameterValue
 }
 
 ///////////////////////////////////////////////////////////
@@ -79,8 +79,8 @@ func (m *_CALDataReply) GetParamNo() Parameter {
 	return m.ParamNo
 }
 
-func (m *_CALDataReply) GetData() []byte {
-	return m.Data
+func (m *_CALDataReply) GetParameterValue() ParameterValue {
+	return m.ParameterValue
 }
 
 ///////////////////////
@@ -89,11 +89,11 @@ func (m *_CALDataReply) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataReply factory function for _CALDataReply
-func NewCALDataReply(paramNo Parameter, data []byte, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataReply {
+func NewCALDataReply(paramNo Parameter, parameterValue ParameterValue, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataReply {
 	_result := &_CALDataReply{
-		ParamNo:  paramNo,
-		Data:     data,
-		_CALData: NewCALData(commandTypeContainer, additionalData, requestContext),
+		ParamNo:        paramNo,
+		ParameterValue: parameterValue,
+		_CALData:       NewCALData(commandTypeContainer, additionalData, requestContext),
 	}
 	_result._CALData._CALDataChildRequirements = _result
 	return _result
@@ -124,10 +124,8 @@ func (m *_CALDataReply) GetLengthInBitsConditional(lastItem bool) uint16 {
 	// Simple field (paramNo)
 	lengthInBits += 8
 
-	// Array field
-	if len(m.Data) > 0 {
-		lengthInBits += 8 * uint16(len(m.Data))
-	}
+	// Simple field (parameterValue)
+	lengthInBits += m.ParameterValue.GetLengthInBits()
 
 	return lengthInBits
 }
@@ -157,11 +155,18 @@ func CALDataReplyParse(readBuffer utils.ReadBuffer, requestContext RequestContex
 	if closeErr := readBuffer.CloseContext("paramNo"); closeErr != nil {
 		return nil, errors.Wrap(closeErr, "Error closing for paramNo")
 	}
-	// Byte Array field (data)
-	numberOfBytesdata := int(uint16(commandTypeContainer.NumBytes()) - uint16(uint16(1)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
-	if _readArrayErr != nil {
-		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field of CALDataReply")
+
+	// Simple Field (parameterValue)
+	if pullErr := readBuffer.PullContext("parameterValue"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for parameterValue")
+	}
+	_parameterValue, _parameterValueErr := ParameterValueParse(readBuffer, ParameterType(paramNo.ParameterType()), uint8(uint8(commandTypeContainer.NumBytes())-uint8(uint8(1))))
+	if _parameterValueErr != nil {
+		return nil, errors.Wrap(_parameterValueErr, "Error parsing 'parameterValue' field of CALDataReply")
+	}
+	parameterValue := _parameterValue.(ParameterValue)
+	if closeErr := readBuffer.CloseContext("parameterValue"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for parameterValue")
 	}
 
 	if closeErr := readBuffer.CloseContext("CALDataReply"); closeErr != nil {
@@ -170,8 +175,8 @@ func CALDataReplyParse(readBuffer utils.ReadBuffer, requestContext RequestContex
 
 	// Create a partially initialized instance
 	_child := &_CALDataReply{
-		ParamNo: paramNo,
-		Data:    data,
+		ParamNo:        paramNo,
+		ParameterValue: parameterValue,
 		_CALData: &_CALData{
 			RequestContext: requestContext,
 		},
@@ -200,10 +205,16 @@ func (m *_CALDataReply) Serialize(writeBuffer utils.WriteBuffer) error {
 			return errors.Wrap(_paramNoErr, "Error serializing 'paramNo' field")
 		}
 
-		// Array Field (data)
-		// Byte Array field (data)
-		if err := writeBuffer.WriteByteArray("data", m.GetData()); err != nil {
-			return errors.Wrap(err, "Error serializing 'data' field")
+		// Simple Field (parameterValue)
+		if pushErr := writeBuffer.PushContext("parameterValue"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for parameterValue")
+		}
+		_parameterValueErr := writeBuffer.WriteSerializable(m.GetParameterValue())
+		if popErr := writeBuffer.PopContext("parameterValue"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for parameterValue")
+		}
+		if _parameterValueErr != nil {
+			return errors.Wrap(_parameterValueErr, "Error serializing 'parameterValue' field")
 		}
 
 		if popErr := writeBuffer.PopContext("CALDataReply"); popErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/CALDataWrite.go b/plc4go/protocols/cbus/readwrite/model/CALDataWrite.go
index 9f98c93ab..211b1003e 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALDataWrite.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALDataWrite.go
@@ -35,8 +35,8 @@ type CALDataWrite interface {
 	GetParamNo() Parameter
 	// GetCode returns Code (property field)
 	GetCode() byte
-	// GetData returns Data (property field)
-	GetData() []byte
+	// GetParameterValue returns ParameterValue (property field)
+	GetParameterValue() ParameterValue
 }
 
 // CALDataWriteExactly can be used when we want exactly this type and not a type which fulfills CALDataWrite.
@@ -49,9 +49,9 @@ type CALDataWriteExactly interface {
 // _CALDataWrite is the data-structure of this message
 type _CALDataWrite struct {
 	*_CALData
-	ParamNo Parameter
-	Code    byte
-	Data    []byte
+	ParamNo        Parameter
+	Code           byte
+	ParameterValue ParameterValue
 }
 
 ///////////////////////////////////////////////////////////
@@ -86,8 +86,8 @@ func (m *_CALDataWrite) GetCode() byte {
 	return m.Code
 }
 
-func (m *_CALDataWrite) GetData() []byte {
-	return m.Data
+func (m *_CALDataWrite) GetParameterValue() ParameterValue {
+	return m.ParameterValue
 }
 
 ///////////////////////
@@ -96,12 +96,12 @@ func (m *_CALDataWrite) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataWrite factory function for _CALDataWrite
-func NewCALDataWrite(paramNo Parameter, code byte, data []byte, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataWrite {
+func NewCALDataWrite(paramNo Parameter, code byte, parameterValue ParameterValue, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataWrite {
 	_result := &_CALDataWrite{
-		ParamNo:  paramNo,
-		Code:     code,
-		Data:     data,
-		_CALData: NewCALData(commandTypeContainer, additionalData, requestContext),
+		ParamNo:        paramNo,
+		Code:           code,
+		ParameterValue: parameterValue,
+		_CALData:       NewCALData(commandTypeContainer, additionalData, requestContext),
 	}
 	_result._CALData._CALDataChildRequirements = _result
 	return _result
@@ -135,10 +135,8 @@ func (m *_CALDataWrite) GetLengthInBitsConditional(lastItem bool) uint16 {
 	// Simple field (code)
 	lengthInBits += 8
 
-	// Array field
-	if len(m.Data) > 0 {
-		lengthInBits += 8 * uint16(len(m.Data))
-	}
+	// Simple field (parameterValue)
+	lengthInBits += m.ParameterValue.GetLengthInBits()
 
 	return lengthInBits
 }
@@ -175,11 +173,18 @@ func CALDataWriteParse(readBuffer utils.ReadBuffer, requestContext RequestContex
 		return nil, errors.Wrap(_codeErr, "Error parsing 'code' field of CALDataWrite")
 	}
 	code := _code
-	// Byte Array field (data)
-	numberOfBytesdata := int(uint16(commandTypeContainer.NumBytes()) - uint16(uint16(2)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
-	if _readArrayErr != nil {
-		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field of CALDataWrite")
+
+	// Simple Field (parameterValue)
+	if pullErr := readBuffer.PullContext("parameterValue"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for parameterValue")
+	}
+	_parameterValue, _parameterValueErr := ParameterValueParse(readBuffer, ParameterType(paramNo.ParameterType()), uint8(uint8(commandTypeContainer.NumBytes())-uint8(uint8(2))))
+	if _parameterValueErr != nil {
+		return nil, errors.Wrap(_parameterValueErr, "Error parsing 'parameterValue' field of CALDataWrite")
+	}
+	parameterValue := _parameterValue.(ParameterValue)
+	if closeErr := readBuffer.CloseContext("parameterValue"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for parameterValue")
 	}
 
 	if closeErr := readBuffer.CloseContext("CALDataWrite"); closeErr != nil {
@@ -188,9 +193,9 @@ func CALDataWriteParse(readBuffer utils.ReadBuffer, requestContext RequestContex
 
 	// Create a partially initialized instance
 	_child := &_CALDataWrite{
-		ParamNo: paramNo,
-		Code:    code,
-		Data:    data,
+		ParamNo:        paramNo,
+		Code:           code,
+		ParameterValue: parameterValue,
 		_CALData: &_CALData{
 			RequestContext: requestContext,
 		},
@@ -226,10 +231,16 @@ func (m *_CALDataWrite) Serialize(writeBuffer utils.WriteBuffer) error {
 			return errors.Wrap(_codeErr, "Error serializing 'code' field")
 		}
 
-		// Array Field (data)
-		// Byte Array field (data)
-		if err := writeBuffer.WriteByteArray("data", m.GetData()); err != nil {
-			return errors.Wrap(err, "Error serializing 'data' field")
+		// Simple Field (parameterValue)
+		if pushErr := writeBuffer.PushContext("parameterValue"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for parameterValue")
+		}
+		_parameterValueErr := writeBuffer.WriteSerializable(m.GetParameterValue())
+		if popErr := writeBuffer.PopContext("parameterValue"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for parameterValue")
+		}
+		if _parameterValueErr != nil {
+			return errors.Wrap(_parameterValueErr, "Error serializing 'parameterValue' field")
 		}
 
 		if popErr := writeBuffer.PopContext("CALDataWrite"); popErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/CALReply.go b/plc4go/protocols/cbus/readwrite/model/CALReply.go
index dd28ef813..852a84c35 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALReply.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALReply.go
@@ -220,6 +220,19 @@ func (pm *_CALReply) SerializeParent(writeBuffer utils.WriteBuffer, child CALRep
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CALReply) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+func (m *_CALReply) GetRequestContext() RequestContext {
+	return m.RequestContext
+}
+
+//
+////
+
 func (m *_CALReply) isCALReply() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusCommand.go
index d09d91c07..1868c1ccb 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusCommand.go
@@ -250,6 +250,16 @@ func (pm *_CBusCommand) SerializeParent(writeBuffer utils.WriteBuffer, child CBu
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CBusCommand) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_CBusCommand) isCBusCommand() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusMessage.go b/plc4go/protocols/cbus/readwrite/model/CBusMessage.go
index 0c4c4a01f..448c300eb 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusMessage.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusMessage.go
@@ -172,6 +172,19 @@ func (pm *_CBusMessage) SerializeParent(writeBuffer utils.WriteBuffer, child CBu
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CBusMessage) GetRequestContext() RequestContext {
+	return m.RequestContext
+}
+func (m *_CBusMessage) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_CBusMessage) isCBusMessage() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go
index 4a0d806ce..f670ec5da 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go
@@ -184,6 +184,16 @@ func (pm *_CBusPointToMultiPointCommand) SerializeParent(writeBuffer utils.Write
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CBusPointToMultiPointCommand) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_CBusPointToMultiPointCommand) isCBusPointToMultiPointCommand() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go
index 8a586a9fe..8fc078901 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go
@@ -245,6 +245,16 @@ func (pm *_CBusPointToPointCommand) SerializeParent(writeBuffer utils.WriteBuffe
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CBusPointToPointCommand) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_CBusPointToPointCommand) isCBusPointToPointCommand() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultiPointCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultiPointCommand.go
index 1ef652b2e..e5b243109 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultiPointCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultiPointCommand.go
@@ -254,6 +254,16 @@ func (pm *_CBusPointToPointToMultiPointCommand) SerializeParent(writeBuffer util
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CBusPointToPointToMultiPointCommand) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_CBusPointToPointToMultiPointCommand) isCBusPointToPointToMultiPointCommand() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CustomManufacturer.go b/plc4go/protocols/cbus/readwrite/model/CustomManufacturer.go
index 79fd23a82..85ec793a5 100644
--- a/plc4go/protocols/cbus/readwrite/model/CustomManufacturer.go
+++ b/plc4go/protocols/cbus/readwrite/model/CustomManufacturer.go
@@ -44,6 +44,9 @@ type CustomManufacturerExactly interface {
 // _CustomManufacturer is the data-structure of this message
 type _CustomManufacturer struct {
 	CustomString string
+
+	// Arguments.
+	NumBytes uint8
 }
 
 ///////////////////////////////////////////////////////////
@@ -61,8 +64,8 @@ func (m *_CustomManufacturer) GetCustomString() string {
 ///////////////////////////////////////////////////////////
 
 // NewCustomManufacturer factory function for _CustomManufacturer
-func NewCustomManufacturer(customString string) *_CustomManufacturer {
-	return &_CustomManufacturer{CustomString: customString}
+func NewCustomManufacturer(customString string, numBytes uint8) *_CustomManufacturer {
+	return &_CustomManufacturer{CustomString: customString, NumBytes: numBytes}
 }
 
 // Deprecated: use the interface for direct cast
@@ -88,7 +91,7 @@ func (m *_CustomManufacturer) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
 	// Simple field (customString)
-	lengthInBits += uint16(int32(8))
+	lengthInBits += uint16(int32(int32(8)) * int32(m.NumBytes))
 
 	return lengthInBits
 }
@@ -97,7 +100,7 @@ func (m *_CustomManufacturer) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CustomManufacturerParse(readBuffer utils.ReadBuffer) (CustomManufacturer, error) {
+func CustomManufacturerParse(readBuffer utils.ReadBuffer, numBytes uint8) (CustomManufacturer, error) {
 	positionAware := readBuffer
 	_ = positionAware
 	if pullErr := readBuffer.PullContext("CustomManufacturer"); pullErr != nil {
@@ -107,7 +110,7 @@ func CustomManufacturerParse(readBuffer utils.ReadBuffer) (CustomManufacturer, e
 	_ = currentPos
 
 	// Simple Field (customString)
-	_customString, _customStringErr := readBuffer.ReadString("customString", uint32((8)))
+	_customString, _customStringErr := readBuffer.ReadString("customString", uint32((8)*(numBytes)))
 	if _customStringErr != nil {
 		return nil, errors.Wrap(_customStringErr, "Error parsing 'customString' field of CustomManufacturer")
 	}
@@ -118,7 +121,7 @@ func CustomManufacturerParse(readBuffer utils.ReadBuffer) (CustomManufacturer, e
 	}
 
 	// Create the instance
-	return NewCustomManufacturer(customString), nil
+	return NewCustomManufacturer(customString, numBytes), nil
 }
 
 func (m *_CustomManufacturer) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -130,7 +133,7 @@ func (m *_CustomManufacturer) Serialize(writeBuffer utils.WriteBuffer) error {
 
 	// Simple Field (customString)
 	customString := string(m.GetCustomString())
-	_customStringErr := writeBuffer.WriteString("customString", uint32((8)), "UTF-8", (customString))
+	_customStringErr := writeBuffer.WriteString("customString", uint32((8)*(m.GetNumBytes())), "UTF-8", (customString))
 	if _customStringErr != nil {
 		return errors.Wrap(_customStringErr, "Error serializing 'customString' field")
 	}
@@ -141,6 +144,16 @@ func (m *_CustomManufacturer) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CustomManufacturer) GetNumBytes() uint8 {
+	return m.NumBytes
+}
+
+//
+////
+
 func (m *_CustomManufacturer) isCustomManufacturer() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/CustomTypes.go b/plc4go/protocols/cbus/readwrite/model/CustomTypes.go
index ba799df6d..fcee2a6c3 100644
--- a/plc4go/protocols/cbus/readwrite/model/CustomTypes.go
+++ b/plc4go/protocols/cbus/readwrite/model/CustomTypes.go
@@ -44,6 +44,9 @@ type CustomTypesExactly interface {
 // _CustomTypes is the data-structure of this message
 type _CustomTypes struct {
 	CustomString string
+
+	// Arguments.
+	NumBytes uint8
 }
 
 ///////////////////////////////////////////////////////////
@@ -61,8 +64,8 @@ func (m *_CustomTypes) GetCustomString() string {
 ///////////////////////////////////////////////////////////
 
 // NewCustomTypes factory function for _CustomTypes
-func NewCustomTypes(customString string) *_CustomTypes {
-	return &_CustomTypes{CustomString: customString}
+func NewCustomTypes(customString string, numBytes uint8) *_CustomTypes {
+	return &_CustomTypes{CustomString: customString, NumBytes: numBytes}
 }
 
 // Deprecated: use the interface for direct cast
@@ -88,7 +91,7 @@ func (m *_CustomTypes) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
 	// Simple field (customString)
-	lengthInBits += uint16(int32(8))
+	lengthInBits += uint16(int32(int32(8)) * int32(m.NumBytes))
 
 	return lengthInBits
 }
@@ -97,7 +100,7 @@ func (m *_CustomTypes) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CustomTypesParse(readBuffer utils.ReadBuffer) (CustomTypes, error) {
+func CustomTypesParse(readBuffer utils.ReadBuffer, numBytes uint8) (CustomTypes, error) {
 	positionAware := readBuffer
 	_ = positionAware
 	if pullErr := readBuffer.PullContext("CustomTypes"); pullErr != nil {
@@ -107,7 +110,7 @@ func CustomTypesParse(readBuffer utils.ReadBuffer) (CustomTypes, error) {
 	_ = currentPos
 
 	// Simple Field (customString)
-	_customString, _customStringErr := readBuffer.ReadString("customString", uint32((8)))
+	_customString, _customStringErr := readBuffer.ReadString("customString", uint32((8)*(numBytes)))
 	if _customStringErr != nil {
 		return nil, errors.Wrap(_customStringErr, "Error parsing 'customString' field of CustomTypes")
 	}
@@ -118,7 +121,7 @@ func CustomTypesParse(readBuffer utils.ReadBuffer) (CustomTypes, error) {
 	}
 
 	// Create the instance
-	return NewCustomTypes(customString), nil
+	return NewCustomTypes(customString, numBytes), nil
 }
 
 func (m *_CustomTypes) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -130,7 +133,7 @@ func (m *_CustomTypes) Serialize(writeBuffer utils.WriteBuffer) error {
 
 	// Simple Field (customString)
 	customString := string(m.GetCustomString())
-	_customStringErr := writeBuffer.WriteString("customString", uint32((8)), "UTF-8", (customString))
+	_customStringErr := writeBuffer.WriteString("customString", uint32((8)*(m.GetNumBytes())), "UTF-8", (customString))
 	if _customStringErr != nil {
 		return errors.Wrap(_customStringErr, "Error serializing 'customString' field")
 	}
@@ -141,6 +144,16 @@ func (m *_CustomTypes) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CustomTypes) GetNumBytes() uint8 {
+	return m.NumBytes
+}
+
+//
+////
+
 func (m *_CustomTypes) isCustomTypes() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/EncodedReply.go b/plc4go/protocols/cbus/readwrite/model/EncodedReply.go
index b7e124731..3a529df1e 100644
--- a/plc4go/protocols/cbus/readwrite/model/EncodedReply.go
+++ b/plc4go/protocols/cbus/readwrite/model/EncodedReply.go
@@ -266,6 +266,19 @@ func (pm *_EncodedReply) SerializeParent(writeBuffer utils.WriteBuffer, child En
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_EncodedReply) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+func (m *_EncodedReply) GetRequestContext() RequestContext {
+	return m.RequestContext
+}
+
+//
+////
+
 func (m *_EncodedReply) isEncodedReply() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go b/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go
index 0d8cb457d..669d7cd09 100644
--- a/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go
@@ -193,6 +193,16 @@ func (pm *_IdentifyReplyCommand) SerializeParent(writeBuffer utils.WriteBuffer,
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_IdentifyReplyCommand) GetNumBytes() uint8 {
+	return m.NumBytes
+}
+
+//
+////
+
 func (m *_IdentifyReplyCommand) isIdentifyReplyCommand() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go b/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go
index 51a8257d5..f9154e7e1 100644
--- a/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go
+++ b/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go
@@ -184,6 +184,16 @@ func (pm *_MonitoredSAL) SerializeParent(writeBuffer utils.WriteBuffer, child Mo
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_MonitoredSAL) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_MonitoredSAL) isMonitoredSAL() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/Reply.go b/plc4go/protocols/cbus/readwrite/model/Reply.go
index 2e742e02d..b03bea320 100644
--- a/plc4go/protocols/cbus/readwrite/model/Reply.go
+++ b/plc4go/protocols/cbus/readwrite/model/Reply.go
@@ -189,6 +189,19 @@ func (pm *_Reply) SerializeParent(writeBuffer utils.WriteBuffer, child Reply, se
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_Reply) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+func (m *_Reply) GetRequestContext() RequestContext {
+	return m.RequestContext
+}
+
+//
+////
+
 func (m *_Reply) isReply() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/ReplyOrConfirmation.go b/plc4go/protocols/cbus/readwrite/model/ReplyOrConfirmation.go
index 781a10661..7b9ecf045 100644
--- a/plc4go/protocols/cbus/readwrite/model/ReplyOrConfirmation.go
+++ b/plc4go/protocols/cbus/readwrite/model/ReplyOrConfirmation.go
@@ -211,6 +211,19 @@ func (pm *_ReplyOrConfirmation) SerializeParent(writeBuffer utils.WriteBuffer, c
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ReplyOrConfirmation) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+func (m *_ReplyOrConfirmation) GetRequestContext() RequestContext {
+	return m.RequestContext
+}
+
+//
+////
+
 func (m *_ReplyOrConfirmation) isReplyOrConfirmation() bool {
 	return true
 }
diff --git a/plc4go/protocols/cbus/readwrite/model/Request.go b/plc4go/protocols/cbus/readwrite/model/Request.go
index b1305831c..090c0226b 100644
--- a/plc4go/protocols/cbus/readwrite/model/Request.go
+++ b/plc4go/protocols/cbus/readwrite/model/Request.go
@@ -375,6 +375,16 @@ func (pm *_Request) SerializeParent(writeBuffer utils.WriteBuffer, child Request
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_Request) GetCBusOptions() CBusOptions {
+	return m.CBusOptions
+}
+
+//
+////
+
 func (m *_Request) isRequest() bool {
 	return true
 }
diff --git a/plc4go/protocols/eip/readwrite/model/CipExchange.go b/plc4go/protocols/eip/readwrite/model/CipExchange.go
index 75c6e0b53..ab43d337f 100644
--- a/plc4go/protocols/eip/readwrite/model/CipExchange.go
+++ b/plc4go/protocols/eip/readwrite/model/CipExchange.go
@@ -253,6 +253,16 @@ func (m *_CipExchange) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CipExchange) GetExchangeLen() uint16 {
+	return m.ExchangeLen
+}
+
+//
+////
+
 func (m *_CipExchange) isCipExchange() bool {
 	return true
 }
diff --git a/plc4go/protocols/eip/readwrite/model/CipRRData.go b/plc4go/protocols/eip/readwrite/model/CipRRData.go
index b37667214..7495423d5 100644
--- a/plc4go/protocols/eip/readwrite/model/CipRRData.go
+++ b/plc4go/protocols/eip/readwrite/model/CipRRData.go
@@ -246,6 +246,16 @@ func (m *_CipRRData) Serialize(writeBuffer utils.WriteBuffer) error {
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_CipRRData) GetPacketLength() uint16 {
+	return m.PacketLength
+}
+
+//
+////
+
 func (m *_CipRRData) isCipRRData() bool {
 	return true
 }
diff --git a/plc4go/protocols/eip/readwrite/model/CipService.go b/plc4go/protocols/eip/readwrite/model/CipService.go
index 58dbfc698..63ee7f842 100644
--- a/plc4go/protocols/eip/readwrite/model/CipService.go
+++ b/plc4go/protocols/eip/readwrite/model/CipService.go
@@ -187,6 +187,16 @@ func (pm *_CipService) SerializeParent(writeBuffer utils.WriteBuffer, child CipS
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CipService) GetServiceLen() uint16 {
+	return m.ServiceLen
+}
+
+//
+////
+
 func (m *_CipService) isCipService() bool {
 	return true
 }
diff --git a/plc4go/protocols/eip/readwrite/model/Services.go b/plc4go/protocols/eip/readwrite/model/Services.go
index 67c0350ba..c7a0d98d4 100644
--- a/plc4go/protocols/eip/readwrite/model/Services.go
+++ b/plc4go/protocols/eip/readwrite/model/Services.go
@@ -245,6 +245,16 @@ func (m *_Services) Serialize(writeBuffer utils.WriteBuffer) error {
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_Services) GetServicesLen() uint16 {
+	return m.ServicesLen
+}
+
+//
+////
+
 func (m *_Services) isServices() bool {
 	return true
 }
diff --git a/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go b/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go
index 590bcba7b..fb28b56a0 100644
--- a/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go
+++ b/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go
@@ -183,6 +183,16 @@ func (pm *_FirmataCommand) SerializeParent(writeBuffer utils.WriteBuffer, child
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_FirmataCommand) GetResponse() bool {
+	return m.Response
+}
+
+//
+////
+
 func (m *_FirmataCommand) isFirmataCommand() bool {
 	return true
 }
diff --git a/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go b/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go
index 1cd7fddc7..412851673 100644
--- a/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go
+++ b/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go
@@ -183,6 +183,16 @@ func (pm *_FirmataMessage) SerializeParent(writeBuffer utils.WriteBuffer, child
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_FirmataMessage) GetResponse() bool {
+	return m.Response
+}
+
+//
+////
+
 func (m *_FirmataMessage) isFirmataMessage() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/Apdu.go b/plc4go/protocols/knxnetip/readwrite/model/Apdu.go
index d2480c023..97d24e7d5 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/Apdu.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/Apdu.go
@@ -235,6 +235,16 @@ func (pm *_Apdu) SerializeParent(writeBuffer utils.WriteBuffer, child Apdu, seri
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_Apdu) GetDataLength() uint8 {
+	return m.DataLength
+}
+
+//
+////
+
 func (m *_Apdu) isApdu() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ApduData.go b/plc4go/protocols/knxnetip/readwrite/model/ApduData.go
index feb0b25dc..f75a90924 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ApduData.go
@@ -205,6 +205,16 @@ func (pm *_ApduData) SerializeParent(writeBuffer utils.WriteBuffer, child ApduDa
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ApduData) GetDataLength() uint8 {
+	return m.DataLength
+}
+
+//
+////
+
 func (m *_ApduData) isApduData() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go b/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go
index 18b25b485..e20f5fc81 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go
@@ -255,6 +255,16 @@ func (pm *_ApduDataExt) SerializeParent(writeBuffer utils.WriteBuffer, child Apd
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ApduDataExt) GetLength() uint8 {
+	return m.Length
+}
+
+//
+////
+
 func (m *_ApduDataExt) isApduDataExt() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/CEMI.go b/plc4go/protocols/knxnetip/readwrite/model/CEMI.go
index fc5b4edea..cd6b8e28a 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/CEMI.go
@@ -219,6 +219,16 @@ func (pm *_CEMI) SerializeParent(writeBuffer utils.WriteBuffer, child CEMI, seri
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_CEMI) GetSize() uint16 {
+	return m.Size
+}
+
+//
+////
+
 func (m *_CEMI) isCEMI() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/DeviceConfigurationRequest.go b/plc4go/protocols/knxnetip/readwrite/model/DeviceConfigurationRequest.go
index aab6f36a7..744bf0407 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/DeviceConfigurationRequest.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/DeviceConfigurationRequest.go
@@ -227,6 +227,16 @@ func (m *_DeviceConfigurationRequest) Serialize(writeBuffer utils.WriteBuffer) e
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_DeviceConfigurationRequest) GetTotalLength() uint16 {
+	return m.TotalLength
+}
+
+//
+////
+
 func (m *_DeviceConfigurationRequest) isDeviceConfigurationRequest() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/TunnelingRequest.go b/plc4go/protocols/knxnetip/readwrite/model/TunnelingRequest.go
index a358f1302..5158fcf0b 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/TunnelingRequest.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/TunnelingRequest.go
@@ -227,6 +227,16 @@ func (m *_TunnelingRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_TunnelingRequest) GetTotalLength() uint16 {
+	return m.TotalLength
+}
+
+//
+////
+
 func (m *_TunnelingRequest) isTunnelingRequest() bool {
 	return true
 }
diff --git a/plc4go/protocols/knxnetip/readwrite/model/UnknownMessage.go b/plc4go/protocols/knxnetip/readwrite/model/UnknownMessage.go
index da4f85f12..956923ad4 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/UnknownMessage.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/UnknownMessage.go
@@ -179,6 +179,16 @@ func (m *_UnknownMessage) Serialize(writeBuffer utils.WriteBuffer) error {
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
+////
+// Arguments Getter
+
+func (m *_UnknownMessage) GetTotalLength() uint16 {
+	return m.TotalLength
+}
+
+//
+////
+
 func (m *_UnknownMessage) isUnknownMessage() bool {
 	return true
 }
diff --git a/plc4go/protocols/modbus/readwrite/model/ModbusADU.go b/plc4go/protocols/modbus/readwrite/model/ModbusADU.go
index 94834f57d..e096a39f5 100644
--- a/plc4go/protocols/modbus/readwrite/model/ModbusADU.go
+++ b/plc4go/protocols/modbus/readwrite/model/ModbusADU.go
@@ -163,6 +163,16 @@ func (pm *_ModbusADU) SerializeParent(writeBuffer utils.WriteBuffer, child Modbu
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_ModbusADU) GetResponse() bool {
+	return m.Response
+}
+
+//
+////
+
 func (m *_ModbusADU) isModbusADU() bool {
 	return true
 }
diff --git a/plc4go/protocols/s7/readwrite/model/COTPPacket.go b/plc4go/protocols/s7/readwrite/model/COTPPacket.go
index 4c8e052d1..43fe89706 100644
--- a/plc4go/protocols/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/protocols/s7/readwrite/model/COTPPacket.go
@@ -318,6 +318,16 @@ func (pm *_COTPPacket) SerializeParent(writeBuffer utils.WriteBuffer, child COTP
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_COTPPacket) GetCotpLen() uint16 {
+	return m.CotpLen
+}
+
+//
+////
+
 func (m *_COTPPacket) isCOTPPacket() bool {
 	return true
 }
diff --git a/plc4go/protocols/s7/readwrite/model/COTPParameter.go b/plc4go/protocols/s7/readwrite/model/COTPParameter.go
index 0a82a3dbe..18752dd5f 100644
--- a/plc4go/protocols/s7/readwrite/model/COTPParameter.go
+++ b/plc4go/protocols/s7/readwrite/model/COTPParameter.go
@@ -200,6 +200,16 @@ func (pm *_COTPParameter) SerializeParent(writeBuffer utils.WriteBuffer, child C
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_COTPParameter) GetRest() uint8 {
+	return m.Rest
+}
+
+//
+////
+
 func (m *_COTPParameter) isCOTPParameter() bool {
 	return true
 }
diff --git a/plc4go/protocols/s7/readwrite/model/S7Payload.go b/plc4go/protocols/s7/readwrite/model/S7Payload.go
index b15bce48e..c23468ced 100644
--- a/plc4go/protocols/s7/readwrite/model/S7Payload.go
+++ b/plc4go/protocols/s7/readwrite/model/S7Payload.go
@@ -168,6 +168,16 @@ func (pm *_S7Payload) SerializeParent(writeBuffer utils.WriteBuffer, child S7Pay
 	return nil
 }
 
+////
+// Arguments Getter
+
+func (m *_S7Payload) GetParameter() S7Parameter {
+	return m.Parameter
+}
+
+//
+////
+
 func (m *_S7Payload) isS7Payload() bool {
 	return true
 }


[plc4x] 02/04: feat(cbus): properly parser parameter values

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

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

commit f44d59737e38edd34e4950c478ed377830f5bc0f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Aug 1 14:49:27 2022 +0200

    feat(cbus): properly parser parameter values
---
 plc4go/protocols/cbus/readwrite/model/Parameter.go | 1043 ++++++++++++++++++++
 .../cbus/readwrite/model/ParameterType.go          |  201 ++++
 .../cbus/readwrite/model/ParameterValue.go         |  205 ++++
 .../model/ParameterValueApplicationAddress1.go     |  210 ++++
 .../model/ParameterValueApplicationAddress2.go     |  210 ++++
 .../model/ParameterValueBaudRateSelector.go        |  210 ++++
 .../model/ParameterValueCustomManufacturer.go      |  205 ++++
 .../readwrite/model/ParameterValueCustomTypes.go   |  205 ++++
 .../model/ParameterValueInterfaceOptions1.go       |  210 ++++
 ...rameterValueInterfaceOptions1PowerUpSettings.go |  210 ++++
 .../model/ParameterValueInterfaceOptions2.go       |  210 ++++
 .../model/ParameterValueInterfaceOptions3.go       |  210 ++++
 .../cbus/readwrite/model/ParameterValueRaw.go      |  194 ++++
 .../readwrite/model/ParameterValueSerialNumber.go  |  210 ++++
 .../apache/plc4x/java/cbus/RandomPackagesTest.java |    2 +
 .../org/apache/plc4x/java/cbus/ReferenceTest.java  |   53 +
 .../src/main/resources/protocols/cbus/c-bus.mspec  |  592 ++++++-----
 17 files changed, 4114 insertions(+), 266 deletions(-)

diff --git a/plc4go/protocols/cbus/readwrite/model/Parameter.go b/plc4go/protocols/cbus/readwrite/model/Parameter.go
index e12049cfc..f8c5dc429 100644
--- a/plc4go/protocols/cbus/readwrite/model/Parameter.go
+++ b/plc4go/protocols/cbus/readwrite/model/Parameter.go
@@ -31,6 +31,7 @@ import (
 type Parameter uint8
 
 type IParameter interface {
+	ParameterType() ParameterType
 	Form() string
 	IsVolatile() bool
 	ParameterDescription() string
@@ -562,6 +563,1048 @@ func init() {
 	}
 }
 
+func (e Parameter) ParameterType() ParameterType {
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x0D:
+		{ /* '0x0D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x0E:
+		{ /* '0x0E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x10:
+		{ /* '0x10' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x11:
+		{ /* '0x11' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x12:
+		{ /* '0x12' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x14:
+		{ /* '0x14' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x15:
+		{ /* '0x15' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x16:
+		{ /* '0x16' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x17:
+		{ /* '0x17' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x18:
+		{ /* '0x18' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x19:
+		{ /* '0x19' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x1A:
+		{ /* '0x1A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x1B:
+		{ /* '0x1B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x1C:
+		{ /* '0x1C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x1D:
+		{ /* '0x1D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x1E:
+		{ /* '0x1E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x1F:
+		{ /* '0x1F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x20:
+		{ /* '0x20' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x21:
+		{ /* '0x21' */
+			return ParameterType_APPLICATION_ADDRESS_1
+		}
+	case 0x22:
+		{ /* '0x22' */
+			return ParameterType_APPLICATION_ADDRESS_2
+		}
+	case 0x23:
+		{ /* '0x23' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x24:
+		{ /* '0x24' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x25:
+		{ /* '0x25' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x26:
+		{ /* '0x26' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x27:
+		{ /* '0x27' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x28:
+		{ /* '0x28' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x29:
+		{ /* '0x29' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x2A:
+		{ /* '0x2A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x2B:
+		{ /* '0x2B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x2C:
+		{ /* '0x2C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x2D:
+		{ /* '0x2D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x2E:
+		{ /* '0x2E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x2F:
+		{ /* '0x2F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return ParameterType_INTERFACE_OPTIONS_1
+		}
+	case 0x31:
+		{ /* '0x31' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x32:
+		{ /* '0x32' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x33:
+		{ /* '0x33' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x34:
+		{ /* '0x34' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x35:
+		{ /* '0x35' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x36:
+		{ /* '0x36' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x37:
+		{ /* '0x37' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x38:
+		{ /* '0x38' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x39:
+		{ /* '0x39' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x3A:
+		{ /* '0x3A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x3B:
+		{ /* '0x3B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x3C:
+		{ /* '0x3C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x3D:
+		{ /* '0x3D' */
+			return ParameterType_BAUD_RATE_SELECTOR
+		}
+	case 0x3E:
+		{ /* '0x3E' */
+			return ParameterType_INTERFACE_OPTIONS_2
+		}
+	case 0x3F:
+		{ /* '0x3F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x40:
+		{ /* '0x40' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x41:
+		{ /* '0x41' */
+			return ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS
+		}
+	case 0x42:
+		{ /* '0x42' */
+			return ParameterType_INTERFACE_OPTIONS_3
+		}
+	case 0x43:
+		{ /* '0x43' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x44:
+		{ /* '0x44' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x45:
+		{ /* '0x45' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x46:
+		{ /* '0x46' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x47:
+		{ /* '0x47' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x48:
+		{ /* '0x48' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x49:
+		{ /* '0x49' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x4A:
+		{ /* '0x4A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x4B:
+		{ /* '0x4B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x4C:
+		{ /* '0x4C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x4D:
+		{ /* '0x4D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x4E:
+		{ /* '0x4E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x4F:
+		{ /* '0x4F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x50:
+		{ /* '0x50' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x51:
+		{ /* '0x51' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x52:
+		{ /* '0x52' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x53:
+		{ /* '0x53' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x54:
+		{ /* '0x54' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x55:
+		{ /* '0x55' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x56:
+		{ /* '0x56' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x57:
+		{ /* '0x57' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x58:
+		{ /* '0x58' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x59:
+		{ /* '0x59' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x5A:
+		{ /* '0x5A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x5B:
+		{ /* '0x5B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x5C:
+		{ /* '0x5C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x5D:
+		{ /* '0x5D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x5E:
+		{ /* '0x5E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x5F:
+		{ /* '0x5F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x60:
+		{ /* '0x60' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x61:
+		{ /* '0x61' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x62:
+		{ /* '0x62' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x63:
+		{ /* '0x63' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x64:
+		{ /* '0x64' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x65:
+		{ /* '0x65' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x66:
+		{ /* '0x66' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x67:
+		{ /* '0x67' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x68:
+		{ /* '0x68' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x69:
+		{ /* '0x69' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x6A:
+		{ /* '0x6A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x6B:
+		{ /* '0x6B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x6C:
+		{ /* '0x6C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x6D:
+		{ /* '0x6D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x6E:
+		{ /* '0x6E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x6F:
+		{ /* '0x6F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x70:
+		{ /* '0x70' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x71:
+		{ /* '0x71' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x72:
+		{ /* '0x72' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x73:
+		{ /* '0x73' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x74:
+		{ /* '0x74' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x75:
+		{ /* '0x75' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x76:
+		{ /* '0x76' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x77:
+		{ /* '0x77' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x78:
+		{ /* '0x78' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x79:
+		{ /* '0x79' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x7A:
+		{ /* '0x7A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x7B:
+		{ /* '0x7B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x7C:
+		{ /* '0x7C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x7D:
+		{ /* '0x7D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x7E:
+		{ /* '0x7E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x7F:
+		{ /* '0x7F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x80:
+		{ /* '0x80' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x81:
+		{ /* '0x81' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x82:
+		{ /* '0x82' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x83:
+		{ /* '0x83' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x84:
+		{ /* '0x84' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x85:
+		{ /* '0x85' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x86:
+		{ /* '0x86' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x87:
+		{ /* '0x87' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x88:
+		{ /* '0x88' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x89:
+		{ /* '0x89' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x8A:
+		{ /* '0x8A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x8B:
+		{ /* '0x8B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x8C:
+		{ /* '0x8C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x8D:
+		{ /* '0x8D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x8E:
+		{ /* '0x8E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x8F:
+		{ /* '0x8F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x90:
+		{ /* '0x90' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x91:
+		{ /* '0x91' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x92:
+		{ /* '0x92' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x93:
+		{ /* '0x93' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x94:
+		{ /* '0x94' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x95:
+		{ /* '0x95' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x96:
+		{ /* '0x96' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x97:
+		{ /* '0x97' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x98:
+		{ /* '0x98' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x99:
+		{ /* '0x99' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x9A:
+		{ /* '0x9A' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x9B:
+		{ /* '0x9B' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x9C:
+		{ /* '0x9C' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x9D:
+		{ /* '0x9D' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x9E:
+		{ /* '0x9E' */
+			return ParameterType_UNKNOWN
+		}
+	case 0x9F:
+		{ /* '0x9F' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA0:
+		{ /* '0xA0' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA1:
+		{ /* '0xA1' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA2:
+		{ /* '0xA2' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA3:
+		{ /* '0xA3' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA4:
+		{ /* '0xA4' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA5:
+		{ /* '0xA5' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA6:
+		{ /* '0xA6' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA7:
+		{ /* '0xA7' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA8:
+		{ /* '0xA8' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xA9:
+		{ /* '0xA9' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xAA:
+		{ /* '0xAA' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xAB:
+		{ /* '0xAB' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xAC:
+		{ /* '0xAC' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xAD:
+		{ /* '0xAD' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xAE:
+		{ /* '0xAE' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xAF:
+		{ /* '0xAF' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB0:
+		{ /* '0xB0' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB1:
+		{ /* '0xB1' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB2:
+		{ /* '0xB2' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB3:
+		{ /* '0xB3' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB4:
+		{ /* '0xB4' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB5:
+		{ /* '0xB5' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB6:
+		{ /* '0xB6' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB7:
+		{ /* '0xB7' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB8:
+		{ /* '0xB8' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xB9:
+		{ /* '0xB9' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xBA:
+		{ /* '0xBA' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xBB:
+		{ /* '0xBB' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xBC:
+		{ /* '0xBC' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xBD:
+		{ /* '0xBD' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xBE:
+		{ /* '0xBE' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xBF:
+		{ /* '0xBF' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC0:
+		{ /* '0xC0' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC1:
+		{ /* '0xC1' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC2:
+		{ /* '0xC2' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC3:
+		{ /* '0xC3' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC4:
+		{ /* '0xC4' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC5:
+		{ /* '0xC5' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC6:
+		{ /* '0xC6' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC7:
+		{ /* '0xC7' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC8:
+		{ /* '0xC8' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xC9:
+		{ /* '0xC9' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xCA:
+		{ /* '0xCA' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xCB:
+		{ /* '0xCB' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xCC:
+		{ /* '0xCC' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xCD:
+		{ /* '0xCD' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xCE:
+		{ /* '0xCE' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xCF:
+		{ /* '0xCF' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD0:
+		{ /* '0xD0' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD1:
+		{ /* '0xD1' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD2:
+		{ /* '0xD2' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD3:
+		{ /* '0xD3' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD4:
+		{ /* '0xD4' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD5:
+		{ /* '0xD5' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD6:
+		{ /* '0xD6' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD7:
+		{ /* '0xD7' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD8:
+		{ /* '0xD8' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xD9:
+		{ /* '0xD9' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xDA:
+		{ /* '0xDA' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xDB:
+		{ /* '0xDB' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xDC:
+		{ /* '0xDC' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xDD:
+		{ /* '0xDD' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xDE:
+		{ /* '0xDE' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xDF:
+		{ /* '0xDF' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE0:
+		{ /* '0xE0' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE1:
+		{ /* '0xE1' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE2:
+		{ /* '0xE2' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE3:
+		{ /* '0xE3' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE4:
+		{ /* '0xE4' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE5:
+		{ /* '0xE5' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE6:
+		{ /* '0xE6' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE7:
+		{ /* '0xE7' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE8:
+		{ /* '0xE8' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xE9:
+		{ /* '0xE9' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xEA:
+		{ /* '0xEA' */
+			return ParameterType_UNKNOWN
+		}
+	case 0xEB:
+		{ /* '0xEB' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xEC:
+		{ /* '0xEC' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xED:
+		{ /* '0xED' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xEE:
+		{ /* '0xEE' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xEF:
+		{ /* '0xEF' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xF0:
+		{ /* '0xF0' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xF1:
+		{ /* '0xF1' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xF2:
+		{ /* '0xF2' */
+			return ParameterType_CUSTOM_MANUFACTURER
+		}
+	case 0xF3:
+		{ /* '0xF3' */
+			return ParameterType_SERIAL_NUMBER
+		}
+	case 0xF4:
+		{ /* '0xF4' */
+			return ParameterType_SERIAL_NUMBER
+		}
+	case 0xF5:
+		{ /* '0xF5' */
+			return ParameterType_SERIAL_NUMBER
+		}
+	case 0xF6:
+		{ /* '0xF6' */
+			return ParameterType_SERIAL_NUMBER
+		}
+	case 0xF7:
+		{ /* '0xF7' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xF8:
+		{ /* '0xF8' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xF9:
+		{ /* '0xF9' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xFA:
+		{ /* '0xFA' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xFB:
+		{ /* '0xFB' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xFC:
+		{ /* '0xFC' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xFD:
+		{ /* '0xFD' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xFE:
+		{ /* '0xFE' */
+			return ParameterType_CUSTOM_TYPE
+		}
+	case 0xFF:
+		{ /* '0xFF' */
+			return ParameterType_UNKNOWN
+		}
+	default:
+		{
+			return 0
+		}
+	}
+}
+
+func ParameterFirstEnumForFieldParameterType(value ParameterType) (Parameter, error) {
+	for _, sizeValue := range ParameterValues {
+		if sizeValue.ParameterType() == value {
+			return sizeValue, nil
+		}
+	}
+	return 0, errors.Errorf("enum for %v describing ParameterType not found", value)
+}
+
 func (e Parameter) Form() string {
 	switch e {
 	case 0x00:
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterType.go b/plc4go/protocols/cbus/readwrite/model/ParameterType.go
new file mode 100644
index 000000000..99726d270
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterType.go
@@ -0,0 +1,201 @@
+/*
+ * 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
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+	"github.com/rs/zerolog/log"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterType is an enum
+type ParameterType uint8
+
+type IParameterType interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	ParameterType_UNKNOWN                               ParameterType = 0
+	ParameterType_APPLICATION_ADDRESS_1                 ParameterType = 1
+	ParameterType_APPLICATION_ADDRESS_2                 ParameterType = 2
+	ParameterType_INTERFACE_OPTIONS_1                   ParameterType = 3
+	ParameterType_INTERFACE_OPTIONS_2                   ParameterType = 4
+	ParameterType_INTERFACE_OPTIONS_3                   ParameterType = 5
+	ParameterType_BAUD_RATE_SELECTOR                    ParameterType = 6
+	ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS ParameterType = 7
+	ParameterType_CUSTOM_MANUFACTURER                   ParameterType = 8
+	ParameterType_SERIAL_NUMBER                         ParameterType = 9
+	ParameterType_CUSTOM_TYPE                           ParameterType = 10
+)
+
+var ParameterTypeValues []ParameterType
+
+func init() {
+	_ = errors.New
+	ParameterTypeValues = []ParameterType{
+		ParameterType_UNKNOWN,
+		ParameterType_APPLICATION_ADDRESS_1,
+		ParameterType_APPLICATION_ADDRESS_2,
+		ParameterType_INTERFACE_OPTIONS_1,
+		ParameterType_INTERFACE_OPTIONS_2,
+		ParameterType_INTERFACE_OPTIONS_3,
+		ParameterType_BAUD_RATE_SELECTOR,
+		ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS,
+		ParameterType_CUSTOM_MANUFACTURER,
+		ParameterType_SERIAL_NUMBER,
+		ParameterType_CUSTOM_TYPE,
+	}
+}
+
+func ParameterTypeByValue(value uint8) (enum ParameterType, ok bool) {
+	switch value {
+	case 0:
+		return ParameterType_UNKNOWN, true
+	case 1:
+		return ParameterType_APPLICATION_ADDRESS_1, true
+	case 10:
+		return ParameterType_CUSTOM_TYPE, true
+	case 2:
+		return ParameterType_APPLICATION_ADDRESS_2, true
+	case 3:
+		return ParameterType_INTERFACE_OPTIONS_1, true
+	case 4:
+		return ParameterType_INTERFACE_OPTIONS_2, true
+	case 5:
+		return ParameterType_INTERFACE_OPTIONS_3, true
+	case 6:
+		return ParameterType_BAUD_RATE_SELECTOR, true
+	case 7:
+		return ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS, true
+	case 8:
+		return ParameterType_CUSTOM_MANUFACTURER, true
+	case 9:
+		return ParameterType_SERIAL_NUMBER, true
+	}
+	return 0, false
+}
+
+func ParameterTypeByName(value string) (enum ParameterType, ok bool) {
+	switch value {
+	case "UNKNOWN":
+		return ParameterType_UNKNOWN, true
+	case "APPLICATION_ADDRESS_1":
+		return ParameterType_APPLICATION_ADDRESS_1, true
+	case "CUSTOM_TYPE":
+		return ParameterType_CUSTOM_TYPE, true
+	case "APPLICATION_ADDRESS_2":
+		return ParameterType_APPLICATION_ADDRESS_2, true
+	case "INTERFACE_OPTIONS_1":
+		return ParameterType_INTERFACE_OPTIONS_1, true
+	case "INTERFACE_OPTIONS_2":
+		return ParameterType_INTERFACE_OPTIONS_2, true
+	case "INTERFACE_OPTIONS_3":
+		return ParameterType_INTERFACE_OPTIONS_3, true
+	case "BAUD_RATE_SELECTOR":
+		return ParameterType_BAUD_RATE_SELECTOR, true
+	case "INTERFACE_OPTIONS_1_POWER_UP_SETTINGS":
+		return ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS, true
+	case "CUSTOM_MANUFACTURER":
+		return ParameterType_CUSTOM_MANUFACTURER, true
+	case "SERIAL_NUMBER":
+		return ParameterType_SERIAL_NUMBER, true
+	}
+	return 0, false
+}
+
+func ParameterTypeKnows(value uint8) bool {
+	for _, typeValue := range ParameterTypeValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastParameterType(structType interface{}) ParameterType {
+	castFunc := func(typ interface{}) ParameterType {
+		if sParameterType, ok := typ.(ParameterType); ok {
+			return sParameterType
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m ParameterType) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m ParameterType) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterTypeParse(readBuffer utils.ReadBuffer) (ParameterType, error) {
+	val, err := readBuffer.ReadUint8("ParameterType", 8)
+	if err != nil {
+		return 0, errors.Wrap(err, "error reading ParameterType")
+	}
+	if enum, ok := ParameterTypeByValue(val); !ok {
+		log.Debug().Msgf("no value %x found for RequestType", val)
+		return ParameterType(val), nil
+	} else {
+		return enum, nil
+	}
+}
+
+func (e ParameterType) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("ParameterType", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.PLC4XEnumName()))
+}
+
+// PLC4XEnumName returns the name that is used in code to identify this enum
+func (e ParameterType) PLC4XEnumName() string {
+	switch e {
+	case ParameterType_UNKNOWN:
+		return "UNKNOWN"
+	case ParameterType_APPLICATION_ADDRESS_1:
+		return "APPLICATION_ADDRESS_1"
+	case ParameterType_CUSTOM_TYPE:
+		return "CUSTOM_TYPE"
+	case ParameterType_APPLICATION_ADDRESS_2:
+		return "APPLICATION_ADDRESS_2"
+	case ParameterType_INTERFACE_OPTIONS_1:
+		return "INTERFACE_OPTIONS_1"
+	case ParameterType_INTERFACE_OPTIONS_2:
+		return "INTERFACE_OPTIONS_2"
+	case ParameterType_INTERFACE_OPTIONS_3:
+		return "INTERFACE_OPTIONS_3"
+	case ParameterType_BAUD_RATE_SELECTOR:
+		return "BAUD_RATE_SELECTOR"
+	case ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS:
+		return "INTERFACE_OPTIONS_1_POWER_UP_SETTINGS"
+	case ParameterType_CUSTOM_MANUFACTURER:
+		return "CUSTOM_MANUFACTURER"
+	case ParameterType_SERIAL_NUMBER:
+		return "SERIAL_NUMBER"
+	}
+	return ""
+}
+
+func (e ParameterType) String() string {
+	return e.PLC4XEnumName()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValue.go b/plc4go/protocols/cbus/readwrite/model/ParameterValue.go
new file mode 100644
index 000000000..77c1c56d2
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValue.go
@@ -0,0 +1,205 @@
+/*
+ * 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
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValue is the corresponding interface of ParameterValue
+type ParameterValue interface {
+	utils.LengthAware
+	utils.Serializable
+	// GetParameterType returns ParameterType (discriminator field)
+	GetParameterType() ParameterType
+}
+
+// ParameterValueExactly can be used when we want exactly this type and not a type which fulfills ParameterValue.
+// This is useful for switch cases.
+type ParameterValueExactly interface {
+	ParameterValue
+	isParameterValue() bool
+}
+
+// _ParameterValue is the data-structure of this message
+type _ParameterValue struct {
+	_ParameterValueChildRequirements
+
+	// Arguments.
+	NumBytes uint8
+}
+
+type _ParameterValueChildRequirements interface {
+	utils.Serializable
+	GetLengthInBits() uint16
+	GetLengthInBitsConditional(lastItem bool) uint16
+	GetParameterType() ParameterType
+}
+
+type ParameterValueParent interface {
+	SerializeParent(writeBuffer utils.WriteBuffer, child ParameterValue, serializeChildFunction func() error) error
+	GetTypeName() string
+}
+
+type ParameterValueChild interface {
+	utils.Serializable
+	InitializeParent(parent ParameterValue)
+	GetParent() *ParameterValue
+
+	GetTypeName() string
+	ParameterValue
+}
+
+// NewParameterValue factory function for _ParameterValue
+func NewParameterValue(numBytes uint8) *_ParameterValue {
+	return &_ParameterValue{NumBytes: numBytes}
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValue(structType interface{}) ParameterValue {
+	if casted, ok := structType.(ParameterValue); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValue); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValue) GetTypeName() string {
+	return "ParameterValue"
+}
+
+func (m *_ParameterValue) GetParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
+
+	return lengthInBits
+}
+
+func (m *_ParameterValue) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValue, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValue"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValue")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	type ParameterValueChildSerializeRequirement interface {
+		ParameterValue
+		InitializeParent(ParameterValue)
+		GetParent() ParameterValue
+	}
+	var _childTemp interface{}
+	var _child ParameterValueChildSerializeRequirement
+	var typeSwitchError error
+	switch {
+	case parameterType == ParameterType_APPLICATION_ADDRESS_1: // ParameterValueApplicationAddress1
+		_childTemp, typeSwitchError = ParameterValueApplicationAddress1Parse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_APPLICATION_ADDRESS_2: // ParameterValueApplicationAddress2
+		_childTemp, typeSwitchError = ParameterValueApplicationAddress2Parse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_INTERFACE_OPTIONS_1: // ParameterValueInterfaceOptions1
+		_childTemp, typeSwitchError = ParameterValueInterfaceOptions1Parse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_BAUD_RATE_SELECTOR: // ParameterValueBaudRateSelector
+		_childTemp, typeSwitchError = ParameterValueBaudRateSelectorParse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_INTERFACE_OPTIONS_2: // ParameterValueInterfaceOptions2
+		_childTemp, typeSwitchError = ParameterValueInterfaceOptions2Parse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS: // ParameterValueInterfaceOptions1PowerUpSettings
+		_childTemp, typeSwitchError = ParameterValueInterfaceOptions1PowerUpSettingsParse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_INTERFACE_OPTIONS_3: // ParameterValueInterfaceOptions3
+		_childTemp, typeSwitchError = ParameterValueInterfaceOptions3Parse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_CUSTOM_MANUFACTURER: // ParameterValueCustomManufacturer
+		_childTemp, typeSwitchError = ParameterValueCustomManufacturerParse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_SERIAL_NUMBER: // ParameterValueSerialNumber
+		_childTemp, typeSwitchError = ParameterValueSerialNumberParse(readBuffer, parameterType, numBytes)
+	case parameterType == ParameterType_CUSTOM_TYPE: // ParameterValueCustomTypes
+		_childTemp, typeSwitchError = ParameterValueCustomTypesParse(readBuffer, parameterType, numBytes)
+	case 0 == 0: // ParameterValueRaw
+		_childTemp, typeSwitchError = ParameterValueRawParse(readBuffer, parameterType, numBytes)
+	default:
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [parameterType=%v]", parameterType)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ParameterValue")
+	}
+	_child = _childTemp.(ParameterValueChildSerializeRequirement)
+
+	if closeErr := readBuffer.CloseContext("ParameterValue"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValue")
+	}
+
+	// Finish initializing
+	_child.InitializeParent(_child)
+	return _child, nil
+}
+
+func (pm *_ParameterValue) SerializeParent(writeBuffer utils.WriteBuffer, child ParameterValue, serializeChildFunction func() error) error {
+	// We redirect all calls through client as some methods are only implemented there
+	m := child
+	_ = m
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("ParameterValue"); pushErr != nil {
+		return errors.Wrap(pushErr, "Error pushing for ParameterValue")
+	}
+
+	// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+	if _typeSwitchErr := serializeChildFunction(); _typeSwitchErr != nil {
+		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
+	}
+
+	if popErr := writeBuffer.PopContext("ParameterValue"); popErr != nil {
+		return errors.Wrap(popErr, "Error popping for ParameterValue")
+	}
+	return nil
+}
+
+////
+// Arguments Getter
+
+func (m *_ParameterValue) GetNumBytes() uint8 {
+	return m.NumBytes
+}
+
+//
+////
+
+func (m *_ParameterValue) isParameterValue() bool {
+	return true
+}
+
+func (m *_ParameterValue) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress1.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress1.go
new file mode 100644
index 000000000..c10c4136f
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress1.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueApplicationAddress1 is the corresponding interface of ParameterValueApplicationAddress1
+type ParameterValueApplicationAddress1 interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() ApplicationAddress1
+}
+
+// ParameterValueApplicationAddress1Exactly can be used when we want exactly this type and not a type which fulfills ParameterValueApplicationAddress1.
+// This is useful for switch cases.
+type ParameterValueApplicationAddress1Exactly interface {
+	ParameterValueApplicationAddress1
+	isParameterValueApplicationAddress1() bool
+}
+
+// _ParameterValueApplicationAddress1 is the data-structure of this message
+type _ParameterValueApplicationAddress1 struct {
+	*_ParameterValue
+	Value ApplicationAddress1
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueApplicationAddress1) GetParameterType() ParameterType {
+	return ParameterType_APPLICATION_ADDRESS_1
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueApplicationAddress1) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueApplicationAddress1) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueApplicationAddress1) GetValue() ApplicationAddress1 {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueApplicationAddress1 factory function for _ParameterValueApplicationAddress1
+func NewParameterValueApplicationAddress1(value ApplicationAddress1, numBytes uint8) *_ParameterValueApplicationAddress1 {
+	_result := &_ParameterValueApplicationAddress1{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueApplicationAddress1(structType interface{}) ParameterValueApplicationAddress1 {
+	if casted, ok := structType.(ParameterValueApplicationAddress1); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueApplicationAddress1); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueApplicationAddress1) GetTypeName() string {
+	return "ParameterValueApplicationAddress1"
+}
+
+func (m *_ParameterValueApplicationAddress1) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueApplicationAddress1) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueApplicationAddress1) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueApplicationAddress1Parse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueApplicationAddress1, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueApplicationAddress1"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueApplicationAddress1")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"ApplicationAddress1 has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := ApplicationAddress1Parse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueApplicationAddress1")
+	}
+	value := _value.(ApplicationAddress1)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueApplicationAddress1"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueApplicationAddress1")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueApplicationAddress1{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueApplicationAddress1) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueApplicationAddress1"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueApplicationAddress1")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueApplicationAddress1"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueApplicationAddress1")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueApplicationAddress1) isParameterValueApplicationAddress1() bool {
+	return true
+}
+
+func (m *_ParameterValueApplicationAddress1) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress2.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress2.go
new file mode 100644
index 000000000..2fc21e1cc
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueApplicationAddress2.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueApplicationAddress2 is the corresponding interface of ParameterValueApplicationAddress2
+type ParameterValueApplicationAddress2 interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() ApplicationAddress1
+}
+
+// ParameterValueApplicationAddress2Exactly can be used when we want exactly this type and not a type which fulfills ParameterValueApplicationAddress2.
+// This is useful for switch cases.
+type ParameterValueApplicationAddress2Exactly interface {
+	ParameterValueApplicationAddress2
+	isParameterValueApplicationAddress2() bool
+}
+
+// _ParameterValueApplicationAddress2 is the data-structure of this message
+type _ParameterValueApplicationAddress2 struct {
+	*_ParameterValue
+	Value ApplicationAddress1
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueApplicationAddress2) GetParameterType() ParameterType {
+	return ParameterType_APPLICATION_ADDRESS_2
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueApplicationAddress2) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueApplicationAddress2) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueApplicationAddress2) GetValue() ApplicationAddress1 {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueApplicationAddress2 factory function for _ParameterValueApplicationAddress2
+func NewParameterValueApplicationAddress2(value ApplicationAddress1, numBytes uint8) *_ParameterValueApplicationAddress2 {
+	_result := &_ParameterValueApplicationAddress2{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueApplicationAddress2(structType interface{}) ParameterValueApplicationAddress2 {
+	if casted, ok := structType.(ParameterValueApplicationAddress2); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueApplicationAddress2); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueApplicationAddress2) GetTypeName() string {
+	return "ParameterValueApplicationAddress2"
+}
+
+func (m *_ParameterValueApplicationAddress2) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueApplicationAddress2) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueApplicationAddress2) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueApplicationAddress2Parse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueApplicationAddress2, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueApplicationAddress2"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueApplicationAddress2")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"ApplicationAddress2 has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := ApplicationAddress1Parse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueApplicationAddress2")
+	}
+	value := _value.(ApplicationAddress1)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueApplicationAddress2"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueApplicationAddress2")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueApplicationAddress2{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueApplicationAddress2) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueApplicationAddress2"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueApplicationAddress2")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueApplicationAddress2"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueApplicationAddress2")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueApplicationAddress2) isParameterValueApplicationAddress2() bool {
+	return true
+}
+
+func (m *_ParameterValueApplicationAddress2) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueBaudRateSelector.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueBaudRateSelector.go
new file mode 100644
index 000000000..ea08078b5
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueBaudRateSelector.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueBaudRateSelector is the corresponding interface of ParameterValueBaudRateSelector
+type ParameterValueBaudRateSelector interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() BaudRateSelector
+}
+
+// ParameterValueBaudRateSelectorExactly can be used when we want exactly this type and not a type which fulfills ParameterValueBaudRateSelector.
+// This is useful for switch cases.
+type ParameterValueBaudRateSelectorExactly interface {
+	ParameterValueBaudRateSelector
+	isParameterValueBaudRateSelector() bool
+}
+
+// _ParameterValueBaudRateSelector is the data-structure of this message
+type _ParameterValueBaudRateSelector struct {
+	*_ParameterValue
+	Value BaudRateSelector
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueBaudRateSelector) GetParameterType() ParameterType {
+	return ParameterType_BAUD_RATE_SELECTOR
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueBaudRateSelector) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueBaudRateSelector) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueBaudRateSelector) GetValue() BaudRateSelector {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueBaudRateSelector factory function for _ParameterValueBaudRateSelector
+func NewParameterValueBaudRateSelector(value BaudRateSelector, numBytes uint8) *_ParameterValueBaudRateSelector {
+	_result := &_ParameterValueBaudRateSelector{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueBaudRateSelector(structType interface{}) ParameterValueBaudRateSelector {
+	if casted, ok := structType.(ParameterValueBaudRateSelector); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueBaudRateSelector); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueBaudRateSelector) GetTypeName() string {
+	return "ParameterValueBaudRateSelector"
+}
+
+func (m *_ParameterValueBaudRateSelector) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueBaudRateSelector) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueBaudRateSelector) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueBaudRateSelectorParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueBaudRateSelector, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueBaudRateSelector"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueBaudRateSelector")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"BaudRateSelector has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := BaudRateSelectorParse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueBaudRateSelector")
+	}
+	value := _value
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueBaudRateSelector"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueBaudRateSelector")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueBaudRateSelector{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueBaudRateSelector) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueBaudRateSelector"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueBaudRateSelector")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueBaudRateSelector"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueBaudRateSelector")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueBaudRateSelector) isParameterValueBaudRateSelector() bool {
+	return true
+}
+
+func (m *_ParameterValueBaudRateSelector) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueCustomManufacturer.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueCustomManufacturer.go
new file mode 100644
index 000000000..c607cff61
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueCustomManufacturer.go
@@ -0,0 +1,205 @@
+/*
+ * 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
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueCustomManufacturer is the corresponding interface of ParameterValueCustomManufacturer
+type ParameterValueCustomManufacturer interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() CustomManufacturer
+}
+
+// ParameterValueCustomManufacturerExactly can be used when we want exactly this type and not a type which fulfills ParameterValueCustomManufacturer.
+// This is useful for switch cases.
+type ParameterValueCustomManufacturerExactly interface {
+	ParameterValueCustomManufacturer
+	isParameterValueCustomManufacturer() bool
+}
+
+// _ParameterValueCustomManufacturer is the data-structure of this message
+type _ParameterValueCustomManufacturer struct {
+	*_ParameterValue
+	Value CustomManufacturer
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueCustomManufacturer) GetParameterType() ParameterType {
+	return ParameterType_CUSTOM_MANUFACTURER
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueCustomManufacturer) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueCustomManufacturer) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueCustomManufacturer) GetValue() CustomManufacturer {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueCustomManufacturer factory function for _ParameterValueCustomManufacturer
+func NewParameterValueCustomManufacturer(value CustomManufacturer, numBytes uint8) *_ParameterValueCustomManufacturer {
+	_result := &_ParameterValueCustomManufacturer{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueCustomManufacturer(structType interface{}) ParameterValueCustomManufacturer {
+	if casted, ok := structType.(ParameterValueCustomManufacturer); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueCustomManufacturer); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueCustomManufacturer) GetTypeName() string {
+	return "ParameterValueCustomManufacturer"
+}
+
+func (m *_ParameterValueCustomManufacturer) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueCustomManufacturer) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueCustomManufacturer) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueCustomManufacturerParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueCustomManufacturer, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueCustomManufacturer"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueCustomManufacturer")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := CustomManufacturerParse(readBuffer, uint8(numBytes))
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueCustomManufacturer")
+	}
+	value := _value.(CustomManufacturer)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueCustomManufacturer"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueCustomManufacturer")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueCustomManufacturer{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueCustomManufacturer) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueCustomManufacturer"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueCustomManufacturer")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueCustomManufacturer"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueCustomManufacturer")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueCustomManufacturer) isParameterValueCustomManufacturer() bool {
+	return true
+}
+
+func (m *_ParameterValueCustomManufacturer) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueCustomTypes.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueCustomTypes.go
new file mode 100644
index 000000000..db484d9c8
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueCustomTypes.go
@@ -0,0 +1,205 @@
+/*
+ * 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
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueCustomTypes is the corresponding interface of ParameterValueCustomTypes
+type ParameterValueCustomTypes interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() CustomTypes
+}
+
+// ParameterValueCustomTypesExactly can be used when we want exactly this type and not a type which fulfills ParameterValueCustomTypes.
+// This is useful for switch cases.
+type ParameterValueCustomTypesExactly interface {
+	ParameterValueCustomTypes
+	isParameterValueCustomTypes() bool
+}
+
+// _ParameterValueCustomTypes is the data-structure of this message
+type _ParameterValueCustomTypes struct {
+	*_ParameterValue
+	Value CustomTypes
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueCustomTypes) GetParameterType() ParameterType {
+	return ParameterType_CUSTOM_TYPE
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueCustomTypes) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueCustomTypes) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueCustomTypes) GetValue() CustomTypes {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueCustomTypes factory function for _ParameterValueCustomTypes
+func NewParameterValueCustomTypes(value CustomTypes, numBytes uint8) *_ParameterValueCustomTypes {
+	_result := &_ParameterValueCustomTypes{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueCustomTypes(structType interface{}) ParameterValueCustomTypes {
+	if casted, ok := structType.(ParameterValueCustomTypes); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueCustomTypes); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueCustomTypes) GetTypeName() string {
+	return "ParameterValueCustomTypes"
+}
+
+func (m *_ParameterValueCustomTypes) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueCustomTypes) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueCustomTypes) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueCustomTypesParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueCustomTypes, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueCustomTypes"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueCustomTypes")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := CustomTypesParse(readBuffer, uint8(numBytes))
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueCustomTypes")
+	}
+	value := _value.(CustomTypes)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueCustomTypes"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueCustomTypes")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueCustomTypes{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueCustomTypes) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueCustomTypes"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueCustomTypes")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueCustomTypes"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueCustomTypes")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueCustomTypes) isParameterValueCustomTypes() bool {
+	return true
+}
+
+func (m *_ParameterValueCustomTypes) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1.go
new file mode 100644
index 000000000..d387d11f6
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueInterfaceOptions1 is the corresponding interface of ParameterValueInterfaceOptions1
+type ParameterValueInterfaceOptions1 interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() InterfaceOptions1
+}
+
+// ParameterValueInterfaceOptions1Exactly can be used when we want exactly this type and not a type which fulfills ParameterValueInterfaceOptions1.
+// This is useful for switch cases.
+type ParameterValueInterfaceOptions1Exactly interface {
+	ParameterValueInterfaceOptions1
+	isParameterValueInterfaceOptions1() bool
+}
+
+// _ParameterValueInterfaceOptions1 is the data-structure of this message
+type _ParameterValueInterfaceOptions1 struct {
+	*_ParameterValue
+	Value InterfaceOptions1
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions1) GetParameterType() ParameterType {
+	return ParameterType_INTERFACE_OPTIONS_1
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueInterfaceOptions1) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueInterfaceOptions1) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions1) GetValue() InterfaceOptions1 {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueInterfaceOptions1 factory function for _ParameterValueInterfaceOptions1
+func NewParameterValueInterfaceOptions1(value InterfaceOptions1, numBytes uint8) *_ParameterValueInterfaceOptions1 {
+	_result := &_ParameterValueInterfaceOptions1{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueInterfaceOptions1(structType interface{}) ParameterValueInterfaceOptions1 {
+	if casted, ok := structType.(ParameterValueInterfaceOptions1); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueInterfaceOptions1); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueInterfaceOptions1) GetTypeName() string {
+	return "ParameterValueInterfaceOptions1"
+}
+
+func (m *_ParameterValueInterfaceOptions1) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueInterfaceOptions1) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueInterfaceOptions1) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueInterfaceOptions1Parse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueInterfaceOptions1, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueInterfaceOptions1"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueInterfaceOptions1")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"InterfaceOptions1 has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := InterfaceOptions1Parse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueInterfaceOptions1")
+	}
+	value := _value.(InterfaceOptions1)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueInterfaceOptions1"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueInterfaceOptions1")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueInterfaceOptions1{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueInterfaceOptions1) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueInterfaceOptions1"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueInterfaceOptions1")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueInterfaceOptions1"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueInterfaceOptions1")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueInterfaceOptions1) isParameterValueInterfaceOptions1() bool {
+	return true
+}
+
+func (m *_ParameterValueInterfaceOptions1) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1PowerUpSettings.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1PowerUpSettings.go
new file mode 100644
index 000000000..a5ef961e1
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions1PowerUpSettings.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueInterfaceOptions1PowerUpSettings is the corresponding interface of ParameterValueInterfaceOptions1PowerUpSettings
+type ParameterValueInterfaceOptions1PowerUpSettings interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() InterfaceOptions1PowerUpSettings
+}
+
+// ParameterValueInterfaceOptions1PowerUpSettingsExactly can be used when we want exactly this type and not a type which fulfills ParameterValueInterfaceOptions1PowerUpSettings.
+// This is useful for switch cases.
+type ParameterValueInterfaceOptions1PowerUpSettingsExactly interface {
+	ParameterValueInterfaceOptions1PowerUpSettings
+	isParameterValueInterfaceOptions1PowerUpSettings() bool
+}
+
+// _ParameterValueInterfaceOptions1PowerUpSettings is the data-structure of this message
+type _ParameterValueInterfaceOptions1PowerUpSettings struct {
+	*_ParameterValue
+	Value InterfaceOptions1PowerUpSettings
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetParameterType() ParameterType {
+	return ParameterType_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetValue() InterfaceOptions1PowerUpSettings {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueInterfaceOptions1PowerUpSettings factory function for _ParameterValueInterfaceOptions1PowerUpSettings
+func NewParameterValueInterfaceOptions1PowerUpSettings(value InterfaceOptions1PowerUpSettings, numBytes uint8) *_ParameterValueInterfaceOptions1PowerUpSettings {
+	_result := &_ParameterValueInterfaceOptions1PowerUpSettings{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueInterfaceOptions1PowerUpSettings(structType interface{}) ParameterValueInterfaceOptions1PowerUpSettings {
+	if casted, ok := structType.(ParameterValueInterfaceOptions1PowerUpSettings); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueInterfaceOptions1PowerUpSettings); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetTypeName() string {
+	return "ParameterValueInterfaceOptions1PowerUpSettings"
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueInterfaceOptions1PowerUpSettingsParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueInterfaceOptions1PowerUpSettings, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueInterfaceOptions1PowerUpSettings"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueInterfaceOptions1PowerUpSettings")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"InterfaceOptions1PowerUpSettings has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := InterfaceOptions1PowerUpSettingsParse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueInterfaceOptions1PowerUpSettings")
+	}
+	value := _value.(InterfaceOptions1PowerUpSettings)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueInterfaceOptions1PowerUpSettings"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueInterfaceOptions1PowerUpSettings")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueInterfaceOptions1PowerUpSettings{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueInterfaceOptions1PowerUpSettings"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueInterfaceOptions1PowerUpSettings")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueInterfaceOptions1PowerUpSettings"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueInterfaceOptions1PowerUpSettings")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) isParameterValueInterfaceOptions1PowerUpSettings() bool {
+	return true
+}
+
+func (m *_ParameterValueInterfaceOptions1PowerUpSettings) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions2.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions2.go
new file mode 100644
index 000000000..bd887e0f9
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions2.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueInterfaceOptions2 is the corresponding interface of ParameterValueInterfaceOptions2
+type ParameterValueInterfaceOptions2 interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() InterfaceOptions2
+}
+
+// ParameterValueInterfaceOptions2Exactly can be used when we want exactly this type and not a type which fulfills ParameterValueInterfaceOptions2.
+// This is useful for switch cases.
+type ParameterValueInterfaceOptions2Exactly interface {
+	ParameterValueInterfaceOptions2
+	isParameterValueInterfaceOptions2() bool
+}
+
+// _ParameterValueInterfaceOptions2 is the data-structure of this message
+type _ParameterValueInterfaceOptions2 struct {
+	*_ParameterValue
+	Value InterfaceOptions2
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions2) GetParameterType() ParameterType {
+	return ParameterType_INTERFACE_OPTIONS_2
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueInterfaceOptions2) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueInterfaceOptions2) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions2) GetValue() InterfaceOptions2 {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueInterfaceOptions2 factory function for _ParameterValueInterfaceOptions2
+func NewParameterValueInterfaceOptions2(value InterfaceOptions2, numBytes uint8) *_ParameterValueInterfaceOptions2 {
+	_result := &_ParameterValueInterfaceOptions2{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueInterfaceOptions2(structType interface{}) ParameterValueInterfaceOptions2 {
+	if casted, ok := structType.(ParameterValueInterfaceOptions2); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueInterfaceOptions2); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueInterfaceOptions2) GetTypeName() string {
+	return "ParameterValueInterfaceOptions2"
+}
+
+func (m *_ParameterValueInterfaceOptions2) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueInterfaceOptions2) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueInterfaceOptions2) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueInterfaceOptions2Parse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueInterfaceOptions2, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueInterfaceOptions2"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueInterfaceOptions2")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"InterfaceOptions2 has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := InterfaceOptions2Parse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueInterfaceOptions2")
+	}
+	value := _value.(InterfaceOptions2)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueInterfaceOptions2"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueInterfaceOptions2")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueInterfaceOptions2{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueInterfaceOptions2) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueInterfaceOptions2"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueInterfaceOptions2")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueInterfaceOptions2"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueInterfaceOptions2")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueInterfaceOptions2) isParameterValueInterfaceOptions2() bool {
+	return true
+}
+
+func (m *_ParameterValueInterfaceOptions2) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions3.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions3.go
new file mode 100644
index 000000000..bd76290ac
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueInterfaceOptions3.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueInterfaceOptions3 is the corresponding interface of ParameterValueInterfaceOptions3
+type ParameterValueInterfaceOptions3 interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() InterfaceOptions3
+}
+
+// ParameterValueInterfaceOptions3Exactly can be used when we want exactly this type and not a type which fulfills ParameterValueInterfaceOptions3.
+// This is useful for switch cases.
+type ParameterValueInterfaceOptions3Exactly interface {
+	ParameterValueInterfaceOptions3
+	isParameterValueInterfaceOptions3() bool
+}
+
+// _ParameterValueInterfaceOptions3 is the data-structure of this message
+type _ParameterValueInterfaceOptions3 struct {
+	*_ParameterValue
+	Value InterfaceOptions3
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions3) GetParameterType() ParameterType {
+	return ParameterType_INTERFACE_OPTIONS_3
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueInterfaceOptions3) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueInterfaceOptions3) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueInterfaceOptions3) GetValue() InterfaceOptions3 {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueInterfaceOptions3 factory function for _ParameterValueInterfaceOptions3
+func NewParameterValueInterfaceOptions3(value InterfaceOptions3, numBytes uint8) *_ParameterValueInterfaceOptions3 {
+	_result := &_ParameterValueInterfaceOptions3{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueInterfaceOptions3(structType interface{}) ParameterValueInterfaceOptions3 {
+	if casted, ok := structType.(ParameterValueInterfaceOptions3); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueInterfaceOptions3); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueInterfaceOptions3) GetTypeName() string {
+	return "ParameterValueInterfaceOptions3"
+}
+
+func (m *_ParameterValueInterfaceOptions3) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueInterfaceOptions3) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueInterfaceOptions3) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueInterfaceOptions3Parse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueInterfaceOptions3, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueInterfaceOptions3"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueInterfaceOptions3")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (1))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"InterfaceOptions3 has exactly one byte"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := InterfaceOptions3Parse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueInterfaceOptions3")
+	}
+	value := _value.(InterfaceOptions3)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueInterfaceOptions3"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueInterfaceOptions3")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueInterfaceOptions3{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueInterfaceOptions3) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueInterfaceOptions3"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueInterfaceOptions3")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueInterfaceOptions3"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueInterfaceOptions3")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueInterfaceOptions3) isParameterValueInterfaceOptions3() bool {
+	return true
+}
+
+func (m *_ParameterValueInterfaceOptions3) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueRaw.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueRaw.go
new file mode 100644
index 000000000..12bdcc13e
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueRaw.go
@@ -0,0 +1,194 @@
+/*
+ * 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
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueRaw is the corresponding interface of ParameterValueRaw
+type ParameterValueRaw interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetData returns Data (property field)
+	GetData() []byte
+}
+
+// ParameterValueRawExactly can be used when we want exactly this type and not a type which fulfills ParameterValueRaw.
+// This is useful for switch cases.
+type ParameterValueRawExactly interface {
+	ParameterValueRaw
+	isParameterValueRaw() bool
+}
+
+// _ParameterValueRaw is the data-structure of this message
+type _ParameterValueRaw struct {
+	*_ParameterValue
+	Data []byte
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueRaw) GetParameterType() ParameterType {
+	return 0
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueRaw) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueRaw) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueRaw) GetData() []byte {
+	return m.Data
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueRaw factory function for _ParameterValueRaw
+func NewParameterValueRaw(data []byte, numBytes uint8) *_ParameterValueRaw {
+	_result := &_ParameterValueRaw{
+		Data:            data,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueRaw(structType interface{}) ParameterValueRaw {
+	if casted, ok := structType.(ParameterValueRaw); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueRaw); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueRaw) GetTypeName() string {
+	return "ParameterValueRaw"
+}
+
+func (m *_ParameterValueRaw) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueRaw) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Array field
+	if len(m.Data) > 0 {
+		lengthInBits += 8 * uint16(len(m.Data))
+	}
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueRaw) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueRawParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueRaw, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueRaw"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueRaw")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+	// Byte Array field (data)
+	numberOfBytesdata := int(numBytes)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
+	if _readArrayErr != nil {
+		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field of ParameterValueRaw")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueRaw"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueRaw")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueRaw{
+		Data: data,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueRaw) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueRaw"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueRaw")
+		}
+
+		// Array Field (data)
+		// Byte Array field (data)
+		if err := writeBuffer.WriteByteArray("data", m.GetData()); err != nil {
+			return errors.Wrap(err, "Error serializing 'data' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueRaw"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueRaw")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueRaw) isParameterValueRaw() bool {
+	return true
+}
+
+func (m *_ParameterValueRaw) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/protocols/cbus/readwrite/model/ParameterValueSerialNumber.go b/plc4go/protocols/cbus/readwrite/model/ParameterValueSerialNumber.go
new file mode 100644
index 000000000..f01d7b502
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/ParameterValueSerialNumber.go
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// ParameterValueSerialNumber is the corresponding interface of ParameterValueSerialNumber
+type ParameterValueSerialNumber interface {
+	utils.LengthAware
+	utils.Serializable
+	ParameterValue
+	// GetValue returns Value (property field)
+	GetValue() SerialNumber
+}
+
+// ParameterValueSerialNumberExactly can be used when we want exactly this type and not a type which fulfills ParameterValueSerialNumber.
+// This is useful for switch cases.
+type ParameterValueSerialNumberExactly interface {
+	ParameterValueSerialNumber
+	isParameterValueSerialNumber() bool
+}
+
+// _ParameterValueSerialNumber is the data-structure of this message
+type _ParameterValueSerialNumber struct {
+	*_ParameterValue
+	Value SerialNumber
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+func (m *_ParameterValueSerialNumber) GetParameterType() ParameterType {
+	return ParameterType_SERIAL_NUMBER
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_ParameterValueSerialNumber) InitializeParent(parent ParameterValue) {}
+
+func (m *_ParameterValueSerialNumber) GetParent() ParameterValue {
+	return m._ParameterValue
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_ParameterValueSerialNumber) GetValue() SerialNumber {
+	return m.Value
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewParameterValueSerialNumber factory function for _ParameterValueSerialNumber
+func NewParameterValueSerialNumber(value SerialNumber, numBytes uint8) *_ParameterValueSerialNumber {
+	_result := &_ParameterValueSerialNumber{
+		Value:           value,
+		_ParameterValue: NewParameterValue(numBytes),
+	}
+	_result._ParameterValue._ParameterValueChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastParameterValueSerialNumber(structType interface{}) ParameterValueSerialNumber {
+	if casted, ok := structType.(ParameterValueSerialNumber); ok {
+		return casted
+	}
+	if casted, ok := structType.(*ParameterValueSerialNumber); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_ParameterValueSerialNumber) GetTypeName() string {
+	return "ParameterValueSerialNumber"
+}
+
+func (m *_ParameterValueSerialNumber) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_ParameterValueSerialNumber) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Simple field (value)
+	lengthInBits += m.Value.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *_ParameterValueSerialNumber) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func ParameterValueSerialNumberParse(readBuffer utils.ReadBuffer, parameterType ParameterType, numBytes uint8) (ParameterValueSerialNumber, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("ParameterValueSerialNumber"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for ParameterValueSerialNumber")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Validation
+	if !(bool((numBytes) == (4))) {
+		return nil, errors.WithStack(utils.ParseValidationError{"SerialNumber has exactly four bytes"})
+	}
+
+	// Simple Field (value)
+	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for value")
+	}
+	_value, _valueErr := SerialNumberParse(readBuffer)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field of ParameterValueSerialNumber")
+	}
+	value := _value.(SerialNumber)
+	if closeErr := readBuffer.CloseContext("value"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for value")
+	}
+
+	if closeErr := readBuffer.CloseContext("ParameterValueSerialNumber"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for ParameterValueSerialNumber")
+	}
+
+	// Create a partially initialized instance
+	_child := &_ParameterValueSerialNumber{
+		Value: value,
+		_ParameterValue: &_ParameterValue{
+			NumBytes: numBytes,
+		},
+	}
+	_child._ParameterValue._ParameterValueChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_ParameterValueSerialNumber) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("ParameterValueSerialNumber"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for ParameterValueSerialNumber")
+		}
+
+		// Simple Field (value)
+		if pushErr := writeBuffer.PushContext("value"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for value")
+		}
+		_valueErr := writeBuffer.WriteSerializable(m.GetValue())
+		if popErr := writeBuffer.PopContext("value"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for value")
+		}
+		if _valueErr != nil {
+			return errors.Wrap(_valueErr, "Error serializing 'value' field")
+		}
+
+		if popErr := writeBuffer.PopContext("ParameterValueSerialNumber"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for ParameterValueSerialNumber")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_ParameterValueSerialNumber) isParameterValueSerialNumber() bool {
+	return true
+}
+
+func (m *_ParameterValueSerialNumber) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
index b5e49b83d..e095df882 100644
--- a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
@@ -323,6 +323,7 @@ public class RandomPackagesTest {
         assertMessageMatches(bytes, msg);
     }
 
+    @Disabled("apparently something is broken, the second cal data can't be parsed")
     @Test
     void calIdentifyReplyAndAnotherCal() throws Exception {
         byte[] bytes = "h.860102008902312E362E30302020832138FFAE\r\n".getBytes(StandardCharsets.UTF_8);
@@ -378,6 +379,7 @@ public class RandomPackagesTest {
         // TODO: apparently the set the first bit of AuxiliaryLevel to true wich is not valid according to the documentation
         //assertMessageMatches(bytes, msg);
     }
+
     @Test
     void salHvac() throws Exception {
         byte[] bytes = "0531AC0036040142037F001F\r\n".getBytes(StandardCharsets.UTF_8);
diff --git a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
index f05ce16a5..25a4a727c 100644
--- a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
@@ -46,6 +46,56 @@ public class ReferenceTest {
     @Nested
     class InterfaceRequirementsTest {
         // TODO: implement those
+
+
+        // 8.5
+        @Nested
+        class Level4InterfaceImplementationRequirements {
+
+            @Test
+            void Reset() throws Exception {
+                byte[] bytes = "~~~\r".getBytes(StandardCharsets.UTF_8);
+                ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+                CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+                assertThat(msg).isNotNull();
+                System.out.println(msg);
+                assertMessageMatches(bytes, msg);
+            }
+
+            @Test
+            void SetInterfaceOptions3() throws Exception {
+                byte[] bytes = "@A342000A\r".getBytes(StandardCharsets.UTF_8);
+                ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+                CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+                assertThat(msg).isNotNull();
+                System.out.println(msg);
+                System.out.println(((RequestDirectCommandAccess) ((CBusMessageToServer) msg).getRequest()).getCalData());
+                assertMessageMatches(bytes, msg);
+            }
+
+            @Test
+            void SetInterfaceOptions1_PUN() throws Exception {
+                byte[] bytes = "@A3410079\r".getBytes(StandardCharsets.UTF_8);
+                ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+                CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+                assertThat(msg).isNotNull();
+                System.out.println(msg);
+                System.out.println(((RequestDirectCommandAccess) ((CBusMessageToServer) msg).getRequest()).getCalData());
+                assertMessageMatches(bytes, msg);
+            }
+
+            @Test
+            void SetInterfaceOptions1() throws Exception {
+                byte[] bytes = "@A3300079\r".getBytes(StandardCharsets.UTF_8);
+                ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+                CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+                assertThat(msg).isNotNull();
+                System.out.println(msg);
+                System.out.println(((RequestDirectCommandAccess) ((CBusMessageToServer) msg).getRequest()).getCalData());
+                assertMessageMatches(bytes, msg);
+            }
+        }
+
     }
 
     // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Serial%20Interface%20User%20Guide.pdf
@@ -540,6 +590,8 @@ public class ReferenceTest {
                 assertMessageMatches(bytes, msg);
             }
 
+            // TODO: due the usage of reserved we lose bits here so we need to fix that
+            @Disabled("TODO: due the usage of reserved we lose bits here so we need to fix that")
             @Test
             void Reply() throws Exception {
                 byte[] bytes = "8604990082300328\r\n".getBytes(StandardCharsets.UTF_8);
@@ -548,6 +600,7 @@ public class ReferenceTest {
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
+                System.out.println(((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply());
                 assertMessageMatches(bytes, msg);
             }
 
diff --git a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
index 899999a4b..5b0a6e2af 100644
--- a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
+++ b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
@@ -141,6 +141,7 @@
         [*, 'true' *DeviceManagement
             [simple     Parameter paramNo                                 ]
             [const      byte      delimiter       0x0                     ]
+            // TODO: check if this is one byte or many bytes
             [simple     byte      parameterValue                          ]
         ]
         ['PointToPointToMultiPoint' *PointToPointToMultiPoint
@@ -565,8 +566,8 @@
         ['WRITE'            *Write(CALCommandTypeContainer commandTypeContainer)                // Request
             [simple Parameter paramNo                                                       ]
             [simple byte      code                                                          ]
-            // TODO: we can decode this with the parametert above... e.g. INTERFACE_OPTIONS_1 is defined below
-            [array  byte      data        count 'commandTypeContainer.numBytes - 2'         ]
+            [simple ParameterValue('paramNo.parameterType', 'commandTypeContainer.numBytes - 2')
+                              parameterValue                                                ]
         ]
         ['REPLY', 'true'    *IdentifyReply(CALCommandTypeContainer commandTypeContainer)        // Reply
             [simple Attribute   attribute                                                   ]
@@ -575,7 +576,8 @@
         ]
         ['REPLY'            *Reply(CALCommandTypeContainer commandTypeContainer)                // Reply
             [simple Parameter paramNo                                                       ]
-            [array  byte      data        count 'commandTypeContainer.numBytes-1'           ]
+            [simple ParameterValue('paramNo.parameterType', 'commandTypeContainer.numBytes - 1')
+                              parameterValue                                                ]
         ]
         ['ACKNOWLEDGE'      *Acknowledge // Reply
             [simple Parameter paramNo                                                       ]
@@ -602,263 +604,263 @@
     [optional CALData('null') additionalData]
 ]
 
-[enum uint 8 Parameter(vstring group, vstring parameterDescription, vstring form, bit isVolatile, ProtectionLevel protectionLevel)
-    ['0x00' UNKNOWN_01                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x01' UNKNOWN_02                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x02' UNKNOWN_03                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x03' UNKNOWN_04                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x04' UNKNOWN_05                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x05' UNKNOWN_06                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x06' UNKNOWN_07                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x07' UNKNOWN_08                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x08' UNKNOWN_09                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x09' UNKNOWN_10                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x0A' UNKNOWN_11                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x0B' UNKNOWN_12                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x0C' UNKNOWN_13                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x0D' UNKNOWN_14                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x0E' UNKNOWN_15                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x0F' UNKNOWN_16                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x10' UNKNOWN_17                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x11' UNKNOWN_18                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x12' UNKNOWN_19                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x13' UNKNOWN_20                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x14' UNKNOWN_21                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x15' UNKNOWN_22                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x16' UNKNOWN_23                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x17' UNKNOWN_24                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x18' UNKNOWN_25                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x19' UNKNOWN_26                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x1A' UNKNOWN_27                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x1B' UNKNOWN_28                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x1C' UNKNOWN_29                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x1D' UNKNOWN_30                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x1E' UNKNOWN_31                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x1F' UNKNOWN_32                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x20' UNKNOWN_33                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x21' APPLICATION_ADDRESS_1                   ['"Mgmt"', '"Application Address 1"',                   '"Byte (Note 1)"',          'false', 'UNLOCK_REQUIRED']]
-    ['0x22' APPLICATION_ADDRESS_2                   ['"Mgmt"', '"Application Address 2"',                   '"Byte (Note 1)"',          'false', 'UNLOCK_REQUIRED']]
-    ['0x23' UNKOWN_35                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x24' UNKOWN_36                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x25' UNKOWN_37                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x26' UNKOWN_38                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x27' UNKOWN_39                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x28' UNKOWN_40                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x29' UNKOWN_41                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x2A' UNKOWN_42                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x2B' UNKOWN_43                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x2C' UNKOWN_44                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x2D' UNKOWN_45                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x2E' UNKOWN_46                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x2F' UNKOWN_47                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x30' INTERFACE_OPTIONS_1                     ['"Unit"', '"Interface options 1"',                     '"8 Bits (Note 2)"',        'true',  'NO_WRITE_ACCESS']]
-    ['0x31' UNKOWN_49                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x32' UNKOWN_50                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x33' UNKOWN_51                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x34' UNKOWN_52                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x35' UNKOWN_53                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x36' UNKOWN_54                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x37' UNKOWN_55                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x38' UNKOWN_56                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x39' UNKOWN_57                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x3A' UNKOWN_58                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x3B' UNKOWN_59                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x3C' UNKOWN_60                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x3D' BAUD_RATE_SELECTOR                      ['"Unit"', '"Baud rate selector"',                      '"Byte (Note 3)"',          'false', 'NO_WRITE_ACCESS']]
-    ['0x3E' INTERFACE_OPTIONS_2                     ['"Unit"', '"Interface options 2"',                     '"Byte (Note 4)"',          'false', 'NONE'           ]]
-    ['0x3F' UNKOWN_63                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x40' UNKOWN_64                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x41' INTERFACE_OPTIONS_1_POWER_UP_SETTINGS   ['"Unit"', '"Interface options 2 power up settings"',   '"8 Bits (Note 5)"',        'false', 'UNLOCK_REQUIRED']]
-    ['0x42' INTERFACE_OPTIONS_3                     ['"Unit"', '"Interface options 3"',                     '"Byte (Note 6)"',          'false', 'UNLOCK_REQUIRED']]
-    ['0x43' UNKOWN_67                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x44' UNKOWN_68                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x45' UNKOWN_69                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x46' UNKOWN_70                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x47' UNKOWN_71                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x48' UNKOWN_72                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x49' UNKOWN_73                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x4A' UNKOWN_74                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x4B' UNKOWN_75                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x4C' UNKOWN_76                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x4D' UNKOWN_77                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x4E' UNKOWN_78                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x4F' UNKOWN_79                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x50' UNKOWN_80                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x51' UNKOWN_81                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x52' UNKOWN_82                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x53' UNKOWN_83                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x54' UNKOWN_84                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x55' UNKOWN_85                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x56' UNKOWN_86                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x57' UNKOWN_87                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x58' UNKOWN_88                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x59' UNKOWN_89                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x5A' UNKOWN_90                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x5B' UNKOWN_91                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x5C' UNKOWN_92                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x5D' UNKOWN_93                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x5E' UNKOWN_94                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x5F' UNKOWN_95                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x60' UNKOWN_96                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x61' UNKOWN_97                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x62' UNKOWN_98                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x63' UNKOWN_99                               ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x64' UNKOWN_100                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x65' UNKOWN_101                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x66' UNKOWN_102                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x67' UNKOWN_103                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x68' UNKOWN_104                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x69' UNKOWN_105                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x6A' UNKOWN_106                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x6B' UNKOWN_107                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x6C' UNKOWN_108                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x6D' UNKOWN_109                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x6E' UNKOWN_110                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x6F' UNKOWN_111                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x70' UNKOWN_112                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x71' UNKOWN_113                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x72' UNKOWN_114                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x73' UNKOWN_115                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x74' UNKOWN_116                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x75' UNKOWN_117                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x76' UNKOWN_118                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x77' UNKOWN_119                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x78' UNKOWN_120                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x79' UNKOWN_121                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x7A' UNKOWN_122                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x7B' UNKOWN_123                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x7C' UNKOWN_124                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x7D' UNKOWN_125                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x7E' UNKOWN_126                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x7F' UNKOWN_127                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x80' UNKOWN_128                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x81' UNKOWN_129                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x82' UNKOWN_130                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x83' UNKOWN_131                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x84' UNKOWN_132                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x85' UNKOWN_133                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x86' UNKOWN_134                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x87' UNKOWN_135                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x88' UNKOWN_136                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x89' UNKOWN_137                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x8A' UNKOWN_138                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x8B' UNKOWN_139                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x8C' UNKOWN_140                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x8D' UNKOWN_141                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x8E' UNKOWN_142                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x8F' UNKOWN_143                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x90' UNKOWN_144                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x91' UNKOWN_145                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x92' UNKOWN_146                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x93' UNKOWN_147                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x94' UNKOWN_148                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x95' UNKOWN_149                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x96' UNKOWN_150                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x97' UNKOWN_151                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x98' UNKOWN_152                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x99' UNKOWN_153                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x9A' UNKOWN_154                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x9B' UNKOWN_155                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x9C' UNKOWN_156                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x9D' UNKOWN_157                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x9E' UNKOWN_158                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0x9F' UNKOWN_159                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA0' UNKOWN_160                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA1' UNKOWN_161                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA2' UNKOWN_162                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA3' UNKOWN_163                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA4' UNKOWN_164                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA5' UNKOWN_165                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA6' UNKOWN_166                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA7' UNKOWN_167                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA8' UNKOWN_168                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xA9' UNKOWN_169                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xAA' UNKOWN_170                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xAB' UNKOWN_171                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xAC' UNKOWN_172                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xAD' UNKOWN_173                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xAE' UNKOWN_174                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xAF' UNKOWN_175                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB0' UNKOWN_176                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB1' UNKOWN_177                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB2' UNKOWN_178                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB3' UNKOWN_179                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB4' UNKOWN_180                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB5' UNKOWN_181                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB6' UNKOWN_182                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB7' UNKOWN_183                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB8' UNKOWN_184                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xB9' UNKOWN_185                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xBA' UNKOWN_186                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xBB' UNKOWN_187                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xBC' UNKOWN_188                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xBD' UNKOWN_189                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xBE' UNKOWN_190                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xBF' UNKOWN_191                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC0' UNKOWN_192                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC1' UNKOWN_193                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC2' UNKOWN_194                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC3' UNKOWN_195                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC4' UNKOWN_196                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC5' UNKOWN_197                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC6' UNKOWN_198                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC7' UNKOWN_199                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC8' UNKOWN_200                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xC9' UNKOWN_201                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xCA' UNKOWN_202                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xCB' UNKOWN_203                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xCC' UNKOWN_204                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xCD' UNKOWN_205                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xCE' UNKOWN_206                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xCF' UNKOWN_207                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD0' UNKOWN_208                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD1' UNKOWN_209                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD2' UNKOWN_210                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD3' UNKOWN_211                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD4' UNKOWN_212                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD5' UNKOWN_213                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD6' UNKOWN_214                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD7' UNKOWN_215                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD8' UNKOWN_216                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xD9' UNKOWN_217                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xDA' UNKOWN_218                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xDB' UNKOWN_219                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xDC' UNKOWN_220                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xDD' UNKOWN_221                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xDE' UNKOWN_222                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xDF' UNKOWN_223                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE0' UNKOWN_224                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE1' UNKOWN_225                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE2' UNKOWN_226                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE3' UNKOWN_227                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE4' UNKOWN_228                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE5' UNKOWN_229                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE6' UNKOWN_230                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE7' UNKOWN_231                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE8' UNKOWN_232                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xE9' UNKOWN_233                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xEA' UNKOWN_234                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
-    ['0xEB' CUSTOM_MANUFACTURER_1                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xEC' CUSTOM_MANUFACTURER_2                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xED' CUSTOM_MANUFACTURER_3                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xEE' CUSTOM_MANUFACTURER_4                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xEF' CUSTOM_MANUFACTURER_5                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xF0' CUSTOM_MANUFACTURER_6                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xF1' CUSTOM_MANUFACTURER_7                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
-    ['0xF2' CUSTOM_MANUFACTURER_8                   ['"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'READ_ONLY'      ]]
-    ['0xF3' SERIAL_NUMBER_1                         ['"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
-    ['0xF4' SERIAL_NUMBER_2                         ['"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
-    ['0xF5' SERIAL_NUMBER_3                         ['"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
-    ['0xF6' SERIAL_NUMBER_4                         ['"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
-    ['0xF7' CUSTOM_TYPE_1                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xF8' CUSTOM_TYPE_2                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xF9' CUSTOM_TYPE_3                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xFA' CUSTOM_TYPE_4                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xFB' CUSTOM_TYPE_5                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xFC' CUSTOM_TYPE_6                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xFD' CUSTOM_TYPE_7                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xFE' CUSTOM_TYPE_8                           ['"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
-    ['0xFF' UNKOWN_255                              ['""',     '""',                                        '""',                       'false', 'NONE'           ]]
+[enum uint 8 Parameter(ParameterType parameterType, vstring group, vstring parameterDescription, vstring form, bit isVolatile, ProtectionLevel protectionLevel)
+    ['0x00' UNKNOWN_01                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x01' UNKNOWN_02                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x02' UNKNOWN_03                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x03' UNKNOWN_04                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x04' UNKNOWN_05                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x05' UNKNOWN_06                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x06' UNKNOWN_07                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x07' UNKNOWN_08                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x08' UNKNOWN_09                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x09' UNKNOWN_10                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x0A' UNKNOWN_11                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x0B' UNKNOWN_12                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x0C' UNKNOWN_13                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x0D' UNKNOWN_14                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x0E' UNKNOWN_15                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x0F' UNKNOWN_16                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x10' UNKNOWN_17                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x11' UNKNOWN_18                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x12' UNKNOWN_19                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x13' UNKNOWN_20                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x14' UNKNOWN_21                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x15' UNKNOWN_22                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x16' UNKNOWN_23                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x17' UNKNOWN_24                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x18' UNKNOWN_25                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x19' UNKNOWN_26                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x1A' UNKNOWN_27                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x1B' UNKNOWN_28                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x1C' UNKNOWN_29                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x1D' UNKNOWN_30                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x1E' UNKNOWN_31                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x1F' UNKNOWN_32                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x20' UNKNOWN_33                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x21' APPLICATION_ADDRESS_1                   ['APPLICATION_ADDRESS_1',                   '"Mgmt"', '"Application Address 1"',                   '"Byte (Note 1)"',          'false', 'UNLOCK_REQUIRED']]
+    ['0x22' APPLICATION_ADDRESS_2                   ['APPLICATION_ADDRESS_2',                   '"Mgmt"', '"Application Address 2"',                   '"Byte (Note 1)"',          'false', 'UNLOCK_REQUIRED']]
+    ['0x23' UNKOWN_35                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x24' UNKOWN_36                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x25' UNKOWN_37                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x26' UNKOWN_38                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x27' UNKOWN_39                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x28' UNKOWN_40                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x29' UNKOWN_41                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x2A' UNKOWN_42                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x2B' UNKOWN_43                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x2C' UNKOWN_44                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x2D' UNKOWN_45                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x2E' UNKOWN_46                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x2F' UNKOWN_47                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x30' INTERFACE_OPTIONS_1                     ['INTERFACE_OPTIONS_1',                     '"Unit"', '"Interface options 1"',                     '"8 Bits (Note 2)"',        'true',  'NO_WRITE_ACCESS']]
+    ['0x31' UNKOWN_49                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x32' UNKOWN_50                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x33' UNKOWN_51                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x34' UNKOWN_52                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x35' UNKOWN_53                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x36' UNKOWN_54                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x37' UNKOWN_55                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x38' UNKOWN_56                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x39' UNKOWN_57                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x3A' UNKOWN_58                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x3B' UNKOWN_59                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x3C' UNKOWN_60                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x3D' BAUD_RATE_SELECTOR                      ['BAUD_RATE_SELECTOR',                      '"Unit"', '"Baud rate selector"',                      '"Byte (Note 3)"',          'false', 'NO_WRITE_ACCESS']]
+    ['0x3E' INTERFACE_OPTIONS_2                     ['INTERFACE_OPTIONS_2',                     '"Unit"', '"Interface options 2"',                     '"Byte (Note 4)"',          'false', 'NONE'           ]]
+    ['0x3F' UNKOWN_63                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x40' UNKOWN_64                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x41' INTERFACE_OPTIONS_1_POWER_UP_SETTINGS   ['INTERFACE_OPTIONS_1_POWER_UP_SETTINGS',   '"Unit"', '"Interface options 2 power up settings"',   '"8 Bits (Note 5)"',        'false', 'UNLOCK_REQUIRED']]
+    ['0x42' INTERFACE_OPTIONS_3                     ['INTERFACE_OPTIONS_3',                     '"Unit"', '"Interface options 3"',                     '"Byte (Note 6)"',          'false', 'UNLOCK_REQUIRED']]
+    ['0x43' UNKOWN_67                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x44' UNKOWN_68                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x45' UNKOWN_69                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x46' UNKOWN_70                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x47' UNKOWN_71                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x48' UNKOWN_72                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x49' UNKOWN_73                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x4A' UNKOWN_74                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x4B' UNKOWN_75                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x4C' UNKOWN_76                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x4D' UNKOWN_77                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x4E' UNKOWN_78                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x4F' UNKOWN_79                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x50' UNKOWN_80                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x51' UNKOWN_81                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x52' UNKOWN_82                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x53' UNKOWN_83                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x54' UNKOWN_84                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x55' UNKOWN_85                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x56' UNKOWN_86                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x57' UNKOWN_87                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x58' UNKOWN_88                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x59' UNKOWN_89                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x5A' UNKOWN_90                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x5B' UNKOWN_91                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x5C' UNKOWN_92                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x5D' UNKOWN_93                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x5E' UNKOWN_94                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x5F' UNKOWN_95                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x60' UNKOWN_96                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x61' UNKOWN_97                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x62' UNKOWN_98                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x63' UNKOWN_99                               ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x64' UNKOWN_100                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x65' UNKOWN_101                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x66' UNKOWN_102                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x67' UNKOWN_103                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x68' UNKOWN_104                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x69' UNKOWN_105                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x6A' UNKOWN_106                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x6B' UNKOWN_107                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x6C' UNKOWN_108                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x6D' UNKOWN_109                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x6E' UNKOWN_110                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x6F' UNKOWN_111                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x70' UNKOWN_112                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x71' UNKOWN_113                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x72' UNKOWN_114                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x73' UNKOWN_115                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x74' UNKOWN_116                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x75' UNKOWN_117                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x76' UNKOWN_118                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x77' UNKOWN_119                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x78' UNKOWN_120                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x79' UNKOWN_121                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x7A' UNKOWN_122                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x7B' UNKOWN_123                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x7C' UNKOWN_124                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x7D' UNKOWN_125                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x7E' UNKOWN_126                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x7F' UNKOWN_127                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x80' UNKOWN_128                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x81' UNKOWN_129                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x82' UNKOWN_130                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x83' UNKOWN_131                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x84' UNKOWN_132                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x85' UNKOWN_133                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x86' UNKOWN_134                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x87' UNKOWN_135                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x88' UNKOWN_136                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x89' UNKOWN_137                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x8A' UNKOWN_138                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x8B' UNKOWN_139                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x8C' UNKOWN_140                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x8D' UNKOWN_141                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x8E' UNKOWN_142                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x8F' UNKOWN_143                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x90' UNKOWN_144                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x91' UNKOWN_145                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x92' UNKOWN_146                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x93' UNKOWN_147                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x94' UNKOWN_148                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x95' UNKOWN_149                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x96' UNKOWN_150                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x97' UNKOWN_151                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x98' UNKOWN_152                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x99' UNKOWN_153                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x9A' UNKOWN_154                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x9B' UNKOWN_155                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x9C' UNKOWN_156                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x9D' UNKOWN_157                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x9E' UNKOWN_158                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0x9F' UNKOWN_159                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA0' UNKOWN_160                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA1' UNKOWN_161                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA2' UNKOWN_162                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA3' UNKOWN_163                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA4' UNKOWN_164                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA5' UNKOWN_165                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA6' UNKOWN_166                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA7' UNKOWN_167                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA8' UNKOWN_168                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xA9' UNKOWN_169                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xAA' UNKOWN_170                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xAB' UNKOWN_171                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xAC' UNKOWN_172                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xAD' UNKOWN_173                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xAE' UNKOWN_174                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xAF' UNKOWN_175                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB0' UNKOWN_176                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB1' UNKOWN_177                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB2' UNKOWN_178                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB3' UNKOWN_179                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB4' UNKOWN_180                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB5' UNKOWN_181                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB6' UNKOWN_182                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB7' UNKOWN_183                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB8' UNKOWN_184                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xB9' UNKOWN_185                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xBA' UNKOWN_186                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xBB' UNKOWN_187                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xBC' UNKOWN_188                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xBD' UNKOWN_189                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xBE' UNKOWN_190                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xBF' UNKOWN_191                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC0' UNKOWN_192                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC1' UNKOWN_193                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC2' UNKOWN_194                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC3' UNKOWN_195                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC4' UNKOWN_196                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC5' UNKOWN_197                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC6' UNKOWN_198                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC7' UNKOWN_199                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC8' UNKOWN_200                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xC9' UNKOWN_201                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xCA' UNKOWN_202                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xCB' UNKOWN_203                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xCC' UNKOWN_204                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xCD' UNKOWN_205                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xCE' UNKOWN_206                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xCF' UNKOWN_207                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD0' UNKOWN_208                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD1' UNKOWN_209                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD2' UNKOWN_210                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD3' UNKOWN_211                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD4' UNKOWN_212                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD5' UNKOWN_213                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD6' UNKOWN_214                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD7' UNKOWN_215                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD8' UNKOWN_216                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xD9' UNKOWN_217                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xDA' UNKOWN_218                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xDB' UNKOWN_219                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xDC' UNKOWN_220                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xDD' UNKOWN_221                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xDE' UNKOWN_222                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xDF' UNKOWN_223                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE0' UNKOWN_224                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE1' UNKOWN_225                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE2' UNKOWN_226                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE3' UNKOWN_227                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE4' UNKOWN_228                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE5' UNKOWN_229                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE6' UNKOWN_230                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE7' UNKOWN_231                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE8' UNKOWN_232                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xE9' UNKOWN_233                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xEA' UNKOWN_234                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
+    ['0xEB' CUSTOM_MANUFACTURER_1                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xEC' CUSTOM_MANUFACTURER_2                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xED' CUSTOM_MANUFACTURER_3                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xEE' CUSTOM_MANUFACTURER_4                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xEF' CUSTOM_MANUFACTURER_5                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xF0' CUSTOM_MANUFACTURER_6                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xF1' CUSTOM_MANUFACTURER_7                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'UNLOCK_REQUIRED']]
+    ['0xF2' CUSTOM_MANUFACTURER_8                   ['CUSTOM_MANUFACTURER',                     '"Mgmt"', '"Custom Manufacturer (8 bytes)"',           '"ASCII Chars (Note 7)"',   'false', 'READ_ONLY'      ]]
+    ['0xF3' SERIAL_NUMBER_1                         ['SERIAL_NUMBER',                           '"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
+    ['0xF4' SERIAL_NUMBER_2                         ['SERIAL_NUMBER',                           '"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
+    ['0xF5' SERIAL_NUMBER_3                         ['SERIAL_NUMBER',                           '"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
+    ['0xF6' SERIAL_NUMBER_4                         ['SERIAL_NUMBER',                           '"Mgmt"', '"Serial Number"',                           '"Bytes (Note 8)"',         'false', 'READ_ONLY'      ]]
+    ['0xF7' CUSTOM_TYPE_1                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xF8' CUSTOM_TYPE_2                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xF9' CUSTOM_TYPE_3                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xFA' CUSTOM_TYPE_4                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xFB' CUSTOM_TYPE_5                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xFC' CUSTOM_TYPE_6                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xFD' CUSTOM_TYPE_7                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xFE' CUSTOM_TYPE_8                           ['CUSTOM_TYPE',                             '"Mgmt"', '"Custom Type (8 bytes)"',                   '"ASCII Chars (Note 9)"',   'false', 'READ_ONLY'      ]]
+    ['0xFF' UNKOWN_255                              ['UNKNOWN',                                 '""',     '""',                                        '""',                       'false', 'NONE'           ]]
 ]
 
 [enum uint 4 ProtectionLevel(vstring description)
@@ -868,6 +870,66 @@
     ['3' READ_ONLY          ['"Read only"'                      ]]
 ]
 
+[enum uint 8 ParameterType
+    ['0' UNKNOWN                                ]
+    ['1' APPLICATION_ADDRESS_1                  ]
+    ['2' APPLICATION_ADDRESS_2                  ]
+    ['3' INTERFACE_OPTIONS_1                    ]
+    ['4' INTERFACE_OPTIONS_2                    ]
+    ['5' INTERFACE_OPTIONS_3                    ]
+    ['6' BAUD_RATE_SELECTOR                     ]
+    ['7' INTERFACE_OPTIONS_1_POWER_UP_SETTINGS  ]
+    ['8' CUSTOM_MANUFACTURER                    ]
+    ['9' SERIAL_NUMBER                          ]
+    ['10' CUSTOM_TYPE                            ]
+]
+
+[type ParameterValue(ParameterType parameterType, uint 8 numBytes)
+    [typeSwitch parameterType
+        ['APPLICATION_ADDRESS_1'    *ApplicationAddress1
+            [validation 'numBytes == 1' "ApplicationAddress1 has exactly one byte"  ]
+            [simple ApplicationAddress1 value                                       ]
+        ]
+        ['APPLICATION_ADDRESS_2'    *ApplicationAddress2
+            [validation 'numBytes == 1' "ApplicationAddress2 has exactly one byte"  ]
+            [simple ApplicationAddress1 value                                       ]
+        ]
+        ['INTERFACE_OPTIONS_1'      *InterfaceOptions1
+            [validation 'numBytes == 1' "InterfaceOptions1 has exactly one byte"    ]
+            [simple InterfaceOptions1   value                                       ]
+        ]
+        ['BAUD_RATE_SELECTOR'       *BaudRateSelector
+            [validation 'numBytes == 1' "BaudRateSelector has exactly one byte"     ]
+            [simple BaudRateSelector    value                                       ]
+        ]
+        ['INTERFACE_OPTIONS_2'      *InterfaceOptions2
+            [validation 'numBytes == 1' "InterfaceOptions2 has exactly one byte"    ]
+            [simple InterfaceOptions2   value                                       ]
+        ]
+        ['INTERFACE_OPTIONS_1_POWER_UP_SETTINGS'    *InterfaceOptions1PowerUpSettings
+            [validation 'numBytes == 1' "InterfaceOptions1PowerUpSettings has exactly one byte" ]
+            [simple InterfaceOptions1PowerUpSettings   value                                    ]
+        ]
+        ['INTERFACE_OPTIONS_3'      *InterfaceOptions3
+            [validation 'numBytes == 1' "InterfaceOptions3 has exactly one byte"    ]
+            [simple InterfaceOptions3   value                                       ]
+        ]
+        ['CUSTOM_MANUFACTURER'      *CustomManufacturer
+            [simple CustomManufacturer('numBytes')   value                          ]
+        ]
+        ['SERIAL_NUMBER'            *SerialNumber
+            [validation 'numBytes == 4' "SerialNumber has exactly four bytes"       ]
+            [simple SerialNumber   value                                            ]
+        ]
+        ['CUSTOM_TYPE'              *CustomTypes
+            [simple CustomTypes('numBytes')   value                                 ]
+        ]
+        [*                          *Raw
+            [array  byte      data        count 'numBytes']
+        ]
+    ]
+]
+
 [type ApplicationAddress1 // Note 1
     [simple  byte address                       ]
     // if wildcard is set address 2 should set to wildcard as well
@@ -926,9 +988,8 @@
     [simple   bit  pcn                           ]
 ]
 
-[type CustomManufacturer // Note 7
-    // TODO: 8 is a placeholder at the moment
-    [simple vstring '8' customString                 ]
+[type CustomManufacturer(uint 8 numBytes) // Note 7
+    [simple vstring '8 * numBytes' customString        ]
 ]
 
 [type SerialNumber // Note 8
@@ -938,9 +999,8 @@
     [simple byte octet4]
 ]
 
-[type CustomTypes // Note 9
-    // TODO: 8 is a placeholder at the moment
-    [simple vstring '8' customString                 ]
+[type CustomTypes(uint 8 numBytes) // Note 9
+    [simple vstring '8 * numBytes' customString        ]
 ]
 
 [enum uint 8 Attribute(uint 8 bytesReturned)


[plc4x] 04/04: fix(plc4go/cbus): implement connection setup

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

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

commit f20adc91761cfc6c2acb1f1c678360b2daf37112
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Aug 1 16:53:04 2022 +0200

    fix(plc4go/cbus): implement connection setup
---
 plc4go/internal/cbus/Connection.go | 142 +++++++++++++++++++++++++++++++------
 plc4go/tools/plc4xbrowser/main.go  |   1 -
 2 files changed, 119 insertions(+), 24 deletions(-)

diff --git a/plc4go/internal/cbus/Connection.go b/plc4go/internal/cbus/Connection.go
index fe88e0a87..c57d8143e 100644
--- a/plc4go/internal/cbus/Connection.go
+++ b/plc4go/internal/cbus/Connection.go
@@ -26,8 +26,11 @@ import (
 	internalModel "github.com/apache/plc4x/plc4go/internal/spi/model"
 	"github.com/apache/plc4x/plc4go/pkg/api"
 	apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
+	readWriteModel "github.com/apache/plc4x/plc4go/protocols/cbus/readwrite/model"
+	"github.com/pkg/errors"
 	"github.com/rs/zerolog/log"
 	"sync"
+	"time"
 )
 
 type AlphaGenerator struct {
@@ -101,6 +104,31 @@ func (c *Connection) GetMessageCodec() spi.MessageCodec {
 	return c.messageCodec
 }
 
+func (c *Connection) Connect() <-chan plc4go.PlcConnectionConnectResult {
+	log.Trace().Msg("Connecting")
+	ch := make(chan plc4go.PlcConnectionConnectResult)
+	go func() {
+		err := c.messageCodec.Connect()
+		if err != nil {
+			ch <- _default.NewDefaultPlcConnectionConnectResult(c, err)
+		}
+
+		// For testing purposes we can skip the waiting for a complete connection
+		if !c.driverContext.awaitSetupComplete {
+			go c.setupConnection(ch)
+			log.Warn().Msg("Connection used in an unsafe way. !!!DON'T USE IN PRODUCTION!!!")
+			// Here we write directly and don't wait till the connection is "really" connected
+			// Note: we can't use fireConnected here as it's guarded against m.driverContext.awaitSetupComplete
+			ch <- _default.NewDefaultPlcConnectionConnectResult(c, err)
+			c.SetConnected(true)
+			return
+		}
+
+		c.setupConnection(ch)
+	}()
+	return ch
+}
+
 func (c *Connection) GetMetadata() apiModel.PlcConnectionMetadata {
 	return _default.DefaultConnectionMetadata{
 		ProvidesReading:     true,
@@ -110,29 +138,6 @@ func (c *Connection) GetMetadata() apiModel.PlcConnectionMetadata {
 	}
 }
 
-func (c *Connection) Connect() <-chan plc4go.PlcConnectionConnectResult {
-	connectionConnectResult := c.DefaultConnection.Connect()
-	ch := make(chan plc4go.PlcConnectionConnectResult)
-	go func() {
-		connectResult := <-connectionConnectResult
-		if connectResult.GetErr() == nil {
-			log.Debug().Msg("Starting subscription handler")
-			go func() {
-				for c.IsConnected() {
-					log.Debug().Msg("Handling incoming message")
-					for monitoredSal := range c.messageCodec.(*MessageCodec).monitoredSALs {
-						for _, subscriber := range c.subscribers {
-							subscriber.handleMonitoredSal(monitoredSal)
-						}
-					}
-				}
-			}()
-		}
-		ch <- connectResult
-	}()
-	return ch
-}
-
 func (c *Connection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
 	return internalModel.NewDefaultPlcReadRequestBuilder(c.GetPlcFieldHandler(), NewReader(&c.alphaGenerator, c.messageCodec, c.tm))
 }
@@ -168,3 +173,94 @@ func (c *Connection) addSubscriber(subscriber *Subscriber) {
 func (c *Connection) String() string {
 	return fmt.Sprintf("cbus.Connection")
 }
+
+func (c *Connection) setupConnection(ch chan plc4go.PlcConnectionConnectResult) {
+	cbusOptions := &c.messageCodec.(*MessageCodec).cbusOptions
+	requestContext := &c.messageCodec.(*MessageCodec).requestContext
+
+	{
+		log.Debug().Msg("Send a reset Request")
+		requestTypeReset := readWriteModel.RequestType_RESET
+		requestTypeResetByte := byte(readWriteModel.RequestType_RESET)
+		requestReset := readWriteModel.NewRequestReset(requestTypeReset, &requestTypeResetByte, requestTypeReset, &requestTypeResetByte, requestTypeReset, nil, &requestTypeReset, requestTypeReset, readWriteModel.NewRequestTermination(), *cbusOptions)
+		if err := c.messageCodec.Send(readWriteModel.NewCBusMessageToServer(requestReset, *requestContext, *cbusOptions)); err != nil {
+			c.fireConnectionError(errors.Wrap(err, "Error writing reset"), ch)
+			return
+		}
+		time.Sleep(time.Millisecond * 100)
+	}
+	{
+		log.Debug().Msg("Set application filter to all")
+		applicationAddress1 := readWriteModel.NewParameterValueApplicationAddress1(readWriteModel.NewApplicationAddress1(0xFF), 1)
+		calData := readWriteModel.NewCALDataWrite(readWriteModel.Parameter_APPLICATION_ADDRESS_1, 0x0, applicationAddress1, readWriteModel.CALCommandTypeContainer_CALCommandWrite_3Bytes, nil, *requestContext)
+		directCommand := readWriteModel.NewRequestDirectCommandAccess(calData, 0x40, nil, nil, 0x0, readWriteModel.NewRequestTermination(), *cbusOptions)
+		if err := c.messageCodec.Send(readWriteModel.NewCBusMessageToServer(directCommand, *requestContext, *cbusOptions)); err != nil {
+			c.fireConnectionError(errors.Wrap(err, "Error writing reset"), ch)
+			return
+		}
+		time.Sleep(time.Millisecond * 100)
+	}
+	{
+		log.Debug().Msg("Set interface options 3")
+		interfaceOptions3 := readWriteModel.NewParameterValueInterfaceOptions3(readWriteModel.NewInterfaceOptions3(true, false, true, false), 1)
+		calData := readWriteModel.NewCALDataWrite(readWriteModel.Parameter_INTERFACE_OPTIONS_3, 0x0, interfaceOptions3, readWriteModel.CALCommandTypeContainer_CALCommandWrite_3Bytes, nil, *requestContext)
+		directCommand := readWriteModel.NewRequestDirectCommandAccess(calData, 0x40, nil, nil, 0x0, readWriteModel.NewRequestTermination(), *cbusOptions)
+		if err := c.messageCodec.Send(readWriteModel.NewCBusMessageToServer(directCommand, *requestContext, *cbusOptions)); err != nil {
+			c.fireConnectionError(errors.Wrap(err, "Error writing reset"), ch)
+			return
+		}
+		time.Sleep(time.Millisecond * 100)
+	}
+	{
+		log.Debug().Msg("Set interface options 1 power up settings")
+		interfaceOptions1PowerUpSettings := readWriteModel.NewParameterValueInterfaceOptions1PowerUpSettings(readWriteModel.NewInterfaceOptions1PowerUpSettings(readWriteModel.NewInterfaceOptions1(true, true, true, true, false, true)), 1)
+		calData := readWriteModel.NewCALDataWrite(readWriteModel.Parameter_INTERFACE_OPTIONS_1_POWER_UP_SETTINGS, 0x0, interfaceOptions1PowerUpSettings, readWriteModel.CALCommandTypeContainer_CALCommandWrite_3Bytes, nil, *requestContext)
+		directCommand := readWriteModel.NewRequestDirectCommandAccess(calData, 0x40, nil, nil, 0x0, readWriteModel.NewRequestTermination(), *cbusOptions)
+		if err := c.messageCodec.Send(readWriteModel.NewCBusMessageToServer(directCommand, *requestContext, *cbusOptions)); err != nil {
+			c.fireConnectionError(errors.Wrap(err, "Error writing reset"), ch)
+			return
+		}
+		time.Sleep(time.Millisecond * 100)
+	}
+	{
+		log.Debug().Msg("Set interface options 1")
+		interfaceOptions1 := readWriteModel.NewParameterValueInterfaceOptions1(readWriteModel.NewInterfaceOptions1(true, true, true, true, false, true), 1)
+		calData := readWriteModel.NewCALDataWrite(readWriteModel.Parameter_INTERFACE_OPTIONS_1, 0x0, interfaceOptions1, readWriteModel.CALCommandTypeContainer_CALCommandWrite_3Bytes, nil, *requestContext)
+		directCommand := readWriteModel.NewRequestDirectCommandAccess(calData, 0x40, nil, nil, 0x0, readWriteModel.NewRequestTermination(), *cbusOptions)
+		if err := c.messageCodec.Send(readWriteModel.NewCBusMessageToServer(directCommand, *requestContext, *cbusOptions)); err != nil {
+			c.fireConnectionError(errors.Wrap(err, "Error writing reset"), ch)
+			return
+		}
+		time.Sleep(time.Millisecond * 100)
+	}
+	c.fireConnected(ch)
+
+	log.Debug().Msg("Starting subscription handler")
+	go func() {
+		for c.IsConnected() {
+			log.Debug().Msg("Handling incoming message")
+			for monitoredSal := range c.messageCodec.(*MessageCodec).monitoredSALs {
+				for _, subscriber := range c.subscribers {
+					subscriber.handleMonitoredSal(monitoredSal)
+				}
+			}
+		}
+	}()
+}
+
+func (c *Connection) fireConnectionError(err error, ch chan<- plc4go.PlcConnectionConnectResult) {
+	if c.driverContext.awaitSetupComplete {
+		ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Wrap(err, "Error during connection"))
+	} else {
+		log.Error().Err(err).Msg("awaitSetupComplete set to false and we got a error during connect")
+	}
+}
+
+func (c *Connection) fireConnected(ch chan<- plc4go.PlcConnectionConnectResult) {
+	if c.driverContext.awaitSetupComplete {
+		ch <- _default.NewDefaultPlcConnectionConnectResult(c, nil)
+	} else {
+		log.Info().Msg("Successfully connected")
+	}
+	c.SetConnected(true)
+}
diff --git a/plc4go/tools/plc4xbrowser/main.go b/plc4go/tools/plc4xbrowser/main.go
index f43b319d7..951f634ad 100644
--- a/plc4go/tools/plc4xbrowser/main.go
+++ b/plc4go/tools/plc4xbrowser/main.go
@@ -250,7 +250,6 @@ func buildCommandArea(newPrimitive func(text string) tview.Primitive, applicatio
 					entries = append(entries, "subscribe "+connectionsString)
 				}
 			}
-			log.Info().Msgf("%v %v", entries, config.History.Last10Hosts)
 			return
 		})
 		commandArea.AddItem(commandInputField, 2, 0, 1, 1, 0, 0, true)