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/05/20 12:01:46 UTC

[plc4x] 02/02: feat(bacnet): externalize enums in own mspec and add missing skeletons

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 02d66166674b7b5885799e6ea6c859528d9e7e39
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri May 20 14:01:38 2022 +0200

    feat(bacnet): externalize enums in own mspec and add missing skeletons
---
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |   33 +-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |   37 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |   14 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |   14 +-
 .../plc4go/bacnetip/readwrite/model/AbortReason.go |  210 ----
 .../bacnetip/readwrite/model/BACnetAbortReason.go  |  210 ++++
 ...tReasonTagged.go => BACnetAbortReasonTagged.go} |   64 +-
 .../BACnetAccessAuthenticationFactorDisable.go     |  114 ++
 .../model/BACnetAccessCredentialDisable.go         |  114 ++
 .../model/BACnetAccessCredentialDisableReason.go   |  114 ++
 .../bacnetip/readwrite/model/BACnetAccessEvent.go  |  114 ++
 .../readwrite/model/BACnetAccessUserType.go        |  114 ++
 .../model/BACnetAccessZoneOccupancyState.go        |  114 ++
 .../model/BACnetAuthorizationExemption.go          |  114 ++
 .../readwrite/model/BACnetAuthorizationMode.go     |  114 ++
 .../readwrite/model/BACnetBinaryLightingPV.go      |  114 ++
 .../bacnetip/readwrite/model/BACnetBinaryPV.go     |  237 ++--
 ...jectReasonTagged.go => BACnetBinaryPVTagged.go} |  118 +-
 .../bacnetip/readwrite/model/BACnetDeviceStatus.go |  114 ++
 .../readwrite/model/BACnetDoorAlarmState.go        |  114 ++
 .../bacnetip/readwrite/model/BACnetDoorStatus.go   |  114 ++
 .../readwrite/model/BACnetEngineeringUnits.go      |  114 ++
 .../readwrite/model/BACnetEscalatorFault.go        |  114 ++
 .../readwrite/model/BACnetEscalatorMode.go         |  114 ++
 .../model/BACnetEscalatorOperationDirection.go     |  114 ++
 .../bacnetip/readwrite/model/BACnetEventState.go   |    6 +-
 .../readwrite/model/BACnetLifeSafetyOperation.go   |  114 ++
 .../readwrite/model/BACnetLiftCarDirection.go      |  114 ++
 .../readwrite/model/BACnetLiftCarDriveStatus.go    |  114 ++
 .../bacnetip/readwrite/model/BACnetLiftCarMode.go  |  114 ++
 .../bacnetip/readwrite/model/BACnetLiftFault.go    |  114 ++
 .../readwrite/model/BACnetLightingOperation.go     |  114 ++
 .../readwrite/model/BACnetLightingTransition.go    |  114 ++
 .../bacnetip/readwrite/model/BACnetLoggingType.go  |  114 ++
 .../bacnetip/readwrite/model/BACnetMaintenance.go  |  114 ++
 .../readwrite/model/BACnetNetworkPortCommand.go    |  114 ++
 .../bacnetip/readwrite/model/BACnetProgramError.go |  114 ++
 .../model/BACnetPropertyStatesBinaryValue.go       |   71 +-
 .../readwrite/model/BACnetPropertyStatesBoolean.go |   61 +-
 .../bacnetip/readwrite/model/BACnetRejectReason.go |  194 +++
 ...ReasonTagged.go => BACnetRejectReasonTagged.go} |   64 +-
 .../bacnetip/readwrite/model/BACnetRelationship.go |  114 ++
 .../readwrite/model/BACnetRestartReason.go         |  114 ++
 .../readwrite/model/BACnetSilencedState.go         |  114 ++
 .../bacnetip/readwrite/model/BACnetVTClass.go      |  114 ++
 .../bacnetip/readwrite/model/RejectReason.go       |  194 ---
 .../bacnetip/readwrite/model/StaticHelper.go       |   12 +-
 .../bacnetip/readwrite/utils/StaticHelper.java     |   38 +-
 .../plc4x/protocol/bacnetip/BacNetIpProtocol.java  |    9 +
 .../protocols/bacnetip/bacnet-enums.mspec          | 1170 ++++++++++++++++++
 .../resources/protocols/bacnetip/bacnetip.mspec    | 1252 +++-----------------
 51 files changed, 5640 insertions(+), 1902 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
index ec08fd78b9..ed9922cf40 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
@@ -241,6 +241,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetDateTimeEnclosedParse(io, tagNumber)
+	case "BACnetRejectReasonTagged":
+		actualLength, err := utils.StrToUint32(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetRejectReasonTaggedParse(io, actualLength)
 	case "BACnetTagPayloadObjectIdentifier":
 		return model.BACnetTagPayloadObjectIdentifierParse(io)
 	case "BVLCBroadcastDistributionTableEntry":
@@ -251,6 +257,13 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 	case "ListOfCovNotificationsValue":
 		objectType := model.BACnetObjectTypeByName(arguments[0])
 		return model.ListOfCovNotificationsValueParse(io, objectType)
+	case "BACnetBinaryPVTagged":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		tagClass := model.TagClassByName(arguments[1])
+		return model.BACnetBinaryPVTaggedParse(io, tagNumber, tagClass)
 	case "BACnetDateTime":
 		return model.BACnetDateTimeParse(io)
 	case "ErrorEnclosed":
@@ -329,12 +342,6 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetEventSummariesListParse(io, tagNumber)
-	case "AbortReasonTagged":
-		actualLength, err := utils.StrToUint32(arguments[0])
-		if err != nil {
-			return nil, errors.Wrap(err, "Error parsing")
-		}
-		return model.AbortReasonTaggedParse(io, actualLength)
 	case "BACnetAddress":
 		return model.BACnetAddressParse(io)
 	case "BACnetTagPayloadUnsignedInteger":
@@ -432,20 +439,14 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetServiceAckParse(io, serviceRequestLength)
-	case "BACnetBinaryPV":
-		tagNumber, err := utils.StrToUint8(arguments[0])
-		if err != nil {
-			return nil, errors.Wrap(err, "Error parsing")
-		}
-		return model.BACnetBinaryPVParse(io, tagNumber)
-	case "RejectReasonTagged":
+	case "ListOfCovNotifications":
+		return model.ListOfCovNotificationsParse(io)
+	case "BACnetAbortReasonTagged":
 		actualLength, err := utils.StrToUint32(arguments[0])
 		if err != nil {
 			return nil, errors.Wrap(err, "Error parsing")
 		}
-		return model.RejectReasonTaggedParse(io, actualLength)
-	case "ListOfCovNotifications":
-		return model.ListOfCovNotificationsParse(io)
+		return model.BACnetAbortReasonTaggedParse(io, actualLength)
 	case "BACnetConfirmedServiceRequestCreateObjectObjectSpecifier":
 		tagNumber, err := utils.StrToUint8(arguments[0])
 		if err != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
index e3b737dce5..e2977ea7c2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
@@ -278,6 +278,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.BACnetDateTimeEnclosedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetRejectReasonTagged":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 32)
+		if err != nil {
+			return nil, err
+		}
+		actualLength := uint32(parsedUint0)
+		return model.BACnetRejectReasonTaggedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
 	case "BACnetTagPayloadObjectIdentifier":
 		return model.BACnetTagPayloadObjectIdentifierParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BVLCBroadcastDistributionTableEntry":
@@ -288,6 +295,14 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 	case "ListOfCovNotificationsValue":
 		objectType := model.BACnetObjectTypeByName(parserArguments[0])
 		return model.ListOfCovNotificationsValueParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), objectType)
+	case "BACnetBinaryPVTagged":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		tagClass := model.TagClassByName(parserArguments[1])
+		return model.BACnetBinaryPVTaggedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber, tagClass)
 	case "BACnetDateTime":
 		return model.BACnetDateTimeParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ErrorEnclosed":
@@ -377,13 +392,6 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.BACnetEventSummariesListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
-	case "AbortReasonTagged":
-		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 32)
-		if err != nil {
-			return nil, err
-		}
-		actualLength := uint32(parsedUint0)
-		return model.AbortReasonTaggedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
 	case "BACnetAddress":
 		return model.BACnetAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadUnsignedInteger":
@@ -492,22 +500,15 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		serviceRequestLength := uint16(parsedUint0)
 		return model.BACnetServiceAckParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), serviceRequestLength)
-	case "BACnetBinaryPV":
-		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
-		if err != nil {
-			return nil, err
-		}
-		tagNumber := uint8(parsedUint0)
-		return model.BACnetBinaryPVParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
-	case "RejectReasonTagged":
+	case "ListOfCovNotifications":
+		return model.ListOfCovNotificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "BACnetAbortReasonTagged":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 32)
 		if err != nil {
 			return nil, err
 		}
 		actualLength := uint32(parsedUint0)
-		return model.RejectReasonTaggedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
-	case "ListOfCovNotifications":
-		return model.ListOfCovNotificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+		return model.BACnetAbortReasonTaggedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
 	case "BACnetConfirmedServiceRequestCreateObjectObjectSpecifier":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
 		if err != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index fbe35062c8..475d126666 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -32,7 +32,7 @@ type APDUAbort struct {
 	*APDU
 	Server           bool
 	OriginalInvokeId uint8
-	AbortReason      *AbortReasonTagged
+	AbortReason      *BACnetAbortReasonTagged
 
 	// Arguments.
 	ApduLength uint16
@@ -46,7 +46,7 @@ type IAPDUAbort interface {
 	// GetOriginalInvokeId returns OriginalInvokeId (property field)
 	GetOriginalInvokeId() uint8
 	// GetAbortReason returns AbortReason (property field)
-	GetAbortReason() *AbortReasonTagged
+	GetAbortReason() *BACnetAbortReasonTagged
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -88,7 +88,7 @@ func (m *APDUAbort) GetOriginalInvokeId() uint8 {
 	return m.OriginalInvokeId
 }
 
-func (m *APDUAbort) GetAbortReason() *AbortReasonTagged {
+func (m *APDUAbort) GetAbortReason() *BACnetAbortReasonTagged {
 	return m.AbortReason
 }
 
@@ -98,7 +98,7 @@ func (m *APDUAbort) GetAbortReason() *AbortReasonTagged {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUAbort factory function for APDUAbort
-func NewAPDUAbort(server bool, originalInvokeId uint8, abortReason *AbortReasonTagged, apduLength uint16) *APDUAbort {
+func NewAPDUAbort(server bool, originalInvokeId uint8, abortReason *BACnetAbortReasonTagged, apduLength uint16) *APDUAbort {
 	_result := &APDUAbort{
 		Server:           server,
 		OriginalInvokeId: originalInvokeId,
@@ -196,11 +196,11 @@ func APDUAbortParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUAbort,
 	if pullErr := readBuffer.PullContext("abortReason"); pullErr != nil {
 		return nil, pullErr
 	}
-	_abortReason, _abortReasonErr := AbortReasonTaggedParse(readBuffer, uint32(uint32(1)))
+	_abortReason, _abortReasonErr := BACnetAbortReasonTaggedParse(readBuffer, uint32(uint32(1)))
 	if _abortReasonErr != nil {
 		return nil, errors.Wrap(_abortReasonErr, "Error parsing 'abortReason' field")
 	}
-	abortReason := CastAbortReasonTagged(_abortReason)
+	abortReason := CastBACnetAbortReasonTagged(_abortReason)
 	if closeErr := readBuffer.CloseContext("abortReason"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -213,7 +213,7 @@ func APDUAbortParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUAbort,
 	_child := &APDUAbort{
 		Server:           server,
 		OriginalInvokeId: originalInvokeId,
-		AbortReason:      CastAbortReasonTagged(abortReason),
+		AbortReason:      CastBACnetAbortReasonTagged(abortReason),
 		APDU:             &APDU{},
 	}
 	_child.APDU.Child = _child
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index 95eb57d391..3c83148ba8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -31,7 +31,7 @@ import (
 type APDUReject struct {
 	*APDU
 	OriginalInvokeId uint8
-	RejectReason     *RejectReasonTagged
+	RejectReason     *BACnetRejectReasonTagged
 
 	// Arguments.
 	ApduLength uint16
@@ -43,7 +43,7 @@ type IAPDUReject interface {
 	// GetOriginalInvokeId returns OriginalInvokeId (property field)
 	GetOriginalInvokeId() uint8
 	// GetRejectReason returns RejectReason (property field)
-	GetRejectReason() *RejectReasonTagged
+	GetRejectReason() *BACnetRejectReasonTagged
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -81,7 +81,7 @@ func (m *APDUReject) GetOriginalInvokeId() uint8 {
 	return m.OriginalInvokeId
 }
 
-func (m *APDUReject) GetRejectReason() *RejectReasonTagged {
+func (m *APDUReject) GetRejectReason() *BACnetRejectReasonTagged {
 	return m.RejectReason
 }
 
@@ -91,7 +91,7 @@ func (m *APDUReject) GetRejectReason() *RejectReasonTagged {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUReject factory function for APDUReject
-func NewAPDUReject(originalInvokeId uint8, rejectReason *RejectReasonTagged, apduLength uint16) *APDUReject {
+func NewAPDUReject(originalInvokeId uint8, rejectReason *BACnetRejectReasonTagged, apduLength uint16) *APDUReject {
 	_result := &APDUReject{
 		OriginalInvokeId: originalInvokeId,
 		RejectReason:     rejectReason,
@@ -178,11 +178,11 @@ func APDURejectParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDURejec
 	if pullErr := readBuffer.PullContext("rejectReason"); pullErr != nil {
 		return nil, pullErr
 	}
-	_rejectReason, _rejectReasonErr := RejectReasonTaggedParse(readBuffer, uint32(uint32(1)))
+	_rejectReason, _rejectReasonErr := BACnetRejectReasonTaggedParse(readBuffer, uint32(uint32(1)))
 	if _rejectReasonErr != nil {
 		return nil, errors.Wrap(_rejectReasonErr, "Error parsing 'rejectReason' field")
 	}
-	rejectReason := CastRejectReasonTagged(_rejectReason)
+	rejectReason := CastBACnetRejectReasonTagged(_rejectReason)
 	if closeErr := readBuffer.CloseContext("rejectReason"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -194,7 +194,7 @@ func APDURejectParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDURejec
 	// Create a partially initialized instance
 	_child := &APDUReject{
 		OriginalInvokeId: originalInvokeId,
-		RejectReason:     CastRejectReasonTagged(rejectReason),
+		RejectReason:     CastBACnetRejectReasonTagged(rejectReason),
 		APDU:             &APDU{},
 	}
 	_child.APDU.Child = _child
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/AbortReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/AbortReason.go
deleted file mode 100644
index 0ca7b17e1c..0000000000
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/AbortReason.go
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package model
-
-import (
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"github.com/pkg/errors"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// AbortReason is an enum
-type AbortReason uint8
-
-type IAbortReason interface {
-	Serialize(writeBuffer utils.WriteBuffer) error
-}
-
-const (
-	AbortReason_OTHER                             AbortReason = 0
-	AbortReason_BUFFER_OVERFLOW                   AbortReason = 1
-	AbortReason_INVALID_APDU_IN_THIS_STATE        AbortReason = 2
-	AbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK AbortReason = 3
-	AbortReason_SEGMENTATION_NOT_SUPPORTED        AbortReason = 4
-	AbortReason_SECURITY_ERROR                    AbortReason = 5
-	AbortReason_INSUFFICIENT_SECURITY             AbortReason = 6
-	AbortReason_WINDOW_SIZE_OUT_OF_RANGE          AbortReason = 7
-	AbortReason_APPLICATION_EXCEEDED_REPLY_TIME   AbortReason = 8
-	AbortReason_OUT_OF_RESOURCES                  AbortReason = 9
-	AbortReason_TSM_TIMEOUT                       AbortReason = 10
-	AbortReason_APDU_TOO_LONG                     AbortReason = 11
-	AbortReason_VENDOR_PROPRIETARY_VALUE          AbortReason = 0xFF
-)
-
-var AbortReasonValues []AbortReason
-
-func init() {
-	_ = errors.New
-	AbortReasonValues = []AbortReason{
-		AbortReason_OTHER,
-		AbortReason_BUFFER_OVERFLOW,
-		AbortReason_INVALID_APDU_IN_THIS_STATE,
-		AbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK,
-		AbortReason_SEGMENTATION_NOT_SUPPORTED,
-		AbortReason_SECURITY_ERROR,
-		AbortReason_INSUFFICIENT_SECURITY,
-		AbortReason_WINDOW_SIZE_OUT_OF_RANGE,
-		AbortReason_APPLICATION_EXCEEDED_REPLY_TIME,
-		AbortReason_OUT_OF_RESOURCES,
-		AbortReason_TSM_TIMEOUT,
-		AbortReason_APDU_TOO_LONG,
-		AbortReason_VENDOR_PROPRIETARY_VALUE,
-	}
-}
-
-func AbortReasonByValue(value uint8) AbortReason {
-	switch value {
-	case 0:
-		return AbortReason_OTHER
-	case 0xFF:
-		return AbortReason_VENDOR_PROPRIETARY_VALUE
-	case 1:
-		return AbortReason_BUFFER_OVERFLOW
-	case 10:
-		return AbortReason_TSM_TIMEOUT
-	case 11:
-		return AbortReason_APDU_TOO_LONG
-	case 2:
-		return AbortReason_INVALID_APDU_IN_THIS_STATE
-	case 3:
-		return AbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK
-	case 4:
-		return AbortReason_SEGMENTATION_NOT_SUPPORTED
-	case 5:
-		return AbortReason_SECURITY_ERROR
-	case 6:
-		return AbortReason_INSUFFICIENT_SECURITY
-	case 7:
-		return AbortReason_WINDOW_SIZE_OUT_OF_RANGE
-	case 8:
-		return AbortReason_APPLICATION_EXCEEDED_REPLY_TIME
-	case 9:
-		return AbortReason_OUT_OF_RESOURCES
-	}
-	return 0
-}
-
-func AbortReasonByName(value string) AbortReason {
-	switch value {
-	case "OTHER":
-		return AbortReason_OTHER
-	case "VENDOR_PROPRIETARY_VALUE":
-		return AbortReason_VENDOR_PROPRIETARY_VALUE
-	case "BUFFER_OVERFLOW":
-		return AbortReason_BUFFER_OVERFLOW
-	case "TSM_TIMEOUT":
-		return AbortReason_TSM_TIMEOUT
-	case "APDU_TOO_LONG":
-		return AbortReason_APDU_TOO_LONG
-	case "INVALID_APDU_IN_THIS_STATE":
-		return AbortReason_INVALID_APDU_IN_THIS_STATE
-	case "PREEMPTED_BY_HIGHER_PRIORITY_TASK":
-		return AbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK
-	case "SEGMENTATION_NOT_SUPPORTED":
-		return AbortReason_SEGMENTATION_NOT_SUPPORTED
-	case "SECURITY_ERROR":
-		return AbortReason_SECURITY_ERROR
-	case "INSUFFICIENT_SECURITY":
-		return AbortReason_INSUFFICIENT_SECURITY
-	case "WINDOW_SIZE_OUT_OF_RANGE":
-		return AbortReason_WINDOW_SIZE_OUT_OF_RANGE
-	case "APPLICATION_EXCEEDED_REPLY_TIME":
-		return AbortReason_APPLICATION_EXCEEDED_REPLY_TIME
-	case "OUT_OF_RESOURCES":
-		return AbortReason_OUT_OF_RESOURCES
-	}
-	return 0
-}
-
-func AbortReasonKnows(value uint8) bool {
-	for _, typeValue := range AbortReasonValues {
-		if uint8(typeValue) == value {
-			return true
-		}
-	}
-	return false
-}
-
-func CastAbortReason(structType interface{}) AbortReason {
-	castFunc := func(typ interface{}) AbortReason {
-		if sAbortReason, ok := typ.(AbortReason); ok {
-			return sAbortReason
-		}
-		return 0
-	}
-	return castFunc(structType)
-}
-
-func (m AbortReason) GetLengthInBits() uint16 {
-	return 8
-}
-
-func (m AbortReason) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func AbortReasonParse(readBuffer utils.ReadBuffer) (AbortReason, error) {
-	val, err := readBuffer.ReadUint8("AbortReason", 8)
-	if err != nil {
-		return 0, nil
-	}
-	return AbortReasonByValue(val), nil
-}
-
-func (e AbortReason) Serialize(writeBuffer utils.WriteBuffer) error {
-	return writeBuffer.WriteUint8("AbortReason", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
-}
-
-func (e AbortReason) name() string {
-	switch e {
-	case AbortReason_OTHER:
-		return "OTHER"
-	case AbortReason_VENDOR_PROPRIETARY_VALUE:
-		return "VENDOR_PROPRIETARY_VALUE"
-	case AbortReason_BUFFER_OVERFLOW:
-		return "BUFFER_OVERFLOW"
-	case AbortReason_TSM_TIMEOUT:
-		return "TSM_TIMEOUT"
-	case AbortReason_APDU_TOO_LONG:
-		return "APDU_TOO_LONG"
-	case AbortReason_INVALID_APDU_IN_THIS_STATE:
-		return "INVALID_APDU_IN_THIS_STATE"
-	case AbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK:
-		return "PREEMPTED_BY_HIGHER_PRIORITY_TASK"
-	case AbortReason_SEGMENTATION_NOT_SUPPORTED:
-		return "SEGMENTATION_NOT_SUPPORTED"
-	case AbortReason_SECURITY_ERROR:
-		return "SECURITY_ERROR"
-	case AbortReason_INSUFFICIENT_SECURITY:
-		return "INSUFFICIENT_SECURITY"
-	case AbortReason_WINDOW_SIZE_OUT_OF_RANGE:
-		return "WINDOW_SIZE_OUT_OF_RANGE"
-	case AbortReason_APPLICATION_EXCEEDED_REPLY_TIME:
-		return "APPLICATION_EXCEEDED_REPLY_TIME"
-	case AbortReason_OUT_OF_RESOURCES:
-		return "OUT_OF_RESOURCES"
-	}
-	return ""
-}
-
-func (e AbortReason) String() string {
-	return e.name()
-}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAbortReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAbortReason.go
new file mode 100644
index 0000000000..d2a06337b4
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAbortReason.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
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAbortReason is an enum
+type BACnetAbortReason uint8
+
+type IBACnetAbortReason interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAbortReason_OTHER                             BACnetAbortReason = 0
+	BACnetAbortReason_BUFFER_OVERFLOW                   BACnetAbortReason = 1
+	BACnetAbortReason_INVALID_APDU_IN_THIS_STATE        BACnetAbortReason = 2
+	BACnetAbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK BACnetAbortReason = 3
+	BACnetAbortReason_SEGMENTATION_NOT_SUPPORTED        BACnetAbortReason = 4
+	BACnetAbortReason_SECURITY_ERROR                    BACnetAbortReason = 5
+	BACnetAbortReason_INSUFFICIENT_SECURITY             BACnetAbortReason = 6
+	BACnetAbortReason_WINDOW_SIZE_OUT_OF_RANGE          BACnetAbortReason = 7
+	BACnetAbortReason_APPLICATION_EXCEEDED_REPLY_TIME   BACnetAbortReason = 8
+	BACnetAbortReason_OUT_OF_RESOURCES                  BACnetAbortReason = 9
+	BACnetAbortReason_TSM_TIMEOUT                       BACnetAbortReason = 10
+	BACnetAbortReason_APDU_TOO_LONG                     BACnetAbortReason = 11
+	BACnetAbortReason_VENDOR_PROPRIETARY_VALUE          BACnetAbortReason = 0xFF
+)
+
+var BACnetAbortReasonValues []BACnetAbortReason
+
+func init() {
+	_ = errors.New
+	BACnetAbortReasonValues = []BACnetAbortReason{
+		BACnetAbortReason_OTHER,
+		BACnetAbortReason_BUFFER_OVERFLOW,
+		BACnetAbortReason_INVALID_APDU_IN_THIS_STATE,
+		BACnetAbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK,
+		BACnetAbortReason_SEGMENTATION_NOT_SUPPORTED,
+		BACnetAbortReason_SECURITY_ERROR,
+		BACnetAbortReason_INSUFFICIENT_SECURITY,
+		BACnetAbortReason_WINDOW_SIZE_OUT_OF_RANGE,
+		BACnetAbortReason_APPLICATION_EXCEEDED_REPLY_TIME,
+		BACnetAbortReason_OUT_OF_RESOURCES,
+		BACnetAbortReason_TSM_TIMEOUT,
+		BACnetAbortReason_APDU_TOO_LONG,
+		BACnetAbortReason_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAbortReasonByValue(value uint8) BACnetAbortReason {
+	switch value {
+	case 0:
+		return BACnetAbortReason_OTHER
+	case 0xFF:
+		return BACnetAbortReason_VENDOR_PROPRIETARY_VALUE
+	case 1:
+		return BACnetAbortReason_BUFFER_OVERFLOW
+	case 10:
+		return BACnetAbortReason_TSM_TIMEOUT
+	case 11:
+		return BACnetAbortReason_APDU_TOO_LONG
+	case 2:
+		return BACnetAbortReason_INVALID_APDU_IN_THIS_STATE
+	case 3:
+		return BACnetAbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK
+	case 4:
+		return BACnetAbortReason_SEGMENTATION_NOT_SUPPORTED
+	case 5:
+		return BACnetAbortReason_SECURITY_ERROR
+	case 6:
+		return BACnetAbortReason_INSUFFICIENT_SECURITY
+	case 7:
+		return BACnetAbortReason_WINDOW_SIZE_OUT_OF_RANGE
+	case 8:
+		return BACnetAbortReason_APPLICATION_EXCEEDED_REPLY_TIME
+	case 9:
+		return BACnetAbortReason_OUT_OF_RESOURCES
+	}
+	return 0
+}
+
+func BACnetAbortReasonByName(value string) BACnetAbortReason {
+	switch value {
+	case "OTHER":
+		return BACnetAbortReason_OTHER
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAbortReason_VENDOR_PROPRIETARY_VALUE
+	case "BUFFER_OVERFLOW":
+		return BACnetAbortReason_BUFFER_OVERFLOW
+	case "TSM_TIMEOUT":
+		return BACnetAbortReason_TSM_TIMEOUT
+	case "APDU_TOO_LONG":
+		return BACnetAbortReason_APDU_TOO_LONG
+	case "INVALID_APDU_IN_THIS_STATE":
+		return BACnetAbortReason_INVALID_APDU_IN_THIS_STATE
+	case "PREEMPTED_BY_HIGHER_PRIORITY_TASK":
+		return BACnetAbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK
+	case "SEGMENTATION_NOT_SUPPORTED":
+		return BACnetAbortReason_SEGMENTATION_NOT_SUPPORTED
+	case "SECURITY_ERROR":
+		return BACnetAbortReason_SECURITY_ERROR
+	case "INSUFFICIENT_SECURITY":
+		return BACnetAbortReason_INSUFFICIENT_SECURITY
+	case "WINDOW_SIZE_OUT_OF_RANGE":
+		return BACnetAbortReason_WINDOW_SIZE_OUT_OF_RANGE
+	case "APPLICATION_EXCEEDED_REPLY_TIME":
+		return BACnetAbortReason_APPLICATION_EXCEEDED_REPLY_TIME
+	case "OUT_OF_RESOURCES":
+		return BACnetAbortReason_OUT_OF_RESOURCES
+	}
+	return 0
+}
+
+func BACnetAbortReasonKnows(value uint8) bool {
+	for _, typeValue := range BACnetAbortReasonValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAbortReason(structType interface{}) BACnetAbortReason {
+	castFunc := func(typ interface{}) BACnetAbortReason {
+		if sBACnetAbortReason, ok := typ.(BACnetAbortReason); ok {
+			return sBACnetAbortReason
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAbortReason) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetAbortReason) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAbortReasonParse(readBuffer utils.ReadBuffer) (BACnetAbortReason, error) {
+	val, err := readBuffer.ReadUint8("BACnetAbortReason", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAbortReasonByValue(val), nil
+}
+
+func (e BACnetAbortReason) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetAbortReason", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAbortReason) name() string {
+	switch e {
+	case BACnetAbortReason_OTHER:
+		return "OTHER"
+	case BACnetAbortReason_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	case BACnetAbortReason_BUFFER_OVERFLOW:
+		return "BUFFER_OVERFLOW"
+	case BACnetAbortReason_TSM_TIMEOUT:
+		return "TSM_TIMEOUT"
+	case BACnetAbortReason_APDU_TOO_LONG:
+		return "APDU_TOO_LONG"
+	case BACnetAbortReason_INVALID_APDU_IN_THIS_STATE:
+		return "INVALID_APDU_IN_THIS_STATE"
+	case BACnetAbortReason_PREEMPTED_BY_HIGHER_PRIORITY_TASK:
+		return "PREEMPTED_BY_HIGHER_PRIORITY_TASK"
+	case BACnetAbortReason_SEGMENTATION_NOT_SUPPORTED:
+		return "SEGMENTATION_NOT_SUPPORTED"
+	case BACnetAbortReason_SECURITY_ERROR:
+		return "SECURITY_ERROR"
+	case BACnetAbortReason_INSUFFICIENT_SECURITY:
+		return "INSUFFICIENT_SECURITY"
+	case BACnetAbortReason_WINDOW_SIZE_OUT_OF_RANGE:
+		return "WINDOW_SIZE_OUT_OF_RANGE"
+	case BACnetAbortReason_APPLICATION_EXCEEDED_REPLY_TIME:
+		return "APPLICATION_EXCEEDED_REPLY_TIME"
+	case BACnetAbortReason_OUT_OF_RESOURCES:
+		return "OUT_OF_RESOURCES"
+	}
+	return ""
+}
+
+func (e BACnetAbortReason) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReasonTagged.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAbortReasonTagged.go
similarity index 67%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReasonTagged.go
copy to plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAbortReasonTagged.go
index 4e458def8a..1fe6e4d8e0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReasonTagged.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAbortReasonTagged.go
@@ -26,19 +26,19 @@ import (
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// RejectReasonTagged is the data-structure of this message
-type RejectReasonTagged struct {
-	Value            RejectReason
+// BACnetAbortReasonTagged is the data-structure of this message
+type BACnetAbortReasonTagged struct {
+	Value            BACnetAbortReason
 	ProprietaryValue uint32
 
 	// Arguments.
 	ActualLength uint32
 }
 
-// IRejectReasonTagged is the corresponding interface of RejectReasonTagged
-type IRejectReasonTagged interface {
+// IBACnetAbortReasonTagged is the corresponding interface of BACnetAbortReasonTagged
+type IBACnetAbortReasonTagged interface {
 	// GetValue returns Value (property field)
-	GetValue() RejectReason
+	GetValue() BACnetAbortReason
 	// GetProprietaryValue returns ProprietaryValue (property field)
 	GetProprietaryValue() uint32
 	// GetIsProprietary returns IsProprietary (virtual field)
@@ -56,11 +56,11 @@ type IRejectReasonTagged interface {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *RejectReasonTagged) GetValue() RejectReason {
+func (m *BACnetAbortReasonTagged) GetValue() BACnetAbortReason {
 	return m.Value
 }
 
-func (m *RejectReasonTagged) GetProprietaryValue() uint32 {
+func (m *BACnetAbortReasonTagged) GetProprietaryValue() uint32 {
 	return m.ProprietaryValue
 }
 
@@ -73,8 +73,8 @@ func (m *RejectReasonTagged) GetProprietaryValue() uint32 {
 /////////////////////// Accessors for virtual fields.
 ///////////////////////
 
-func (m *RejectReasonTagged) GetIsProprietary() bool {
-	return bool(bool((m.GetValue()) == (RejectReason_VENDOR_PROPRIETARY_VALUE)))
+func (m *BACnetAbortReasonTagged) GetIsProprietary() bool {
+	return bool(bool((m.GetValue()) == (BACnetAbortReason_VENDOR_PROPRIETARY_VALUE)))
 }
 
 ///////////////////////
@@ -82,30 +82,30 @@ func (m *RejectReasonTagged) GetIsProprietary() bool {
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
-// NewRejectReasonTagged factory function for RejectReasonTagged
-func NewRejectReasonTagged(value RejectReason, proprietaryValue uint32, actualLength uint32) *RejectReasonTagged {
-	return &RejectReasonTagged{Value: value, ProprietaryValue: proprietaryValue, ActualLength: actualLength}
+// NewBACnetAbortReasonTagged factory function for BACnetAbortReasonTagged
+func NewBACnetAbortReasonTagged(value BACnetAbortReason, proprietaryValue uint32, actualLength uint32) *BACnetAbortReasonTagged {
+	return &BACnetAbortReasonTagged{Value: value, ProprietaryValue: proprietaryValue, ActualLength: actualLength}
 }
 
-func CastRejectReasonTagged(structType interface{}) *RejectReasonTagged {
-	if casted, ok := structType.(RejectReasonTagged); ok {
+func CastBACnetAbortReasonTagged(structType interface{}) *BACnetAbortReasonTagged {
+	if casted, ok := structType.(BACnetAbortReasonTagged); ok {
 		return &casted
 	}
-	if casted, ok := structType.(*RejectReasonTagged); ok {
+	if casted, ok := structType.(*BACnetAbortReasonTagged); ok {
 		return casted
 	}
 	return nil
 }
 
-func (m *RejectReasonTagged) GetTypeName() string {
-	return "RejectReasonTagged"
+func (m *BACnetAbortReasonTagged) GetTypeName() string {
+	return "BACnetAbortReasonTagged"
 }
 
-func (m *RejectReasonTagged) GetLengthInBits() uint16 {
+func (m *BACnetAbortReasonTagged) GetLengthInBits() uint16 {
 	return m.GetLengthInBitsConditional(false)
 }
 
-func (m *RejectReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
+func (m *BACnetAbortReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
 	// Manual Field (value)
@@ -119,28 +119,28 @@ func (m *RejectReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
 	return lengthInBits
 }
 
-func (m *RejectReasonTagged) GetLengthInBytes() uint16 {
+func (m *BACnetAbortReasonTagged) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func RejectReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*RejectReasonTagged, error) {
+func BACnetAbortReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetAbortReasonTagged, error) {
 	positionAware := readBuffer
 	_ = positionAware
-	if pullErr := readBuffer.PullContext("RejectReasonTagged"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("BACnetAbortReasonTagged"); pullErr != nil {
 		return nil, pullErr
 	}
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
 	// Manual Field (value)
-	_value, _valueErr := ReadEnumGeneric(readBuffer, actualLength, RejectReason_VENDOR_PROPRIETARY_VALUE)
+	_value, _valueErr := ReadEnumGeneric(readBuffer, actualLength, BACnetAbortReason_VENDOR_PROPRIETARY_VALUE)
 	if _valueErr != nil {
 		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
 	}
-	value := _value.(RejectReason)
+	value := _value.(BACnetAbortReason)
 
 	// Virtual field
-	_isProprietary := bool((value) == (RejectReason_VENDOR_PROPRIETARY_VALUE))
+	_isProprietary := bool((value) == (BACnetAbortReason_VENDOR_PROPRIETARY_VALUE))
 	isProprietary := bool(_isProprietary)
 	_ = isProprietary
 
@@ -151,18 +151,18 @@ func RejectReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (
 	}
 	proprietaryValue := _proprietaryValue.(uint32)
 
-	if closeErr := readBuffer.CloseContext("RejectReasonTagged"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("BACnetAbortReasonTagged"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create the instance
-	return NewRejectReasonTagged(value, proprietaryValue, actualLength), nil
+	return NewBACnetAbortReasonTagged(value, proprietaryValue, actualLength), nil
 }
 
-func (m *RejectReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m *BACnetAbortReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	positionAware := writeBuffer
 	_ = positionAware
-	if pushErr := writeBuffer.PushContext("RejectReasonTagged"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("BACnetAbortReasonTagged"); pushErr != nil {
 		return pushErr
 	}
 
@@ -182,13 +182,13 @@ func (m *RejectReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(_proprietaryValueErr, "Error serializing 'proprietaryValue' field")
 	}
 
-	if popErr := writeBuffer.PopContext("RejectReasonTagged"); popErr != nil {
+	if popErr := writeBuffer.PopContext("BACnetAbortReasonTagged"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
 
-func (m *RejectReasonTagged) String() string {
+func (m *BACnetAbortReasonTagged) String() string {
 	if m == nil {
 		return "<nil>"
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisable.go
new file mode 100644
index 0000000000..2db95a5529
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessAuthenticationFactorDisable.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAccessAuthenticationFactorDisable is an enum
+type BACnetAccessAuthenticationFactorDisable uint16
+
+type IBACnetAccessAuthenticationFactorDisable interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAccessAuthenticationFactorDisable_VENDOR_PROPRIETARY_VALUE BACnetAccessAuthenticationFactorDisable = 0xFFFF
+)
+
+var BACnetAccessAuthenticationFactorDisableValues []BACnetAccessAuthenticationFactorDisable
+
+func init() {
+	_ = errors.New
+	BACnetAccessAuthenticationFactorDisableValues = []BACnetAccessAuthenticationFactorDisable{
+		BACnetAccessAuthenticationFactorDisable_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAccessAuthenticationFactorDisableByValue(value uint16) BACnetAccessAuthenticationFactorDisable {
+	switch value {
+	case 0xFFFF:
+		return BACnetAccessAuthenticationFactorDisable_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessAuthenticationFactorDisableByName(value string) BACnetAccessAuthenticationFactorDisable {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAccessAuthenticationFactorDisable_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessAuthenticationFactorDisableKnows(value uint16) bool {
+	for _, typeValue := range BACnetAccessAuthenticationFactorDisableValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAccessAuthenticationFactorDisable(structType interface{}) BACnetAccessAuthenticationFactorDisable {
+	castFunc := func(typ interface{}) BACnetAccessAuthenticationFactorDisable {
+		if sBACnetAccessAuthenticationFactorDisable, ok := typ.(BACnetAccessAuthenticationFactorDisable); ok {
+			return sBACnetAccessAuthenticationFactorDisable
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAccessAuthenticationFactorDisable) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAccessAuthenticationFactorDisable) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAccessAuthenticationFactorDisableParse(readBuffer utils.ReadBuffer) (BACnetAccessAuthenticationFactorDisable, error) {
+	val, err := readBuffer.ReadUint16("BACnetAccessAuthenticationFactorDisable", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAccessAuthenticationFactorDisableByValue(val), nil
+}
+
+func (e BACnetAccessAuthenticationFactorDisable) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAccessAuthenticationFactorDisable", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAccessAuthenticationFactorDisable) name() string {
+	switch e {
+	case BACnetAccessAuthenticationFactorDisable_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAccessAuthenticationFactorDisable) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessCredentialDisable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessCredentialDisable.go
new file mode 100644
index 0000000000..0f8492c929
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessCredentialDisable.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAccessCredentialDisable is an enum
+type BACnetAccessCredentialDisable uint16
+
+type IBACnetAccessCredentialDisable interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAccessCredentialDisable_VENDOR_PROPRIETARY_VALUE BACnetAccessCredentialDisable = 0xFFFF
+)
+
+var BACnetAccessCredentialDisableValues []BACnetAccessCredentialDisable
+
+func init() {
+	_ = errors.New
+	BACnetAccessCredentialDisableValues = []BACnetAccessCredentialDisable{
+		BACnetAccessCredentialDisable_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAccessCredentialDisableByValue(value uint16) BACnetAccessCredentialDisable {
+	switch value {
+	case 0xFFFF:
+		return BACnetAccessCredentialDisable_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessCredentialDisableByName(value string) BACnetAccessCredentialDisable {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAccessCredentialDisable_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessCredentialDisableKnows(value uint16) bool {
+	for _, typeValue := range BACnetAccessCredentialDisableValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAccessCredentialDisable(structType interface{}) BACnetAccessCredentialDisable {
+	castFunc := func(typ interface{}) BACnetAccessCredentialDisable {
+		if sBACnetAccessCredentialDisable, ok := typ.(BACnetAccessCredentialDisable); ok {
+			return sBACnetAccessCredentialDisable
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAccessCredentialDisable) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAccessCredentialDisable) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAccessCredentialDisableParse(readBuffer utils.ReadBuffer) (BACnetAccessCredentialDisable, error) {
+	val, err := readBuffer.ReadUint16("BACnetAccessCredentialDisable", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAccessCredentialDisableByValue(val), nil
+}
+
+func (e BACnetAccessCredentialDisable) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAccessCredentialDisable", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAccessCredentialDisable) name() string {
+	switch e {
+	case BACnetAccessCredentialDisable_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAccessCredentialDisable) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessCredentialDisableReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessCredentialDisableReason.go
new file mode 100644
index 0000000000..1e1e1b6348
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessCredentialDisableReason.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAccessCredentialDisableReason is an enum
+type BACnetAccessCredentialDisableReason uint16
+
+type IBACnetAccessCredentialDisableReason interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAccessCredentialDisableReason_VENDOR_PROPRIETARY_VALUE BACnetAccessCredentialDisableReason = 0xFFFF
+)
+
+var BACnetAccessCredentialDisableReasonValues []BACnetAccessCredentialDisableReason
+
+func init() {
+	_ = errors.New
+	BACnetAccessCredentialDisableReasonValues = []BACnetAccessCredentialDisableReason{
+		BACnetAccessCredentialDisableReason_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAccessCredentialDisableReasonByValue(value uint16) BACnetAccessCredentialDisableReason {
+	switch value {
+	case 0xFFFF:
+		return BACnetAccessCredentialDisableReason_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessCredentialDisableReasonByName(value string) BACnetAccessCredentialDisableReason {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAccessCredentialDisableReason_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessCredentialDisableReasonKnows(value uint16) bool {
+	for _, typeValue := range BACnetAccessCredentialDisableReasonValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAccessCredentialDisableReason(structType interface{}) BACnetAccessCredentialDisableReason {
+	castFunc := func(typ interface{}) BACnetAccessCredentialDisableReason {
+		if sBACnetAccessCredentialDisableReason, ok := typ.(BACnetAccessCredentialDisableReason); ok {
+			return sBACnetAccessCredentialDisableReason
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAccessCredentialDisableReason) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAccessCredentialDisableReason) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAccessCredentialDisableReasonParse(readBuffer utils.ReadBuffer) (BACnetAccessCredentialDisableReason, error) {
+	val, err := readBuffer.ReadUint16("BACnetAccessCredentialDisableReason", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAccessCredentialDisableReasonByValue(val), nil
+}
+
+func (e BACnetAccessCredentialDisableReason) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAccessCredentialDisableReason", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAccessCredentialDisableReason) name() string {
+	switch e {
+	case BACnetAccessCredentialDisableReason_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAccessCredentialDisableReason) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessEvent.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessEvent.go
new file mode 100644
index 0000000000..6d49297493
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessEvent.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAccessEvent is an enum
+type BACnetAccessEvent uint16
+
+type IBACnetAccessEvent interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAccessEvent_VENDOR_PROPRIETARY_VALUE BACnetAccessEvent = 0xFFFF
+)
+
+var BACnetAccessEventValues []BACnetAccessEvent
+
+func init() {
+	_ = errors.New
+	BACnetAccessEventValues = []BACnetAccessEvent{
+		BACnetAccessEvent_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAccessEventByValue(value uint16) BACnetAccessEvent {
+	switch value {
+	case 0xFFFF:
+		return BACnetAccessEvent_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessEventByName(value string) BACnetAccessEvent {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAccessEvent_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessEventKnows(value uint16) bool {
+	for _, typeValue := range BACnetAccessEventValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAccessEvent(structType interface{}) BACnetAccessEvent {
+	castFunc := func(typ interface{}) BACnetAccessEvent {
+		if sBACnetAccessEvent, ok := typ.(BACnetAccessEvent); ok {
+			return sBACnetAccessEvent
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAccessEvent) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAccessEvent) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAccessEventParse(readBuffer utils.ReadBuffer) (BACnetAccessEvent, error) {
+	val, err := readBuffer.ReadUint16("BACnetAccessEvent", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAccessEventByValue(val), nil
+}
+
+func (e BACnetAccessEvent) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAccessEvent", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAccessEvent) name() string {
+	switch e {
+	case BACnetAccessEvent_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAccessEvent) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessUserType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessUserType.go
new file mode 100644
index 0000000000..1bea17f40a
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessUserType.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAccessUserType is an enum
+type BACnetAccessUserType uint16
+
+type IBACnetAccessUserType interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAccessUserType_VENDOR_PROPRIETARY_VALUE BACnetAccessUserType = 0xFFFF
+)
+
+var BACnetAccessUserTypeValues []BACnetAccessUserType
+
+func init() {
+	_ = errors.New
+	BACnetAccessUserTypeValues = []BACnetAccessUserType{
+		BACnetAccessUserType_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAccessUserTypeByValue(value uint16) BACnetAccessUserType {
+	switch value {
+	case 0xFFFF:
+		return BACnetAccessUserType_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessUserTypeByName(value string) BACnetAccessUserType {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAccessUserType_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessUserTypeKnows(value uint16) bool {
+	for _, typeValue := range BACnetAccessUserTypeValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAccessUserType(structType interface{}) BACnetAccessUserType {
+	castFunc := func(typ interface{}) BACnetAccessUserType {
+		if sBACnetAccessUserType, ok := typ.(BACnetAccessUserType); ok {
+			return sBACnetAccessUserType
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAccessUserType) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAccessUserType) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAccessUserTypeParse(readBuffer utils.ReadBuffer) (BACnetAccessUserType, error) {
+	val, err := readBuffer.ReadUint16("BACnetAccessUserType", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAccessUserTypeByValue(val), nil
+}
+
+func (e BACnetAccessUserType) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAccessUserType", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAccessUserType) name() string {
+	switch e {
+	case BACnetAccessUserType_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAccessUserType) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessZoneOccupancyState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessZoneOccupancyState.go
new file mode 100644
index 0000000000..70f1ca8e6c
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAccessZoneOccupancyState.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAccessZoneOccupancyState is an enum
+type BACnetAccessZoneOccupancyState uint16
+
+type IBACnetAccessZoneOccupancyState interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAccessZoneOccupancyState_VENDOR_PROPRIETARY_VALUE BACnetAccessZoneOccupancyState = 0xFFFF
+)
+
+var BACnetAccessZoneOccupancyStateValues []BACnetAccessZoneOccupancyState
+
+func init() {
+	_ = errors.New
+	BACnetAccessZoneOccupancyStateValues = []BACnetAccessZoneOccupancyState{
+		BACnetAccessZoneOccupancyState_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAccessZoneOccupancyStateByValue(value uint16) BACnetAccessZoneOccupancyState {
+	switch value {
+	case 0xFFFF:
+		return BACnetAccessZoneOccupancyState_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessZoneOccupancyStateByName(value string) BACnetAccessZoneOccupancyState {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAccessZoneOccupancyState_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAccessZoneOccupancyStateKnows(value uint16) bool {
+	for _, typeValue := range BACnetAccessZoneOccupancyStateValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAccessZoneOccupancyState(structType interface{}) BACnetAccessZoneOccupancyState {
+	castFunc := func(typ interface{}) BACnetAccessZoneOccupancyState {
+		if sBACnetAccessZoneOccupancyState, ok := typ.(BACnetAccessZoneOccupancyState); ok {
+			return sBACnetAccessZoneOccupancyState
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAccessZoneOccupancyState) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAccessZoneOccupancyState) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAccessZoneOccupancyStateParse(readBuffer utils.ReadBuffer) (BACnetAccessZoneOccupancyState, error) {
+	val, err := readBuffer.ReadUint16("BACnetAccessZoneOccupancyState", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAccessZoneOccupancyStateByValue(val), nil
+}
+
+func (e BACnetAccessZoneOccupancyState) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAccessZoneOccupancyState", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAccessZoneOccupancyState) name() string {
+	switch e {
+	case BACnetAccessZoneOccupancyState_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAccessZoneOccupancyState) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAuthorizationExemption.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAuthorizationExemption.go
new file mode 100644
index 0000000000..1fd593d981
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAuthorizationExemption.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAuthorizationExemption is an enum
+type BACnetAuthorizationExemption uint8
+
+type IBACnetAuthorizationExemption interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAuthorizationExemption_VENDOR_PROPRIETARY_VALUE BACnetAuthorizationExemption = 0xFF
+)
+
+var BACnetAuthorizationExemptionValues []BACnetAuthorizationExemption
+
+func init() {
+	_ = errors.New
+	BACnetAuthorizationExemptionValues = []BACnetAuthorizationExemption{
+		BACnetAuthorizationExemption_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAuthorizationExemptionByValue(value uint8) BACnetAuthorizationExemption {
+	switch value {
+	case 0xFF:
+		return BACnetAuthorizationExemption_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAuthorizationExemptionByName(value string) BACnetAuthorizationExemption {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAuthorizationExemption_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAuthorizationExemptionKnows(value uint8) bool {
+	for _, typeValue := range BACnetAuthorizationExemptionValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAuthorizationExemption(structType interface{}) BACnetAuthorizationExemption {
+	castFunc := func(typ interface{}) BACnetAuthorizationExemption {
+		if sBACnetAuthorizationExemption, ok := typ.(BACnetAuthorizationExemption); ok {
+			return sBACnetAuthorizationExemption
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAuthorizationExemption) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetAuthorizationExemption) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAuthorizationExemptionParse(readBuffer utils.ReadBuffer) (BACnetAuthorizationExemption, error) {
+	val, err := readBuffer.ReadUint8("BACnetAuthorizationExemption", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAuthorizationExemptionByValue(val), nil
+}
+
+func (e BACnetAuthorizationExemption) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetAuthorizationExemption", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAuthorizationExemption) name() string {
+	switch e {
+	case BACnetAuthorizationExemption_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAuthorizationExemption) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAuthorizationMode.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAuthorizationMode.go
new file mode 100644
index 0000000000..153b910ed0
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAuthorizationMode.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetAuthorizationMode is an enum
+type BACnetAuthorizationMode uint16
+
+type IBACnetAuthorizationMode interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetAuthorizationMode_VENDOR_PROPRIETARY_VALUE BACnetAuthorizationMode = 0xFFFF
+)
+
+var BACnetAuthorizationModeValues []BACnetAuthorizationMode
+
+func init() {
+	_ = errors.New
+	BACnetAuthorizationModeValues = []BACnetAuthorizationMode{
+		BACnetAuthorizationMode_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetAuthorizationModeByValue(value uint16) BACnetAuthorizationMode {
+	switch value {
+	case 0xFFFF:
+		return BACnetAuthorizationMode_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAuthorizationModeByName(value string) BACnetAuthorizationMode {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetAuthorizationMode_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetAuthorizationModeKnows(value uint16) bool {
+	for _, typeValue := range BACnetAuthorizationModeValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetAuthorizationMode(structType interface{}) BACnetAuthorizationMode {
+	castFunc := func(typ interface{}) BACnetAuthorizationMode {
+		if sBACnetAuthorizationMode, ok := typ.(BACnetAuthorizationMode); ok {
+			return sBACnetAuthorizationMode
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetAuthorizationMode) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetAuthorizationMode) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetAuthorizationModeParse(readBuffer utils.ReadBuffer) (BACnetAuthorizationMode, error) {
+	val, err := readBuffer.ReadUint16("BACnetAuthorizationMode", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetAuthorizationModeByValue(val), nil
+}
+
+func (e BACnetAuthorizationMode) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetAuthorizationMode", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetAuthorizationMode) name() string {
+	switch e {
+	case BACnetAuthorizationMode_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetAuthorizationMode) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryLightingPV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryLightingPV.go
new file mode 100644
index 0000000000..f9205b5dac
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryLightingPV.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetBinaryLightingPV is an enum
+type BACnetBinaryLightingPV uint8
+
+type IBACnetBinaryLightingPV interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetBinaryLightingPV_VENDOR_PROPRIETARY_VALUE BACnetBinaryLightingPV = 0xFF
+)
+
+var BACnetBinaryLightingPVValues []BACnetBinaryLightingPV
+
+func init() {
+	_ = errors.New
+	BACnetBinaryLightingPVValues = []BACnetBinaryLightingPV{
+		BACnetBinaryLightingPV_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetBinaryLightingPVByValue(value uint8) BACnetBinaryLightingPV {
+	switch value {
+	case 0xFF:
+		return BACnetBinaryLightingPV_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetBinaryLightingPVByName(value string) BACnetBinaryLightingPV {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetBinaryLightingPV_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetBinaryLightingPVKnows(value uint8) bool {
+	for _, typeValue := range BACnetBinaryLightingPVValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetBinaryLightingPV(structType interface{}) BACnetBinaryLightingPV {
+	castFunc := func(typ interface{}) BACnetBinaryLightingPV {
+		if sBACnetBinaryLightingPV, ok := typ.(BACnetBinaryLightingPV); ok {
+			return sBACnetBinaryLightingPV
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetBinaryLightingPV) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetBinaryLightingPV) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetBinaryLightingPVParse(readBuffer utils.ReadBuffer) (BACnetBinaryLightingPV, error) {
+	val, err := readBuffer.ReadUint8("BACnetBinaryLightingPV", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetBinaryLightingPVByValue(val), nil
+}
+
+func (e BACnetBinaryLightingPV) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetBinaryLightingPV", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetBinaryLightingPV) name() string {
+	switch e {
+	case BACnetBinaryLightingPV_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetBinaryLightingPV) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go
index 1da45c5799..394d4f6259 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go
@@ -22,204 +22,109 @@ package model
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// BACnetBinaryPV is the data-structure of this message
-type BACnetBinaryPV struct {
-	RawData *BACnetContextTagEnumerated
+// BACnetBinaryPV is an enum
+type BACnetBinaryPV uint8
 
-	// Arguments.
-	TagNumber uint8
-}
-
-// IBACnetBinaryPV is the corresponding interface of BACnetBinaryPV
 type IBACnetBinaryPV interface {
-	// GetRawData returns RawData (property field)
-	GetRawData() *BACnetContextTagEnumerated
-	// GetIsInactive returns IsInactive (virtual field)
-	GetIsInactive() bool
-	// GetIsActive returns IsActive (virtual field)
-	GetIsActive() bool
-	// GetLengthInBytes returns the length in bytes
-	GetLengthInBytes() uint16
-	// GetLengthInBits returns the length in bits
-	GetLengthInBits() uint16
-	// Serialize serializes this type
 	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *BACnetBinaryPV) GetRawData() *BACnetContextTagEnumerated {
-	return m.RawData
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for virtual fields.
-///////////////////////
-
-func (m *BACnetBinaryPV) GetIsInactive() bool {
-	rawData := m.RawData
-	_ = rawData
-	return bool(bool(bool((m.GetRawData()) != (nil))) && bool(bool(((*m.GetRawData()).GetActualValue()) == (0))))
-}
-
-func (m *BACnetBinaryPV) GetIsActive() bool {
-	rawData := m.RawData
-	_ = rawData
-	return bool(bool(bool((m.GetRawData()) != (nil))) && bool(bool(((*m.GetRawData()).GetActualValue()) == (1))))
-}
+const (
+	BACnetBinaryPV_INACTIVE                 BACnetBinaryPV = 0
+	BACnetBinaryPV_ACTIVE                   BACnetBinaryPV = 1
+	BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE BACnetBinaryPV = 0xFF
+)
 
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
+var BACnetBinaryPVValues []BACnetBinaryPV
 
-// NewBACnetBinaryPV factory function for BACnetBinaryPV
-func NewBACnetBinaryPV(rawData *BACnetContextTagEnumerated, tagNumber uint8) *BACnetBinaryPV {
-	return &BACnetBinaryPV{RawData: rawData, TagNumber: tagNumber}
+func init() {
+	_ = errors.New
+	BACnetBinaryPVValues = []BACnetBinaryPV{
+		BACnetBinaryPV_INACTIVE,
+		BACnetBinaryPV_ACTIVE,
+		BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE,
+	}
 }
 
-func CastBACnetBinaryPV(structType interface{}) *BACnetBinaryPV {
-	if casted, ok := structType.(BACnetBinaryPV); ok {
-		return &casted
+func BACnetBinaryPVByValue(value uint8) BACnetBinaryPV {
+	switch value {
+	case 0:
+		return BACnetBinaryPV_INACTIVE
+	case 0xFF:
+		return BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE
+	case 1:
+		return BACnetBinaryPV_ACTIVE
 	}
-	if casted, ok := structType.(*BACnetBinaryPV); ok {
-		return casted
-	}
-	return nil
+	return 0
 }
 
-func (m *BACnetBinaryPV) GetTypeName() string {
-	return "BACnetBinaryPV"
+func BACnetBinaryPVByName(value string) BACnetBinaryPV {
+	switch value {
+	case "INACTIVE":
+		return BACnetBinaryPV_INACTIVE
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE
+	case "ACTIVE":
+		return BACnetBinaryPV_ACTIVE
+	}
+	return 0
 }
 
-func (m *BACnetBinaryPV) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
+func BACnetBinaryPVKnows(value uint8) bool {
+	for _, typeValue := range BACnetBinaryPVValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
 }
 
-func (m *BACnetBinaryPV) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(0)
-
-	// Optional Field (rawData)
-	if m.RawData != nil {
-		lengthInBits += (*m.RawData).GetLengthInBits()
+func CastBACnetBinaryPV(structType interface{}) BACnetBinaryPV {
+	castFunc := func(typ interface{}) BACnetBinaryPV {
+		if sBACnetBinaryPV, ok := typ.(BACnetBinaryPV); ok {
+			return sBACnetBinaryPV
+		}
+		return 0
 	}
+	return castFunc(structType)
+}
 
-	// A virtual field doesn't have any in- or output.
-
-	// A virtual field doesn't have any in- or output.
-
-	return lengthInBits
+func (m BACnetBinaryPV) GetLengthInBits() uint16 {
+	return 8
 }
 
-func (m *BACnetBinaryPV) GetLengthInBytes() uint16 {
+func (m BACnetBinaryPV) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetBinaryPVParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetBinaryPV, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("BACnetBinaryPV"); pullErr != nil {
-		return nil, pullErr
+func BACnetBinaryPVParse(readBuffer utils.ReadBuffer) (BACnetBinaryPV, error) {
+	val, err := readBuffer.ReadUint8("BACnetBinaryPV", 8)
+	if err != nil {
+		return 0, nil
 	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Optional Field (rawData) (Can be skipped, if a given expression evaluates to false)
-	var rawData *BACnetContextTagEnumerated = nil
-	{
-		currentPos = positionAware.GetPos()
-		if pullErr := readBuffer.PullContext("rawData"); pullErr != nil {
-			return nil, pullErr
-		}
-		_val, _err := BACnetContextTagParse(readBuffer, tagNumber, BACnetDataType_ENUMERATED)
-		switch {
-		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
-			readBuffer.Reset(currentPos)
-		case _err != nil:
-			return nil, errors.Wrap(_err, "Error parsing 'rawData' field")
-		default:
-			rawData = CastBACnetContextTagEnumerated(_val)
-			if closeErr := readBuffer.CloseContext("rawData"); closeErr != nil {
-				return nil, closeErr
-			}
-		}
-	}
-
-	// Virtual field
-	_isInactive := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).GetActualValue()) == (0)))
-	isInactive := bool(_isInactive)
-	_ = isInactive
-
-	// Virtual field
-	_isActive := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).GetActualValue()) == (1)))
-	isActive := bool(_isActive)
-	_ = isActive
-
-	if closeErr := readBuffer.CloseContext("BACnetBinaryPV"); closeErr != nil {
-		return nil, closeErr
-	}
-
-	// Create the instance
-	return NewBACnetBinaryPV(rawData, tagNumber), nil
+	return BACnetBinaryPVByValue(val), nil
 }
 
-func (m *BACnetBinaryPV) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	if pushErr := writeBuffer.PushContext("BACnetBinaryPV"); pushErr != nil {
-		return pushErr
-	}
-
-	// Optional Field (rawData) (Can be skipped, if the value is null)
-	var rawData *BACnetContextTagEnumerated = nil
-	if m.RawData != nil {
-		if pushErr := writeBuffer.PushContext("rawData"); pushErr != nil {
-			return pushErr
-		}
-		rawData = m.RawData
-		_rawDataErr := rawData.Serialize(writeBuffer)
-		if popErr := writeBuffer.PopContext("rawData"); popErr != nil {
-			return popErr
-		}
-		if _rawDataErr != nil {
-			return errors.Wrap(_rawDataErr, "Error serializing 'rawData' field")
-		}
-	}
-	// Virtual field
-	if _isInactiveErr := writeBuffer.WriteVirtual("isInactive", m.GetIsInactive()); _isInactiveErr != nil {
-		return errors.Wrap(_isInactiveErr, "Error serializing 'isInactive' field")
-	}
-	// Virtual field
-	if _isActiveErr := writeBuffer.WriteVirtual("isActive", m.GetIsActive()); _isActiveErr != nil {
-		return errors.Wrap(_isActiveErr, "Error serializing 'isActive' field")
-	}
+func (e BACnetBinaryPV) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetBinaryPV", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
 
-	if popErr := writeBuffer.PopContext("BACnetBinaryPV"); popErr != nil {
-		return popErr
+func (e BACnetBinaryPV) name() string {
+	switch e {
+	case BACnetBinaryPV_INACTIVE:
+		return "INACTIVE"
+	case BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	case BACnetBinaryPV_ACTIVE:
+		return "ACTIVE"
 	}
-	return nil
+	return ""
 }
 
-func (m *BACnetBinaryPV) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := m.Serialize(buffer); err != nil {
-		return err.Error()
-	}
-	return buffer.GetBox().String()
+func (e BACnetBinaryPV) String() string {
+	return e.name()
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReasonTagged.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPVTagged.go
similarity index 51%
rename from plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReasonTagged.go
rename to plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPVTagged.go
index 4e458def8a..d62e7db4e3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReasonTagged.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPVTagged.go
@@ -26,19 +26,23 @@ import (
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// RejectReasonTagged is the data-structure of this message
-type RejectReasonTagged struct {
-	Value            RejectReason
+// BACnetBinaryPVTagged is the data-structure of this message
+type BACnetBinaryPVTagged struct {
+	Header           *BACnetTagHeader
+	Value            BACnetBinaryPV
 	ProprietaryValue uint32
 
 	// Arguments.
-	ActualLength uint32
+	TagNumber uint8
+	TagClass  TagClass
 }
 
-// IRejectReasonTagged is the corresponding interface of RejectReasonTagged
-type IRejectReasonTagged interface {
+// IBACnetBinaryPVTagged is the corresponding interface of BACnetBinaryPVTagged
+type IBACnetBinaryPVTagged interface {
+	// GetHeader returns Header (property field)
+	GetHeader() *BACnetTagHeader
 	// GetValue returns Value (property field)
-	GetValue() RejectReason
+	GetValue() BACnetBinaryPV
 	// GetProprietaryValue returns ProprietaryValue (property field)
 	GetProprietaryValue() uint32
 	// GetIsProprietary returns IsProprietary (virtual field)
@@ -56,11 +60,15 @@ type IRejectReasonTagged interface {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *RejectReasonTagged) GetValue() RejectReason {
+func (m *BACnetBinaryPVTagged) GetHeader() *BACnetTagHeader {
+	return m.Header
+}
+
+func (m *BACnetBinaryPVTagged) GetValue() BACnetBinaryPV {
 	return m.Value
 }
 
-func (m *RejectReasonTagged) GetProprietaryValue() uint32 {
+func (m *BACnetBinaryPVTagged) GetProprietaryValue() uint32 {
 	return m.ProprietaryValue
 }
 
@@ -73,8 +81,8 @@ func (m *RejectReasonTagged) GetProprietaryValue() uint32 {
 /////////////////////// Accessors for virtual fields.
 ///////////////////////
 
-func (m *RejectReasonTagged) GetIsProprietary() bool {
-	return bool(bool((m.GetValue()) == (RejectReason_VENDOR_PROPRIETARY_VALUE)))
+func (m *BACnetBinaryPVTagged) GetIsProprietary() bool {
+	return bool(bool((m.GetValue()) == (BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE)))
 }
 
 ///////////////////////
@@ -82,90 +90,128 @@ func (m *RejectReasonTagged) GetIsProprietary() bool {
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
-// NewRejectReasonTagged factory function for RejectReasonTagged
-func NewRejectReasonTagged(value RejectReason, proprietaryValue uint32, actualLength uint32) *RejectReasonTagged {
-	return &RejectReasonTagged{Value: value, ProprietaryValue: proprietaryValue, ActualLength: actualLength}
+// NewBACnetBinaryPVTagged factory function for BACnetBinaryPVTagged
+func NewBACnetBinaryPVTagged(header *BACnetTagHeader, value BACnetBinaryPV, proprietaryValue uint32, tagNumber uint8, tagClass TagClass) *BACnetBinaryPVTagged {
+	return &BACnetBinaryPVTagged{Header: header, Value: value, ProprietaryValue: proprietaryValue, TagNumber: tagNumber, TagClass: tagClass}
 }
 
-func CastRejectReasonTagged(structType interface{}) *RejectReasonTagged {
-	if casted, ok := structType.(RejectReasonTagged); ok {
+func CastBACnetBinaryPVTagged(structType interface{}) *BACnetBinaryPVTagged {
+	if casted, ok := structType.(BACnetBinaryPVTagged); ok {
 		return &casted
 	}
-	if casted, ok := structType.(*RejectReasonTagged); ok {
+	if casted, ok := structType.(*BACnetBinaryPVTagged); ok {
 		return casted
 	}
 	return nil
 }
 
-func (m *RejectReasonTagged) GetTypeName() string {
-	return "RejectReasonTagged"
+func (m *BACnetBinaryPVTagged) GetTypeName() string {
+	return "BACnetBinaryPVTagged"
 }
 
-func (m *RejectReasonTagged) GetLengthInBits() uint16 {
+func (m *BACnetBinaryPVTagged) GetLengthInBits() uint16 {
 	return m.GetLengthInBitsConditional(false)
 }
 
-func (m *RejectReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
+func (m *BACnetBinaryPVTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
+	// Simple field (header)
+	lengthInBits += m.Header.GetLengthInBits()
+
 	// Manual Field (value)
-	lengthInBits += uint16(int32(m.ActualLength) * int32(int32(8)))
+	lengthInBits += uint16(int32(m.GetHeader().GetActualLength()) * int32(int32(8)))
 
 	// A virtual field doesn't have any in- or output.
 
 	// Manual Field (proprietaryValue)
-	lengthInBits += uint16(utils.InlineIf(m.GetIsProprietary(), func() interface{} { return int32(int32(m.ActualLength) * int32(int32(8))) }, func() interface{} { return int32(int32(0)) }).(int32))
+	lengthInBits += uint16(utils.InlineIf(m.GetIsProprietary(), func() interface{} { return int32(int32(m.GetHeader().GetActualLength()) * int32(int32(8))) }, func() interface{} { return int32(int32(0)) }).(int32))
 
 	return lengthInBits
 }
 
-func (m *RejectReasonTagged) GetLengthInBytes() uint16 {
+func (m *BACnetBinaryPVTagged) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func RejectReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*RejectReasonTagged, error) {
+func BACnetBinaryPVTaggedParse(readBuffer utils.ReadBuffer, tagNumber uint8, tagClass TagClass) (*BACnetBinaryPVTagged, error) {
 	positionAware := readBuffer
 	_ = positionAware
-	if pullErr := readBuffer.PullContext("RejectReasonTagged"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("BACnetBinaryPVTagged"); pullErr != nil {
 		return nil, pullErr
 	}
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
+	// Simple Field (header)
+	if pullErr := readBuffer.PullContext("header"); pullErr != nil {
+		return nil, pullErr
+	}
+	_header, _headerErr := BACnetTagHeaderParse(readBuffer)
+	if _headerErr != nil {
+		return nil, errors.Wrap(_headerErr, "Error parsing 'header' field")
+	}
+	header := CastBACnetTagHeader(_header)
+	if closeErr := readBuffer.CloseContext("header"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Validation
+	if !(bool((header.GetTagClass()) == (tagClass))) {
+		return nil, utils.ParseValidationError{"tag class doesn't match"}
+	}
+
+	// Validation
+	if !(bool(bool(bool((header.GetTagClass()) == (TagClass_APPLICATION_TAGS)))) || bool(bool(bool((header.GetActualTagNumber()) == (tagNumber))))) {
+		return nil, utils.ParseAssertError{"tagnumber doesn't match"}
+	}
+
 	// Manual Field (value)
-	_value, _valueErr := ReadEnumGeneric(readBuffer, actualLength, RejectReason_VENDOR_PROPRIETARY_VALUE)
+	_value, _valueErr := ReadEnumGeneric(readBuffer, header.GetActualLength(), BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE)
 	if _valueErr != nil {
 		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
 	}
-	value := _value.(RejectReason)
+	value := _value.(BACnetBinaryPV)
 
 	// Virtual field
-	_isProprietary := bool((value) == (RejectReason_VENDOR_PROPRIETARY_VALUE))
+	_isProprietary := bool((value) == (BACnetBinaryPV_VENDOR_PROPRIETARY_VALUE))
 	isProprietary := bool(_isProprietary)
 	_ = isProprietary
 
 	// Manual Field (proprietaryValue)
-	_proprietaryValue, _proprietaryValueErr := ReadProprietaryEnumGeneric(readBuffer, actualLength, isProprietary)
+	_proprietaryValue, _proprietaryValueErr := ReadProprietaryEnumGeneric(readBuffer, header.GetActualLength(), isProprietary)
 	if _proprietaryValueErr != nil {
 		return nil, errors.Wrap(_proprietaryValueErr, "Error parsing 'proprietaryValue' field")
 	}
 	proprietaryValue := _proprietaryValue.(uint32)
 
-	if closeErr := readBuffer.CloseContext("RejectReasonTagged"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("BACnetBinaryPVTagged"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create the instance
-	return NewRejectReasonTagged(value, proprietaryValue, actualLength), nil
+	return NewBACnetBinaryPVTagged(header, value, proprietaryValue, tagNumber, tagClass), nil
 }
 
-func (m *RejectReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m *BACnetBinaryPVTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	positionAware := writeBuffer
 	_ = positionAware
-	if pushErr := writeBuffer.PushContext("RejectReasonTagged"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("BACnetBinaryPVTagged"); pushErr != nil {
 		return pushErr
 	}
 
+	// Simple Field (header)
+	if pushErr := writeBuffer.PushContext("header"); pushErr != nil {
+		return pushErr
+	}
+	_headerErr := m.Header.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("header"); popErr != nil {
+		return popErr
+	}
+	if _headerErr != nil {
+		return errors.Wrap(_headerErr, "Error serializing 'header' field")
+	}
+
 	// Manual Field (value)
 	_valueErr := WriteEnumGeneric(writeBuffer, m.GetValue())
 	if _valueErr != nil {
@@ -182,13 +228,13 @@ func (m *RejectReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(_proprietaryValueErr, "Error serializing 'proprietaryValue' field")
 	}
 
-	if popErr := writeBuffer.PopContext("RejectReasonTagged"); popErr != nil {
+	if popErr := writeBuffer.PopContext("BACnetBinaryPVTagged"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
 
-func (m *RejectReasonTagged) String() string {
+func (m *BACnetBinaryPVTagged) String() string {
 	if m == nil {
 		return "<nil>"
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDeviceStatus.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDeviceStatus.go
new file mode 100644
index 0000000000..1f4f6082bf
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDeviceStatus.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetDeviceStatus is an enum
+type BACnetDeviceStatus uint16
+
+type IBACnetDeviceStatus interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetDeviceStatus_VENDOR_PROPRIETARY_VALUE BACnetDeviceStatus = 0xFFFF
+)
+
+var BACnetDeviceStatusValues []BACnetDeviceStatus
+
+func init() {
+	_ = errors.New
+	BACnetDeviceStatusValues = []BACnetDeviceStatus{
+		BACnetDeviceStatus_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetDeviceStatusByValue(value uint16) BACnetDeviceStatus {
+	switch value {
+	case 0xFFFF:
+		return BACnetDeviceStatus_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetDeviceStatusByName(value string) BACnetDeviceStatus {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetDeviceStatus_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetDeviceStatusKnows(value uint16) bool {
+	for _, typeValue := range BACnetDeviceStatusValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetDeviceStatus(structType interface{}) BACnetDeviceStatus {
+	castFunc := func(typ interface{}) BACnetDeviceStatus {
+		if sBACnetDeviceStatus, ok := typ.(BACnetDeviceStatus); ok {
+			return sBACnetDeviceStatus
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetDeviceStatus) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetDeviceStatus) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetDeviceStatusParse(readBuffer utils.ReadBuffer) (BACnetDeviceStatus, error) {
+	val, err := readBuffer.ReadUint16("BACnetDeviceStatus", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetDeviceStatusByValue(val), nil
+}
+
+func (e BACnetDeviceStatus) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetDeviceStatus", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetDeviceStatus) name() string {
+	switch e {
+	case BACnetDeviceStatus_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetDeviceStatus) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDoorAlarmState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDoorAlarmState.go
new file mode 100644
index 0000000000..3b06a1011e
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDoorAlarmState.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetDoorAlarmState is an enum
+type BACnetDoorAlarmState uint8
+
+type IBACnetDoorAlarmState interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetDoorAlarmState_VENDOR_PROPRIETARY_VALUE BACnetDoorAlarmState = 0xFF
+)
+
+var BACnetDoorAlarmStateValues []BACnetDoorAlarmState
+
+func init() {
+	_ = errors.New
+	BACnetDoorAlarmStateValues = []BACnetDoorAlarmState{
+		BACnetDoorAlarmState_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetDoorAlarmStateByValue(value uint8) BACnetDoorAlarmState {
+	switch value {
+	case 0xFF:
+		return BACnetDoorAlarmState_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetDoorAlarmStateByName(value string) BACnetDoorAlarmState {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetDoorAlarmState_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetDoorAlarmStateKnows(value uint8) bool {
+	for _, typeValue := range BACnetDoorAlarmStateValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetDoorAlarmState(structType interface{}) BACnetDoorAlarmState {
+	castFunc := func(typ interface{}) BACnetDoorAlarmState {
+		if sBACnetDoorAlarmState, ok := typ.(BACnetDoorAlarmState); ok {
+			return sBACnetDoorAlarmState
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetDoorAlarmState) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetDoorAlarmState) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetDoorAlarmStateParse(readBuffer utils.ReadBuffer) (BACnetDoorAlarmState, error) {
+	val, err := readBuffer.ReadUint8("BACnetDoorAlarmState", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetDoorAlarmStateByValue(val), nil
+}
+
+func (e BACnetDoorAlarmState) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetDoorAlarmState", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetDoorAlarmState) name() string {
+	switch e {
+	case BACnetDoorAlarmState_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetDoorAlarmState) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDoorStatus.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDoorStatus.go
new file mode 100644
index 0000000000..a21944468e
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetDoorStatus.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetDoorStatus is an enum
+type BACnetDoorStatus uint16
+
+type IBACnetDoorStatus interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetDoorStatus_VENDOR_PROPRIETARY_VALUE BACnetDoorStatus = 0xFFFF
+)
+
+var BACnetDoorStatusValues []BACnetDoorStatus
+
+func init() {
+	_ = errors.New
+	BACnetDoorStatusValues = []BACnetDoorStatus{
+		BACnetDoorStatus_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetDoorStatusByValue(value uint16) BACnetDoorStatus {
+	switch value {
+	case 0xFFFF:
+		return BACnetDoorStatus_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetDoorStatusByName(value string) BACnetDoorStatus {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetDoorStatus_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetDoorStatusKnows(value uint16) bool {
+	for _, typeValue := range BACnetDoorStatusValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetDoorStatus(structType interface{}) BACnetDoorStatus {
+	castFunc := func(typ interface{}) BACnetDoorStatus {
+		if sBACnetDoorStatus, ok := typ.(BACnetDoorStatus); ok {
+			return sBACnetDoorStatus
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetDoorStatus) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetDoorStatus) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetDoorStatusParse(readBuffer utils.ReadBuffer) (BACnetDoorStatus, error) {
+	val, err := readBuffer.ReadUint16("BACnetDoorStatus", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetDoorStatusByValue(val), nil
+}
+
+func (e BACnetDoorStatus) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetDoorStatus", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetDoorStatus) name() string {
+	switch e {
+	case BACnetDoorStatus_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetDoorStatus) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEngineeringUnits.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEngineeringUnits.go
new file mode 100644
index 0000000000..1b2911a834
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEngineeringUnits.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetEngineeringUnits is an enum
+type BACnetEngineeringUnits uint8
+
+type IBACnetEngineeringUnits interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetEngineeringUnits_VENDOR_PROPRIETARY_VALUE BACnetEngineeringUnits = 0xFF
+)
+
+var BACnetEngineeringUnitsValues []BACnetEngineeringUnits
+
+func init() {
+	_ = errors.New
+	BACnetEngineeringUnitsValues = []BACnetEngineeringUnits{
+		BACnetEngineeringUnits_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetEngineeringUnitsByValue(value uint8) BACnetEngineeringUnits {
+	switch value {
+	case 0xFF:
+		return BACnetEngineeringUnits_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEngineeringUnitsByName(value string) BACnetEngineeringUnits {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetEngineeringUnits_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEngineeringUnitsKnows(value uint8) bool {
+	for _, typeValue := range BACnetEngineeringUnitsValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetEngineeringUnits(structType interface{}) BACnetEngineeringUnits {
+	castFunc := func(typ interface{}) BACnetEngineeringUnits {
+		if sBACnetEngineeringUnits, ok := typ.(BACnetEngineeringUnits); ok {
+			return sBACnetEngineeringUnits
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetEngineeringUnits) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetEngineeringUnits) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetEngineeringUnitsParse(readBuffer utils.ReadBuffer) (BACnetEngineeringUnits, error) {
+	val, err := readBuffer.ReadUint8("BACnetEngineeringUnits", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetEngineeringUnitsByValue(val), nil
+}
+
+func (e BACnetEngineeringUnits) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetEngineeringUnits", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetEngineeringUnits) name() string {
+	switch e {
+	case BACnetEngineeringUnits_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetEngineeringUnits) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorFault.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorFault.go
new file mode 100644
index 0000000000..604ffbfd0a
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorFault.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetEscalatorFault is an enum
+type BACnetEscalatorFault uint16
+
+type IBACnetEscalatorFault interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetEscalatorFault_VENDOR_PROPRIETARY_VALUE BACnetEscalatorFault = 0xFFFF
+)
+
+var BACnetEscalatorFaultValues []BACnetEscalatorFault
+
+func init() {
+	_ = errors.New
+	BACnetEscalatorFaultValues = []BACnetEscalatorFault{
+		BACnetEscalatorFault_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetEscalatorFaultByValue(value uint16) BACnetEscalatorFault {
+	switch value {
+	case 0xFFFF:
+		return BACnetEscalatorFault_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEscalatorFaultByName(value string) BACnetEscalatorFault {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetEscalatorFault_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEscalatorFaultKnows(value uint16) bool {
+	for _, typeValue := range BACnetEscalatorFaultValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetEscalatorFault(structType interface{}) BACnetEscalatorFault {
+	castFunc := func(typ interface{}) BACnetEscalatorFault {
+		if sBACnetEscalatorFault, ok := typ.(BACnetEscalatorFault); ok {
+			return sBACnetEscalatorFault
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetEscalatorFault) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetEscalatorFault) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetEscalatorFaultParse(readBuffer utils.ReadBuffer) (BACnetEscalatorFault, error) {
+	val, err := readBuffer.ReadUint16("BACnetEscalatorFault", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetEscalatorFaultByValue(val), nil
+}
+
+func (e BACnetEscalatorFault) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetEscalatorFault", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetEscalatorFault) name() string {
+	switch e {
+	case BACnetEscalatorFault_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetEscalatorFault) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorMode.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorMode.go
new file mode 100644
index 0000000000..0d55e8f7cb
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorMode.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetEscalatorMode is an enum
+type BACnetEscalatorMode uint16
+
+type IBACnetEscalatorMode interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetEscalatorMode_VENDOR_PROPRIETARY_VALUE BACnetEscalatorMode = 0xFFFF
+)
+
+var BACnetEscalatorModeValues []BACnetEscalatorMode
+
+func init() {
+	_ = errors.New
+	BACnetEscalatorModeValues = []BACnetEscalatorMode{
+		BACnetEscalatorMode_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetEscalatorModeByValue(value uint16) BACnetEscalatorMode {
+	switch value {
+	case 0xFFFF:
+		return BACnetEscalatorMode_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEscalatorModeByName(value string) BACnetEscalatorMode {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetEscalatorMode_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEscalatorModeKnows(value uint16) bool {
+	for _, typeValue := range BACnetEscalatorModeValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetEscalatorMode(structType interface{}) BACnetEscalatorMode {
+	castFunc := func(typ interface{}) BACnetEscalatorMode {
+		if sBACnetEscalatorMode, ok := typ.(BACnetEscalatorMode); ok {
+			return sBACnetEscalatorMode
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetEscalatorMode) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetEscalatorMode) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetEscalatorModeParse(readBuffer utils.ReadBuffer) (BACnetEscalatorMode, error) {
+	val, err := readBuffer.ReadUint16("BACnetEscalatorMode", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetEscalatorModeByValue(val), nil
+}
+
+func (e BACnetEscalatorMode) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetEscalatorMode", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetEscalatorMode) name() string {
+	switch e {
+	case BACnetEscalatorMode_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetEscalatorMode) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorOperationDirection.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorOperationDirection.go
new file mode 100644
index 0000000000..665535da7e
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEscalatorOperationDirection.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetEscalatorOperationDirection is an enum
+type BACnetEscalatorOperationDirection uint16
+
+type IBACnetEscalatorOperationDirection interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetEscalatorOperationDirection_VENDOR_PROPRIETARY_VALUE BACnetEscalatorOperationDirection = 0xFFFF
+)
+
+var BACnetEscalatorOperationDirectionValues []BACnetEscalatorOperationDirection
+
+func init() {
+	_ = errors.New
+	BACnetEscalatorOperationDirectionValues = []BACnetEscalatorOperationDirection{
+		BACnetEscalatorOperationDirection_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetEscalatorOperationDirectionByValue(value uint16) BACnetEscalatorOperationDirection {
+	switch value {
+	case 0xFFFF:
+		return BACnetEscalatorOperationDirection_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEscalatorOperationDirectionByName(value string) BACnetEscalatorOperationDirection {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetEscalatorOperationDirection_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetEscalatorOperationDirectionKnows(value uint16) bool {
+	for _, typeValue := range BACnetEscalatorOperationDirectionValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetEscalatorOperationDirection(structType interface{}) BACnetEscalatorOperationDirection {
+	castFunc := func(typ interface{}) BACnetEscalatorOperationDirection {
+		if sBACnetEscalatorOperationDirection, ok := typ.(BACnetEscalatorOperationDirection); ok {
+			return sBACnetEscalatorOperationDirection
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetEscalatorOperationDirection) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetEscalatorOperationDirection) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetEscalatorOperationDirectionParse(readBuffer utils.ReadBuffer) (BACnetEscalatorOperationDirection, error) {
+	val, err := readBuffer.ReadUint16("BACnetEscalatorOperationDirection", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetEscalatorOperationDirectionByValue(val), nil
+}
+
+func (e BACnetEscalatorOperationDirection) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetEscalatorOperationDirection", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetEscalatorOperationDirection) name() string {
+	switch e {
+	case BACnetEscalatorOperationDirection_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetEscalatorOperationDirection) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventState.go
index bd36a188b2..0e14729f62 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventState.go
@@ -118,7 +118,7 @@ func CastBACnetEventState(structType interface{}) BACnetEventState {
 }
 
 func (m BACnetEventState) GetLengthInBits() uint16 {
-	return 9
+	return 16
 }
 
 func (m BACnetEventState) GetLengthInBytes() uint16 {
@@ -126,7 +126,7 @@ func (m BACnetEventState) GetLengthInBytes() uint16 {
 }
 
 func BACnetEventStateParse(readBuffer utils.ReadBuffer) (BACnetEventState, error) {
-	val, err := readBuffer.ReadUint16("BACnetEventState", 9)
+	val, err := readBuffer.ReadUint16("BACnetEventState", 16)
 	if err != nil {
 		return 0, nil
 	}
@@ -134,7 +134,7 @@ func BACnetEventStateParse(readBuffer utils.ReadBuffer) (BACnetEventState, error
 }
 
 func (e BACnetEventState) Serialize(writeBuffer utils.WriteBuffer) error {
-	return writeBuffer.WriteUint16("BACnetEventState", 9, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+	return writeBuffer.WriteUint16("BACnetEventState", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
 }
 
 func (e BACnetEventState) name() string {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLifeSafetyOperation.go
new file mode 100644
index 0000000000..5deba3e982
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLifeSafetyOperation.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLifeSafetyOperation is an enum
+type BACnetLifeSafetyOperation uint16
+
+type IBACnetLifeSafetyOperation interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLifeSafetyOperation_VENDOR_PROPRIETARY_VALUE BACnetLifeSafetyOperation = 0xFFFF
+)
+
+var BACnetLifeSafetyOperationValues []BACnetLifeSafetyOperation
+
+func init() {
+	_ = errors.New
+	BACnetLifeSafetyOperationValues = []BACnetLifeSafetyOperation{
+		BACnetLifeSafetyOperation_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLifeSafetyOperationByValue(value uint16) BACnetLifeSafetyOperation {
+	switch value {
+	case 0xFFFF:
+		return BACnetLifeSafetyOperation_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLifeSafetyOperationByName(value string) BACnetLifeSafetyOperation {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLifeSafetyOperation_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLifeSafetyOperationKnows(value uint16) bool {
+	for _, typeValue := range BACnetLifeSafetyOperationValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLifeSafetyOperation(structType interface{}) BACnetLifeSafetyOperation {
+	castFunc := func(typ interface{}) BACnetLifeSafetyOperation {
+		if sBACnetLifeSafetyOperation, ok := typ.(BACnetLifeSafetyOperation); ok {
+			return sBACnetLifeSafetyOperation
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLifeSafetyOperation) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetLifeSafetyOperation) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLifeSafetyOperationParse(readBuffer utils.ReadBuffer) (BACnetLifeSafetyOperation, error) {
+	val, err := readBuffer.ReadUint16("BACnetLifeSafetyOperation", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLifeSafetyOperationByValue(val), nil
+}
+
+func (e BACnetLifeSafetyOperation) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetLifeSafetyOperation", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLifeSafetyOperation) name() string {
+	switch e {
+	case BACnetLifeSafetyOperation_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLifeSafetyOperation) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarDirection.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarDirection.go
new file mode 100644
index 0000000000..9a3034abb2
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarDirection.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLiftCarDirection is an enum
+type BACnetLiftCarDirection uint16
+
+type IBACnetLiftCarDirection interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLiftCarDirection_VENDOR_PROPRIETARY_VALUE BACnetLiftCarDirection = 0xFFFF
+)
+
+var BACnetLiftCarDirectionValues []BACnetLiftCarDirection
+
+func init() {
+	_ = errors.New
+	BACnetLiftCarDirectionValues = []BACnetLiftCarDirection{
+		BACnetLiftCarDirection_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLiftCarDirectionByValue(value uint16) BACnetLiftCarDirection {
+	switch value {
+	case 0xFFFF:
+		return BACnetLiftCarDirection_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftCarDirectionByName(value string) BACnetLiftCarDirection {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLiftCarDirection_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftCarDirectionKnows(value uint16) bool {
+	for _, typeValue := range BACnetLiftCarDirectionValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLiftCarDirection(structType interface{}) BACnetLiftCarDirection {
+	castFunc := func(typ interface{}) BACnetLiftCarDirection {
+		if sBACnetLiftCarDirection, ok := typ.(BACnetLiftCarDirection); ok {
+			return sBACnetLiftCarDirection
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLiftCarDirection) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetLiftCarDirection) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLiftCarDirectionParse(readBuffer utils.ReadBuffer) (BACnetLiftCarDirection, error) {
+	val, err := readBuffer.ReadUint16("BACnetLiftCarDirection", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLiftCarDirectionByValue(val), nil
+}
+
+func (e BACnetLiftCarDirection) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetLiftCarDirection", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLiftCarDirection) name() string {
+	switch e {
+	case BACnetLiftCarDirection_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLiftCarDirection) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarDriveStatus.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarDriveStatus.go
new file mode 100644
index 0000000000..371324ce9a
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarDriveStatus.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLiftCarDriveStatus is an enum
+type BACnetLiftCarDriveStatus uint16
+
+type IBACnetLiftCarDriveStatus interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLiftCarDriveStatus_VENDOR_PROPRIETARY_VALUE BACnetLiftCarDriveStatus = 0xFFFF
+)
+
+var BACnetLiftCarDriveStatusValues []BACnetLiftCarDriveStatus
+
+func init() {
+	_ = errors.New
+	BACnetLiftCarDriveStatusValues = []BACnetLiftCarDriveStatus{
+		BACnetLiftCarDriveStatus_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLiftCarDriveStatusByValue(value uint16) BACnetLiftCarDriveStatus {
+	switch value {
+	case 0xFFFF:
+		return BACnetLiftCarDriveStatus_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftCarDriveStatusByName(value string) BACnetLiftCarDriveStatus {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLiftCarDriveStatus_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftCarDriveStatusKnows(value uint16) bool {
+	for _, typeValue := range BACnetLiftCarDriveStatusValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLiftCarDriveStatus(structType interface{}) BACnetLiftCarDriveStatus {
+	castFunc := func(typ interface{}) BACnetLiftCarDriveStatus {
+		if sBACnetLiftCarDriveStatus, ok := typ.(BACnetLiftCarDriveStatus); ok {
+			return sBACnetLiftCarDriveStatus
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLiftCarDriveStatus) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetLiftCarDriveStatus) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLiftCarDriveStatusParse(readBuffer utils.ReadBuffer) (BACnetLiftCarDriveStatus, error) {
+	val, err := readBuffer.ReadUint16("BACnetLiftCarDriveStatus", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLiftCarDriveStatusByValue(val), nil
+}
+
+func (e BACnetLiftCarDriveStatus) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetLiftCarDriveStatus", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLiftCarDriveStatus) name() string {
+	switch e {
+	case BACnetLiftCarDriveStatus_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLiftCarDriveStatus) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarMode.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarMode.go
new file mode 100644
index 0000000000..dad6108d43
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftCarMode.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLiftCarMode is an enum
+type BACnetLiftCarMode uint16
+
+type IBACnetLiftCarMode interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLiftCarMode_VENDOR_PROPRIETARY_VALUE BACnetLiftCarMode = 0xFFFF
+)
+
+var BACnetLiftCarModeValues []BACnetLiftCarMode
+
+func init() {
+	_ = errors.New
+	BACnetLiftCarModeValues = []BACnetLiftCarMode{
+		BACnetLiftCarMode_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLiftCarModeByValue(value uint16) BACnetLiftCarMode {
+	switch value {
+	case 0xFFFF:
+		return BACnetLiftCarMode_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftCarModeByName(value string) BACnetLiftCarMode {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLiftCarMode_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftCarModeKnows(value uint16) bool {
+	for _, typeValue := range BACnetLiftCarModeValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLiftCarMode(structType interface{}) BACnetLiftCarMode {
+	castFunc := func(typ interface{}) BACnetLiftCarMode {
+		if sBACnetLiftCarMode, ok := typ.(BACnetLiftCarMode); ok {
+			return sBACnetLiftCarMode
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLiftCarMode) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetLiftCarMode) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLiftCarModeParse(readBuffer utils.ReadBuffer) (BACnetLiftCarMode, error) {
+	val, err := readBuffer.ReadUint16("BACnetLiftCarMode", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLiftCarModeByValue(val), nil
+}
+
+func (e BACnetLiftCarMode) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetLiftCarMode", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLiftCarMode) name() string {
+	switch e {
+	case BACnetLiftCarMode_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLiftCarMode) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftFault.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftFault.go
new file mode 100644
index 0000000000..7f98f54753
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLiftFault.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLiftFault is an enum
+type BACnetLiftFault uint16
+
+type IBACnetLiftFault interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLiftFault_VENDOR_PROPRIETARY_VALUE BACnetLiftFault = 0xFFFF
+)
+
+var BACnetLiftFaultValues []BACnetLiftFault
+
+func init() {
+	_ = errors.New
+	BACnetLiftFaultValues = []BACnetLiftFault{
+		BACnetLiftFault_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLiftFaultByValue(value uint16) BACnetLiftFault {
+	switch value {
+	case 0xFFFF:
+		return BACnetLiftFault_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftFaultByName(value string) BACnetLiftFault {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLiftFault_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLiftFaultKnows(value uint16) bool {
+	for _, typeValue := range BACnetLiftFaultValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLiftFault(structType interface{}) BACnetLiftFault {
+	castFunc := func(typ interface{}) BACnetLiftFault {
+		if sBACnetLiftFault, ok := typ.(BACnetLiftFault); ok {
+			return sBACnetLiftFault
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLiftFault) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetLiftFault) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLiftFaultParse(readBuffer utils.ReadBuffer) (BACnetLiftFault, error) {
+	val, err := readBuffer.ReadUint16("BACnetLiftFault", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLiftFaultByValue(val), nil
+}
+
+func (e BACnetLiftFault) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetLiftFault", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLiftFault) name() string {
+	switch e {
+	case BACnetLiftFault_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLiftFault) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLightingOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLightingOperation.go
new file mode 100644
index 0000000000..61590cff91
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLightingOperation.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLightingOperation is an enum
+type BACnetLightingOperation uint16
+
+type IBACnetLightingOperation interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLightingOperation_VENDOR_PROPRIETARY_VALUE BACnetLightingOperation = 0xFFFF
+)
+
+var BACnetLightingOperationValues []BACnetLightingOperation
+
+func init() {
+	_ = errors.New
+	BACnetLightingOperationValues = []BACnetLightingOperation{
+		BACnetLightingOperation_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLightingOperationByValue(value uint16) BACnetLightingOperation {
+	switch value {
+	case 0xFFFF:
+		return BACnetLightingOperation_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLightingOperationByName(value string) BACnetLightingOperation {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLightingOperation_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLightingOperationKnows(value uint16) bool {
+	for _, typeValue := range BACnetLightingOperationValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLightingOperation(structType interface{}) BACnetLightingOperation {
+	castFunc := func(typ interface{}) BACnetLightingOperation {
+		if sBACnetLightingOperation, ok := typ.(BACnetLightingOperation); ok {
+			return sBACnetLightingOperation
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLightingOperation) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetLightingOperation) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLightingOperationParse(readBuffer utils.ReadBuffer) (BACnetLightingOperation, error) {
+	val, err := readBuffer.ReadUint16("BACnetLightingOperation", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLightingOperationByValue(val), nil
+}
+
+func (e BACnetLightingOperation) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetLightingOperation", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLightingOperation) name() string {
+	switch e {
+	case BACnetLightingOperation_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLightingOperation) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLightingTransition.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLightingTransition.go
new file mode 100644
index 0000000000..18865ee31a
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLightingTransition.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLightingTransition is an enum
+type BACnetLightingTransition uint8
+
+type IBACnetLightingTransition interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLightingTransition_VENDOR_PROPRIETARY_VALUE BACnetLightingTransition = 0xFF
+)
+
+var BACnetLightingTransitionValues []BACnetLightingTransition
+
+func init() {
+	_ = errors.New
+	BACnetLightingTransitionValues = []BACnetLightingTransition{
+		BACnetLightingTransition_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLightingTransitionByValue(value uint8) BACnetLightingTransition {
+	switch value {
+	case 0xFF:
+		return BACnetLightingTransition_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLightingTransitionByName(value string) BACnetLightingTransition {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLightingTransition_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLightingTransitionKnows(value uint8) bool {
+	for _, typeValue := range BACnetLightingTransitionValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLightingTransition(structType interface{}) BACnetLightingTransition {
+	castFunc := func(typ interface{}) BACnetLightingTransition {
+		if sBACnetLightingTransition, ok := typ.(BACnetLightingTransition); ok {
+			return sBACnetLightingTransition
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLightingTransition) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetLightingTransition) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLightingTransitionParse(readBuffer utils.ReadBuffer) (BACnetLightingTransition, error) {
+	val, err := readBuffer.ReadUint8("BACnetLightingTransition", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLightingTransitionByValue(val), nil
+}
+
+func (e BACnetLightingTransition) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetLightingTransition", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLightingTransition) name() string {
+	switch e {
+	case BACnetLightingTransition_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLightingTransition) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLoggingType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLoggingType.go
new file mode 100644
index 0000000000..eff9d3c4d6
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetLoggingType.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetLoggingType is an enum
+type BACnetLoggingType uint8
+
+type IBACnetLoggingType interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetLoggingType_VENDOR_PROPRIETARY_VALUE BACnetLoggingType = 0xFF
+)
+
+var BACnetLoggingTypeValues []BACnetLoggingType
+
+func init() {
+	_ = errors.New
+	BACnetLoggingTypeValues = []BACnetLoggingType{
+		BACnetLoggingType_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetLoggingTypeByValue(value uint8) BACnetLoggingType {
+	switch value {
+	case 0xFF:
+		return BACnetLoggingType_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLoggingTypeByName(value string) BACnetLoggingType {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetLoggingType_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetLoggingTypeKnows(value uint8) bool {
+	for _, typeValue := range BACnetLoggingTypeValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetLoggingType(structType interface{}) BACnetLoggingType {
+	castFunc := func(typ interface{}) BACnetLoggingType {
+		if sBACnetLoggingType, ok := typ.(BACnetLoggingType); ok {
+			return sBACnetLoggingType
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetLoggingType) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetLoggingType) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetLoggingTypeParse(readBuffer utils.ReadBuffer) (BACnetLoggingType, error) {
+	val, err := readBuffer.ReadUint8("BACnetLoggingType", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetLoggingTypeByValue(val), nil
+}
+
+func (e BACnetLoggingType) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetLoggingType", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetLoggingType) name() string {
+	switch e {
+	case BACnetLoggingType_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetLoggingType) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetMaintenance.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetMaintenance.go
new file mode 100644
index 0000000000..69a76aaec3
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetMaintenance.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetMaintenance is an enum
+type BACnetMaintenance uint8
+
+type IBACnetMaintenance interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetMaintenance_VENDOR_PROPRIETARY_VALUE BACnetMaintenance = 0xFF
+)
+
+var BACnetMaintenanceValues []BACnetMaintenance
+
+func init() {
+	_ = errors.New
+	BACnetMaintenanceValues = []BACnetMaintenance{
+		BACnetMaintenance_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetMaintenanceByValue(value uint8) BACnetMaintenance {
+	switch value {
+	case 0xFF:
+		return BACnetMaintenance_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetMaintenanceByName(value string) BACnetMaintenance {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetMaintenance_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetMaintenanceKnows(value uint8) bool {
+	for _, typeValue := range BACnetMaintenanceValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetMaintenance(structType interface{}) BACnetMaintenance {
+	castFunc := func(typ interface{}) BACnetMaintenance {
+		if sBACnetMaintenance, ok := typ.(BACnetMaintenance); ok {
+			return sBACnetMaintenance
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetMaintenance) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetMaintenance) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetMaintenanceParse(readBuffer utils.ReadBuffer) (BACnetMaintenance, error) {
+	val, err := readBuffer.ReadUint8("BACnetMaintenance", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetMaintenanceByValue(val), nil
+}
+
+func (e BACnetMaintenance) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetMaintenance", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetMaintenance) name() string {
+	switch e {
+	case BACnetMaintenance_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetMaintenance) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkPortCommand.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkPortCommand.go
new file mode 100644
index 0000000000..1ca635096d
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkPortCommand.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetNetworkPortCommand is an enum
+type BACnetNetworkPortCommand uint8
+
+type IBACnetNetworkPortCommand interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetNetworkPortCommand_VENDOR_PROPRIETARY_VALUE BACnetNetworkPortCommand = 0xFF
+)
+
+var BACnetNetworkPortCommandValues []BACnetNetworkPortCommand
+
+func init() {
+	_ = errors.New
+	BACnetNetworkPortCommandValues = []BACnetNetworkPortCommand{
+		BACnetNetworkPortCommand_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetNetworkPortCommandByValue(value uint8) BACnetNetworkPortCommand {
+	switch value {
+	case 0xFF:
+		return BACnetNetworkPortCommand_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetNetworkPortCommandByName(value string) BACnetNetworkPortCommand {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetNetworkPortCommand_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetNetworkPortCommandKnows(value uint8) bool {
+	for _, typeValue := range BACnetNetworkPortCommandValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetNetworkPortCommand(structType interface{}) BACnetNetworkPortCommand {
+	castFunc := func(typ interface{}) BACnetNetworkPortCommand {
+		if sBACnetNetworkPortCommand, ok := typ.(BACnetNetworkPortCommand); ok {
+			return sBACnetNetworkPortCommand
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetNetworkPortCommand) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetNetworkPortCommand) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetNetworkPortCommandParse(readBuffer utils.ReadBuffer) (BACnetNetworkPortCommand, error) {
+	val, err := readBuffer.ReadUint8("BACnetNetworkPortCommand", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetNetworkPortCommandByValue(val), nil
+}
+
+func (e BACnetNetworkPortCommand) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetNetworkPortCommand", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetNetworkPortCommand) name() string {
+	switch e {
+	case BACnetNetworkPortCommand_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetNetworkPortCommand) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetProgramError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetProgramError.go
new file mode 100644
index 0000000000..9f60d0923d
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetProgramError.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetProgramError is an enum
+type BACnetProgramError uint16
+
+type IBACnetProgramError interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetProgramError_VENDOR_PROPRIETARY_VALUE BACnetProgramError = 0xFFFF
+)
+
+var BACnetProgramErrorValues []BACnetProgramError
+
+func init() {
+	_ = errors.New
+	BACnetProgramErrorValues = []BACnetProgramError{
+		BACnetProgramError_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetProgramErrorByValue(value uint16) BACnetProgramError {
+	switch value {
+	case 0xFFFF:
+		return BACnetProgramError_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetProgramErrorByName(value string) BACnetProgramError {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetProgramError_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetProgramErrorKnows(value uint16) bool {
+	for _, typeValue := range BACnetProgramErrorValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetProgramError(structType interface{}) BACnetProgramError {
+	castFunc := func(typ interface{}) BACnetProgramError {
+		if sBACnetProgramError, ok := typ.(BACnetProgramError); ok {
+			return sBACnetProgramError
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetProgramError) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetProgramError) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetProgramErrorParse(readBuffer utils.ReadBuffer) (BACnetProgramError, error) {
+	val, err := readBuffer.ReadUint16("BACnetProgramError", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetProgramErrorByValue(val), nil
+}
+
+func (e BACnetProgramError) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetProgramError", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetProgramError) name() string {
+	switch e {
+	case BACnetProgramError_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetProgramError) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
index ebc102195c..a58ce93bd0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
@@ -22,7 +22,6 @@ package model
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -30,7 +29,7 @@ import (
 // BACnetPropertyStatesBinaryValue is the data-structure of this message
 type BACnetPropertyStatesBinaryValue struct {
 	*BACnetPropertyStates
-	BinaryValue *BACnetBinaryPV
+	BinaryValue *BACnetBinaryPVTagged
 
 	// Arguments.
 	TagNumber uint8
@@ -40,7 +39,7 @@ type BACnetPropertyStatesBinaryValue struct {
 type IBACnetPropertyStatesBinaryValue interface {
 	IBACnetPropertyStates
 	// GetBinaryValue returns BinaryValue (property field)
-	GetBinaryValue() *BACnetBinaryPV
+	GetBinaryValue() *BACnetBinaryPVTagged
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -74,7 +73,7 @@ func (m *BACnetPropertyStatesBinaryValue) GetParent() *BACnetPropertyStates {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetPropertyStatesBinaryValue) GetBinaryValue() *BACnetBinaryPV {
+func (m *BACnetPropertyStatesBinaryValue) GetBinaryValue() *BACnetBinaryPVTagged {
 	return m.BinaryValue
 }
 
@@ -84,7 +83,7 @@ func (m *BACnetPropertyStatesBinaryValue) GetBinaryValue() *BACnetBinaryPV {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetPropertyStatesBinaryValue factory function for BACnetPropertyStatesBinaryValue
-func NewBACnetPropertyStatesBinaryValue(binaryValue *BACnetBinaryPV, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStatesBinaryValue {
+func NewBACnetPropertyStatesBinaryValue(binaryValue *BACnetBinaryPVTagged, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStatesBinaryValue {
 	_result := &BACnetPropertyStatesBinaryValue{
 		BinaryValue:          binaryValue,
 		BACnetPropertyStates: NewBACnetPropertyStates(openingTag, peekedTagHeader, closingTag, tagNumber),
@@ -120,10 +119,8 @@ func (m *BACnetPropertyStatesBinaryValue) GetLengthInBits() uint16 {
 func (m *BACnetPropertyStatesBinaryValue) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.GetParentLengthInBits())
 
-	// Optional Field (binaryValue)
-	if m.BinaryValue != nil {
-		lengthInBits += (*m.BinaryValue).GetLengthInBits()
-	}
+	// Simple field (binaryValue)
+	lengthInBits += m.BinaryValue.GetLengthInBits()
 
 	return lengthInBits
 }
@@ -141,25 +138,17 @@ func BACnetPropertyStatesBinaryValueParse(readBuffer utils.ReadBuffer, tagNumber
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Optional Field (binaryValue) (Can be skipped, if a given expression evaluates to false)
-	var binaryValue *BACnetBinaryPV = nil
-	{
-		currentPos = positionAware.GetPos()
-		if pullErr := readBuffer.PullContext("binaryValue"); pullErr != nil {
-			return nil, pullErr
-		}
-		_val, _err := BACnetBinaryPVParse(readBuffer, peekedTagNumber)
-		switch {
-		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
-			readBuffer.Reset(currentPos)
-		case _err != nil:
-			return nil, errors.Wrap(_err, "Error parsing 'binaryValue' field")
-		default:
-			binaryValue = CastBACnetBinaryPV(_val)
-			if closeErr := readBuffer.CloseContext("binaryValue"); closeErr != nil {
-				return nil, closeErr
-			}
-		}
+	// Simple Field (binaryValue)
+	if pullErr := readBuffer.PullContext("binaryValue"); pullErr != nil {
+		return nil, pullErr
+	}
+	_binaryValue, _binaryValueErr := BACnetBinaryPVTaggedParse(readBuffer, uint8(peekedTagNumber), TagClass(TagClass_CONTEXT_SPECIFIC_TAGS))
+	if _binaryValueErr != nil {
+		return nil, errors.Wrap(_binaryValueErr, "Error parsing 'binaryValue' field")
+	}
+	binaryValue := CastBACnetBinaryPVTagged(_binaryValue)
+	if closeErr := readBuffer.CloseContext("binaryValue"); closeErr != nil {
+		return nil, closeErr
 	}
 
 	if closeErr := readBuffer.CloseContext("BACnetPropertyStatesBinaryValue"); closeErr != nil {
@@ -168,7 +157,7 @@ func BACnetPropertyStatesBinaryValueParse(readBuffer utils.ReadBuffer, tagNumber
 
 	// Create a partially initialized instance
 	_child := &BACnetPropertyStatesBinaryValue{
-		BinaryValue:          CastBACnetBinaryPV(binaryValue),
+		BinaryValue:          CastBACnetBinaryPVTagged(binaryValue),
 		BACnetPropertyStates: &BACnetPropertyStates{},
 	}
 	_child.BACnetPropertyStates.Child = _child
@@ -183,20 +172,16 @@ func (m *BACnetPropertyStatesBinaryValue) Serialize(writeBuffer utils.WriteBuffe
 			return pushErr
 		}
 
-		// Optional Field (binaryValue) (Can be skipped, if the value is null)
-		var binaryValue *BACnetBinaryPV = nil
-		if m.BinaryValue != nil {
-			if pushErr := writeBuffer.PushContext("binaryValue"); pushErr != nil {
-				return pushErr
-			}
-			binaryValue = m.BinaryValue
-			_binaryValueErr := binaryValue.Serialize(writeBuffer)
-			if popErr := writeBuffer.PopContext("binaryValue"); popErr != nil {
-				return popErr
-			}
-			if _binaryValueErr != nil {
-				return errors.Wrap(_binaryValueErr, "Error serializing 'binaryValue' field")
-			}
+		// Simple Field (binaryValue)
+		if pushErr := writeBuffer.PushContext("binaryValue"); pushErr != nil {
+			return pushErr
+		}
+		_binaryValueErr := m.BinaryValue.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("binaryValue"); popErr != nil {
+			return popErr
+		}
+		if _binaryValueErr != nil {
+			return errors.Wrap(_binaryValueErr, "Error serializing 'binaryValue' field")
 		}
 
 		if popErr := writeBuffer.PopContext("BACnetPropertyStatesBinaryValue"); popErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
index 1dd1b639b1..89226a651a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
@@ -22,7 +22,6 @@ package model
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -120,10 +119,8 @@ func (m *BACnetPropertyStatesBoolean) GetLengthInBits() uint16 {
 func (m *BACnetPropertyStatesBoolean) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.GetParentLengthInBits())
 
-	// Optional Field (booleanValue)
-	if m.BooleanValue != nil {
-		lengthInBits += (*m.BooleanValue).GetLengthInBits()
-	}
+	// Simple field (booleanValue)
+	lengthInBits += m.BooleanValue.GetLengthInBits()
 
 	return lengthInBits
 }
@@ -141,25 +138,17 @@ func BACnetPropertyStatesBooleanParse(readBuffer utils.ReadBuffer, tagNumber uin
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Optional Field (booleanValue) (Can be skipped, if a given expression evaluates to false)
-	var booleanValue *BACnetContextTagBoolean = nil
-	{
-		currentPos = positionAware.GetPos()
-		if pullErr := readBuffer.PullContext("booleanValue"); pullErr != nil {
-			return nil, pullErr
-		}
-		_val, _err := BACnetContextTagParse(readBuffer, peekedTagNumber, BACnetDataType_BOOLEAN)
-		switch {
-		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
-			readBuffer.Reset(currentPos)
-		case _err != nil:
-			return nil, errors.Wrap(_err, "Error parsing 'booleanValue' field")
-		default:
-			booleanValue = CastBACnetContextTagBoolean(_val)
-			if closeErr := readBuffer.CloseContext("booleanValue"); closeErr != nil {
-				return nil, closeErr
-			}
-		}
+	// Simple Field (booleanValue)
+	if pullErr := readBuffer.PullContext("booleanValue"); pullErr != nil {
+		return nil, pullErr
+	}
+	_booleanValue, _booleanValueErr := BACnetContextTagParse(readBuffer, uint8(peekedTagNumber), BACnetDataType(BACnetDataType_BOOLEAN))
+	if _booleanValueErr != nil {
+		return nil, errors.Wrap(_booleanValueErr, "Error parsing 'booleanValue' field")
+	}
+	booleanValue := CastBACnetContextTagBoolean(_booleanValue)
+	if closeErr := readBuffer.CloseContext("booleanValue"); closeErr != nil {
+		return nil, closeErr
 	}
 
 	if closeErr := readBuffer.CloseContext("BACnetPropertyStatesBoolean"); closeErr != nil {
@@ -183,20 +172,16 @@ func (m *BACnetPropertyStatesBoolean) Serialize(writeBuffer utils.WriteBuffer) e
 			return pushErr
 		}
 
-		// Optional Field (booleanValue) (Can be skipped, if the value is null)
-		var booleanValue *BACnetContextTagBoolean = nil
-		if m.BooleanValue != nil {
-			if pushErr := writeBuffer.PushContext("booleanValue"); pushErr != nil {
-				return pushErr
-			}
-			booleanValue = m.BooleanValue
-			_booleanValueErr := booleanValue.Serialize(writeBuffer)
-			if popErr := writeBuffer.PopContext("booleanValue"); popErr != nil {
-				return popErr
-			}
-			if _booleanValueErr != nil {
-				return errors.Wrap(_booleanValueErr, "Error serializing 'booleanValue' field")
-			}
+		// Simple Field (booleanValue)
+		if pushErr := writeBuffer.PushContext("booleanValue"); pushErr != nil {
+			return pushErr
+		}
+		_booleanValueErr := m.BooleanValue.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("booleanValue"); popErr != nil {
+			return popErr
+		}
+		if _booleanValueErr != nil {
+			return errors.Wrap(_booleanValueErr, "Error serializing 'booleanValue' field")
 		}
 
 		if popErr := writeBuffer.PopContext("BACnetPropertyStatesBoolean"); popErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRejectReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRejectReason.go
new file mode 100644
index 0000000000..c0c933fc42
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRejectReason.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
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetRejectReason is an enum
+type BACnetRejectReason uint8
+
+type IBACnetRejectReason interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetRejectReason_OTHER                       BACnetRejectReason = 0x0
+	BACnetRejectReason_BUFFER_OVERFLOW             BACnetRejectReason = 0x1
+	BACnetRejectReason_INCONSISTENT_PARAMETERS     BACnetRejectReason = 0x2
+	BACnetRejectReason_INVALID_PARAMETER_DATA_TYPE BACnetRejectReason = 0x3
+	BACnetRejectReason_INVALID_TAG                 BACnetRejectReason = 0x4
+	BACnetRejectReason_MISSING_REQUIRED_PARAMETER  BACnetRejectReason = 0x5
+	BACnetRejectReason_PARAMETER_OUT_OF_RANGE      BACnetRejectReason = 0x6
+	BACnetRejectReason_TOO_MANY_ARGUMENTS          BACnetRejectReason = 0x7
+	BACnetRejectReason_UNDEFINED_ENUMERATION       BACnetRejectReason = 0x8
+	BACnetRejectReason_UNRECOGNIZED_SERVICE        BACnetRejectReason = 0x9
+	BACnetRejectReason_VENDOR_PROPRIETARY_VALUE    BACnetRejectReason = 0xFF
+)
+
+var BACnetRejectReasonValues []BACnetRejectReason
+
+func init() {
+	_ = errors.New
+	BACnetRejectReasonValues = []BACnetRejectReason{
+		BACnetRejectReason_OTHER,
+		BACnetRejectReason_BUFFER_OVERFLOW,
+		BACnetRejectReason_INCONSISTENT_PARAMETERS,
+		BACnetRejectReason_INVALID_PARAMETER_DATA_TYPE,
+		BACnetRejectReason_INVALID_TAG,
+		BACnetRejectReason_MISSING_REQUIRED_PARAMETER,
+		BACnetRejectReason_PARAMETER_OUT_OF_RANGE,
+		BACnetRejectReason_TOO_MANY_ARGUMENTS,
+		BACnetRejectReason_UNDEFINED_ENUMERATION,
+		BACnetRejectReason_UNRECOGNIZED_SERVICE,
+		BACnetRejectReason_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetRejectReasonByValue(value uint8) BACnetRejectReason {
+	switch value {
+	case 0x0:
+		return BACnetRejectReason_OTHER
+	case 0x1:
+		return BACnetRejectReason_BUFFER_OVERFLOW
+	case 0x2:
+		return BACnetRejectReason_INCONSISTENT_PARAMETERS
+	case 0x3:
+		return BACnetRejectReason_INVALID_PARAMETER_DATA_TYPE
+	case 0x4:
+		return BACnetRejectReason_INVALID_TAG
+	case 0x5:
+		return BACnetRejectReason_MISSING_REQUIRED_PARAMETER
+	case 0x6:
+		return BACnetRejectReason_PARAMETER_OUT_OF_RANGE
+	case 0x7:
+		return BACnetRejectReason_TOO_MANY_ARGUMENTS
+	case 0x8:
+		return BACnetRejectReason_UNDEFINED_ENUMERATION
+	case 0x9:
+		return BACnetRejectReason_UNRECOGNIZED_SERVICE
+	case 0xFF:
+		return BACnetRejectReason_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetRejectReasonByName(value string) BACnetRejectReason {
+	switch value {
+	case "OTHER":
+		return BACnetRejectReason_OTHER
+	case "BUFFER_OVERFLOW":
+		return BACnetRejectReason_BUFFER_OVERFLOW
+	case "INCONSISTENT_PARAMETERS":
+		return BACnetRejectReason_INCONSISTENT_PARAMETERS
+	case "INVALID_PARAMETER_DATA_TYPE":
+		return BACnetRejectReason_INVALID_PARAMETER_DATA_TYPE
+	case "INVALID_TAG":
+		return BACnetRejectReason_INVALID_TAG
+	case "MISSING_REQUIRED_PARAMETER":
+		return BACnetRejectReason_MISSING_REQUIRED_PARAMETER
+	case "PARAMETER_OUT_OF_RANGE":
+		return BACnetRejectReason_PARAMETER_OUT_OF_RANGE
+	case "TOO_MANY_ARGUMENTS":
+		return BACnetRejectReason_TOO_MANY_ARGUMENTS
+	case "UNDEFINED_ENUMERATION":
+		return BACnetRejectReason_UNDEFINED_ENUMERATION
+	case "UNRECOGNIZED_SERVICE":
+		return BACnetRejectReason_UNRECOGNIZED_SERVICE
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetRejectReason_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetRejectReasonKnows(value uint8) bool {
+	for _, typeValue := range BACnetRejectReasonValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetRejectReason(structType interface{}) BACnetRejectReason {
+	castFunc := func(typ interface{}) BACnetRejectReason {
+		if sBACnetRejectReason, ok := typ.(BACnetRejectReason); ok {
+			return sBACnetRejectReason
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetRejectReason) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetRejectReason) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetRejectReasonParse(readBuffer utils.ReadBuffer) (BACnetRejectReason, error) {
+	val, err := readBuffer.ReadUint8("BACnetRejectReason", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetRejectReasonByValue(val), nil
+}
+
+func (e BACnetRejectReason) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetRejectReason", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetRejectReason) name() string {
+	switch e {
+	case BACnetRejectReason_OTHER:
+		return "OTHER"
+	case BACnetRejectReason_BUFFER_OVERFLOW:
+		return "BUFFER_OVERFLOW"
+	case BACnetRejectReason_INCONSISTENT_PARAMETERS:
+		return "INCONSISTENT_PARAMETERS"
+	case BACnetRejectReason_INVALID_PARAMETER_DATA_TYPE:
+		return "INVALID_PARAMETER_DATA_TYPE"
+	case BACnetRejectReason_INVALID_TAG:
+		return "INVALID_TAG"
+	case BACnetRejectReason_MISSING_REQUIRED_PARAMETER:
+		return "MISSING_REQUIRED_PARAMETER"
+	case BACnetRejectReason_PARAMETER_OUT_OF_RANGE:
+		return "PARAMETER_OUT_OF_RANGE"
+	case BACnetRejectReason_TOO_MANY_ARGUMENTS:
+		return "TOO_MANY_ARGUMENTS"
+	case BACnetRejectReason_UNDEFINED_ENUMERATION:
+		return "UNDEFINED_ENUMERATION"
+	case BACnetRejectReason_UNRECOGNIZED_SERVICE:
+		return "UNRECOGNIZED_SERVICE"
+	case BACnetRejectReason_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetRejectReason) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/AbortReasonTagged.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRejectReasonTagged.go
similarity index 67%
rename from plc4go/internal/plc4go/bacnetip/readwrite/model/AbortReasonTagged.go
rename to plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRejectReasonTagged.go
index 84e2fba1b2..d0e9a12408 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/AbortReasonTagged.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRejectReasonTagged.go
@@ -26,19 +26,19 @@ import (
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// AbortReasonTagged is the data-structure of this message
-type AbortReasonTagged struct {
-	Value            AbortReason
+// BACnetRejectReasonTagged is the data-structure of this message
+type BACnetRejectReasonTagged struct {
+	Value            BACnetRejectReason
 	ProprietaryValue uint32
 
 	// Arguments.
 	ActualLength uint32
 }
 
-// IAbortReasonTagged is the corresponding interface of AbortReasonTagged
-type IAbortReasonTagged interface {
+// IBACnetRejectReasonTagged is the corresponding interface of BACnetRejectReasonTagged
+type IBACnetRejectReasonTagged interface {
 	// GetValue returns Value (property field)
-	GetValue() AbortReason
+	GetValue() BACnetRejectReason
 	// GetProprietaryValue returns ProprietaryValue (property field)
 	GetProprietaryValue() uint32
 	// GetIsProprietary returns IsProprietary (virtual field)
@@ -56,11 +56,11 @@ type IAbortReasonTagged interface {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *AbortReasonTagged) GetValue() AbortReason {
+func (m *BACnetRejectReasonTagged) GetValue() BACnetRejectReason {
 	return m.Value
 }
 
-func (m *AbortReasonTagged) GetProprietaryValue() uint32 {
+func (m *BACnetRejectReasonTagged) GetProprietaryValue() uint32 {
 	return m.ProprietaryValue
 }
 
@@ -73,8 +73,8 @@ func (m *AbortReasonTagged) GetProprietaryValue() uint32 {
 /////////////////////// Accessors for virtual fields.
 ///////////////////////
 
-func (m *AbortReasonTagged) GetIsProprietary() bool {
-	return bool(bool((m.GetValue()) == (AbortReason_VENDOR_PROPRIETARY_VALUE)))
+func (m *BACnetRejectReasonTagged) GetIsProprietary() bool {
+	return bool(bool((m.GetValue()) == (BACnetRejectReason_VENDOR_PROPRIETARY_VALUE)))
 }
 
 ///////////////////////
@@ -82,30 +82,30 @@ func (m *AbortReasonTagged) GetIsProprietary() bool {
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
-// NewAbortReasonTagged factory function for AbortReasonTagged
-func NewAbortReasonTagged(value AbortReason, proprietaryValue uint32, actualLength uint32) *AbortReasonTagged {
-	return &AbortReasonTagged{Value: value, ProprietaryValue: proprietaryValue, ActualLength: actualLength}
+// NewBACnetRejectReasonTagged factory function for BACnetRejectReasonTagged
+func NewBACnetRejectReasonTagged(value BACnetRejectReason, proprietaryValue uint32, actualLength uint32) *BACnetRejectReasonTagged {
+	return &BACnetRejectReasonTagged{Value: value, ProprietaryValue: proprietaryValue, ActualLength: actualLength}
 }
 
-func CastAbortReasonTagged(structType interface{}) *AbortReasonTagged {
-	if casted, ok := structType.(AbortReasonTagged); ok {
+func CastBACnetRejectReasonTagged(structType interface{}) *BACnetRejectReasonTagged {
+	if casted, ok := structType.(BACnetRejectReasonTagged); ok {
 		return &casted
 	}
-	if casted, ok := structType.(*AbortReasonTagged); ok {
+	if casted, ok := structType.(*BACnetRejectReasonTagged); ok {
 		return casted
 	}
 	return nil
 }
 
-func (m *AbortReasonTagged) GetTypeName() string {
-	return "AbortReasonTagged"
+func (m *BACnetRejectReasonTagged) GetTypeName() string {
+	return "BACnetRejectReasonTagged"
 }
 
-func (m *AbortReasonTagged) GetLengthInBits() uint16 {
+func (m *BACnetRejectReasonTagged) GetLengthInBits() uint16 {
 	return m.GetLengthInBitsConditional(false)
 }
 
-func (m *AbortReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
+func (m *BACnetRejectReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
 	// Manual Field (value)
@@ -119,28 +119,28 @@ func (m *AbortReasonTagged) GetLengthInBitsConditional(lastItem bool) uint16 {
 	return lengthInBits
 }
 
-func (m *AbortReasonTagged) GetLengthInBytes() uint16 {
+func (m *BACnetRejectReasonTagged) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AbortReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*AbortReasonTagged, error) {
+func BACnetRejectReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetRejectReasonTagged, error) {
 	positionAware := readBuffer
 	_ = positionAware
-	if pullErr := readBuffer.PullContext("AbortReasonTagged"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("BACnetRejectReasonTagged"); pullErr != nil {
 		return nil, pullErr
 	}
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
 	// Manual Field (value)
-	_value, _valueErr := ReadEnumGeneric(readBuffer, actualLength, AbortReason_VENDOR_PROPRIETARY_VALUE)
+	_value, _valueErr := ReadEnumGeneric(readBuffer, actualLength, BACnetRejectReason_VENDOR_PROPRIETARY_VALUE)
 	if _valueErr != nil {
 		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
 	}
-	value := _value.(AbortReason)
+	value := _value.(BACnetRejectReason)
 
 	// Virtual field
-	_isProprietary := bool((value) == (AbortReason_VENDOR_PROPRIETARY_VALUE))
+	_isProprietary := bool((value) == (BACnetRejectReason_VENDOR_PROPRIETARY_VALUE))
 	isProprietary := bool(_isProprietary)
 	_ = isProprietary
 
@@ -151,18 +151,18 @@ func AbortReasonTaggedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*
 	}
 	proprietaryValue := _proprietaryValue.(uint32)
 
-	if closeErr := readBuffer.CloseContext("AbortReasonTagged"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("BACnetRejectReasonTagged"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create the instance
-	return NewAbortReasonTagged(value, proprietaryValue, actualLength), nil
+	return NewBACnetRejectReasonTagged(value, proprietaryValue, actualLength), nil
 }
 
-func (m *AbortReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m *BACnetRejectReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 	positionAware := writeBuffer
 	_ = positionAware
-	if pushErr := writeBuffer.PushContext("AbortReasonTagged"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("BACnetRejectReasonTagged"); pushErr != nil {
 		return pushErr
 	}
 
@@ -182,13 +182,13 @@ func (m *AbortReasonTagged) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(_proprietaryValueErr, "Error serializing 'proprietaryValue' field")
 	}
 
-	if popErr := writeBuffer.PopContext("AbortReasonTagged"); popErr != nil {
+	if popErr := writeBuffer.PopContext("BACnetRejectReasonTagged"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
 
-func (m *AbortReasonTagged) String() string {
+func (m *BACnetRejectReasonTagged) String() string {
 	if m == nil {
 		return "<nil>"
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRelationship.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRelationship.go
new file mode 100644
index 0000000000..4dc93f8023
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRelationship.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetRelationship is an enum
+type BACnetRelationship uint16
+
+type IBACnetRelationship interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetRelationship_VENDOR_PROPRIETARY_VALUE BACnetRelationship = 0xFFFF
+)
+
+var BACnetRelationshipValues []BACnetRelationship
+
+func init() {
+	_ = errors.New
+	BACnetRelationshipValues = []BACnetRelationship{
+		BACnetRelationship_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetRelationshipByValue(value uint16) BACnetRelationship {
+	switch value {
+	case 0xFFFF:
+		return BACnetRelationship_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetRelationshipByName(value string) BACnetRelationship {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetRelationship_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetRelationshipKnows(value uint16) bool {
+	for _, typeValue := range BACnetRelationshipValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetRelationship(structType interface{}) BACnetRelationship {
+	castFunc := func(typ interface{}) BACnetRelationship {
+		if sBACnetRelationship, ok := typ.(BACnetRelationship); ok {
+			return sBACnetRelationship
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetRelationship) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetRelationship) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetRelationshipParse(readBuffer utils.ReadBuffer) (BACnetRelationship, error) {
+	val, err := readBuffer.ReadUint16("BACnetRelationship", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetRelationshipByValue(val), nil
+}
+
+func (e BACnetRelationship) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetRelationship", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetRelationship) name() string {
+	switch e {
+	case BACnetRelationship_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetRelationship) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRestartReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRestartReason.go
new file mode 100644
index 0000000000..2a283c45b9
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetRestartReason.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetRestartReason is an enum
+type BACnetRestartReason uint8
+
+type IBACnetRestartReason interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetRestartReason_VENDOR_PROPRIETARY_VALUE BACnetRestartReason = 0xFF
+)
+
+var BACnetRestartReasonValues []BACnetRestartReason
+
+func init() {
+	_ = errors.New
+	BACnetRestartReasonValues = []BACnetRestartReason{
+		BACnetRestartReason_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetRestartReasonByValue(value uint8) BACnetRestartReason {
+	switch value {
+	case 0xFF:
+		return BACnetRestartReason_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetRestartReasonByName(value string) BACnetRestartReason {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetRestartReason_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetRestartReasonKnows(value uint8) bool {
+	for _, typeValue := range BACnetRestartReasonValues {
+		if uint8(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetRestartReason(structType interface{}) BACnetRestartReason {
+	castFunc := func(typ interface{}) BACnetRestartReason {
+		if sBACnetRestartReason, ok := typ.(BACnetRestartReason); ok {
+			return sBACnetRestartReason
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetRestartReason) GetLengthInBits() uint16 {
+	return 8
+}
+
+func (m BACnetRestartReason) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetRestartReasonParse(readBuffer utils.ReadBuffer) (BACnetRestartReason, error) {
+	val, err := readBuffer.ReadUint8("BACnetRestartReason", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetRestartReasonByValue(val), nil
+}
+
+func (e BACnetRestartReason) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("BACnetRestartReason", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetRestartReason) name() string {
+	switch e {
+	case BACnetRestartReason_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetRestartReason) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSilencedState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSilencedState.go
new file mode 100644
index 0000000000..c82b604b58
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSilencedState.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetSilencedState is an enum
+type BACnetSilencedState uint16
+
+type IBACnetSilencedState interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetSilencedState_VENDOR_PROPRIETARY_VALUE BACnetSilencedState = 0xFFFF
+)
+
+var BACnetSilencedStateValues []BACnetSilencedState
+
+func init() {
+	_ = errors.New
+	BACnetSilencedStateValues = []BACnetSilencedState{
+		BACnetSilencedState_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetSilencedStateByValue(value uint16) BACnetSilencedState {
+	switch value {
+	case 0xFFFF:
+		return BACnetSilencedState_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetSilencedStateByName(value string) BACnetSilencedState {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetSilencedState_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetSilencedStateKnows(value uint16) bool {
+	for _, typeValue := range BACnetSilencedStateValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetSilencedState(structType interface{}) BACnetSilencedState {
+	castFunc := func(typ interface{}) BACnetSilencedState {
+		if sBACnetSilencedState, ok := typ.(BACnetSilencedState); ok {
+			return sBACnetSilencedState
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetSilencedState) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetSilencedState) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetSilencedStateParse(readBuffer utils.ReadBuffer) (BACnetSilencedState, error) {
+	val, err := readBuffer.ReadUint16("BACnetSilencedState", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetSilencedStateByValue(val), nil
+}
+
+func (e BACnetSilencedState) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetSilencedState", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetSilencedState) name() string {
+	switch e {
+	case BACnetSilencedState_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetSilencedState) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetVTClass.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetVTClass.go
new file mode 100644
index 0000000000..e74c1f9177
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetVTClass.go
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetVTClass is an enum
+type BACnetVTClass uint16
+
+type IBACnetVTClass interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	BACnetVTClass_VENDOR_PROPRIETARY_VALUE BACnetVTClass = 0xFFFF
+)
+
+var BACnetVTClassValues []BACnetVTClass
+
+func init() {
+	_ = errors.New
+	BACnetVTClassValues = []BACnetVTClass{
+		BACnetVTClass_VENDOR_PROPRIETARY_VALUE,
+	}
+}
+
+func BACnetVTClassByValue(value uint16) BACnetVTClass {
+	switch value {
+	case 0xFFFF:
+		return BACnetVTClass_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetVTClassByName(value string) BACnetVTClass {
+	switch value {
+	case "VENDOR_PROPRIETARY_VALUE":
+		return BACnetVTClass_VENDOR_PROPRIETARY_VALUE
+	}
+	return 0
+}
+
+func BACnetVTClassKnows(value uint16) bool {
+	for _, typeValue := range BACnetVTClassValues {
+		if uint16(typeValue) == value {
+			return true
+		}
+	}
+	return false
+}
+
+func CastBACnetVTClass(structType interface{}) BACnetVTClass {
+	castFunc := func(typ interface{}) BACnetVTClass {
+		if sBACnetVTClass, ok := typ.(BACnetVTClass); ok {
+			return sBACnetVTClass
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m BACnetVTClass) GetLengthInBits() uint16 {
+	return 16
+}
+
+func (m BACnetVTClass) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetVTClassParse(readBuffer utils.ReadBuffer) (BACnetVTClass, error) {
+	val, err := readBuffer.ReadUint16("BACnetVTClass", 16)
+	if err != nil {
+		return 0, nil
+	}
+	return BACnetVTClassByValue(val), nil
+}
+
+func (e BACnetVTClass) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint16("BACnetVTClass", 16, uint16(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetVTClass) name() string {
+	switch e {
+	case BACnetVTClass_VENDOR_PROPRIETARY_VALUE:
+		return "VENDOR_PROPRIETARY_VALUE"
+	}
+	return ""
+}
+
+func (e BACnetVTClass) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReason.go
deleted file mode 100644
index 2fe82954d2..0000000000
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/RejectReason.go
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package model
-
-import (
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"github.com/pkg/errors"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// RejectReason is an enum
-type RejectReason uint8
-
-type IRejectReason interface {
-	Serialize(writeBuffer utils.WriteBuffer) error
-}
-
-const (
-	RejectReason_OTHER                       RejectReason = 0x0
-	RejectReason_BUFFER_OVERFLOW             RejectReason = 0x1
-	RejectReason_INCONSISTENT_PARAMETERS     RejectReason = 0x2
-	RejectReason_INVALID_PARAMETER_DATA_TYPE RejectReason = 0x3
-	RejectReason_INVALID_TAG                 RejectReason = 0x4
-	RejectReason_MISSING_REQUIRED_PARAMETER  RejectReason = 0x5
-	RejectReason_PARAMETER_OUT_OF_RANGE      RejectReason = 0x6
-	RejectReason_TOO_MANY_ARGUMENTS          RejectReason = 0x7
-	RejectReason_UNDEFINED_ENUMERATION       RejectReason = 0x8
-	RejectReason_UNRECOGNIZED_SERVICE        RejectReason = 0x9
-	RejectReason_VENDOR_PROPRIETARY_VALUE    RejectReason = 0xFF
-)
-
-var RejectReasonValues []RejectReason
-
-func init() {
-	_ = errors.New
-	RejectReasonValues = []RejectReason{
-		RejectReason_OTHER,
-		RejectReason_BUFFER_OVERFLOW,
-		RejectReason_INCONSISTENT_PARAMETERS,
-		RejectReason_INVALID_PARAMETER_DATA_TYPE,
-		RejectReason_INVALID_TAG,
-		RejectReason_MISSING_REQUIRED_PARAMETER,
-		RejectReason_PARAMETER_OUT_OF_RANGE,
-		RejectReason_TOO_MANY_ARGUMENTS,
-		RejectReason_UNDEFINED_ENUMERATION,
-		RejectReason_UNRECOGNIZED_SERVICE,
-		RejectReason_VENDOR_PROPRIETARY_VALUE,
-	}
-}
-
-func RejectReasonByValue(value uint8) RejectReason {
-	switch value {
-	case 0x0:
-		return RejectReason_OTHER
-	case 0x1:
-		return RejectReason_BUFFER_OVERFLOW
-	case 0x2:
-		return RejectReason_INCONSISTENT_PARAMETERS
-	case 0x3:
-		return RejectReason_INVALID_PARAMETER_DATA_TYPE
-	case 0x4:
-		return RejectReason_INVALID_TAG
-	case 0x5:
-		return RejectReason_MISSING_REQUIRED_PARAMETER
-	case 0x6:
-		return RejectReason_PARAMETER_OUT_OF_RANGE
-	case 0x7:
-		return RejectReason_TOO_MANY_ARGUMENTS
-	case 0x8:
-		return RejectReason_UNDEFINED_ENUMERATION
-	case 0x9:
-		return RejectReason_UNRECOGNIZED_SERVICE
-	case 0xFF:
-		return RejectReason_VENDOR_PROPRIETARY_VALUE
-	}
-	return 0
-}
-
-func RejectReasonByName(value string) RejectReason {
-	switch value {
-	case "OTHER":
-		return RejectReason_OTHER
-	case "BUFFER_OVERFLOW":
-		return RejectReason_BUFFER_OVERFLOW
-	case "INCONSISTENT_PARAMETERS":
-		return RejectReason_INCONSISTENT_PARAMETERS
-	case "INVALID_PARAMETER_DATA_TYPE":
-		return RejectReason_INVALID_PARAMETER_DATA_TYPE
-	case "INVALID_TAG":
-		return RejectReason_INVALID_TAG
-	case "MISSING_REQUIRED_PARAMETER":
-		return RejectReason_MISSING_REQUIRED_PARAMETER
-	case "PARAMETER_OUT_OF_RANGE":
-		return RejectReason_PARAMETER_OUT_OF_RANGE
-	case "TOO_MANY_ARGUMENTS":
-		return RejectReason_TOO_MANY_ARGUMENTS
-	case "UNDEFINED_ENUMERATION":
-		return RejectReason_UNDEFINED_ENUMERATION
-	case "UNRECOGNIZED_SERVICE":
-		return RejectReason_UNRECOGNIZED_SERVICE
-	case "VENDOR_PROPRIETARY_VALUE":
-		return RejectReason_VENDOR_PROPRIETARY_VALUE
-	}
-	return 0
-}
-
-func RejectReasonKnows(value uint8) bool {
-	for _, typeValue := range RejectReasonValues {
-		if uint8(typeValue) == value {
-			return true
-		}
-	}
-	return false
-}
-
-func CastRejectReason(structType interface{}) RejectReason {
-	castFunc := func(typ interface{}) RejectReason {
-		if sRejectReason, ok := typ.(RejectReason); ok {
-			return sRejectReason
-		}
-		return 0
-	}
-	return castFunc(structType)
-}
-
-func (m RejectReason) GetLengthInBits() uint16 {
-	return 8
-}
-
-func (m RejectReason) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func RejectReasonParse(readBuffer utils.ReadBuffer) (RejectReason, error) {
-	val, err := readBuffer.ReadUint8("RejectReason", 8)
-	if err != nil {
-		return 0, nil
-	}
-	return RejectReasonByValue(val), nil
-}
-
-func (e RejectReason) Serialize(writeBuffer utils.WriteBuffer) error {
-	return writeBuffer.WriteUint8("RejectReason", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
-}
-
-func (e RejectReason) name() string {
-	switch e {
-	case RejectReason_OTHER:
-		return "OTHER"
-	case RejectReason_BUFFER_OVERFLOW:
-		return "BUFFER_OVERFLOW"
-	case RejectReason_INCONSISTENT_PARAMETERS:
-		return "INCONSISTENT_PARAMETERS"
-	case RejectReason_INVALID_PARAMETER_DATA_TYPE:
-		return "INVALID_PARAMETER_DATA_TYPE"
-	case RejectReason_INVALID_TAG:
-		return "INVALID_TAG"
-	case RejectReason_MISSING_REQUIRED_PARAMETER:
-		return "MISSING_REQUIRED_PARAMETER"
-	case RejectReason_PARAMETER_OUT_OF_RANGE:
-		return "PARAMETER_OUT_OF_RANGE"
-	case RejectReason_TOO_MANY_ARGUMENTS:
-		return "TOO_MANY_ARGUMENTS"
-	case RejectReason_UNDEFINED_ENUMERATION:
-		return "UNDEFINED_ENUMERATION"
-	case RejectReason_UNRECOGNIZED_SERVICE:
-		return "UNRECOGNIZED_SERVICE"
-	case RejectReason_VENDOR_PROPRIETARY_VALUE:
-		return "VENDOR_PROPRIETARY_VALUE"
-	}
-	return ""
-}
-
-func (e RejectReason) String() string {
-	return e.name()
-}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
index eb451cee41..5d47e438ab 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
@@ -35,8 +35,8 @@ func ReadEnumGeneric(readBuffer utils.ReadBuffer, actualLength uint32, template
 	}
 
 	switch template.(type) {
-	case AbortReason:
-		return AbortReason(rawValue), nil
+	case BACnetAbortReason:
+		return BACnetAbortReason(rawValue), nil
 	case BACnetEventState:
 		return BACnetEventState(rawValue), nil
 	case BACnetEventType:
@@ -63,8 +63,8 @@ func ReadEnumGeneric(readBuffer utils.ReadBuffer, actualLength uint32, template
 		return ErrorClass(rawValue), nil
 	case ErrorCode:
 		return ErrorCode(rawValue), nil
-	case RejectReason:
-		return RejectReason(rawValue), nil
+	case BACnetRejectReason:
+		return BACnetRejectReason(rawValue), nil
 	case BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDevice:
 		return BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDevice(rawValue), err
 	case BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable:
@@ -97,7 +97,7 @@ func WriteEnumGeneric(writeBuffer utils.WriteBuffer, value interface{}) error {
 	// TODO: same here... how to do that generic???
 	//var valueValue = value.(uint32)
 	switch v := value.(type) {
-	case AbortReason:
+	case BACnetAbortReason:
 		valueValue = uint32(v)
 	case BACnetEventState:
 		valueValue = uint32(v)
@@ -125,7 +125,7 @@ func WriteEnumGeneric(writeBuffer utils.WriteBuffer, value interface{}) error {
 		valueValue = uint32(v)
 	case ErrorCode:
 		valueValue = uint32(v)
-	case RejectReason:
+	case BACnetRejectReason:
 		valueValue = uint32(v)
 	case BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDevice:
 		valueValue = uint32(v)
diff --git a/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java b/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java
index 263612a074..e32ba29877 100644
--- a/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java
+++ b/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java
@@ -46,10 +46,10 @@ public class StaticHelper {
         int bitsToRead = (int) (actualLength * 8);
         long rawValue = readBuffer.readUnsignedLong("value", bitsToRead);
         // TODO: map types here for better performance which doesn't use reflection
-        if (template.getDeclaringClass() == AbortReason.class) {
-            AbortReason enumValue = AbortReason.enumForValue((short) rawValue);
+        if (template.getDeclaringClass() == BACnetAbortReason.class) {
+            BACnetAbortReason enumValue = BACnetAbortReason.enumForValue((short) rawValue);
             if (enumValue == null) {
-                return AbortReason.VENDOR_PROPRIETARY_VALUE;
+                return BACnetAbortReason.VENDOR_PROPRIETARY_VALUE;
             }
             return enumValue;
         } else if (template.getDeclaringClass() == BACnetEventState.class) {
@@ -118,10 +118,10 @@ public class StaticHelper {
                 return ErrorCode.VENDOR_PROPRIETARY_VALUE;
             }
             return enumValue;
-        } else if (template.getDeclaringClass() == RejectReason.class) {
-            RejectReason enumValue = RejectReason.enumForValue((short) rawValue);
+        } else if (template.getDeclaringClass() == BACnetRejectReason.class) {
+            BACnetRejectReason enumValue = BACnetRejectReason.enumForValue((short) rawValue);
             if (enumValue == null) {
-                return RejectReason.VENDOR_PROPRIETARY_VALUE;
+                return BACnetRejectReason.VENDOR_PROPRIETARY_VALUE;
             }
             return enumValue;
         } else if (template.getDeclaringClass() == BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDevice.class) {
@@ -176,24 +176,6 @@ public class StaticHelper {
         return readBuffer.readUnsignedLong("proprietaryValue", bitsToRead);
     }
 
-    /*
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-	case :
-     */
-
     public static void writeEnumGeneric(WriteBuffer writeBuffer, Enum<?> value) throws SerializationException {
         if (value == null) {
             return;
@@ -201,8 +183,8 @@ public class StaticHelper {
         int bitsToWrite;
         long valueValue;
         // TODO: map types here for better performance which doesn't use reflection
-        if (value.getDeclaringClass() == AbortReason.class) {
-            valueValue = ((AbortReason) value).getValue();
+        if (value.getDeclaringClass() == BACnetAbortReason.class) {
+            valueValue = ((BACnetAbortReason) value).getValue();
         } else if (value.getDeclaringClass() == BACnetEventState.class) {
             valueValue = ((BACnetEventState) value).getValue();
         } else if (value.getDeclaringClass() == BACnetEventType.class) {
@@ -227,8 +209,8 @@ public class StaticHelper {
             valueValue = ((ErrorClass) value).getValue();
         } else if (value.getDeclaringClass() == ErrorCode.class) {
             valueValue = ((ErrorCode) value).getValue();
-        } else if (value.getDeclaringClass() == RejectReason.class) {
-            valueValue = ((RejectReason) value).getValue();
+        } else if (value.getDeclaringClass() == BACnetRejectReason.class) {
+            valueValue = ((BACnetRejectReason) value).getValue();
         } else if (value.getDeclaringClass() == BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDevice.class) {
             valueValue = ((BACnetConfirmedServiceRequestReinitializeDeviceReinitializedStateOfDevice) value).getValue();
         } else if (value.getDeclaringClass() == BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable.class) {
diff --git a/protocols/bacnetip/src/main/java/org/apache/plc4x/protocol/bacnetip/BacNetIpProtocol.java b/protocols/bacnetip/src/main/java/org/apache/plc4x/protocol/bacnetip/BacNetIpProtocol.java
index 06455ee714..f80bbd3e7f 100644
--- a/protocols/bacnetip/src/main/java/org/apache/plc4x/protocol/bacnetip/BacNetIpProtocol.java
+++ b/protocols/bacnetip/src/main/java/org/apache/plc4x/protocol/bacnetip/BacNetIpProtocol.java
@@ -56,6 +56,15 @@ public class BacNetIpProtocol implements Protocol {
         typeContext = new MessageFormatParser().parse(bacnetVendorIdsSchemaInputStream);
         typeDefinitionMap.putAll(typeContext.getTypeDefinitions());
 
+        LOGGER.info("Parsing: bacnet-enums.mspec");
+        InputStream bacnetipEnumsSchemaInputStream = BacNetIpProtocol.class.getResourceAsStream(
+            "/protocols/bacnetip/bacnet-enums.mspec");
+        if (bacnetipEnumsSchemaInputStream == null) {
+            throw new GenerationException("Error loading enum schema for protocol '" + getName() + "'");
+        }
+        typeContext = new MessageFormatParser().parse(bacnetipEnumsSchemaInputStream, typeDefinitionMap, typeContext.getUnresolvedTypeReferences());
+        typeDefinitionMap.putAll(typeContext.getTypeDefinitions());
+
         LOGGER.info("Parsing: bacnetip.mspec");
         InputStream bacnetipSchemaInputStream = BacNetIpProtocol.class.getResourceAsStream(
             "/protocols/bacnetip/bacnetip.mspec");
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnet-enums.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnet-enums.mspec
new file mode 100644
index 0000000000..43c891c1ee
--- /dev/null
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnet-enums.mspec
@@ -0,0 +1,1170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// Table 23-1 for overview
+
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 ErrorClass
+    ['0x0000' DEVICE          ]
+    ['0x0001' OBJECT          ]
+    ['0x0002' PROPERTY        ]
+    ['0x0003' RESOURCES       ]
+    ['0x0004' SECURITY        ]
+    ['0x0005' SERVICES        ]
+    ['0x0006' VT              ]
+    ['0x0007' COMMUNICATION   ]
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 ErrorCode
+    ['123'  ABORT_APDU_TOO_LONG                       ]
+    ['124'  ABORT_APPLICATION_EXCEEDED_REPLY_TIME     ]
+    ['51'   ABORT_BUFFER_OVERFLOW                     ]
+    ['135'  ABORT_INSUFFICIENT_SECURITY               ]
+    ['52'   ABORT_INVALID_APDU_IN_THIS_STATE          ]
+    ['56'   ABORT_OTHER                               ]
+    ['125'  ABORT_OUT_OF_RESOURCES                    ]
+    ['53'   ABORT_PREEMPTED_BY_HIGHER_PRIORITY_TASK   ]
+    ['55'   ABORT_PROPRIETARY                         ]
+    ['136'  ABORT_SECURITY_ERROR                      ]
+    ['54'   ABORT_SEGMENTATION_NOT_SUPPORTED          ]
+    ['126'  ABORT_TSM_TIMEOUT                         ]
+    ['127'  ABORT_WINDOW_SIZE_OUT_OF_RANGE            ]
+    ['85'   ACCESS_DENIED                             ]
+    ['115'  ADDRESSING_ERROR                          ]
+    ['86'   BAD_DESTINATION_ADDRESS                   ]
+    ['87'   BAD_DESTINATION_DEVICE_ID                 ]
+    ['88'   BAD_SIGNATURE                             ]
+    ['89'   BAD_SOURCE_ADDRESS                        ]
+    ['90'   BAD_TIMESTAMP                             ]
+    ['82'   Busy                                      ]
+    ['91'   CANNOT_USE_KEY                            ]
+    ['92'   CANNOT_VERIFY_MESSAGE_ID                  ]
+    ['41'   CHARACTER_SET_NOT_SUPPORTED               ]
+    ['83'   COMMUNICATION_DISABLED                    ]
+    ['2'    CONFIGURATION_IN_PROGRESS                 ]
+    ['93'   CORRECT_KEY_REVISION                      ]
+    ['43'   COV_SUBSCRIPTION_FAILED                   ]
+    ['47'   DATATYPE_NOT_SUPPORTED                    ]
+    ['120'  DELETE_FDT_ENTRY_FAILED                   ]
+    ['94'   DESTINATION_DEVICE_ID_REQUIRED            ]
+    ['3'    DEVICE_BUSY                               ]
+    ['121'  DISTRIBUTE_BROADCAST_FAILED               ]
+    ['137'  DUPLICATE_ENTRY                           ]
+    ['95'   DUPLICATE_MESSAGE                         ]
+    ['48'   DUPLICATE_NAME                            ]
+    ['49'   DUPLICATE_OBJECT_ID                       ]
+    ['4'    DYNAMIC_CREATION_NOT_SUPPORTED            ]
+    ['96'   ENCRYPTION_NOT_CONFIGURED                 ]
+    ['97'   ENCRYPTION_REQUIRED                       ]
+    ['5'    FILE_ACCESS_DENIED                        ]
+    ['128'  FILE_FULL                                 ]
+    ['129'  INCONSISTENT_CONFIGURATION                ]
+    ['130'  INCONSISTENT_OBJECT_TYPE                  ]
+    ['7'    INCONSISTENT_PARAMETERS                   ]
+    ['8'    INCONSISTENT_SELECTION_CRITERION          ]
+    ['98'   INCORRECT_KEY                             ]
+    ['131'  INTERNAL_ERROR                            ]
+    ['42'   INVALID_ARRAY_INDEX                       ]
+    ['46'   INVALID_CONFIGURATION_DATA                ]
+    ['9'    INVALID_DATA_TYPE                         ]
+    ['13'   D_PARAMETER_DATA_TYPE                     ]
+    ['57'   INVALID_TAG                               ]
+    ['14'   INVALID_TIMESTAMP                         ]
+    ['138'  INVALID_VALUE_IN_THIS_STATE               ]
+    ['100'  KEY_UPDATE_IN_PROGRESS                    ]
+    ['81'   LIST_ELEMENT_NOT_FOUND                    ]
+    ['75'   LOG_BUFFER_FULL                           ]
+    ['76'   LOGGED_VALUE_PURGED                       ]
+    ['101'  MALFORMED_MESSAGE                         ]
+    ['113'  MESSAGE_TOO_LONG                          ]
+    ['16'   MISSING_REQUIRED_PARAMETER                ]
+    ['58'   NETWORK_DOWN                              ]
+    ['74'   NO_ALARM_CONFIGURED                       ]
+    ['17'   NO_OBJECTS_OF_SPECIFIED_TYPE              ]
+    ['77'   NO_PROPERTY_SPECIFIED                     ]
+    ['18'   NO_SPACE_FOR_OBJECT                       ]
+    ['19'   NO_SPACE_TO_ADD_LIST_ELEMENT              ]
+    ['20'   NO_SPACE_TO_WRITE_PROPERTY                ]
+    ['21'   NO_VT_SESSIONS_AVAILABLE                  ]
+    ['132'  NOT_CONFIGURED                            ]
+    ['78'   NOT_CONFIGURED_FOR_TRIGGERED_LOGGING      ]
+    ['44'   NOT_COV_PROPERTY                          ]
+    ['102'  NOT_KEY_SERVER                            ]
+    ['110'  NOT_ROUTER_TO_DNET                        ]
+    ['23'   OBJECT_DELETION_NOT_PERMITTED             ]
+    ['24'   OBJECT_IDENTIFIER_ALREADY_EXISTS          ]
+    ['25'   OPERATIONAL_PROBLEM                       ]
+    ['45'   OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED      ]
+    ['0'    OTHER                                     ]
+    ['133'  OUT_OF_MEMORY                             ]
+    ['80'   PARAMETER_OUT_OF_RANGE                    ]
+    ['26'   PASSWORD_FAILURE                          ]
+    ['22'   PROPERTY_IS_NOT_A_LIST                    ]
+    ['50'   PROPERTY_IS_NOT_AN_ARRAY                  ]
+    ['27'   READ_ACCESS_DENIED                        ]
+    ['117'  READ_BDT_FAILED                           ]
+    ['119'  READ_FDT_FAILED                           ]
+    ['118'  REGISTER_FOREIGN_DEVICE_FAILED            ]
+    ['59'   REJECT_BUFFER_OVERFLOW                    ]
+    ['60'   REJECT_INCONSISTENT_PARAMETERS            ]
+    ['61'   REJECT_INVALID_PARAMETER_DATA_TYPE        ]
+    ['62'   REJECT_INVALID_TAG                        ]
+    ['63'   REJECT_MISSING_REQUIRED_PARAMETER         ]
+    ['69'   REJECT_OTHER                              ]
+    ['64'   REJECT_PARAMETER_OUT_OF_RANGE             ]
+    ['68'   REJECT_PROPRIETARY                        ]
+    ['65'   REJECT_TOO_MANY_ARGUMENTS                 ]
+    ['66'   REJECT_UNDEFINED_ENUMERATION              ]
+    ['67'   REJECT_UNRECOGNIZED_SERVICE               ]
+    ['111'  ROUTER_BUSY                               ]
+    ['114'  SECURITY_ERROR                            ]
+    ['103'  SECURITY_NOT_CONFIGURED                   ]
+    ['29'   SERVICE_REQUEST_DENIED                    ]
+    ['104'  SOURCE_SECURITY_REQUIRED                  ]
+    ['84'   SUCCESS                                   ]
+    ['30'   TIMEOUT                                   ]
+    ['105'  TOO_MANY_KEYS                             ]
+    ['106'  UNKNOWN_AUTHENTICATION_TYPE               ]
+    ['70'   UNKNOWN_DEVICE                            ]
+    ['122'  UNKNOWN_FILE_SIZE                         ]
+    ['107'  UNKNOWN_KEY                               ]
+    ['108'  UNKNOWN_KEY_REVISION                      ]
+    ['112'  UNKNOWN_NETWORK_MESSAGE                   ]
+    ['31'   UNKNOWN_OBJECT                            ]
+    ['32'   UNKNOWN_PROPERTY                          ]
+    ['71'   UNKNOWN_ROUTE                             ]
+    ['109'  UNKNOWN_SOURCE_MESSAGE                    ]
+    ['79'   UNKNOWN_SUBSCRIPTION                      ]
+    ['34'   UNKNOWN_VT_CLASS                          ]
+    ['35'   UNKNOWN_VT_SESSION                        ]
+    ['36'   UNSUPPORTED_OBJECT_TYPE                   ]
+    ['72'   VALUE_NOT_INITIALIZED                     ]
+    ['37'   VALUE_OUT_OF_RANGE                        ]
+    ['134'  VALUE_TOO_LONG                            ]
+    ['38'   VT_SESSION_ALREADY_CLOSED                 ]
+    ['39'   VT_SESSION_TERMINATION_FAILURE            ]
+    ['40'   WRITE_ACCESS_DENIED                       ]
+    ['116'  WRITE_BDT_FAILED                          ]
+
+      // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE                ]
+]
+
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetAbortReason
+    ['0'  OTHER                             ]
+    ['1'  BUFFER_OVERFLOW                   ]
+    ['2'  INVALID_APDU_IN_THIS_STATE        ]
+    ['3'  PREEMPTED_BY_HIGHER_PRIORITY_TASK ]
+    ['4'  SEGMENTATION_NOT_SUPPORTED        ]
+    ['5'  SECURITY_ERROR                    ]
+    ['6'  INSUFFICIENT_SECURITY             ]
+    ['7'  WINDOW_SIZE_OUT_OF_RANGE          ]
+    ['8'  APPLICATION_EXCEEDED_REPLY_TIME   ]
+    ['9'  OUT_OF_RESOURCES                  ]
+    ['10' TSM_TIMEOUT                       ]
+    ['11' APDU_TOO_LONG                     ]
+
+    // plc4x definition
+    ['0xFF' VENDOR_PROPRIETARY_VALUE         ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetAccessAuthenticationFactorDisable
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetAccessCredentialDisable
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetAccessCredentialDisableReason
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-511 ASHRAE. 512-65535 proprietary
+[enum uint 16 BACnetAccessEvent
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetAccessUserType
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetAccessZoneOccupancyState
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetAuthorizationExemption
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetAuthorizationMode
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetBinaryLightingPV
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetDeviceStatus
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-255 ASHRAE. 256-65535 proprietary
+[enum uint 8 BACnetDoorAlarmState
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetDoorStatus
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-255 ASHRAE. 47808-49999 ASHRAE. 50000-65535 proprietary
+[enum uint 8 BACnetEngineeringUnits
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetEscalatorFault
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetEscalatorMode
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetEscalatorOperationDirection
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetEventState
+    ['0'  NORMAL                                ]
+    ['1'  FAULT                                 ]
+    ['2'  OFFNORMAL                             ]
+    ['3'  HIGH_LIMIT                            ]
+    ['4'  LOW_LIMIT                             ]
+    ['5'  LIFE_SAVETY_ALARM                     ]
+
+    // plc4x definition
+    ['0xFFFF' VENDOR_PROPRIETARY_VALUE          ]
+]
+
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetEventType
+    ['0'  CHANGE_OF_BITSTRING                   ]
+    ['1'  CHANGE_OF_STATE                       ]
+    ['2'  CHANGE_OF_VALUE                       ]
+    ['3'  COMMAND_FAILURE                       ]
+    ['4'  FLOATING_LIMIT                        ]
+    ['5'  OUT_OF_RANGE                          ]
+    ['8'  CHANGE_OF_LIFE_SAFETY                 ]
+    ['9'  EXTENDED                              ]
+    ['10' BUFFER_READY                          ]
+    ['11' UNSIGNED_RANGE                        ]
+    ['13' ACCESS_EVENT                          ]
+    ['14' DOUBLE_OUT_OF_RANGE                   ]
+    ['15' SIGNED_OUT_OF_RANGE                   ]
+    ['16' UNSIGNED_OUT_OF_RANGE                 ]
+    ['17' CHANGE_OF_CHARACTERSTRING             ]
+    ['18' CHANGE_OF_STATUS_FLAGS                ]
+    ['19' CHANGE_OF_RELIABILITY                 ]
+    ['20' NONE                                  ]
+    ['21' CHANGE_OF_DISCRETE_VALUE              ]
+    ['22' CHANGE_OF_TIMER                       ]
+
+    // plc4x definition
+    ['0xFFFF' VENDOR_PROPRIETARY_VALUE          ]
+]
+
+// Attention: 0-255 ASHRAE. 256-65535 proprietary
+[enum uint 16 BACnetLifeSafetyMode
+    ['0'    OFF                                 ]
+    ['1'    ON                                  ]
+    ['2'    TEST                                ]
+    ['3'    MANNED                              ]
+    ['4'    UNMANNED                            ]
+    ['5'    ARMED                               ]
+    ['6'    DISARMED                            ]
+    ['7'    PREARMED                            ]
+    ['8'    SLOW                                ]
+    ['9'    FAST                                ]
+    ['10'   DISCONNECTED                        ]
+    ['11'   ENABLED                             ]
+    ['12'   DISABLED                            ]
+    ['13'   AUTOMATIC_RELEASE_DISABLED          ]
+    ['14'   DEFAULT                             ]
+
+      // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE          ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetLifeSafetyOperation
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-255 ASHRAE. 256-65535 proprietary
+[enum uint 16 BACnetLifeSafetyState
+    ['0'    QUIET                             ]
+    ['1'    PRE_ALARM                         ]
+    ['2'    ALARM                             ]
+    ['3'    FAULT                             ]
+    ['4'    FAULT_PRE_ALARM                   ]
+    ['5'    FAULT_ALARM                       ]
+    ['6'    NOT_READY                         ]
+    ['7'    ACTIVE                            ]
+    ['8'    TAMPER                            ]
+    ['9'    TEST_ALARM                        ]
+    ['10'   TEST_ACTIVE                       ]
+    ['11'   TEST_FAULT                        ]
+    ['12'   TEST_FAULT_ALARM                  ]
+    ['13'   HOLDUP                            ]
+    ['14'   DURESS                            ]
+    ['15'   TAMPER_ALARM                      ]
+    ['16'   ABNORMAL                          ]
+    ['17'   EMERGENCY_POWER                   ]
+    ['18'   DELAYED                           ]
+    ['19'   BLOCKED                           ]
+    ['20'   LOCAL_ALARM                       ]
+    ['21'   GENERAL_ALARM                     ]
+    ['22'   SUPERVISORY                       ]
+    ['23'   TEST_SUPERVISORY                  ]
+
+      // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE        ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetLiftCarDirection
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetLiftCarDriveStatus
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetLiftCarMode
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetLiftFault
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-255 ASHRAE. 256-65535 proprietary
+[enum uint 16 BACnetLightingOperation
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetLightingTransition
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetLoggingType
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetMaintenance
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetNetworkPortCommand
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetNetworkType
+    ['0x0' ETHERNET                             ]
+    ['0x1' ARCNET                               ]
+    ['0x2' MSTP                                 ]
+    ['0x3' PTP                                  ]
+    ['0x4' LONTALK                              ]
+    ['0x5' IPV4                                 ]
+    ['0x6' ZIGBEE                               ]
+    ['0x7' VIRTUAL                              ]
+    ['0x8' REMOVED_NON_BACNET                   ]
+    ['0x9' IPV6                                 ]
+    ['0xA' SERIAL                               ]
+
+      // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-127 ASHRAE. 128-1023 proprietary
+[enum uint 10 BACnetObjectType
+    ['32' ACCESS_CREDENTIAL                     ]
+    ['30' ACCESS_DOOR                           ]
+    ['33' ACCESS_POINT                          ]
+    ['34' ACCESS_RIGHTS                         ]
+    ['35' ACCESS_USER                           ]
+    ['36' ACCESS_ZONE                           ]
+    ['23' ACCUMULATOR                           ]
+    ['52' ALERT_ENROLLMENT                      ]
+    ['0'  ANALOG_INPUT                          ]
+    ['1'  ANALOG_OUTPUT                         ]
+    ['2'  ANALOG_VALUE                          ]
+    ['18' AVERAGING                             ]
+    ['3'  BINARY_INPUT                          ]
+    ['55' BINARY_LIGHTING_OUTPUT                ]
+    ['4'  BINARY_OUTPUT                         ]
+    ['5'  BINARY_VALUE                          ]
+    ['39' BITSTRING_VALUE                       ]
+    ['6'  CALENDAR                              ]
+    ['53' CHANNEL                               ]
+    ['40' CHARACTERSTRING_VALUE                 ]
+    ['7'  COMMAND                               ]
+    ['37' CREDENTIAL_DATA_INPUT                 ]
+    ['41' DATEPATTERN_VALUE                     ]
+    ['42' DATE_VALUE                            ]
+    ['43' DATETIMEPATTERN_VALUE                 ]
+    ['44' DATETIME_VALUE                        ]
+    ['8'  DEVICE                                ]
+    ['57' ELEVATOR_GROUP                        ]
+    ['58' ESCALATOR                             ]
+    ['9'  EVENT_ENROLLMENT                      ]
+    ['25' EVENT_LOG                             ]
+    ['10' FILE                                  ]
+    ['26' GLOBAL_GROUP                          ]
+    ['11' GROUP                                 ]
+    ['45' INTEGER_VALUE                         ]
+    ['46' LARGE_ANALOG_VALUE                    ]
+    ['21' LIFE_SAFETY_POINT                     ]
+    ['22' LIFE_SAFETY_ZONE                      ]
+    ['59' LIFT                                  ]
+    ['54' LIGHTING_OUTPUT                       ]
+    ['28' LOAD_CONTROL                          ]
+    ['12' LOOP                                  ]
+    ['13' MULTI_STATE_INPUT                     ]
+    ['14' MULTI_STATE_OUTPUT                    ]
+    ['19' MULTI_STATE_VALUE                     ]
+    ['56' NETWORK_PORT                          ]
+    ['38' NETWORK_SECURITY                      ]
+    ['15' NOTIFICATION_CLASS                    ]
+    ['51' NOTIFICATION_FORWARDER                ]
+    ['47' OCTETSTRING_VALUE                     ]
+    ['48' POSITIVE_INTEGER_VALUE                ]
+    ['16' PROGRAM                               ]
+    ['24' PULSE_CONVERTER                       ]
+    ['17' SCHEDULE                              ]
+    ['29' STRUCTURED_VIEW                       ]
+    ['49' TIMEPATTERN_VALUE                     ]
+    ['50' TIME_VALUE                            ]
+    ['31' TIMER                                 ]
+    ['20' TREND_LOG                             ]
+    ['27' TREND_LOG_MULTIPLE                    ]
+
+    // plc4x Value
+    ['0x3FF' VENDOR_PROPRIETARY_VALUE           ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetProgramError
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-511 ASHRAE. 512-4194303 proprietary
+[enum uint 32 BACnetPropertyIdentifier
+    ['244' ABSENTEE_LIMIT                       ]
+    ['175' ACCEPTED_MODES                       ]
+    ['245' ACCESS_ALARM_EVENTS                  ]
+    ['246' ACCESS_DOORS                         ]
+    ['247' ACCESS_EVENT                         ]
+    ['248' ACCESS_EVENT_AUTHENTICATION_FACTOR   ]
+    ['249' ACCESS_EVENT_CREDENTIAL              ]
+    ['322' ACCESS_EVENT_TAG                     ]
+    ['250' ACCESS_EVENT_TIME                    ]
+    ['251' ACCESS_TRANSACTION_EVENTS            ]
+    ['252' ACCOMPANIMENT                        ]
+    ['253' ACCOMPANIMENT_TIME                   ]
+    ['1'   ACK_REQUIRED                         ]
+    ['0'   ACKED_TRANSITIONS                    ]
+    ['2'   ACTION                               ]
+    ['3'   ACTION_TEXT                          ]
+    ['254' ACTIVATION_TIME                      ]
+    ['255' ACTIVE_AUTHENTICATION_POLICY         ]
+    ['481' ACTIVE_COV_MULTIPLE_SUBSCRIPTIONS    ]
+    ['152' ACTIVE_COV_SUBSCRIPTIONS             ]
+    ['4'   ACTIVE_TEXT                          ]
+    ['5'   ACTIVE_VT_SESSIONS                   ]
+    ['212' ACTUAL_SHED_LEVEL                    ]
+    ['176' ADJUST_VALUE                         ]
+    ['6'   ALARM_VALUE                          ]
+    ['7'   ALARM_VALUES                         ]
+    ['193' ALIGN_INTERVALS                      ]
+    ['8'   ALL                                  ]
+    ['9'   ALL_WRITES_SUCCESSFUL                ]
+    ['365' ALLOW_GROUP_DELAY_INHIBIT            ]
+    ['399' APDU_LENGTH                          ]
+    ['10'  APDU_SEGMENT_TIMEOUT                 ]
+    ['11'  APDU_TIMEOUT                         ]
+    ['12'  APPLICATION_SOFTWARE_VERSION         ]
+    ['13'  ARCHIVE                              ]
+    ['256' ASSIGNED_ACCESS_RIGHTS               ]
+    ['447' ASSIGNED_LANDING_CALLS               ]
+    ['124' ATTEMPTED_SAMPLES                    ]
+    ['257' AUTHENTICATION_FACTORS               ]
+    ['258' AUTHENTICATION_POLICY_LIST           ]
+    ['259' AUTHENTICATION_POLICY_NAMES          ]
+    ['260' AUTHENTICATION_STATUS                ]
+    ['364' AUTHORIZATION_EXEMPTIONS             ]
+    ['261' AUTHORIZATION_MODE                   ]
+    ['169' AUTO_SLAVE_DISCOVERY                 ]
+    ['125' AVERAGE_VALUE                        ]
+    ['338' BACKUP_AND_RESTORE_STATE             ]
+    ['153' BACKUP_FAILURE_TIMEOUT               ]
+    ['339' BACKUP_PREPARATION_TIME              ]
+    ['407' BACNET_IP_GLOBAL_ADDRESS             ]
+    ['408' BACNET_IP_MODE                       ]
+    ['409' BACNET_IP_MULTICAST_ADDRESS          ]
+    ['410' BACNET_IP_NAT_TRAVERSAL              ]
+    ['412' BACNET_IP_UDP_PORT                   ]
+    ['435' BACNET_IPV6_MODE                     ]
+    ['438' BACNET_IPV6_UDP_PORT                 ]
+    ['440' BACNET_IPV6_MULTICAST_ADDRESS        ]
+    ['327' BASE_DEVICE_SECURITY_POLICY          ]
+    ['413' BBMD_ACCEPT_FD_REGISTRATIONS         ]
+    ['414' BBMD_BROADCAST_DISTRIBUTION_TABLE    ]
+    ['415' BBMD_FOREIGN_DEVICE_TABLE            ]
+    ['262' BELONGS_TO                           ]
+    ['14'  BIAS                                 ]
+    ['342' BIT_MASK                             ]
+    ['343' BIT_TEXT                             ]
+    ['373' BLINK_WARN_ENABLE                    ]
+    ['126' BUFFER_SIZE                          ]
+    ['448' CAR_ASSIGNED_DIRECTION               ]
+    ['449' CAR_DOOR_COMMAND                     ]
+    ['450' CAR_DOOR_STATUS                      ]
+    ['451' CAR_DOOR_TEXT                        ]
+    ['452' CAR_DOOR_ZONE                        ]
+    ['453' CAR_DRIVE_STATUS                     ]
+    ['454' CAR_LOAD                             ]
+    ['455' CAR_LOAD_UNITS                       ]
+    ['456' CAR_MODE                             ]
+    ['457' CAR_MOVING_DIRECTION                 ]
+    ['458' CAR_POSITION                         ]
+    ['15'  CHANGE_OF_STATE_COUNT                ]
+    ['16'  CHANGE_OF_STATE_TIME                 ]
+    ['416' CHANGES_PENDING                      ]
+    ['366' CHANNEL_NUMBER                       ]
+    ['127' CLIENT_COV_INCREMENT                 ]
+    ['417' COMMAND                              ]
+    ['430' COMMAND_TIME_ARRAY                   ]
+    ['154' CONFIGURATION_FILES                  ]
+    ['367' CONTROL_GROUPS                       ]
+    ['19'  CONTROLLED_VARIABLE_REFERENCE        ]
+    ['20'  CONTROLLED_VARIABLE_UNITS            ]
+    ['21'  CONTROLLED_VARIABLE_VALUE            ]
+    ['177' COUNT                                ]
+    ['178' COUNT_BEFORE_CHANGE                  ]
+    ['179' COUNT_CHANGE_TIME                    ]
+    ['22'  COV_INCREMENT                        ]
+    ['180' COV_PERIOD                           ]
+    ['128' COV_RESUBSCRIPTION_INTERVAL          ]
+    ['349' COVU_PERIOD                          ]
+    ['350' COVU_RECIPIENTS                      ]
+    ['263' CREDENTIAL_DISABLE                   ]
+    ['264' CREDENTIAL_STATUS                    ]
+    ['265' CREDENTIALS                          ]
+    ['266' CREDENTIALS_IN_ZONE                  ]
+    ['431' CURRENT_COMMAND_PRIORITY             ]
+    ['155' DATABASE_REVISION                    ]
+    ['23'  DATE_LIST                            ]
+    ['24'  DAYLIGHT_SAVINGS_STATUS              ]
+    ['267' DAYS_REMAINING                       ]
+    ['25'  DEADBAND                             ]
+    ['374' DEFAULT_FADE_TIME                    ]
+    ['375' DEFAULT_RAMP_RATE                    ]
+    ['376' DEFAULT_STEP_INCREMENT               ]
+    ['490' DEFAULT_SUBORDINATE_RELATIONSHIP     ]
+    ['393' DEFAULT_TIMEOUT                      ]
+    ['484' DEPLOYED_PROFILE_LOCATION            ]
+    ['26'  DERIVATIVE_CONSTANT                  ]
+    ['27'  DERIVATIVE_CONSTANT_UNITS            ]
+    ['28'  DESCRIPTION                          ]
+    ['29'  DESCRIPTION_OF_HALT                  ]
+    ['30'  DEVICE_ADDRESS_BINDING               ]
+    ['31'  DEVICE_TYPE                          ]
+    ['156' DIRECT_READING                       ]
+    ['328' DISTRIBUTION_KEY_REVISION            ]
+    ['329' DO_NOT_HIDE                          ]
+    ['226' DOOR_ALARM_STATE                     ]
+    ['227' DOOR_EXTENDED_PULSE_TIME             ]
+    ['228' DOOR_MEMBERS                         ]
+    ['229' DOOR_OPEN_TOO_LONG_TIME              ]
+    ['230' DOOR_PULSE_TIME                      ]
+    ['231' DOOR_STATUS                          ]
+    ['232' DOOR_UNLOCK_DELAY_TIME               ]
+    ['213' DUTY_WINDOW                          ]
+    ['32'  EFFECTIVE_PERIOD                     ]
+    ['386' EGRESS_ACTIVE                        ]
+    ['377' EGRESS_TIME                          ]
+    ['33'  ELAPSED_ACTIVE_TIME                  ]
+    ['459' ELEVATOR_GROUP                       ]
+    ['133' ENABLE                               ]
+    ['460' ENERGY_METER                         ]
+    ['461' ENERGY_METER_REF                     ]
+    ['268' ENTRY_POINTS                         ]
+    ['34'  ERROR_LIMIT                          ]
+    ['462' ESCALATOR_MODE                       ]
+    ['354' EVENT_ALGORITHM_INHIBIT              ]
+    ['355' EVENT_ALGORITHM_INHIBIT_REF          ]
+    ['353' EVENT_DETECTION_ENABLE               ]
+    ['35'  EVENT_ENABLE                         ]
+    ['351' EVENT_MESSAGE_TEXTS                  ]
+    ['352' EVENT_MESSAGE_TEXTS_CONFIG           ]
+    ['83'  EVENT_PARAMETERS                     ]
+    ['36'  EVENT_STATE                          ]
+    ['130' EVENT_TIME_STAMPS                    ]
+    ['37'  EVENT_TYPE                           ]
+    ['38'  EXCEPTION_SCHEDULE                   ]
+    ['368' EXECUTION_DELAY                      ]
+    ['269' EXIT_POINTS                          ]
+    ['214' EXPECTED_SHED_LEVEL                  ]
+    ['270' EXPIRATION_TIME                      ]
+    ['271' EXTENDED_TIME_ENABLE                 ]
+    ['272' FAILED_ATTEMPT_EVENTS                ]
+    ['273' FAILED_ATTEMPTS                      ]
+    ['274' FAILED_ATTEMPTS_TIME                 ]
+    ['388' FAULT_HIGH_LIMIT                     ]
+    ['389' FAULT_LOW_LIMIT                      ]
+    ['358' FAULT_PARAMETERS                     ]
+    ['463' FAULT_SIGNALS                        ]
+    ['359' FAULT_TYPE                           ]
+    ['39'  FAULT_VALUES                         ]
+    ['418' FD_BBMD_ADDRESS                      ]
+    ['419' FD_SUBSCRIPTION_LIFETIME             ]
+    ['40'  FEEDBACK_VALUE                       ]
+    ['41'  FILE_ACCESS_METHOD                   ]
+    ['42'  FILE_SIZE                            ]
+    ['43'  FILE_TYPE                            ]
+    ['44'  FIRMWARE_REVISION                    ]
+    ['464' FLOOR_TEXT                           ]
+    ['215' FULL_DUTY_BASELINE                   ]
+    ['323' GLOBAL_IDENTIFIER                    ]
+    ['465' GROUP_ID                             ]
+    ['346' GROUP_MEMBER_NAMES                   ]
+    ['345' GROUP_MEMBERS                        ]
+    ['467' GROUP_MODE                           ]
+    ['45'  HIGH_LIMIT                           ]
+    ['468' HIGHER_DECK                          ]
+    ['47'  IN_PROCESS                           ]
+    ['378' IN_PROGRESS                          ]
+    ['46'  INACTIVE_TEXT                        ]
+    ['394' INITIAL_TIMEOUT                      ]
+    ['181' INPUT_REFERENCE                      ]
+    ['469' INSTALLATION_ID                      ]
+    ['48'  INSTANCE_OF                          ]
+    ['379' INSTANTANEOUS_POWER                  ]
+    ['49'  INTEGRAL_CONSTANT                    ]
+    ['50'  INTEGRAL_CONSTANT_UNITS              ]
+    ['387' INTERFACE_VALUE                      ]
+    ['195' INTERVAL_OFFSET                      ]
+    ['400' IP_ADDRESS                           ]
+    ['401' IP_DEFAULT_GATEWAY                   ]
+    ['402' IP_DHCP_ENABLE                       ]
+    ['403' IP_DHCP_LEASE_TIME                   ]
+    ['404' IP_DHCP_LEASE_TIME_REMAINING         ]
+    ['405' IP_DHCP_SERVER                       ]
+    ['406' IP_DNS_SERVER                        ]
+    ['411' IP_SUBNET_MASK                       ]
+    ['436' IPV6_ADDRESS                         ]
+    ['442' IPV6_AUTO_ADDRESSING_ENABLE          ]
+    ['439' IPV6_DEFAULT_GATEWAY                 ]
+    ['443' IPV6_DHCP_LEASE_TIME                 ]
+    ['444' IPV6_DHCP_LEASE_TIME_REMAINING       ]
+    ['445' IPV6_DHCP_SERVER                     ]
+    ['441' IPV6_DNS_SERVER                      ]
+    ['437' IPV6_PREFIX_LENGTH                   ]
+    ['446' IPV6_ZONE_INDEX                      ]
+    ['344' IS_UTC                               ]
+    ['330' KEY_SETS                             ]
+    ['471' LANDING_CALL_CONTROL                 ]
+    ['470' LANDING_CALLS                        ]
+    ['472' LANDING_DOOR_STATUS                  ]
+    ['275' LAST_ACCESS_EVENT                    ]
+    ['276' LAST_ACCESS_POINT                    ]
+    ['432' LAST_COMMAND_TIME                    ]
+    ['277' LAST_CREDENTIAL_ADDED                ]
+    ['278' LAST_CREDENTIAL_ADDED_TIME           ]
+    ['279' LAST_CREDENTIAL_REMOVED              ]
+    ['280' LAST_CREDENTIAL_REMOVED_TIME         ]
+    ['331' LAST_KEY_SERVER                      ]
+    ['173' LAST_NOTIFY_RECORD                   ]
+    ['369' LAST_PRIORITY                        ]
+    ['196' LAST_RESTART_REASON                  ]
+    ['157' LAST_RESTORE_TIME                    ]
+    ['395' LAST_STATE_CHANGE                    ]
+    ['281' LAST_USE_TIME                        ]
+    ['166' LIFE_SAFETY_ALARM_VALUES             ]
+    ['380' LIGHTING_COMMAND                     ]
+    ['381' LIGHTING_COMMAND_DEFAULT_PRIORITY    ]
+    ['52'  LIMIT_ENABLE                         ]
+    ['182' LIMIT_MONITORING_INTERVAL            ]
+    ['420' LINK_SPEED                           ]
+    ['422' LINK_SPEED_AUTONEGOTIATE             ]
+    ['421' LINK_SPEEDS                          ]
+    ['53'  LIST_OF_GROUP_MEMBERS                ]
+    ['54'  LIST_OF_OBJECT_PROPERTY_REFERENCES   ]
+    ['56'  LOCAL_DATE                           ]
+    ['360' LOCAL_FORWARDING_ONLY                ]
+    ['57'  LOCAL_TIME                           ]
+    ['58'  LOCATION                             ]
+    ['233' LOCK_STATUS                          ]
+    ['282' LOCKOUT                              ]
+    ['283' LOCKOUT_RELINQUISH_TIME              ]
+    ['131' LOG_BUFFER                           ]
+    ['132' LOG_DEVICE_OBJECT_PROPERTY           ]
+    ['134' LOG_INTERVAL                         ]
+    ['183' LOGGING_OBJECT                       ]
+    ['184' LOGGING_RECORD                       ]
+    ['197' LOGGING_TYPE                         ]
+    ['390' LOW_DIFF_LIMIT                       ]
+    ['59'  LOW_LIMIT                            ]
+    ['473' LOWER_DECK                           ]
+    ['423' MAC_ADDRESS                          ]
+    ['474' MACHINE_ROOM_ID                      ]
+    ['158' MAINTENANCE_REQUIRED                 ]
+    ['475' MAKING_CAR_CALL                      ]
+    ['60'  MANIPULATED_VARIABLE_REFERENCE       ]
+    ['170' MANUAL_SLAVE_ADDRESS_BINDING         ]
+    ['234' MASKED_ALARM_VALUES                  ]
+    ['382' MAX_ACTUAL_VALUE                     ]
+    ['62'  MAX_APDU_LENGTH_ACCEPTED             ]
+    ['285' MAX_FAILED_ATTEMPTS                  ]
+    ['63'  MAX_INFO_FRAMES                      ]
+    ['64'  MAX_MASTER                           ]
+    ['65'  MAX_PRES_VALUE                       ]
+    ['167' MAX_SEGMENTS_ACCEPTED                ]
+    ['61'  MAXIMUM_OUTPUT                       ]
+    ['135' MAXIMUM_VALUE                        ]
+    ['149' MAXIMUM_VALUE_TIMESTAMP              ]
+    ['159' MEMBER_OF                            ]
+    ['347' MEMBER_STATUS_FLAGS                  ]
+    ['286' MEMBERS                              ]
+    ['383' MIN_ACTUAL_VALUE                     ]
+    ['69'  MIN_PRES_VALUE                       ]
+    ['66'  MINIMUM_OFF_TIME                     ]
+    ['67'  MINIMUM_ON_TIME                      ]
+    ['68'  MINIMUM_OUTPUT                       ]
+    ['136' MINIMUM_VALUE                        ]
+    ['150' MINIMUM_VALUE_TIMESTAMP              ]
+    ['160' MODE                                 ]
+    ['70'  MODEL_NAME                           ]
+    ['71'  MODIFICATION_DATE                    ]
+    ['287' MUSTER_POINT                         ]
+    ['288' NEGATIVE_ACCESS_RULES                ]
+    ['332' NETWORK_ACCESS_SECURITY_POLICIES     ]
+    ['424' NETWORK_INTERFACE_NAME               ]
+    ['425' NETWORK_NUMBER                       ]
+    ['426' NETWORK_NUMBER_QUALITY               ]
+    ['427' NETWORK_TYPE                         ]
+    ['476' NEXT_STOPPING_FLOOR                  ]
+    ['207' NODE_SUBTYPE                         ]
+    ['208' NODE_TYPE                            ]
+    ['17'  NOTIFICATION_CLASS                   ]
+    ['137' NOTIFICATION_THRESHOLD               ]
+    ['72'  NOTIFY_TYPE                          ]
+    ['73'  NUMBER_OF_APDU_RETRIES               ]
+    ['289' NUMBER_OF_AUTHENTICATION_POLICIES    ]
+    ['74'  NUMBER_OF_STATES                     ]
+    ['75'  OBJECT_IDENTIFIER                    ]
+    ['76'  OBJECT_LIST                          ]
+    ['77'  OBJECT_NAME                          ]
+    ['78'  OBJECT_PROPERTY_REFERENCE            ]
+    ['79'  OBJECT_TYPE                          ]
+    ['290' OCCUPANCY_COUNT                      ]
+    ['291' OCCUPANCY_COUNT_ADJUST               ]
+    ['292' OCCUPANCY_COUNT_ENABLE               ]
+    ['294' OCCUPANCY_LOWER_LIMIT                ]
+    ['295' OCCUPANCY_LOWER_LIMIT_ENFORCED       ]
+    ['296' OCCUPANCY_STATE                      ]
+    ['297' OCCUPANCY_UPPER_LIMIT                ]
+    ['298' OCCUPANCY_UPPER_LIMIT_ENFORCED       ]
+    ['477' OPERATION_DIRECTION                  ]
+    ['161' OPERATION_EXPECTED                   ]
+    ['80'  OPTIONAL                             ]
+    ['81'  OUT_OF_SERVICE                       ]
+    ['82'  OUTPUT_UNITS                         ]
+    ['333' PACKET_REORDER_TIME                  ]
+    ['300' PASSBACK_MODE                        ]
+    ['301' PASSBACK_TIMEOUT                     ]
+    ['478' PASSENGER_ALARM                      ]
+    ['84'  POLARITY                             ]
+    ['363' PORT_FILTER                          ]
+    ['302' POSITIVE_ACCESS_RULES                ]
+    ['384' POWER                                ]
+    ['479' POWER_MODE                           ]
+    ['185' PRESCALE                             ]
+    ['85'  PRESENT_VALUE                        ]
+    ['86'  PRIORITY                             ]
+    ['87'  PRIORITY_ARRAY                       ]
+    ['88'  PRIORITY_FOR_WRITING                 ]
+    ['89'  PROCESS_IDENTIFIER                   ]
+    ['361' PROCESS_IDENTIFIER_FILTER            ]
+    ['485' PROFILE_LOCATION                     ]
+    ['168' PROFILE_NAME                         ]
+    ['90'  PROGRAM_CHANGE                       ]
+    ['91'  PROGRAM_LOCATION                     ]
+    ['92'  PROGRAM_STATE                        ]
+    ['371' PROPERTY_LIST                        ]
+    ['93'  PROPORTIONAL_CONSTANT                ]
+    ['94'  PROPORTIONAL_CONSTANT_UNITS          ]
+    ['482' PROTOCOL_LEVEL                       ]
+    ['95'  PROTOCOL_CONFORMANCE_CLASS           ]
+    ['96'  PROTOCOL_OBJECT_TYPES_SUPPORTED      ]
+    ['139' PROTOCOL_REVISION                    ]
+    ['97'  PROTOCOL_SERVICES_SUPPORTED          ]
+    ['98'  PROTOCOL_VERSION                     ]
+    ['186' PULSE_RATE                           ]
+    ['99'  READ_ONLY                            ]
+    ['303' REASON_FOR_DISABLE                   ]
+    ['100' REASON_FOR_HALT                      ]
+    ['102' RECIPIENT_LIST                       ]
+    ['141' RECORD_COUNT                         ]
+    ['140' RECORDS_SINCE_NOTIFICATION           ]
+    ['483' REFERENCE_PORT                       ]
+    ['480' REGISTERED_CAR_CALL                  ]
+    ['103' RELIABILITY                          ]
+    ['357' RELIABILITY_EVALUATION_INHIBIT       ]
+    ['104' RELINQUISH_DEFAULT                   ]
+    ['491' REPRESENTS                           ]
+    ['218' REQUESTED_SHED_LEVEL                 ]
+    ['348' REQUESTED_UPDATE_INTERVAL            ]
+    ['105' REQUIRED                             ]
+    ['106' RESOLUTION                           ]
+    ['202' RESTART_NOTIFICATION_RECIPIENTS      ]
+    ['340' RESTORE_COMPLETION_TIME              ]
+    ['341' RESTORE_PREPARATION_TIME             ]
+    ['428' ROUTING_TABLE                        ]
+    ['187' SCALE                                ]
+    ['188' SCALE_FACTOR                         ]
+    ['174' SCHEDULE_DEFAULT                     ]
+    ['235' SECURED_STATUS                       ]
+    ['334' SECURITY_PDU_TIMEOUT                 ]
+    ['335' SECURITY_TIME_WINDOW                 ]
+    ['107' SEGMENTATION_SUPPORTED               ]
+    ['372' SERIAL_NUMBER                        ]
+    ['108' SETPOINT                             ]
+    ['109' SETPOINT_REFERENCE                   ]
+    ['162' SETTING                              ]
+    ['219' SHED_DURATION                        ]
+    ['220' SHED_LEVEL_DESCRIPTIONS              ]
+    ['221' SHED_LEVELS                          ]
+    ['163' SILENCED                             ]
+    ['171' SLAVE_ADDRESS_BINDING                ]
+    ['172' SLAVE_PROXY_ENABLE                   ]
+    ['142' START_TIME                           ]
+    ['396' STATE_CHANGE_VALUES                  ]
+    ['222' STATE_DESCRIPTION                    ]
+    ['110' STATE_TEXT                           ]
+    ['111' STATUS_FLAGS                         ]
+    ['143' STOP_TIME                            ]
+    ['144' STOP_WHEN_FULL                       ]
+    ['391' STRIKE_COUNT                         ]
+    ['209' STRUCTURED_OBJECT_LIST               ]
+    ['210' SUBORDINATE_ANNOTATIONS              ]
+    ['211' SUBORDINATE_LIST                     ]
+    ['487' SUBORDINATE_NODE_TYPES               ]
+    ['489' SUBORDINATE_RELATIONSHIPS            ]
+    ['488' SUBORDINATE_TAGS                     ]
+    ['362' SUBSCRIBED_RECIPIENTS                ]
+    ['305' SUPPORTED_FORMAT_CLASSES             ]
+    ['304' SUPPORTED_FORMATS                    ]
+    ['336' SUPPORTED_SECURITY_ALGORITHMS        ]
+    ['112' SYSTEM_STATUS                        ]
+    ['486' TAGS                                 ]
+    ['306' THREAT_AUTHORITY                     ]
+    ['307' THREAT_LEVEL                         ]
+    ['113' TIME_DELAY                           ]
+    ['356' TIME_DELAY_NORMAL                    ]
+    ['114' TIME_OF_ACTIVE_TIME_RESET            ]
+    ['203' TIME_OF_DEVICE_RESTART               ]
+    ['115' TIME_OF_STATE_COUNT_RESET            ]
+    ['392' TIME_OF_STRIKE_COUNT_RESET           ]
+    ['204' TIME_SYNCHRONIZATION_INTERVAL        ]
+    ['116' TIME_SYNCHRONIZATION_RECIPIENTS      ]
+    ['397' TIMER_RUNNING                        ]
+    ['398' TIMER_STATE                          ]
+    ['145' TOTAL_RECORD_COUNT                   ]
+    ['308' TRACE_FLAG                           ]
+    ['164' TRACKING_VALUE                       ]
+    ['309' TRANSACTION_NOTIFICATION_CLASS       ]
+    ['385' TRANSITION                           ]
+    ['205' TRIGGER                              ]
+    ['117' UNITS                                ]
+    ['118' UPDATE_INTERVAL                      ]
+    ['337' UPDATE_KEY_SET_TIMEOUT               ]
+    ['189' UPDATE_TIME                          ]
+    ['310' USER_EXTERNAL_IDENTIFIER             ]
+    ['311' USER_INFORMATION_REFERENCE           ]
+    ['317' USER_NAME                            ]
+    ['318' USER_TYPE                            ]
+    ['319' USES_REMAINING                       ]
+    ['119' UTC_OFFSET                           ]
+    ['206' UTC_TIME_SYNCHRONIZATION_RECIPIENTS  ]
+    ['146' VALID_SAMPLES                        ]
+    ['190' VALUE_BEFORE_CHANGE                  ]
+    ['192' VALUE_CHANGE_TIME                    ]
+    ['191' VALUE_SET                            ]
+    ['433' VALUE_SOURCE                         ]
+    ['434' VALUE_SOURCE_ARRAY                   ]
+    ['151' VARIANCE_VALUE                       ]
+    ['120' VENDOR_IDENTIFIER                    ]
+    ['121' VENDOR_NAME                          ]
+    ['326' VERIFICATION_TIME                    ]
+    ['429' VIRTUAL_MAC_ADDRESS_TABLE            ]
+    ['122' VT_CLASSES_SUPPORTED                 ]
+    ['123' WEEKLY_SCHEDULE                      ]
+    ['147' WINDOW_INTERVAL                      ]
+    ['148' WINDOW_SAMPLES                       ]
+    ['370' WRITE_STATUS                         ]
+    ['320' ZONE_FROM                            ]
+    ['165' ZONE_MEMBERS                         ]
+    ['321' ZONE_TO                              ]
+
+    // plc4x definition
+    ['9999' VENDOR_PROPRIETARY_VALUE            ]
+]
+
+/* FIXME: this is defined in Table 23-1 as enum but indeed it is a complex object. So name collision from ASHRAE
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-254 proprietary
+[enum uint 8 BACnetPropertyStates
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+*/
+
+// Attention: 0-63 ASHRAE. 64-255 proprietary
+[enum uint 8 BACnetRejectReason
+    ['0x0' OTHER                        ]
+    ['0x1' BUFFER_OVERFLOW              ]
+    ['0x2' INCONSISTENT_PARAMETERS      ]
+    ['0x3' INVALID_PARAMETER_DATA_TYPE  ]
+    ['0x4' INVALID_TAG                  ]
+    ['0x5' MISSING_REQUIRED_PARAMETER   ]
+    ['0x6' PARAMETER_OUT_OF_RANGE       ]
+    ['0x7' TOO_MANY_ARGUMENTS           ]
+    ['0x8' UNDEFINED_ENUMERATION        ]
+    ['0x9' UNRECOGNIZED_SERVICE         ]
+
+    // plc4x definition
+    ['0xFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-1023 ASHRAE. 1024-65535 proprietary
+[enum uint 16 BACnetRelationship
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetReliability
+    ['0'    NO_FAULT_DETECTED                 ]
+    ['1'    NO_SENSOR                         ]
+    ['2'    OVER_RANGE                        ]
+    ['3'    UNDER_RANGE                       ]
+    ['4'    OPEN_LOOP                         ]
+    ['5'    SHORTED_LOOP                      ]
+    ['6'    NO_OUTPUT                         ]
+    ['7'    UNRELIABLE_OTHER                  ]
+    ['8'    PROCESS_ERROR                     ]
+    ['9'    MULTI_STATE_FAULT                 ]
+    ['10'   CONFIGURATION_ERROR               ]
+    ['12'   COMMUNICATION_FAILURE             ]
+    ['13'   MEMBER_FAULT                      ]
+    ['14'   MONITORED_OBJECT_FAULT            ]
+    ['15'   TRIPPED                           ]
+    ['16'   LAMP_FAILURE                      ]
+    ['17'   ACTIVATION_FAILURE                ]
+    ['18'   RENEW_DHCP_FAILURE                ]
+    ['19'   RENEW_FD_REGISTRATION_FAILURE     ]
+    ['20'   RESTART_AUTO_NEGOTIATION_FAILURE  ]
+    ['21'   RESTART_FAILURE                   ]
+    ['22'   PROPRIETARY_COMMAND_FAILURE       ]
+    ['23'   FAULTS_LISTED                     ]
+    ['24'   REFERENCED_OBJECT_FAULT           ]
+
+      // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE        ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 8 BACnetRestartReason
+
+
+    // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetSilencedState
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
+
+// TODO: define me
+// Attention: 0-63 ASHRAE. 64-65535 proprietary
+[enum uint 16 BACnetVTClass
+
+
+    // plc4x definition
+    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+]
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index ccb2e03e29..f044abde2b 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -276,14 +276,14 @@
         ['0x6' APDUReject
             [reserved uint 4    '0x00'                                  ]
             [simple   uint 8    originalInvokeId                        ]
-            [simple   RejectReasonTagged('1')
+            [simple   BACnetRejectReasonTagged('1')
                                 rejectReason                            ]
         ]
         ['0x7' APDUAbort
             [reserved uint 3    '0x00'                                  ]
             [simple   bit       server                                  ]
             [simple   uint 8    originalInvokeId                        ]
-            [simple   AbortReasonTagged('1')
+            [simple   BACnetAbortReasonTagged('1')
                                 abortReason                             ]
         ]
         [APDUUnknown
@@ -292,32 +292,15 @@
     ]
 ]
 
-// Attention: 0-63 ASHRAE. 64-255 proprietary
-[enum uint 8 RejectReason
-    ['0x0' OTHER                        ]
-    ['0x1' BUFFER_OVERFLOW              ]
-    ['0x2' INCONSISTENT_PARAMETERS      ]
-    ['0x3' INVALID_PARAMETER_DATA_TYPE  ]
-    ['0x4' INVALID_TAG                  ]
-    ['0x5' MISSING_REQUIRED_PARAMETER   ]
-    ['0x6' PARAMETER_OUT_OF_RANGE       ]
-    ['0x7' TOO_MANY_ARGUMENTS           ]
-    ['0x8' UNDEFINED_ENUMERATION        ]
-    ['0x9' UNRECOGNIZED_SERVICE         ]
-
-    // plc4x definition
-    ['0xFF' VENDOR_PROPRIETARY_VALUE    ]
-]
-
 // Not really tagged as it has no header but is consistent with naming schema enum+Tagged
-[type RejectReasonTagged(uint 32 actualLength)
-    [manual   RejectReason
+[type BACnetRejectReasonTagged(uint 32 actualLength)
+    [manual   BACnetRejectReason
                     value
-                        'STATIC_CALL("readEnumGeneric", readBuffer, actualLength, RejectReason.VENDOR_PROPRIETARY_VALUE)'
+                        'STATIC_CALL("readEnumGeneric", readBuffer, actualLength, BACnetRejectReason.VENDOR_PROPRIETARY_VALUE)'
                         'STATIC_CALL("writeEnumGeneric", writeBuffer, value)'
                         'actualLength * 8'                                  ]
     [virtual  bit   isProprietary
-                        'value == RejectReason.VENDOR_PROPRIETARY_VALUE'    ]
+                        'value == BACnetRejectReason.VENDOR_PROPRIETARY_VALUE'    ]
     [manual   uint 32
                     proprietaryValue
                         'STATIC_CALL("readProprietaryEnumGeneric", readBuffer, actualLength, isProprietary)'
@@ -325,34 +308,15 @@
                         '_value.isProprietary?actualLength * 8:0'                  ]
 ]
 
-// Attention: 0-63 ASHRAE. 64-255 proprietary
-[enum uint 8 AbortReason
-    ['0'  OTHER                             ]
-    ['1'  BUFFER_OVERFLOW                   ]
-    ['2'  INVALID_APDU_IN_THIS_STATE        ]
-    ['3'  PREEMPTED_BY_HIGHER_PRIORITY_TASK ]
-    ['4'  SEGMENTATION_NOT_SUPPORTED        ]
-    ['5'  SECURITY_ERROR                    ]
-    ['6'  INSUFFICIENT_SECURITY             ]
-    ['7'  WINDOW_SIZE_OUT_OF_RANGE          ]
-    ['8'  APPLICATION_EXCEEDED_REPLY_TIME   ]
-    ['9'  OUT_OF_RESOURCES                  ]
-    ['10' TSM_TIMEOUT                       ]
-    ['11' APDU_TOO_LONG                     ]
-
-    // plc4x definition
-    ['0xFF' VENDOR_PROPRIETARY_VALUE            ]
-]
-
 // Not really tagged as it has no header but is consistent with naming schema enum+Tagged
-[type AbortReasonTagged(uint 32 actualLength)
-    [manual   AbortReason
+[type BACnetAbortReasonTagged(uint 32 actualLength)
+    [manual   BACnetAbortReason
                     value
-                        'STATIC_CALL("readEnumGeneric", readBuffer, actualLength, AbortReason.VENDOR_PROPRIETARY_VALUE)'
+                        'STATIC_CALL("readEnumGeneric", readBuffer, actualLength, BACnetAbortReason.VENDOR_PROPRIETARY_VALUE)'
                         'STATIC_CALL("writeEnumGeneric", writeBuffer, value)'
                         'actualLength * 8'                                  ]
     [virtual  bit   isProprietary
-                        'value == AbortReason.VENDOR_PROPRIETARY_VALUE'     ]
+                        'value == BACnetAbortReason.VENDOR_PROPRIETARY_VALUE'     ]
     [manual   uint 32
                     proprietaryValue
                         'STATIC_CALL("readProprietaryEnumGeneric", readBuffer, actualLength, isProprietary)'
@@ -1451,7 +1415,6 @@
                             vendorId                    ]// TODO: vendor list?
             [simple     BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')
                             serviceNumber               ]
-            // TODO: temporary dummy property identifier... get rid of that
             [optional BACnetConstructedData('3', 'BACnetObjectType.VENDOR_PROPRIETARY_VALUE', 'BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE')
                             errorParameters             ]
         ]
@@ -1507,25 +1470,10 @@
     [simple ErrorCodeTagged('0', 'TagClass.APPLICATION_TAGS')  errorCode            ]
 ]
 
-// Attention: 0-63 ASHRAE. 64-65535 proprietary
-[enum uint 16 ErrorClass
-    ['0x0000' DEVICE          ]
-    ['0x0001' OBJECT          ]
-    ['0x0002' PROPERTY        ]
-    ['0x0003' RESOURCES       ]
-    ['0x0004' SECURITY        ]
-    ['0x0005' SERVICES        ]
-    ['0x0006' VT              ]
-    ['0x0007' COMMUNICATION   ]
-
-    // plc4x definition
-    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
-]
-
 [type ErrorClassTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
                         header                                                                               ]
-    [validation    'header.tagClass == tagClass'    "tag class doesn't match"                                      ]
+    [validation    'header.tagClass == tagClass'    "tag class doesn't match"                                ]
     [validation    '(header.tagClass == TagClass.APPLICATION_TAGS) || (header.actualTagNumber == tagNumber)'
                                                     "tagnumber doesn't match" shouldFail=false               ]
     [manual   ErrorClass
@@ -1539,331 +1487,146 @@
                     proprietaryValue
                         'STATIC_CALL("readProprietaryEnumGeneric", readBuffer, header.actualLength, isProprietary)'
                         'STATIC_CALL("writeProprietaryEnumGeneric", writeBuffer, proprietaryValue, isProprietary)'
-                        '_value.isProprietary?header.actualLength * 8:0'                                                   ]   
-]
-
-// Attention: 0-63 ASHRAE. 64-65535 proprietary
-[enum uint 16 ErrorCode
-    ['123'  ABORT_APDU_TOO_LONG                       ]
-    ['124'  ABORT_APPLICATION_EXCEEDED_REPLY_TIME     ]
-    ['51'   ABORT_BUFFER_OVERFLOW                     ]
-    ['135'  ABORT_INSUFFICIENT_SECURITY               ]
-    ['52'   ABORT_INVALID_APDU_IN_THIS_STATE          ]
-    ['56'   ABORT_OTHER                               ]
-    ['125'  ABORT_OUT_OF_RESOURCES                    ]
-    ['53'   ABORT_PREEMPTED_BY_HIGHER_PRIORITY_TASK   ]
-    ['55'   ABORT_PROPRIETARY                         ]
-    ['136'  ABORT_SECURITY_ERROR                      ]
-    ['54'   ABORT_SEGMENTATION_NOT_SUPPORTED          ]
-    ['126'  ABORT_TSM_TIMEOUT                         ]
-    ['127'  ABORT_WINDOW_SIZE_OUT_OF_RANGE            ]
-    ['85'   ACCESS_DENIED                             ]
-    ['115'  ADDRESSING_ERROR                          ]
-    ['86'   BAD_DESTINATION_ADDRESS                   ]
-    ['87'   BAD_DESTINATION_DEVICE_ID                 ]
-    ['88'   BAD_SIGNATURE                             ]
-    ['89'   BAD_SOURCE_ADDRESS                        ]
-    ['90'   BAD_TIMESTAMP                             ]
-    ['82'   Busy                                      ]
-    ['91'   CANNOT_USE_KEY                            ]
-    ['92'   CANNOT_VERIFY_MESSAGE_ID                  ]
-    ['41'   CHARACTER_SET_NOT_SUPPORTED               ]
-    ['83'   COMMUNICATION_DISABLED                    ]
-    ['2'    CONFIGURATION_IN_PROGRESS                 ]
-    ['93'   CORRECT_KEY_REVISION                      ]
-    ['43'   COV_SUBSCRIPTION_FAILED                   ]
-    ['47'   DATATYPE_NOT_SUPPORTED                    ]
-    ['120'  DELETE_FDT_ENTRY_FAILED                   ]
-    ['94'   DESTINATION_DEVICE_ID_REQUIRED            ]
-    ['3'    DEVICE_BUSY                               ]
-    ['121'  DISTRIBUTE_BROADCAST_FAILED               ]
-    ['137'  DUPLICATE_ENTRY                           ]
-    ['95'   DUPLICATE_MESSAGE                         ]
-    ['48'   DUPLICATE_NAME                            ]
-    ['49'   DUPLICATE_OBJECT_ID                       ]
-    ['4'    DYNAMIC_CREATION_NOT_SUPPORTED            ]
-    ['96'   ENCRYPTION_NOT_CONFIGURED                 ]
-    ['97'   ENCRYPTION_REQUIRED                       ]
-    ['5'    FILE_ACCESS_DENIED                        ]
-    ['128'  FILE_FULL                                 ]
-    ['129'  INCONSISTENT_CONFIGURATION                ]
-    ['130'  INCONSISTENT_OBJECT_TYPE                  ]
-    ['7'    INCONSISTENT_PARAMETERS                   ]
-    ['8'    INCONSISTENT_SELECTION_CRITERION          ]
-    ['98'   INCORRECT_KEY                             ]
-    ['131'  INTERNAL_ERROR                            ]
-    ['42'   INVALID_ARRAY_INDEX                       ]
-    ['46'   INVALID_CONFIGURATION_DATA                ]
-    ['9'    INVALID_DATA_TYPE                         ]
-    ['13'   D_PARAMETER_DATA_TYPE                     ]
-    ['57'   INVALID_TAG                               ]
-    ['14'   INVALID_TIMESTAMP                         ]
-    ['138'  INVALID_VALUE_IN_THIS_STATE               ]
-    ['100'  KEY_UPDATE_IN_PROGRESS                    ]
-    ['81'   LIST_ELEMENT_NOT_FOUND                    ]
-    ['75'   LOG_BUFFER_FULL                           ]
-    ['76'   LOGGED_VALUE_PURGED                       ]
-    ['101'  MALFORMED_MESSAGE                         ]
-    ['113'  MESSAGE_TOO_LONG                          ]
-    ['16'   MISSING_REQUIRED_PARAMETER                ]
-    ['58'   NETWORK_DOWN                              ]
-    ['74'   NO_ALARM_CONFIGURED                       ]
-    ['17'   NO_OBJECTS_OF_SPECIFIED_TYPE              ]
-    ['77'   NO_PROPERTY_SPECIFIED                     ]
-    ['18'   NO_SPACE_FOR_OBJECT                       ]
-    ['19'   NO_SPACE_TO_ADD_LIST_ELEMENT              ]
-    ['20'   NO_SPACE_TO_WRITE_PROPERTY                ]
-    ['21'   NO_VT_SESSIONS_AVAILABLE                  ]
-    ['132'  NOT_CONFIGURED                            ]
-    ['78'   NOT_CONFIGURED_FOR_TRIGGERED_LOGGING      ]
-    ['44'   NOT_COV_PROPERTY                          ]
-    ['102'  NOT_KEY_SERVER                            ]
-    ['110'  NOT_ROUTER_TO_DNET                        ]
-    ['23'   OBJECT_DELETION_NOT_PERMITTED             ]
-    ['24'   OBJECT_IDENTIFIER_ALREADY_EXISTS          ]
-    ['25'   OPERATIONAL_PROBLEM                       ]
-    ['45'   OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED      ]
-    ['0'    OTHER                                     ]
-    ['133'  OUT_OF_MEMORY                             ]
-    ['80'   PARAMETER_OUT_OF_RANGE                    ]
-    ['26'   PASSWORD_FAILURE                          ]
-    ['22'   PROPERTY_IS_NOT_A_LIST                    ]
-    ['50'   PROPERTY_IS_NOT_AN_ARRAY                  ]
-    ['27'   READ_ACCESS_DENIED                        ]
-    ['117'  READ_BDT_FAILED                           ]
-    ['119'  READ_FDT_FAILED                           ]
-    ['118'  REGISTER_FOREIGN_DEVICE_FAILED            ]
-    ['59'   REJECT_BUFFER_OVERFLOW                    ]
-    ['60'   REJECT_INCONSISTENT_PARAMETERS            ]
-    ['61'   REJECT_INVALID_PARAMETER_DATA_TYPE        ]
-    ['62'   REJECT_INVALID_TAG                        ]
-    ['63'   REJECT_MISSING_REQUIRED_PARAMETER         ]
-    ['69'   REJECT_OTHER                              ]
-    ['64'   REJECT_PARAMETER_OUT_OF_RANGE             ]
-    ['68'   REJECT_PROPRIETARY                        ]
-    ['65'   REJECT_TOO_MANY_ARGUMENTS                 ]
-    ['66'   REJECT_UNDEFINED_ENUMERATION              ]
-    ['67'   REJECT_UNRECOGNIZED_SERVICE               ]
-    ['111'  ROUTER_BUSY                               ]
-    ['114'  SECURITY_ERROR                            ]
-    ['103'  SECURITY_NOT_CONFIGURED                   ]
-    ['29'   SERVICE_REQUEST_DENIED                    ]
-    ['104'  SOURCE_SECURITY_REQUIRED                  ]
-    ['84'   SUCCESS                                   ]
-    ['30'   TIMEOUT                                   ]
-    ['105'  TOO_MANY_KEYS                             ]
-    ['106'  UNKNOWN_AUTHENTICATION_TYPE               ]
-    ['70'   UNKNOWN_DEVICE                            ]
-    ['122'  UNKNOWN_FILE_SIZE                         ]
-    ['107'  UNKNOWN_KEY                               ]
-    ['108'  UNKNOWN_KEY_REVISION                      ]
-    ['112'  UNKNOWN_NETWORK_MESSAGE                   ]
-    ['31'   UNKNOWN_OBJECT                            ]
-    ['32'   UNKNOWN_PROPERTY                          ]
-    ['71'   UNKNOWN_ROUTE                             ]
-    ['109'  UNKNOWN_SOURCE_MESSAGE                    ]
-    ['79'   UNKNOWN_SUBSCRIPTION                      ]
-    ['34'   UNKNOWN_VT_CLASS                          ]
-    ['35'   UNKNOWN_VT_SESSION                        ]
-    ['36'   UNSUPPORTED_OBJECT_TYPE                   ]
-    ['72'   VALUE_NOT_INITIALIZED                     ]
-    ['37'   VALUE_OUT_OF_RANGE                        ]
-    ['134'  VALUE_TOO_LONG                            ]
-    ['38'   VT_SESSION_ALREADY_CLOSED                 ]
-    ['39'   VT_SESSION_TERMINATION_FAILURE            ]
-    ['40'   WRITE_ACCESS_DENIED                       ]
-    ['116'  WRITE_BDT_FAILED                          ]
-
-      // plc4x definition
-    ['0XFFFF' VENDOR_PROPRIETARY_VALUE    ]
+                        '_value.isProprietary?header.actualLength * 8:0'                                     ]
 ]
 
 [type ErrorCodeTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
-                        header                                                                               ]
-    [validation    'header.tagClass == tagClass'    "tag class doesn't match"                                      ]
+                        header                                                                                  ]
+    [validation    'header.tagClass == tagClass'    "tag class doesn't match"                                   ]
     [validation    '(header.tagClass == TagClass.APPLICATION_TAGS) || (header.actualTagNumber == tagNumber)'
-                                                    "tagnumber doesn't match" shouldFail=false               ]
+                                                    "tagnumber doesn't match" shouldFail=false                  ]
     [manual   ErrorCode
                     value
                         'STATIC_CALL("readEnumGeneric", readBuffer, header.actualLength, ErrorCode.VENDOR_PROPRIETARY_VALUE)'
                         'STATIC_CALL("writeEnumGeneric", writeBuffer, value)'
-                        'header.actualLength * 8'                                                            ]
+                        'header.actualLength * 8'                                                               ]
     [virtual  bit   isProprietary
-                        'value == ErrorCode.VENDOR_PROPRIETARY_VALUE'                                        ]
+                        'value == ErrorCode.VENDOR_PROPRIETARY_VALUE'                                           ]
     [manual   uint 32
                     proprietaryValue
                         'STATIC_CALL("readProprietaryEnumGeneric", readBuffer, header.actualLength, isProprietary)'
                         'STATIC_CALL("writeProprietaryEnumGeneric", writeBuffer, proprietaryValue, isProprietary)'
-                        '_value.isProprietary?header.actualLength * 8:0'                                                   ]
+                        '_value.isProprietary?header.actualLength * 8:0'                                        ]
 ]
 
 [type BACnetNotificationParameters(uint 8 tagNumber, BACnetObjectType objectType)
     [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                            openingTag
-    ]
+                            openingTag                                              ]
     [peek       BACnetTagHeader
-                            peekedTagHeader
-    ]
-    [virtual    uint 8      peekedTagNumber     'peekedTagHeader.actualTagNumber']
+                            peekedTagHeader                                         ]
+    [virtual    uint 8      peekedTagNumber     'peekedTagHeader.actualTagNumber'   ]
     [typeSwitch peekedTagNumber
         ['0' BACnetNotificationParametersChangeOfBitString(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetContextTagBitString('0', 'BACnetDataType.BIT_STRING')
-                    changeOfBitString
-            ]
+                            changeOfBitString ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
+                            statusFlags ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['1' BACnetNotificationParametersChangeOfState(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetPropertyStates('0')
-                    changeOfState
-            ]
+                            changeOfState ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
+                            statusFlags ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['2' BACnetNotificationParametersChangeOfValue(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetNotificationParametersChangeOfValueNewValue('0')
-                    newValue
-            ]
+                            newValue ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
+                            statusFlags ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['3' BACnetNotificationParametersCommandFailure(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
-            // TODO: temporary dummy property identifier... get rid of that
+                            innerOpeningTag ]
             [simple BACnetConstructedData('0', 'objectType', 'BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE')
-                    commandValue
-            ]
+                            commandValue ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
-            // TODO: temporary dummy property identifier... get rid of that
+                            statusFlags ]
             [simple BACnetConstructedData('2', 'objectType', 'BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE')
-                    feedbackValue
-            ]
+                            feedbackValue ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['4' BACnetNotificationParametersFloatingLimit(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                            innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetContextTagReal('0', 'BACnetDataType.REAL')
-                    referenceValue
-            ]
+                            referenceValue ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
+                            statusFlags ]
             [simple BACnetContextTagReal('2', 'BACnetDataType.REAL')
-                    setPointValue
-            ]
+                            setPointValue ]
             [simple BACnetContextTagReal('3', 'BACnetDataType.REAL')
-                    errorLimit
-            ]
+                            errorLimit ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['5' BACnetNotificationParametersOutOfRange(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                            innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetContextTagReal('0', 'BACnetDataType.REAL')
-                    exceedingValue
-            ]
+                            exceedingValue ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
+                            statusFlags ]
             [simple BACnetContextTagReal('2', 'BACnetDataType.REAL')
-                    deadband
-            ]
+                            deadband ]
             [simple BACnetContextTagReal('3', 'BACnetDataType.REAL')
-                    exceededLimit
-            ]
+                            exceededLimit ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['6' BACnetNotificationParametersComplexEventType(uint 8 peekedTagNumber)
-            [simple     BACnetPropertyValues('peekedTagNumber', 'objectType')
-                        listOfValues
-            ]
+            [simple BACnetPropertyValues('peekedTagNumber', 'objectType')
+                            listOfValues ]
         ]
         // TODO: implement other cases
         ['9' BACnetNotificationParametersExtended(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')
-                    vendorId
-            ]
+                            vendorId ]
             [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')
-                    extendedEventType
-            ]
+                            extendedEventType ]
             [simple BACnetNotificationParametersExtendedParameters('2')
-                    parameters
-            ]
+                            parameters ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['10' BACnetNotificationParametersBufferReady(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetDeviceObjectPropertyReferenceEnclosed('0')
-                    bufferProperty
-            ]
+                            bufferProperty ]
             [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')
-                    previousNotification
-            ]
+                            previousNotification ]
             [simple BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')
-                    currentNotification
-            ]
+                            currentNotification ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         ['11' BACnetNotificationParametersUnsignedRange(uint 8 peekedTagNumber)
             [simple BACnetOpeningTag('peekedTagNumber', 'BACnetDataType.OPENING_TAG')
-                    innerOpeningTag
-            ]
+                            innerOpeningTag ]
             [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')
-                    sequenceNumber
-            ]
+                            sequenceNumber ]
             [simple BACnetStatusFlags('1')
-                    statusFlags
-            ]
+                            statusFlags ]
             [simple BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')
-                    exceededLimit
-            ]
+                            exceededLimit ]
             [simple BACnetClosingTag('peekedTagNumber', 'BACnetDataType.CLOSING_TAG')
-                    innerClosingTag
-            ]
+                            innerClosingTag ]
         ]
         // TODO: implement other cases
         [BACnetNotificationParametersUnmapped
@@ -1871,142 +1634,108 @@
             [validation    '1 == 2'    "TODO: implement me"]
         ]
     ]
-    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                closingTag
-    ]
+    [simple BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                    closingTag                                              ]
 ]
 
-// TODO: this could be inlined once we can support nested types
 [type BACnetNotificationParametersChangeOfValueNewValue(uint 8 tagNumber)
     [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                            openingTag                                                  ]
+                        openingTag                                                  ]
     [peek       BACnetTagHeader
-                            peekedTagHeader
+                        peekedTagHeader
     ]
-    [virtual    uint 8      peekedTagNumber     'peekedTagHeader.actualTagNumber'       ]
+    [virtual uint 8     peekedTagNumber     'peekedTagHeader.actualTagNumber'       ]
     [typeSwitch peekedTagNumber
         ['0' BACnetNotificationParametersChangeOfValueNewValueChangedBits(uint 8 peekedTagNumber)
             [simple BACnetContextTagBitString('0', 'BACnetDataType.BIT_STRING')
-                            changedBits                                                 ]
+                        changedBits                                                 ]
         ]
         ['1' BACnetNotificationParametersChangeOfValueNewValueChangedValue(uint 8 peekedTagNumber)
             [simple BACnetContextTagReal('0', 'BACnetDataType.REAL')
-                            changedValue                                                ]
+                        changedValue                                                ]
         ]
     ]
     [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                            closingTag                                                  ]
+                        closingTag                                                  ]
 ]
 
-// TODO: this could be inlined once we can support nested types
 [type BACnetNotificationParametersExtendedParameters(uint 8 tagNumber)
-    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                openingTag
-    ]
-    [peek       BACnetTagHeader
-                            peekedTagHeader
-    ]
-    [virtual    uint 8      peekedTagNumber     'peekedTagHeader.actualTagNumber'       ]
-    [virtual    bit         isOpeningTag        'peekedTagHeader.lengthValueType == 0x6']
-    [virtual    bit         isClosingTag        'peekedTagHeader.lengthValueType == 0x7']
-    [optional   BACnetApplicationTagNull
-                nullValue
-                    'peekedTagNumber == 0x0 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagReal
-                realValue
-                    'peekedTagNumber == 0x4 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagUnsignedInteger
-                unsignedValue
-                    'peekedTagNumber == 0x2 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagBoolean
-                booleanValue
-                    'peekedTagNumber == 0x1 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagSignedInteger
-                integerValue
-                    'peekedTagNumber == 0x3 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagDouble
-                doubleValue
-                    'peekedTagNumber == 0x5 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagOctetString
-                octetStringValue
-                    'peekedTagNumber == 0x6 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagCharacterString
-                characterStringValue
-                    'peekedTagNumber == 0x7 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagBitString
-                bitStringValue
-                    'peekedTagNumber == 0x8 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagEnumerated
-                enumeratedValue
-                    'peekedTagNumber == 0x9 && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagDate
-                dateValue
-                    'peekedTagNumber == 0xA && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagTime
-                timeValue
-                    'peekedTagNumber == 0xB && !isOpeningTag && !isClosingTag'          ]
-    [optional   BACnetApplicationTagObjectIdentifier
-                objectIdentifier
-                    'peekedTagNumber == 0xC && !isOpeningTag'                           ]
-    [optional   BACnetDeviceObjectPropertyReferenceEnclosed('0')
-                reference
-                    'isOpeningTag && !isClosingTag'                                     ]
-    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                closingTag
-    ]
+    [simple   BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
+                        openingTag                                                  ]
+    [peek     BACnetTagHeader
+                        peekedTagHeader                                             ]
+    [virtual  uint 8    peekedTagNumber     'peekedTagHeader.actualTagNumber'       ]
+    [virtual  bit       isOpeningTag        'peekedTagHeader.lengthValueType == 0x6']
+    [virtual  bit       isClosingTag        'peekedTagHeader.lengthValueType == 0x7']
+    [optional BACnetApplicationTagNull
+                    nullValue
+                        'peekedTagNumber == 0x0 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagReal
+                    realValue
+                        'peekedTagNumber == 0x4 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagUnsignedInteger
+                    unsignedValue
+                        'peekedTagNumber == 0x2 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagBoolean
+                    booleanValue
+                        'peekedTagNumber == 0x1 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagSignedInteger
+                    integerValue
+                        'peekedTagNumber == 0x3 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagDouble
+                    doubleValue
+                        'peekedTagNumber == 0x5 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagOctetString
+                    octetStringValue
+                        'peekedTagNumber == 0x6 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagCharacterString
+                    characterStringValue
+                        'peekedTagNumber == 0x7 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagBitString
+                    bitStringValue
+                        'peekedTagNumber == 0x8 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagEnumerated
+                    enumeratedValue
+                        'peekedTagNumber == 0x9 && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagDate
+                    dateValue
+                        'peekedTagNumber == 0xA && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagTime
+                    timeValue
+                        'peekedTagNumber == 0xB && !isOpeningTag && !isClosingTag'      ]
+    [optional BACnetApplicationTagObjectIdentifier
+                    objectIdentifier
+                        'peekedTagNumber == 0xC && !isOpeningTag'                       ]
+    [optional BACnetDeviceObjectPropertyReferenceEnclosed('0')
+                    reference
+                        'isOpeningTag && !isClosingTag'                                 ]
+    [simple   BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                    closingTag                                                          ]
 ]
 
 [type BACnetPropertyValues(uint 8 tagNumber, BACnetObjectType objectType)
-    [simple BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-            innerOpeningTag
-    ]
-    [array  BACnetPropertyValue('objectType')
-            data
-            terminated
-            'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'
-    ]
-    [simple BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-            innerClosingTag
-    ]
+    [simple  BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
+                    innerOpeningTag                                                     ]
+    [array   BACnetPropertyValue('objectType')
+                    data
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'
+                                                                                        ]
+    [simple  BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                    innerClosingTag                                                     ]
 ]
 
 [type BACnetPropertyValue(BACnetObjectType objectType)
-    [simple   BACnetPropertyIdentifierTagged('0', 'TagClass.CONTEXT_SPECIFIC_TAGS')                propertyIdentifier  ]
-    [optional BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')              propertyArrayIndex  ]
-    [optional BACnetConstructedDataElement('objectType', 'propertyIdentifier.value')               propertyValue       ]
-    [optional BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')              priority            ]
+    [simple   BACnetPropertyIdentifierTagged('0', 'TagClass.CONTEXT_SPECIFIC_TAGS')                 propertyIdentifier  ]
+    [optional BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')               propertyArrayIndex  ]
+    [optional BACnetConstructedDataElement('objectType', 'propertyIdentifier.value')                propertyValue       ]
+    [optional BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')               priority            ]
 ]
 
 [type BACnetDeviceObjectPropertyReferenceEnclosed(uint 8 tagNumber)
-    [simple   BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-              openingTag
-    ]
-    [simple   BACnetDeviceObjectPropertyReference     value                                                            ]
-    [simple   BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-              closingTag
-    ]
-]
-
-// Attention: 0-63 ASHRAE. 64-65535 proprietary
-[enum uint 16 BACnetLifeSafetyMode
-    ['0'    OFF                         ]
-    ['1'    ON                          ]
-    ['2'    TEST                        ]
-    ['3'    MANNED                      ]
-    ['4'    UNMANNED                    ]
-    ['5'    ARMED                       ]
-    ['6'    DISARMED                    ]
-    ['7'    PREARMED                    ]
-    ['8'    SLOW                        ]
-    ['9'    FAST                        ]
-    ['10'   DISCONNECTED                ]
-    ['11'   ENABLED                     ]
-    ['12'   DISABLED                    ]
-    ['13'   AUTOMATIC_RELEASE_DISABLED  ]
-    ['14'   DEFAULT                     ]
-
-      // plc4x definition
-    ['0XFFFF' VENDOR_PROPRIETARY_VALUE        ]
+    [simple   BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')                           openingTag          ]
+    [simple   BACnetDeviceObjectPropertyReference                                                   value               ]
+    [simple   BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')                           closingTag          ]
 ]
 
 [type BACnetLifeSafetyModeTagged(uint 8 tagNumber, TagClass tagClass)
@@ -2029,37 +1758,6 @@
                         '_value.isProprietary?header.actualLength * 8:0'                                        ]
 ]
 
-// Attention: 0-63 ASHRAE. 64-65535 proprietary
-[enum uint 16 BACnetLifeSafetyState
-    ['0'    QUIET                             ]
-    ['1'    PRE_ALARM                         ]
-    ['2'    ALARM                             ]
-    ['3'    FAULT                             ]
-    ['4'    FAULT_PRE_ALARM                   ]
-    ['5'    FAULT_ALARM                       ]
-    ['6'    NOT_READY                         ]
-    ['7'    ACTIVE                            ]
-    ['8'    TAMPER                            ]
-    ['9'    TEST_ALARM                        ]
-    ['10'   TEST_ACTIVE                       ]
-    ['11'   TEST_FAULT                        ]
-    ['12'   TEST_FAULT_ALARM                  ]
-    ['13'   HOLDUP                            ]
-    ['14'   DURESS                            ]
-    ['15'   TAMPER_ALARM                      ]
-    ['16'   ABNORMAL                          ]
-    ['17'   EMERGENCY_POWER                   ]
-    ['18'   DELAYED                           ]
-    ['19'   BLOCKED                           ]
-    ['20'   LOCAL_ALARM                       ]
-    ['21'   GENERAL_ALARM                     ]
-    ['22'   SUPERVISORY                       ]
-    ['23'   TEST_SUPERVISORY                  ]
-
-      // plc4x definition
-    ['0XFFFF' VENDOR_PROPRIETARY_VALUE        ]
-]
-
 [type BACnetLifeSafetyStateTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
                         header                                                                                  ]
@@ -2080,37 +1778,6 @@
                         '_value.isProprietary?header.actualLength * 8:0'                                        ]
 ]
 
-// Attention: 0-63 ASHRAE. 64-65535 proprietary
-[enum uint 16 BACnetReliability
-    ['0'    NO_FAULT_DETECTED                 ]
-    ['1'    NO_SENSOR                         ]
-    ['2'    OVER_RANGE                        ]
-    ['3'    UNDER_RANGE                       ]
-    ['4'    OPEN_LOOP                         ]
-    ['5'    SHORTED_LOOP                      ]
-    ['6'    NO_OUTPUT                         ]
-    ['7'    UNRELIABLE_OTHER                  ]
-    ['8'    PROCESS_ERROR                     ]
-    ['9'    MULTI_STATE_FAULT                 ]
-    ['10'   CONFIGURATION_ERROR               ]
-    ['12'   COMMUNICATION_FAILURE             ]
-    ['13'   MEMBER_FAULT                      ]
-    ['14'   MONITORED_OBJECT_FAULT            ]
-    ['15'   TRIPPED                           ]
-    ['16'   LAMP_FAILURE                      ]
-    ['17'   ACTIVATION_FAILURE                ]
-    ['18'   RENEW_DHCP_FAILURE                ]
-    ['19'   RENEW_FD_REGISTRATION_FAILURE     ]
-    ['20'   RESTART_AUTO_NEGOTIATION_FAILURE  ]
-    ['21'   RESTART_FAILURE                   ]
-    ['22'   PROPRIETARY_COMMAND_FAILURE       ]
-    ['23'   FAULTS_LISTED                     ]
-    ['24'   REFERENCED_OBJECT_FAULT           ]
-
-      // plc4x definition
-    ['0XFFFF' VENDOR_PROPRIETARY_VALUE        ]
-]
-
 [type BACnetReliabilityTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
                         header                                                                                  ]
@@ -2201,13 +1868,32 @@
                         writeSuccessful                                                         ]
 ]
 
-// TODO: this is a enum so we should build a static call which maps a enum (could be solved by using only the tag header with a length validation and the enum itself)
-[type BACnetBinaryPV(uint 8 tagNumber)
-    [optional   BACnetContextTagEnumerated('tagNumber', 'BACnetDataType.ENUMERATED')
-                rawData
-    ]
-    [virtual    bit isInactive         'rawData != null && rawData.actualValue == 0']
-    [virtual    bit isActive           'rawData != null && rawData.actualValue == 1']
+[enum uint 8 BACnetBinaryPV
+    ['0'    INACTIVE    ]
+    ['1'    ACTIVE      ]
+
+      // plc4x definition
+    ['0XFF' VENDOR_PROPRIETARY_VALUE        ]
+]
+
+[type BACnetBinaryPVTagged(uint 8 tagNumber, TagClass tagClass)
+    [simple   BACnetTagHeader
+                        header                                                                                  ]
+    [validation    'header.tagClass == tagClass'    "tag class doesn't match"                                   ]
+    [validation    '(header.tagClass == TagClass.APPLICATION_TAGS) || (header.actualTagNumber == tagNumber)'
+                                                    "tagnumber doesn't match" shouldFail=false                  ]
+    [manual   BACnetBinaryPV
+                    value
+                        'STATIC_CALL("readEnumGeneric", readBuffer, header.actualLength, BACnetBinaryPV.VENDOR_PROPRIETARY_VALUE)'
+                        'STATIC_CALL("writeEnumGeneric", writeBuffer, value)'
+                        'header.actualLength * 8'                                                               ]
+    [virtual  bit   isProprietary
+                        'value == BACnetBinaryPV.VENDOR_PROPRIETARY_VALUE'                                      ]
+    [manual   uint 32
+                    proprietaryValue
+                        'STATIC_CALL("readProprietaryEnumGeneric", readBuffer, header.actualLength, isProprietary)'
+                        'STATIC_CALL("writeProprietaryEnumGeneric", writeBuffer, proprietaryValue, isProprietary)'
+                        '_value.isProprietary?header.actualLength * 8:0'                                        ]
 ]
 
 [type BACnetPropertyStates(uint 8 tagNumber)
@@ -2219,11 +1905,11 @@
                         'peekedTagHeader.actualTagNumber'   ]
     [typeSwitch peekedTagNumber
         ['0' BACnetPropertyStatesBoolean(uint 8 peekedTagNumber)
-            [optional   BACnetContextTagBoolean('peekedTagNumber', 'BACnetDataType.BOOLEAN')
+            [simple   BACnetContextTagBoolean('peekedTagNumber', 'BACnetDataType.BOOLEAN')
                                 booleanValue                ]
         ]
         ['1' BACnetPropertyStatesBinaryValue(uint 8 peekedTagNumber)
-            [optional   BACnetBinaryPV('peekedTagNumber')
+            [simple   BACnetBinaryPVTagged('peekedTagNumber', 'TagClass.CONTEXT_SPECIFIC_TAGS')
                                 binaryValue                 ]
         ]
         // TODO: add missing type
@@ -2282,43 +1968,36 @@
 ]
 
 [type BACnetTimeStampsEnclosed(uint 8 tagNumber)
-    [simple         BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                    openingTag
-    ]
-    [array  BACnetTimeStamp
-                timestamps
-                terminated
-                'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'
-    ]
-    [simple         BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                    closingTag
-    ]
+    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
+                    openingTag ]
+    [array      BACnetTimeStamp
+                        timestamps
+                            terminated
+                            'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'
+                                            ]
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                        closingTag          ]
 ]
 
 [type BACnetDateTime
     [simple     BACnetApplicationTagDate
-                dateValue
-    ]
+                        dateValue           ]
     [simple     BACnetApplicationTagTime
-                timeValue
-    ]
+                        timeValue           ]
 ]
 
 [type BACnetDateTimeEnclosed(uint 8 tagNumber)
     [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                openingTag
-    ]
+                        openingTag          ]
     [simple     BACnetDateTime
-                dateTimeValue
-    ]
+                        dateTimeValue       ]
     [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                closingTag
-    ]
+                        closingTag          ]
 ]
 
 [type BACnetAddress
-    [array  uint 8 address count '4']
-    [simple uint 16 port]
+    [array  uint 8 address count '4'        ]
+    [simple uint 16 port                    ]
 ]
 
 [discriminatedType BACnetTagHeader
@@ -3234,24 +2913,6 @@
     ['0x5' ISO_8859_1                           ]
 ]
 
-// Attention: 0-63 ASHRAE. 64-255 proprietary
-[enum uint 8 BACnetNetworkType
-    ['0x0' ETHERNET                             ]
-    ['0x1' ARCNET                               ]
-    ['0x2' MSTP                                 ]
-    ['0x3' PTP                                  ]
-    ['0x4' LONTALK                              ]
-    ['0x5' IPV4                                 ]
-    ['0x6' ZIGBEE                               ]
-    ['0x7' VIRTUAL                              ]
-    ['0x8' REMOVED_NON_BACNET                   ]
-    ['0x9' IPV6                                 ]
-    ['0xA' SERIAL                               ]
-
-      // plc4x definition
-    ['0XFF' VENDOR_PROPRIETARY_VALUE    ]
-]
-
 [type BACnetNetworkTypeTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
                      header                                                                               ]
@@ -3373,18 +3034,6 @@
                         '_value.isProprietary?header.actualLength * 8:0'                                                  ]
 ]
 
-[enum uint 9 BACnetEventState
-    ['0'  NORMAL                                ]
-    ['1'  FAULT                                 ]
-    ['2'  OFFNORMAL                             ]
-    ['3'  HIGH_LIMIT                            ]
-    ['4'  LOW_LIMIT                             ]
-    ['5'  LIFE_SAVETY_ALARM                     ]
-
-    // plc4x definition
-    ['0xFFFF' VENDOR_PROPRIETARY_VALUE          ]
-]
-
 [type BACnetEventStateTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
                         header                                                                              ]
@@ -3405,535 +3054,6 @@
                         '_value.isProprietary?header.actualLength * 8:0'                                                  ]
 ]
 
-[enum uint 10 BACnetObjectType
-    ['32' ACCESS_CREDENTIAL                     ]
-    ['30' ACCESS_DOOR                           ]
-    ['33' ACCESS_POINT                          ]
-    ['34' ACCESS_RIGHTS                         ]
-    ['35' ACCESS_USER                           ]
-    ['36' ACCESS_ZONE                           ]
-    ['23' ACCUMULATOR                           ]
-    ['52' ALERT_ENROLLMENT                      ]
-    ['0'  ANALOG_INPUT                          ]
-    ['1'  ANALOG_OUTPUT                         ]
-    ['2'  ANALOG_VALUE                          ]
-    ['18' AVERAGING                             ]
-    ['3'  BINARY_INPUT                          ]
-    ['55' BINARY_LIGHTING_OUTPUT                ]
-    ['4'  BINARY_OUTPUT                         ]
-    ['5'  BINARY_VALUE                          ]
-    ['39' BITSTRING_VALUE                       ]
-    ['6'  CALENDAR                              ]
-    ['53' CHANNEL                               ]
-    ['40' CHARACTERSTRING_VALUE                 ]
-    ['7'  COMMAND                               ]
-    ['37' CREDENTIAL_DATA_INPUT                 ]
-    ['41' DATEPATTERN_VALUE                     ]
-    ['42' DATE_VALUE                            ]
-    ['43' DATETIMEPATTERN_VALUE                 ]
-    ['44' DATETIME_VALUE                        ]
-    ['8'  DEVICE                                ]
-    ['57' ELEVATOR_GROUP                        ]
-    ['58' ESCALATOR                             ]
-    ['9'  EVENT_ENROLLMENT                      ]
-    ['25' EVENT_LOG                             ]
-    ['10' FILE                                  ]
-    ['26' GLOBAL_GROUP                          ]
-    ['11' GROUP                                 ]
-    ['45' INTEGER_VALUE                         ]
-    ['46' LARGE_ANALOG_VALUE                    ]
-    ['21' LIFE_SAFETY_POINT                     ]
-    ['22' LIFE_SAFETY_ZONE                      ]
-    ['59' LIFT                                  ]
-    ['54' LIGHTING_OUTPUT                       ]
-    ['28' LOAD_CONTROL                          ]
-    ['12' LOOP                                  ]
-    ['13' MULTI_STATE_INPUT                     ]
-    ['14' MULTI_STATE_OUTPUT                    ]
-    ['19' MULTI_STATE_VALUE                     ]
-    ['56' NETWORK_PORT                          ]
-    ['38' NETWORK_SECURITY                      ]
-    ['15' NOTIFICATION_CLASS                    ]
-    ['51' NOTIFICATION_FORWARDER                ]
-    ['47' OCTETSTRING_VALUE                     ]
-    ['48' POSITIVE_INTEGER_VALUE                ]
-    ['16' PROGRAM                               ]
-    ['24' PULSE_CONVERTER                       ]
-    ['17' SCHEDULE                              ]
-    ['29' STRUCTURED_VIEW                       ]
-    ['49' TIMEPATTERN_VALUE                     ]
-    ['50' TIME_VALUE                            ]
-    ['31' TIMER                                 ]
-    ['20' TREND_LOG                             ]
-    ['27' TREND_LOG_MULTIPLE                    ]
-
-    // plc4x Value
-    ['0x3FF' VENDOR_PROPRIETARY_VALUE           ]
-]
-
-[enum uint 32 BACnetPropertyIdentifier
-    ['244' ABSENTEE_LIMIT                       ]
-    ['175' ACCEPTED_MODES                       ]
-    ['245' ACCESS_ALARM_EVENTS                  ]
-    ['246' ACCESS_DOORS                         ]
-    ['247' ACCESS_EVENT                         ]
-    ['248' ACCESS_EVENT_AUTHENTICATION_FACTOR   ]
-    ['249' ACCESS_EVENT_CREDENTIAL              ]
-    ['322' ACCESS_EVENT_TAG                     ]
-    ['250' ACCESS_EVENT_TIME                    ]
-    ['251' ACCESS_TRANSACTION_EVENTS            ]
-    ['252' ACCOMPANIMENT                        ]
-    ['253' ACCOMPANIMENT_TIME                   ]
-    ['1'   ACK_REQUIRED                         ]
-    ['0'   ACKED_TRANSITIONS                    ]
-    ['2'   ACTION                               ]
-    ['3'   ACTION_TEXT                          ]
-    ['254' ACTIVATION_TIME                      ]
-    ['255' ACTIVE_AUTHENTICATION_POLICY         ]
-    ['481' ACTIVE_COV_MULTIPLE_SUBSCRIPTIONS    ]
-    ['152' ACTIVE_COV_SUBSCRIPTIONS             ]
-    ['4'   ACTIVE_TEXT                          ]
-    ['5'   ACTIVE_VT_SESSIONS                   ]
-    ['212' ACTUAL_SHED_LEVEL                    ]
-    ['176' ADJUST_VALUE                         ]
-    ['6'   ALARM_VALUE                          ]
-    ['7'   ALARM_VALUES                         ]
-    ['193' ALIGN_INTERVALS                      ]
-    ['8'   ALL                                  ]
-    ['9'   ALL_WRITES_SUCCESSFUL                ]
-    ['365' ALLOW_GROUP_DELAY_INHIBIT            ]
-    ['399' APDU_LENGTH                          ]
-    ['10'  APDU_SEGMENT_TIMEOUT                 ]
-    ['11'  APDU_TIMEOUT                         ]
-    ['12'  APPLICATION_SOFTWARE_VERSION         ]
-    ['13'  ARCHIVE                              ]
-    ['256' ASSIGNED_ACCESS_RIGHTS               ]
-    ['447' ASSIGNED_LANDING_CALLS               ]
-    ['124' ATTEMPTED_SAMPLES                    ]
-    ['257' AUTHENTICATION_FACTORS               ]
-    ['258' AUTHENTICATION_POLICY_LIST           ]
-    ['259' AUTHENTICATION_POLICY_NAMES          ]
-    ['260' AUTHENTICATION_STATUS                ]
-    ['364' AUTHORIZATION_EXEMPTIONS             ]
-    ['261' AUTHORIZATION_MODE                   ]
-    ['169' AUTO_SLAVE_DISCOVERY                 ]
-    ['125' AVERAGE_VALUE                        ]
-    ['338' BACKUP_AND_RESTORE_STATE             ]
-    ['153' BACKUP_FAILURE_TIMEOUT               ]
-    ['339' BACKUP_PREPARATION_TIME              ]
-    ['407' BACNET_IP_GLOBAL_ADDRESS             ]
-    ['408' BACNET_IP_MODE                       ]
-    ['409' BACNET_IP_MULTICAST_ADDRESS          ]
-    ['410' BACNET_IP_NAT_TRAVERSAL              ]
-    ['412' BACNET_IP_UDP_PORT                   ]
-    ['435' BACNET_IPV6_MODE                     ]
-    ['438' BACNET_IPV6_UDP_PORT                 ]
-    ['440' BACNET_IPV6_MULTICAST_ADDRESS        ]
-    ['327' BASE_DEVICE_SECURITY_POLICY          ]
-    ['413' BBMD_ACCEPT_FD_REGISTRATIONS         ]
-    ['414' BBMD_BROADCAST_DISTRIBUTION_TABLE    ]
-    ['415' BBMD_FOREIGN_DEVICE_TABLE            ]
-    ['262' BELONGS_TO                           ]
-    ['14'  BIAS                                 ]
-    ['342' BIT_MASK                             ]
-    ['343' BIT_TEXT                             ]
-    ['373' BLINK_WARN_ENABLE                    ]
-    ['126' BUFFER_SIZE                          ]
-    ['448' CAR_ASSIGNED_DIRECTION               ]
-    ['449' CAR_DOOR_COMMAND                     ]
-    ['450' CAR_DOOR_STATUS                      ]
-    ['451' CAR_DOOR_TEXT                        ]
-    ['452' CAR_DOOR_ZONE                        ]
-    ['453' CAR_DRIVE_STATUS                     ]
-    ['454' CAR_LOAD                             ]
-    ['455' CAR_LOAD_UNITS                       ]
-    ['456' CAR_MODE                             ]
-    ['457' CAR_MOVING_DIRECTION                 ]
-    ['458' CAR_POSITION                         ]
-    ['15'  CHANGE_OF_STATE_COUNT                ]
-    ['16'  CHANGE_OF_STATE_TIME                 ]
-    ['416' CHANGES_PENDING                      ]
-    ['366' CHANNEL_NUMBER                       ]
-    ['127' CLIENT_COV_INCREMENT                 ]
-    ['417' COMMAND                              ]
-    ['430' COMMAND_TIME_ARRAY                   ]
-    ['154' CONFIGURATION_FILES                  ]
-    ['367' CONTROL_GROUPS                       ]
-    ['19'  CONTROLLED_VARIABLE_REFERENCE        ]
-    ['20'  CONTROLLED_VARIABLE_UNITS            ]
-    ['21'  CONTROLLED_VARIABLE_VALUE            ]
-    ['177' COUNT                                ]
-    ['178' COUNT_BEFORE_CHANGE                  ]
-    ['179' COUNT_CHANGE_TIME                    ]
-    ['22'  COV_INCREMENT                        ]
-    ['180' COV_PERIOD                           ]
-    ['128' COV_RESUBSCRIPTION_INTERVAL          ]
-    ['349' COVU_PERIOD                          ]
-    ['350' COVU_RECIPIENTS                      ]
-    ['263' CREDENTIAL_DISABLE                   ]
-    ['264' CREDENTIAL_STATUS                    ]
-    ['265' CREDENTIALS                          ]
-    ['266' CREDENTIALS_IN_ZONE                  ]
-    ['431' CURRENT_COMMAND_PRIORITY             ]
-    ['155' DATABASE_REVISION                    ]
-    ['23'  DATE_LIST                            ]
-    ['24'  DAYLIGHT_SAVINGS_STATUS              ]
-    ['267' DAYS_REMAINING                       ]
-    ['25'  DEADBAND                             ]
-    ['374' DEFAULT_FADE_TIME                    ]
-    ['375' DEFAULT_RAMP_RATE                    ]
-    ['376' DEFAULT_STEP_INCREMENT               ]
-    ['490' DEFAULT_SUBORDINATE_RELATIONSHIP     ]
-    ['393' DEFAULT_TIMEOUT                      ]
-    ['484' DEPLOYED_PROFILE_LOCATION            ]
-    ['26'  DERIVATIVE_CONSTANT                  ]
-    ['27'  DERIVATIVE_CONSTANT_UNITS            ]
-    ['28'  DESCRIPTION                          ]
-    ['29'  DESCRIPTION_OF_HALT                  ]
-    ['30'  DEVICE_ADDRESS_BINDING               ]
-    ['31'  DEVICE_TYPE                          ]
-    ['156' DIRECT_READING                       ]
-    ['328' DISTRIBUTION_KEY_REVISION            ]
-    ['329' DO_NOT_HIDE                          ]
-    ['226' DOOR_ALARM_STATE                     ]
-    ['227' DOOR_EXTENDED_PULSE_TIME             ]
-    ['228' DOOR_MEMBERS                         ]
-    ['229' DOOR_OPEN_TOO_LONG_TIME              ]
-    ['230' DOOR_PULSE_TIME                      ]
-    ['231' DOOR_STATUS                          ]
-    ['232' DOOR_UNLOCK_DELAY_TIME               ]
-    ['213' DUTY_WINDOW                          ]
-    ['32'  EFFECTIVE_PERIOD                     ]
-    ['386' EGRESS_ACTIVE                        ]
-    ['377' EGRESS_TIME                          ]
-    ['33'  ELAPSED_ACTIVE_TIME                  ]
-    ['459' ELEVATOR_GROUP                       ]
-    ['133' ENABLE                               ]
-    ['460' ENERGY_METER                         ]
-    ['461' ENERGY_METER_REF                     ]
-    ['268' ENTRY_POINTS                         ]
-    ['34'  ERROR_LIMIT                          ]
-    ['462' ESCALATOR_MODE                       ]
-    ['354' EVENT_ALGORITHM_INHIBIT              ]
-    ['355' EVENT_ALGORITHM_INHIBIT_REF          ]
-    ['353' EVENT_DETECTION_ENABLE               ]
-    ['35'  EVENT_ENABLE                         ]
-    ['351' EVENT_MESSAGE_TEXTS                  ]
-    ['352' EVENT_MESSAGE_TEXTS_CONFIG           ]
-    ['83'  EVENT_PARAMETERS                     ]
-    ['36'  EVENT_STATE                          ]
-    ['130' EVENT_TIME_STAMPS                    ]
-    ['37'  EVENT_TYPE                           ]
-    ['38'  EXCEPTION_SCHEDULE                   ]
-    ['368' EXECUTION_DELAY                      ]
-    ['269' EXIT_POINTS                          ]
-    ['214' EXPECTED_SHED_LEVEL                  ]
-    ['270' EXPIRATION_TIME                      ]
-    ['271' EXTENDED_TIME_ENABLE                 ]
-    ['272' FAILED_ATTEMPT_EVENTS                ]
-    ['273' FAILED_ATTEMPTS                      ]
-    ['274' FAILED_ATTEMPTS_TIME                 ]
-    ['388' FAULT_HIGH_LIMIT                     ]
-    ['389' FAULT_LOW_LIMIT                      ]
-    ['358' FAULT_PARAMETERS                     ]
-    ['463' FAULT_SIGNALS                        ]
-    ['359' FAULT_TYPE                           ]
-    ['39'  FAULT_VALUES                         ]
-    ['418' FD_BBMD_ADDRESS                      ]
-    ['419' FD_SUBSCRIPTION_LIFETIME             ]
-    ['40'  FEEDBACK_VALUE                       ]
-    ['41'  FILE_ACCESS_METHOD                   ]
-    ['42'  FILE_SIZE                            ]
-    ['43'  FILE_TYPE                            ]
-    ['44'  FIRMWARE_REVISION                    ]
-    ['464' FLOOR_TEXT                           ]
-    ['215' FULL_DUTY_BASELINE                   ]
-    ['323' GLOBAL_IDENTIFIER                    ]
-    ['465' GROUP_ID                             ]
-    ['346' GROUP_MEMBER_NAMES                   ]
-    ['345' GROUP_MEMBERS                        ]
-    ['467' GROUP_MODE                           ]
-    ['45'  HIGH_LIMIT                           ]
-    ['468' HIGHER_DECK                          ]
-    ['47'  IN_PROCESS                           ]
-    ['378' IN_PROGRESS                          ]
-    ['46'  INACTIVE_TEXT                        ]
-    ['394' INITIAL_TIMEOUT                      ]
-    ['181' INPUT_REFERENCE                      ]
-    ['469' INSTALLATION_ID                      ]
-    ['48'  INSTANCE_OF                          ]
-    ['379' INSTANTANEOUS_POWER                  ]
-    ['49'  INTEGRAL_CONSTANT                    ]
-    ['50'  INTEGRAL_CONSTANT_UNITS              ]
-    ['387' INTERFACE_VALUE                      ]
-    ['195' INTERVAL_OFFSET                      ]
-    ['400' IP_ADDRESS                           ]
-    ['401' IP_DEFAULT_GATEWAY                   ]
-    ['402' IP_DHCP_ENABLE                       ]
-    ['403' IP_DHCP_LEASE_TIME                   ]
-    ['404' IP_DHCP_LEASE_TIME_REMAINING         ]
-    ['405' IP_DHCP_SERVER                       ]
-    ['406' IP_DNS_SERVER                        ]
-    ['411' IP_SUBNET_MASK                       ]
-    ['436' IPV6_ADDRESS                         ]
-    ['442' IPV6_AUTO_ADDRESSING_ENABLE          ]
-    ['439' IPV6_DEFAULT_GATEWAY                 ]
-    ['443' IPV6_DHCP_LEASE_TIME                 ]
-    ['444' IPV6_DHCP_LEASE_TIME_REMAINING       ]
-    ['445' IPV6_DHCP_SERVER                     ]
-    ['441' IPV6_DNS_SERVER                      ]
-    ['437' IPV6_PREFIX_LENGTH                   ]
-    ['446' IPV6_ZONE_INDEX                      ]
-    ['344' IS_UTC                               ]
-    ['330' KEY_SETS                             ]
-    ['471' LANDING_CALL_CONTROL                 ]
-    ['470' LANDING_CALLS                        ]
-    ['472' LANDING_DOOR_STATUS                  ]
-    ['275' LAST_ACCESS_EVENT                    ]
-    ['276' LAST_ACCESS_POINT                    ]
-    ['432' LAST_COMMAND_TIME                    ]
-    ['277' LAST_CREDENTIAL_ADDED                ]
-    ['278' LAST_CREDENTIAL_ADDED_TIME           ]
-    ['279' LAST_CREDENTIAL_REMOVED              ]
-    ['280' LAST_CREDENTIAL_REMOVED_TIME         ]
-    ['331' LAST_KEY_SERVER                      ]
-    ['173' LAST_NOTIFY_RECORD                   ]
-    ['369' LAST_PRIORITY                        ]
-    ['196' LAST_RESTART_REASON                  ]
-    ['157' LAST_RESTORE_TIME                    ]
-    ['395' LAST_STATE_CHANGE                    ]
-    ['281' LAST_USE_TIME                        ]
-    ['166' LIFE_SAFETY_ALARM_VALUES             ]
-    ['380' LIGHTING_COMMAND                     ]
-    ['381' LIGHTING_COMMAND_DEFAULT_PRIORITY    ]
-    ['52'  LIMIT_ENABLE                         ]
-    ['182' LIMIT_MONITORING_INTERVAL            ]
-    ['420' LINK_SPEED                           ]
-    ['422' LINK_SPEED_AUTONEGOTIATE             ]
-    ['421' LINK_SPEEDS                          ]
-    ['53'  LIST_OF_GROUP_MEMBERS                ]
-    ['54'  LIST_OF_OBJECT_PROPERTY_REFERENCES   ]
-    ['56'  LOCAL_DATE                           ]
-    ['360' LOCAL_FORWARDING_ONLY                ]
-    ['57'  LOCAL_TIME                           ]
-    ['58'  LOCATION                             ]
-    ['233' LOCK_STATUS                          ]
-    ['282' LOCKOUT                              ]
-    ['283' LOCKOUT_RELINQUISH_TIME              ]
-    ['131' LOG_BUFFER                           ]
-    ['132' LOG_DEVICE_OBJECT_PROPERTY           ]
-    ['134' LOG_INTERVAL                         ]
-    ['183' LOGGING_OBJECT                       ]
-    ['184' LOGGING_RECORD                       ]
-    ['197' LOGGING_TYPE                         ]
-    ['390' LOW_DIFF_LIMIT                       ]
-    ['59'  LOW_LIMIT                            ]
-    ['473' LOWER_DECK                           ]
-    ['423' MAC_ADDRESS                          ]
-    ['474' MACHINE_ROOM_ID                      ]
-    ['158' MAINTENANCE_REQUIRED                 ]
-    ['475' MAKING_CAR_CALL                      ]
-    ['60'  MANIPULATED_VARIABLE_REFERENCE       ]
-    ['170' MANUAL_SLAVE_ADDRESS_BINDING         ]
-    ['234' MASKED_ALARM_VALUES                  ]
-    ['382' MAX_ACTUAL_VALUE                     ]
-    ['62'  MAX_APDU_LENGTH_ACCEPTED             ]
-    ['285' MAX_FAILED_ATTEMPTS                  ]
-    ['63'  MAX_INFO_FRAMES                      ]
-    ['64'  MAX_MASTER                           ]
-    ['65'  MAX_PRES_VALUE                       ]
-    ['167' MAX_SEGMENTS_ACCEPTED                ]
-    ['61'  MAXIMUM_OUTPUT                       ]
-    ['135' MAXIMUM_VALUE                        ]
-    ['149' MAXIMUM_VALUE_TIMESTAMP              ]
-    ['159' MEMBER_OF                            ]
-    ['347' MEMBER_STATUS_FLAGS                  ]
-    ['286' MEMBERS                              ]
-    ['383' MIN_ACTUAL_VALUE                     ]
-    ['69'  MIN_PRES_VALUE                       ]
-    ['66'  MINIMUM_OFF_TIME                     ]
-    ['67'  MINIMUM_ON_TIME                      ]
-    ['68'  MINIMUM_OUTPUT                       ]
-    ['136' MINIMUM_VALUE                        ]
-    ['150' MINIMUM_VALUE_TIMESTAMP              ]
-    ['160' MODE                                 ]
-    ['70'  MODEL_NAME                           ]
-    ['71'  MODIFICATION_DATE                    ]
-    ['287' MUSTER_POINT                         ]
-    ['288' NEGATIVE_ACCESS_RULES                ]
-    ['332' NETWORK_ACCESS_SECURITY_POLICIES     ]
-    ['424' NETWORK_INTERFACE_NAME               ]
-    ['425' NETWORK_NUMBER                       ]
-    ['426' NETWORK_NUMBER_QUALITY               ]
-    ['427' NETWORK_TYPE                         ]
-    ['476' NEXT_STOPPING_FLOOR                  ]
-    ['207' NODE_SUBTYPE                         ]
-    ['208' NODE_TYPE                            ]
-    ['17'  NOTIFICATION_CLASS                   ]
-    ['137' NOTIFICATION_THRESHOLD               ]
-    ['72'  NOTIFY_TYPE                          ]
-    ['73'  NUMBER_OF_APDU_RETRIES               ]
-    ['289' NUMBER_OF_AUTHENTICATION_POLICIES    ]
-    ['74'  NUMBER_OF_STATES                     ]
-    ['75'  OBJECT_IDENTIFIER                    ]
-    ['76'  OBJECT_LIST                          ]
-    ['77'  OBJECT_NAME                          ]
-    ['78'  OBJECT_PROPERTY_REFERENCE            ]
-    ['79'  OBJECT_TYPE                          ]
-    ['290' OCCUPANCY_COUNT                      ]
-    ['291' OCCUPANCY_COUNT_ADJUST               ]
-    ['292' OCCUPANCY_COUNT_ENABLE               ]
-    ['294' OCCUPANCY_LOWER_LIMIT                ]
-    ['295' OCCUPANCY_LOWER_LIMIT_ENFORCED       ]
-    ['296' OCCUPANCY_STATE                      ]
-    ['297' OCCUPANCY_UPPER_LIMIT                ]
-    ['298' OCCUPANCY_UPPER_LIMIT_ENFORCED       ]
-    ['477' OPERATION_DIRECTION                  ]
-    ['161' OPERATION_EXPECTED                   ]
-    ['80'  OPTIONAL                             ]
-    ['81'  OUT_OF_SERVICE                       ]
-    ['82'  OUTPUT_UNITS                         ]
-    ['333' PACKET_REORDER_TIME                  ]
-    ['300' PASSBACK_MODE                        ]
-    ['301' PASSBACK_TIMEOUT                     ]
-    ['478' PASSENGER_ALARM                      ]
-    ['84'  POLARITY                             ]
-    ['363' PORT_FILTER                          ]
-    ['302' POSITIVE_ACCESS_RULES                ]
-    ['384' POWER                                ]
-    ['479' POWER_MODE                           ]
-    ['185' PRESCALE                             ]
-    ['85'  PRESENT_VALUE                        ]
-    ['86'  PRIORITY                             ]
-    ['87'  PRIORITY_ARRAY                       ]
-    ['88'  PRIORITY_FOR_WRITING                 ]
-    ['89'  PROCESS_IDENTIFIER                   ]
-    ['361' PROCESS_IDENTIFIER_FILTER            ]
-    ['485' PROFILE_LOCATION                     ]
-    ['168' PROFILE_NAME                         ]
-    ['90'  PROGRAM_CHANGE                       ]
-    ['91'  PROGRAM_LOCATION                     ]
-    ['92'  PROGRAM_STATE                        ]
-    ['371' PROPERTY_LIST                        ]
-    ['93'  PROPORTIONAL_CONSTANT                ]
-    ['94'  PROPORTIONAL_CONSTANT_UNITS          ]
-    ['482' PROTOCOL_LEVEL                       ]
-    ['95'  PROTOCOL_CONFORMANCE_CLASS           ]
-    ['96'  PROTOCOL_OBJECT_TYPES_SUPPORTED      ]
-    ['139' PROTOCOL_REVISION                    ]
-    ['97'  PROTOCOL_SERVICES_SUPPORTED          ]
-    ['98'  PROTOCOL_VERSION                     ]
-    ['186' PULSE_RATE                           ]
-    ['99'  READ_ONLY                            ]
-    ['303' REASON_FOR_DISABLE                   ]
-    ['100' REASON_FOR_HALT                      ]
-    ['102' RECIPIENT_LIST                       ]
-    ['141' RECORD_COUNT                         ]
-    ['140' RECORDS_SINCE_NOTIFICATION           ]
-    ['483' REFERENCE_PORT                       ]
-    ['480' REGISTERED_CAR_CALL                  ]
-    ['103' RELIABILITY                          ]
-    ['357' RELIABILITY_EVALUATION_INHIBIT       ]
-    ['104' RELINQUISH_DEFAULT                   ]
-    ['491' REPRESENTS                           ]
-    ['218' REQUESTED_SHED_LEVEL                 ]
-    ['348' REQUESTED_UPDATE_INTERVAL            ]
-    ['105' REQUIRED                             ]
-    ['106' RESOLUTION                           ]
-    ['202' RESTART_NOTIFICATION_RECIPIENTS      ]
-    ['340' RESTORE_COMPLETION_TIME              ]
-    ['341' RESTORE_PREPARATION_TIME             ]
-    ['428' ROUTING_TABLE                        ]
-    ['187' SCALE                                ]
-    ['188' SCALE_FACTOR                         ]
-    ['174' SCHEDULE_DEFAULT                     ]
-    ['235' SECURED_STATUS                       ]
-    ['334' SECURITY_PDU_TIMEOUT                 ]
-    ['335' SECURITY_TIME_WINDOW                 ]
-    ['107' SEGMENTATION_SUPPORTED               ]
-    ['372' SERIAL_NUMBER                        ]
-    ['108' SETPOINT                             ]
-    ['109' SETPOINT_REFERENCE                   ]
-    ['162' SETTING                              ]
-    ['219' SHED_DURATION                        ]
-    ['220' SHED_LEVEL_DESCRIPTIONS              ]
-    ['221' SHED_LEVELS                          ]
-    ['163' SILENCED                             ]
-    ['171' SLAVE_ADDRESS_BINDING                ]
-    ['172' SLAVE_PROXY_ENABLE                   ]
-    ['142' START_TIME                           ]
-    ['396' STATE_CHANGE_VALUES                  ]
-    ['222' STATE_DESCRIPTION                    ]
-    ['110' STATE_TEXT                           ]
-    ['111' STATUS_FLAGS                         ]
-    ['143' STOP_TIME                            ]
-    ['144' STOP_WHEN_FULL                       ]
-    ['391' STRIKE_COUNT                         ]
-    ['209' STRUCTURED_OBJECT_LIST               ]
-    ['210' SUBORDINATE_ANNOTATIONS              ]
-    ['211' SUBORDINATE_LIST                     ]
-    ['487' SUBORDINATE_NODE_TYPES               ]
-    ['489' SUBORDINATE_RELATIONSHIPS            ]
-    ['488' SUBORDINATE_TAGS                     ]
-    ['362' SUBSCRIBED_RECIPIENTS                ]
-    ['305' SUPPORTED_FORMAT_CLASSES             ]
-    ['304' SUPPORTED_FORMATS                    ]
-    ['336' SUPPORTED_SECURITY_ALGORITHMS        ]
-    ['112' SYSTEM_STATUS                        ]
-    ['486' TAGS                                 ]
-    ['306' THREAT_AUTHORITY                     ]
-    ['307' THREAT_LEVEL                         ]
-    ['113' TIME_DELAY                           ]
-    ['356' TIME_DELAY_NORMAL                    ]
-    ['114' TIME_OF_ACTIVE_TIME_RESET            ]
-    ['203' TIME_OF_DEVICE_RESTART               ]
-    ['115' TIME_OF_STATE_COUNT_RESET            ]
-    ['392' TIME_OF_STRIKE_COUNT_RESET           ]
-    ['204' TIME_SYNCHRONIZATION_INTERVAL        ]
-    ['116' TIME_SYNCHRONIZATION_RECIPIENTS      ]
-    ['397' TIMER_RUNNING                        ]
-    ['398' TIMER_STATE                          ]
-    ['145' TOTAL_RECORD_COUNT                   ]
-    ['308' TRACE_FLAG                           ]
-    ['164' TRACKING_VALUE                       ]
-    ['309' TRANSACTION_NOTIFICATION_CLASS       ]
-    ['385' TRANSITION                           ]
-    ['205' TRIGGER                              ]
-    ['117' UNITS                                ]
-    ['118' UPDATE_INTERVAL                      ]
-    ['337' UPDATE_KEY_SET_TIMEOUT               ]
-    ['189' UPDATE_TIME                          ]
-    ['310' USER_EXTERNAL_IDENTIFIER             ]
-    ['311' USER_INFORMATION_REFERENCE           ]
-    ['317' USER_NAME                            ]
-    ['318' USER_TYPE                            ]
-    ['319' USES_REMAINING                       ]
-    ['119' UTC_OFFSET                           ]
-    ['206' UTC_TIME_SYNCHRONIZATION_RECIPIENTS  ]
-    ['146' VALID_SAMPLES                        ]
-    ['190' VALUE_BEFORE_CHANGE                  ]
-    ['192' VALUE_CHANGE_TIME                    ]
-    ['191' VALUE_SET                            ]
-    ['433' VALUE_SOURCE                         ]
-    ['434' VALUE_SOURCE_ARRAY                   ]
-    ['151' VARIANCE_VALUE                       ]
-    ['120' VENDOR_IDENTIFIER                    ]
-    ['121' VENDOR_NAME                          ]
-    ['326' VERIFICATION_TIME                    ]
-    ['429' VIRTUAL_MAC_ADDRESS_TABLE            ]
-    ['122' VT_CLASSES_SUPPORTED                 ]
-    ['123' WEEKLY_SCHEDULE                      ]
-    ['147' WINDOW_INTERVAL                      ]
-    ['148' WINDOW_SAMPLES                       ]
-    ['370' WRITE_STATUS                         ]
-    ['320' ZONE_FROM                            ]
-    ['165' ZONE_MEMBERS                         ]
-    ['321' ZONE_TO                              ]
-
-    // plc4x definition
-    ['9999' VENDOR_PROPRIETARY_VALUE            ]
-]
-
 [type BACnetPropertyIdentifierTagged(uint 8 tagNumber, TagClass tagClass)
     [simple   BACnetTagHeader
                         header                                                                              ]