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/17 10:16:35 UTC

[plc4x] branch develop updated (59437f7d5e -> 48521c3369)

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

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


    from 59437f7d5e feat(bacnet): map abort and reject reason to enums
     new 9a623d16f9 feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVProperty
     new 48521c3369 feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple

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


Summary of changes:
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |  30 ++-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |  34 ++-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  14 +-
 ...OVNotificationMultipleListOfCovNotifications.go | 123 ++-------
 ...tificationMultipleListOfCovNotificationsList.go | 248 ++++++++++++++++++
 ...tConfirmedServiceRequestSubscribeCOVProperty.go | 279 +++++++++++++++++++-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go | 246 +++++++++++++++++-
 ...yMultipleListOfCovSubscriptionSpecifications.go | 280 +++++++++++++++++++++
 ...tipleListOfCovSubscriptionSpecificationsList.go | 248 ++++++++++++++++++
 ...ListOfCovSubscriptionSpecificationsReference.go | 245 ++++++++++++++++++
 ...entSummaries.go => BACnetEventSummariesList.go} |  59 ++---
 .../model/BACnetServiceAckGetEventInformation.go   |  16 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    | 123 ++++++---
 13 files changed, 1741 insertions(+), 204 deletions(-)
 create mode 100644 plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go
 create mode 100644 plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go
 create mode 100644 plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
 create mode 100644 plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go
 rename plc4go/internal/plc4go/bacnetip/readwrite/model/{BACnetEventSummaries.go => BACnetEventSummariesList.go} (72%)


[plc4x] 02/02: feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple

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

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

commit 48521c33691c8ff42a72430c1871cb82d6b5206f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 17 12:16:28 2022 +0200

    feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
---
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |  30 ++-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |  34 ++-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  14 +-
 ...OVNotificationMultipleListOfCovNotifications.go | 123 ++-------
 ...tificationMultipleListOfCovNotificationsList.go | 248 ++++++++++++++++++
 ...edServiceRequestSubscribeCOVPropertyMultiple.go | 246 +++++++++++++++++-
 ...yMultipleListOfCovSubscriptionSpecifications.go | 280 +++++++++++++++++++++
 ...tipleListOfCovSubscriptionSpecificationsList.go | 248 ++++++++++++++++++
 ...ListOfCovSubscriptionSpecificationsReference.go | 245 ++++++++++++++++++
 ...entSummaries.go => BACnetEventSummariesList.go} |  59 ++---
 .../model/BACnetServiceAckGetEventInformation.go   |  16 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    | 105 +++++---
 12 files changed, 1455 insertions(+), 193 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
index af151743dc..43d208bd08 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
@@ -103,19 +103,13 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 		}
 		return model.BACnetTagPayloadEnumeratedParse(io, actualLength)
 	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications":
-		tagNumber, err := utils.StrToUint8(arguments[0])
-		if err != nil {
-			return nil, errors.Wrap(err, "Error parsing")
-		}
-		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(io, tagNumber)
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(io)
 	case "BACnetTagPayloadOctetString":
 		actualLength, err := utils.StrToUint32(arguments[0])
 		if err != nil {
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetTagPayloadOctetStringParse(io, actualLength)
-	case "BACnetEventSummaries":
-		return model.BACnetEventSummariesParse(io)
 	case "BACnetServiceAckAtomicReadFileStreamOrRecord":
 		return model.BACnetServiceAckAtomicReadFileStreamOrRecordParse(io)
 	case "NPDUControl":
@@ -227,6 +221,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 	case "BACnetError":
 		errorChoice := model.BACnetConfirmedServiceChoiceByName(arguments[0])
 		return model.BACnetErrorParse(io, errorChoice)
+	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(io, tagNumber)
 	case "BACnetTimeStamp":
 		return model.BACnetTimeStampParse(io)
 	case "BACnetNotificationParameters":
@@ -254,6 +254,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetEventProritiesParse(io, tagNumber)
+	case "BACnetEventSummariesList":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetEventSummariesListParse(io, tagNumber)
 	case "BACnetAddress":
 		return model.BACnetAddressParse(io)
 	case "BACnetTagPayloadUnsignedInteger":
@@ -262,6 +268,8 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetTagPayloadUnsignedIntegerParse(io, actualLength)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(io)
 	case "BACnetApplicationTag":
 		return model.BACnetApplicationTagParse(io)
 	case "BACnetTagPayloadBitString":
@@ -316,6 +324,8 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.SubscribeCOVPropertyMultipleErrorFirstFailedSubscriptionParse(io, tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(io)
 	case "BACnetWriteAccessSpecification":
 		return model.BACnetWriteAccessSpecificationParse(io)
 	case "BACnetServiceAck":
@@ -338,6 +348,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetActionParse(io, tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(io, tagNumber)
 	case "NPDU":
 		npduLength, err := utils.StrToUint16(arguments[0])
 		if err != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
index d0a601dab2..612fae54b4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
@@ -122,12 +122,7 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		actualLength := uint32(parsedUint0)
 		return model.BACnetTagPayloadEnumeratedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
 	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications":
-		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
-		if err != nil {
-			return nil, err
-		}
-		tagNumber := uint8(parsedUint0)
-		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadOctetString":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 32)
 		if err != nil {
@@ -135,8 +130,6 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		actualLength := uint32(parsedUint0)
 		return model.BACnetTagPayloadOctetStringParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
-	case "BACnetEventSummaries":
-		return model.BACnetEventSummariesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetServiceAckAtomicReadFileStreamOrRecord":
 		return model.BACnetServiceAckAtomicReadFileStreamOrRecordParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "NPDUControl":
@@ -261,6 +254,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 	case "BACnetError":
 		errorChoice := model.BACnetConfirmedServiceChoiceByName(parserArguments[0])
 		return model.BACnetErrorParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), errorChoice)
+	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
 	case "BACnetTimeStamp":
 		return model.BACnetTimeStampParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetNotificationParameters":
@@ -292,6 +292,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.BACnetEventProritiesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetEventSummariesList":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		return model.BACnetEventSummariesListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
 	case "BACnetAddress":
 		return model.BACnetAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadUnsignedInteger":
@@ -301,6 +308,8 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		actualLength := uint32(parsedUint0)
 		return model.BACnetTagPayloadUnsignedIntegerParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetApplicationTag":
 		return model.BACnetApplicationTagParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadBitString":
@@ -362,6 +371,8 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.SubscribeCOVPropertyMultipleErrorFirstFailedSubscriptionParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetWriteAccessSpecification":
 		return model.BACnetWriteAccessSpecificationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetServiceAck":
@@ -387,6 +398,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.BACnetActionParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
 	case "NPDU":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 16)
 		if err != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index 39c6e77f2d..a6be2a06a3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -34,7 +34,7 @@ type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple struct {
 	InitiatingDeviceIdentifier  *BACnetContextTagObjectIdentifier
 	TimeRemaining               *BACnetContextTagUnsignedInteger
 	Timestamp                   *BACnetTimeStampEnclosed
-	ListOfCovNotifications      *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	ListOfCovNotifications      *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
 
 	// Arguments.
 	ServiceRequestLength uint16
@@ -52,7 +52,7 @@ type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple interface {
 	// GetTimestamp returns Timestamp (property field)
 	GetTimestamp() *BACnetTimeStampEnclosed
 	// GetListOfCovNotifications returns ListOfCovNotifications (property field)
-	GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetTimes
 	return m.Timestamp
 }
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList {
 	return m.ListOfCovNotifications
 }
 
@@ -113,7 +113,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetListO
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, timeRemaining *BACnetContextTagUnsignedInteger, timestamp *BACnetTimeStampEnclosed, listOfCovNotifications *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, serviceRequestLength uint16) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, timeRemaining *BACnetContextTagUnsignedInteger, timestamp *BACnetTimeStampEnclosed, listOfCovNotifications *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList, serviceRequestLength uint16) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
 	_result := &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple{
 		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
 		InitiatingDeviceIdentifier:    initiatingDeviceIdentifier,
@@ -250,11 +250,11 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuff
 	if pullErr := readBuffer.PullContext("listOfCovNotifications"); pullErr != nil {
 		return nil, pullErr
 	}
-	_listOfCovNotifications, _listOfCovNotificationsErr := BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer, uint8(uint8(4)))
+	_listOfCovNotifications, _listOfCovNotificationsErr := BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(readBuffer, uint8(uint8(4)))
 	if _listOfCovNotificationsErr != nil {
 		return nil, errors.Wrap(_listOfCovNotificationsErr, "Error parsing 'listOfCovNotifications' field")
 	}
-	listOfCovNotifications := CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(_listOfCovNotifications)
+	listOfCovNotifications := CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(_listOfCovNotifications)
 	if closeErr := readBuffer.CloseContext("listOfCovNotifications"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -269,7 +269,7 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuff
 		InitiatingDeviceIdentifier:    CastBACnetContextTagObjectIdentifier(initiatingDeviceIdentifier),
 		TimeRemaining:                 CastBACnetContextTagUnsignedInteger(timeRemaining),
 		Timestamp:                     CastBACnetTimeStampEnclosed(timestamp),
-		ListOfCovNotifications:        CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(listOfCovNotifications),
+		ListOfCovNotifications:        CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(listOfCovNotifications),
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go
index 1f4b1a508a..e1147c5420 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go
@@ -28,29 +28,20 @@ import (
 
 // BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications is the data-structure of this message
 type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications struct {
-	OpeningTag                *BACnetOpeningTag
 	MonitoredObjectIdentifier *BACnetContextTagObjectIdentifier
-	InnerOpeningTag           *BACnetOpeningTag
+	OpeningTag                *BACnetOpeningTag
 	ListOfValues              []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue
-	InnerClosingTag           *BACnetClosingTag
 	ClosingTag                *BACnetClosingTag
-
-	// Arguments.
-	TagNumber uint8
 }
 
 // IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications is the corresponding interface of BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
 type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications interface {
-	// GetOpeningTag returns OpeningTag (property field)
-	GetOpeningTag() *BACnetOpeningTag
 	// GetMonitoredObjectIdentifier returns MonitoredObjectIdentifier (property field)
 	GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier
-	// GetInnerOpeningTag returns InnerOpeningTag (property field)
-	GetInnerOpeningTag() *BACnetOpeningTag
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
 	// GetListOfValues returns ListOfValues (property field)
 	GetListOfValues() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue
-	// GetInnerClosingTag returns InnerClosingTag (property field)
-	GetInnerClosingTag() *BACnetClosingTag
 	// GetClosingTag returns ClosingTag (property field)
 	GetClosingTag() *BACnetClosingTag
 	// GetLengthInBytes returns the length in bytes
@@ -66,26 +57,18 @@ type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNoti
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetOpeningTag() *BACnetOpeningTag {
-	return m.OpeningTag
-}
-
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier {
 	return m.MonitoredObjectIdentifier
 }
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetInnerOpeningTag() *BACnetOpeningTag {
-	return m.InnerOpeningTag
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetListOfValues() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue {
 	return m.ListOfValues
 }
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetInnerClosingTag() *BACnetClosingTag {
-	return m.InnerClosingTag
-}
-
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetClosingTag() *BACnetClosingTag {
 	return m.ClosingTag
 }
@@ -96,8 +79,8 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(openingTag *BACnetOpeningTag, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, innerOpeningTag *BACnetOpeningTag, listOfValues []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue, innerClosingTag *BACnetClosingTag, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
-	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications{OpeningTag: openingTag, MonitoredObjectIdentifier: monitoredObjectIdentifier, InnerOpeningTag: innerOpeningTag, ListOfValues: listOfValues, InnerClosingTag: innerClosingTag, ClosingTag: closingTag, TagNumber: tagNumber}
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, listOfValues []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
+	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications{MonitoredObjectIdentifier: monitoredObjectIdentifier, OpeningTag: openingTag, ListOfValues: listOfValues, ClosingTag: closingTag}
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
@@ -121,14 +104,11 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
-	// Simple field (openingTag)
-	lengthInBits += m.OpeningTag.GetLengthInBits()
-
 	// Simple field (monitoredObjectIdentifier)
 	lengthInBits += m.MonitoredObjectIdentifier.GetLengthInBits()
 
-	// Simple field (innerOpeningTag)
-	lengthInBits += m.InnerOpeningTag.GetLengthInBits()
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
 
 	// Array field
 	if len(m.ListOfValues) > 0 {
@@ -137,9 +117,6 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		}
 	}
 
-	// Simple field (innerClosingTag)
-	lengthInBits += m.InnerClosingTag.GetLengthInBits()
-
 	// Simple field (closingTag)
 	lengthInBits += m.ClosingTag.GetLengthInBits()
 
@@ -150,7 +127,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, error) {
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, error) {
 	positionAware := readBuffer
 	_ = positionAware
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications"); pullErr != nil {
@@ -159,19 +136,6 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Simple Field (openingTag)
-	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
-		return nil, pullErr
-	}
-	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
-	if _openingTagErr != nil {
-		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
-	}
-	openingTag := CastBACnetOpeningTag(_openingTag)
-	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
-		return nil, closeErr
-	}
-
 	// Simple Field (monitoredObjectIdentifier)
 	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
 		return nil, pullErr
@@ -185,16 +149,16 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 		return nil, closeErr
 	}
 
-	// Simple Field (innerOpeningTag)
-	if pullErr := readBuffer.PullContext("innerOpeningTag"); pullErr != nil {
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_innerOpeningTag, _innerOpeningTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_OPENING_TAG))
-	if _innerOpeningTagErr != nil {
-		return nil, errors.Wrap(_innerOpeningTagErr, "Error parsing 'innerOpeningTag' field")
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
 	}
-	innerOpeningTag := CastBACnetOpeningTag(_innerOpeningTag)
-	if closeErr := readBuffer.CloseContext("innerOpeningTag"); closeErr != nil {
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -218,24 +182,11 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 		return nil, closeErr
 	}
 
-	// Simple Field (innerClosingTag)
-	if pullErr := readBuffer.PullContext("innerClosingTag"); pullErr != nil {
-		return nil, pullErr
-	}
-	_innerClosingTag, _innerClosingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_CLOSING_TAG))
-	if _innerClosingTagErr != nil {
-		return nil, errors.Wrap(_innerClosingTagErr, "Error parsing 'innerClosingTag' field")
-	}
-	innerClosingTag := CastBACnetClosingTag(_innerClosingTag)
-	if closeErr := readBuffer.CloseContext("innerClosingTag"); closeErr != nil {
-		return nil, closeErr
-	}
-
 	// Simple Field (closingTag)
 	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_CLOSING_TAG))
 	if _closingTagErr != nil {
 		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
 	}
@@ -249,7 +200,7 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 	}
 
 	// Create the instance
-	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(openingTag, monitoredObjectIdentifier, innerOpeningTag, listOfValues, innerClosingTag, closingTag, tagNumber), nil
+	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(monitoredObjectIdentifier, openingTag, listOfValues, closingTag), nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -259,18 +210,6 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		return pushErr
 	}
 
-	// Simple Field (openingTag)
-	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
-		return pushErr
-	}
-	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
-	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
-		return popErr
-	}
-	if _openingTagErr != nil {
-		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
-	}
-
 	// Simple Field (monitoredObjectIdentifier)
 	if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
 		return pushErr
@@ -283,16 +222,16 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
 	}
 
-	// Simple Field (innerOpeningTag)
-	if pushErr := writeBuffer.PushContext("innerOpeningTag"); pushErr != nil {
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
 		return pushErr
 	}
-	_innerOpeningTagErr := m.InnerOpeningTag.Serialize(writeBuffer)
-	if popErr := writeBuffer.PopContext("innerOpeningTag"); popErr != nil {
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
 		return popErr
 	}
-	if _innerOpeningTagErr != nil {
-		return errors.Wrap(_innerOpeningTagErr, "Error serializing 'innerOpeningTag' field")
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
 	}
 
 	// Array Field (listOfValues)
@@ -311,18 +250,6 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		}
 	}
 
-	// Simple Field (innerClosingTag)
-	if pushErr := writeBuffer.PushContext("innerClosingTag"); pushErr != nil {
-		return pushErr
-	}
-	_innerClosingTagErr := m.InnerClosingTag.Serialize(writeBuffer)
-	if popErr := writeBuffer.PopContext("innerClosingTag"); popErr != nil {
-		return popErr
-	}
-	if _innerClosingTagErr != nil {
-		return errors.Wrap(_innerClosingTagErr, "Error serializing 'innerClosingTag' field")
-	}
-
 	// Simple Field (closingTag)
 	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
 		return pushErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go
new file mode 100644
index 0000000000..a5923b955a
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go
@@ -0,0 +1,248 @@
+/*
+ * 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.
+
+// BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList is the data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList struct {
+	OpeningTag     *BACnetOpeningTag
+	Specifications []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	ClosingTag     *BACnetClosingTag
+
+	// Arguments.
+	TagNumber uint8
+}
+
+// IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList is the corresponding interface of BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
+type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList interface {
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
+	// GetSpecifications returns Specifications (property field)
+	GetSpecifications() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	// GetClosingTag returns ClosingTag (property field)
+	GetClosingTag() *BACnetClosingTag
+	// 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 *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetSpecifications() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
+	return m.Specifications
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetClosingTag() *BACnetClosingTag {
+	return m.ClosingTag
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(openingTag *BACnetOpeningTag, specifications []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList {
+	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList{OpeningTag: openingTag, Specifications: specifications, ClosingTag: closingTag, TagNumber: tagNumber}
+}
+
+func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
+
+	// Array field
+	if len(m.Specifications) > 0 {
+		for _, element := range m.Specifications {
+			lengthInBits += element.GetLengthInBits()
+		}
+	}
+
+	// Simple field (closingTag)
+	lengthInBits += m.ClosingTag.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
+	}
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Array field (specifications)
+	if pullErr := readBuffer.PullContext("specifications", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Terminated array
+	specifications := make([]*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, 0)
+	{
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, tagNumber)) {
+			_item, _err := BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'specifications' field")
+			}
+			specifications = append(specifications, CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(_item))
+
+		}
+	}
+	if closeErr := readBuffer.CloseContext("specifications", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (closingTag)
+	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	if _closingTagErr != nil {
+		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
+	}
+	closingTag := CastBACnetClosingTag(_closingTag)
+	if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(openingTag, specifications, closingTag, tagNumber), nil
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+		return pushErr
+	}
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+		return popErr
+	}
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+	}
+
+	// Array Field (specifications)
+	if m.Specifications != nil {
+		if pushErr := writeBuffer.PushContext("specifications", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, _element := range m.Specifications {
+			_elementErr := _element.Serialize(writeBuffer)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'specifications' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("specifications", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Simple Field (closingTag)
+	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+		return pushErr
+	}
+	_closingTagErr := m.ClosingTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("closingTag"); popErr != nil {
+		return popErr
+	}
+	if _closingTagErr != nil {
+		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) 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()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index a32d9c0f50..ccb6f283c0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -21,6 +21,8 @@ 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.
@@ -28,6 +30,11 @@ import (
 // BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple is the data-structure of this message
 type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple struct {
 	*BACnetConfirmedServiceRequest
+	SubscriberProcessIdentifier         *BACnetContextTagUnsignedInteger
+	IssueConfirmedNotifications         *BACnetContextTagBoolean
+	Lifetime                            *BACnetContextTagUnsignedInteger
+	MaxNotificationDelay                *BACnetContextTagUnsignedInteger
+	ListOfCovSubscriptionSpecifications *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
 
 	// Arguments.
 	ServiceRequestLength uint16
@@ -36,6 +43,16 @@ type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple struct {
 // IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
 type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple interface {
 	IBACnetConfirmedServiceRequest
+	// GetSubscriberProcessIdentifier returns SubscriberProcessIdentifier (property field)
+	GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger
+	// GetIssueConfirmedNotifications returns IssueConfirmedNotifications (property field)
+	GetIssueConfirmedNotifications() *BACnetContextTagBoolean
+	// GetLifetime returns Lifetime (property field)
+	GetLifetime() *BACnetContextTagUnsignedInteger
+	// GetMaxNotificationDelay returns MaxNotificationDelay (property field)
+	GetMaxNotificationDelay() *BACnetContextTagUnsignedInteger
+	// GetListOfCovSubscriptionSpecifications returns ListOfCovSubscriptionSpecifications (property field)
+	GetListOfCovSubscriptionSpecifications() *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -65,10 +82,45 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetParent()
 	return m.BACnetConfirmedServiceRequest
 }
 
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger {
+	return m.SubscriberProcessIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetIssueConfirmedNotifications() *BACnetContextTagBoolean {
+	return m.IssueConfirmedNotifications
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLifetime() *BACnetContextTagUnsignedInteger {
+	return m.Lifetime
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetMaxNotificationDelay() *BACnetContextTagUnsignedInteger {
+	return m.MaxNotificationDelay
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetListOfCovSubscriptionSpecifications() *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList {
+	return m.ListOfCovSubscriptionSpecifications
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
 // NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, issueConfirmedNotifications *BACnetContextTagBoolean, lifetime *BACnetContextTagUnsignedInteger, maxNotificationDelay *BACnetContextTagUnsignedInteger, listOfCovSubscriptionSpecifications *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList, serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVProper [...]
 	_result := &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{
-		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(serviceRequestLength),
+		SubscriberProcessIdentifier:         subscriberProcessIdentifier,
+		IssueConfirmedNotifications:         issueConfirmedNotifications,
+		Lifetime:                            lifetime,
+		MaxNotificationDelay:                maxNotificationDelay,
+		ListOfCovSubscriptionSpecifications: listOfCovSubscriptionSpecifications,
+		BACnetConfirmedServiceRequest:       NewBACnetConfirmedServiceRequest(serviceRequestLength),
 	}
 	_result.Child = _result
 	return _result
@@ -101,6 +153,27 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLengthInB
 func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.GetParentLengthInBits())
 
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += m.SubscriberProcessIdentifier.GetLengthInBits()
+
+	// Optional Field (issueConfirmedNotifications)
+	if m.IssueConfirmedNotifications != nil {
+		lengthInBits += (*m.IssueConfirmedNotifications).GetLengthInBits()
+	}
+
+	// Optional Field (lifetime)
+	if m.Lifetime != nil {
+		lengthInBits += (*m.Lifetime).GetLengthInBits()
+	}
+
+	// Optional Field (maxNotificationDelay)
+	if m.MaxNotificationDelay != nil {
+		lengthInBits += (*m.MaxNotificationDelay).GetLengthInBits()
+	}
+
+	// Simple field (listOfCovSubscriptionSpecifications)
+	lengthInBits += m.ListOfCovSubscriptionSpecifications.GetLengthInBits()
+
 	return lengthInBits
 }
 
@@ -117,9 +190,93 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer u
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Validation
-	if !(bool((1) == (2))) {
-		return nil, utils.ParseValidationError{"TODO: implement me"}
+	// Simple Field (subscriberProcessIdentifier)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER))
+	if _subscriberProcessIdentifierErr != nil {
+		return nil, errors.Wrap(_subscriberProcessIdentifierErr, "Error parsing 'subscriberProcessIdentifier' field")
+	}
+	subscriberProcessIdentifier := CastBACnetContextTagUnsignedInteger(_subscriberProcessIdentifier)
+	if closeErr := readBuffer.CloseContext("subscriberProcessIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (issueConfirmedNotifications) (Can be skipped, if a given expression evaluates to false)
+	var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("issueConfirmedNotifications"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(1), 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 'issueConfirmedNotifications' field")
+		default:
+			issueConfirmedNotifications = CastBACnetContextTagBoolean(_val)
+			if closeErr := readBuffer.CloseContext("issueConfirmedNotifications"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Optional Field (lifetime) (Can be skipped, if a given expression evaluates to false)
+	var lifetime *BACnetContextTagUnsignedInteger = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("lifetime"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(2), BACnetDataType_UNSIGNED_INTEGER)
+		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 'lifetime' field")
+		default:
+			lifetime = CastBACnetContextTagUnsignedInteger(_val)
+			if closeErr := readBuffer.CloseContext("lifetime"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Optional Field (maxNotificationDelay) (Can be skipped, if a given expression evaluates to false)
+	var maxNotificationDelay *BACnetContextTagUnsignedInteger = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("maxNotificationDelay"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+		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 'maxNotificationDelay' field")
+		default:
+			maxNotificationDelay = CastBACnetContextTagUnsignedInteger(_val)
+			if closeErr := readBuffer.CloseContext("maxNotificationDelay"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Simple Field (listOfCovSubscriptionSpecifications)
+	if pullErr := readBuffer.PullContext("listOfCovSubscriptionSpecifications"); pullErr != nil {
+		return nil, pullErr
+	}
+	_listOfCovSubscriptionSpecifications, _listOfCovSubscriptionSpecificationsErr := BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(readBuffer, uint8(uint8(4)))
+	if _listOfCovSubscriptionSpecificationsErr != nil {
+		return nil, errors.Wrap(_listOfCovSubscriptionSpecificationsErr, "Error parsing 'listOfCovSubscriptionSpecifications' field")
+	}
+	listOfCovSubscriptionSpecifications := CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(_listOfCovSubscriptionSpecifications)
+	if closeErr := readBuffer.CloseContext("listOfCovSubscriptionSpecifications"); closeErr != nil {
+		return nil, closeErr
 	}
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"); closeErr != nil {
@@ -128,7 +285,12 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer u
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{
-		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
+		SubscriberProcessIdentifier:         CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		IssueConfirmedNotifications:         CastBACnetContextTagBoolean(issueConfirmedNotifications),
+		Lifetime:                            CastBACnetContextTagUnsignedInteger(lifetime),
+		MaxNotificationDelay:                CastBACnetContextTagUnsignedInteger(maxNotificationDelay),
+		ListOfCovSubscriptionSpecifications: CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(listOfCovSubscriptionSpecifications),
+		BACnetConfirmedServiceRequest:       &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
 	return _child, nil
@@ -142,6 +304,78 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) Serialize(wr
 			return pushErr
 		}
 
+		// Simple Field (subscriberProcessIdentifier)
+		if pushErr := writeBuffer.PushContext("subscriberProcessIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_subscriberProcessIdentifierErr := m.SubscriberProcessIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("subscriberProcessIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _subscriberProcessIdentifierErr != nil {
+			return errors.Wrap(_subscriberProcessIdentifierErr, "Error serializing 'subscriberProcessIdentifier' field")
+		}
+
+		// Optional Field (issueConfirmedNotifications) (Can be skipped, if the value is null)
+		var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+		if m.IssueConfirmedNotifications != nil {
+			if pushErr := writeBuffer.PushContext("issueConfirmedNotifications"); pushErr != nil {
+				return pushErr
+			}
+			issueConfirmedNotifications = m.IssueConfirmedNotifications
+			_issueConfirmedNotificationsErr := issueConfirmedNotifications.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("issueConfirmedNotifications"); popErr != nil {
+				return popErr
+			}
+			if _issueConfirmedNotificationsErr != nil {
+				return errors.Wrap(_issueConfirmedNotificationsErr, "Error serializing 'issueConfirmedNotifications' field")
+			}
+		}
+
+		// Optional Field (lifetime) (Can be skipped, if the value is null)
+		var lifetime *BACnetContextTagUnsignedInteger = nil
+		if m.Lifetime != nil {
+			if pushErr := writeBuffer.PushContext("lifetime"); pushErr != nil {
+				return pushErr
+			}
+			lifetime = m.Lifetime
+			_lifetimeErr := lifetime.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("lifetime"); popErr != nil {
+				return popErr
+			}
+			if _lifetimeErr != nil {
+				return errors.Wrap(_lifetimeErr, "Error serializing 'lifetime' field")
+			}
+		}
+
+		// Optional Field (maxNotificationDelay) (Can be skipped, if the value is null)
+		var maxNotificationDelay *BACnetContextTagUnsignedInteger = nil
+		if m.MaxNotificationDelay != nil {
+			if pushErr := writeBuffer.PushContext("maxNotificationDelay"); pushErr != nil {
+				return pushErr
+			}
+			maxNotificationDelay = m.MaxNotificationDelay
+			_maxNotificationDelayErr := maxNotificationDelay.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("maxNotificationDelay"); popErr != nil {
+				return popErr
+			}
+			if _maxNotificationDelayErr != nil {
+				return errors.Wrap(_maxNotificationDelayErr, "Error serializing 'maxNotificationDelay' field")
+			}
+		}
+
+		// Simple Field (listOfCovSubscriptionSpecifications)
+		if pushErr := writeBuffer.PushContext("listOfCovSubscriptionSpecifications"); pushErr != nil {
+			return pushErr
+		}
+		_listOfCovSubscriptionSpecificationsErr := m.ListOfCovSubscriptionSpecifications.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("listOfCovSubscriptionSpecifications"); popErr != nil {
+			return popErr
+		}
+		if _listOfCovSubscriptionSpecificationsErr != nil {
+			return errors.Wrap(_listOfCovSubscriptionSpecificationsErr, "Error serializing 'listOfCovSubscriptionSpecifications' field")
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"); popErr != nil {
 			return popErr
 		}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go
new file mode 100644
index 0000000000..f9781ee82b
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go
@@ -0,0 +1,280 @@
+/*
+ * 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.
+
+// BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications is the data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications struct {
+	MonitoredObjectIdentifier *BACnetContextTagObjectIdentifier
+	OpeningTag                *BACnetOpeningTag
+	ListOfCovReferences       []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+	ClosingTag                *BACnetClosingTag
+}
+
+// IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications interface {
+	// GetMonitoredObjectIdentifier returns MonitoredObjectIdentifier (property field)
+	GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
+	// GetListOfCovReferences returns ListOfCovReferences (property field)
+	GetListOfCovReferences() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+	// GetClosingTag returns ClosingTag (property field)
+	GetClosingTag() *BACnetClosingTag
+	// 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 *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier {
+	return m.MonitoredObjectIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetListOfCovReferences() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference {
+	return m.ListOfCovReferences
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetClosingTag() *BACnetClosingTag {
+	return m.ClosingTag
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, listOfCovReferences []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications{MonitoredObjectIdentifier: monitoredObjectIdentifier, OpeningTag: openingTag, ListOfCovReferences: listOfCovReferences, ClosingTag: closingTag}
+}
+
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.GetLengthInBits()
+
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
+
+	// Array field
+	if len(m.ListOfCovReferences) > 0 {
+		for _, element := range m.ListOfCovReferences {
+			lengthInBits += element.GetLengthInBits()
+		}
+	}
+
+	// Simple field (closingTag)
+	lengthInBits += m.ClosingTag.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_BACNET_OBJECT_IDENTIFIER))
+	if _monitoredObjectIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredObjectIdentifierErr, "Error parsing 'monitoredObjectIdentifier' field")
+	}
+	monitoredObjectIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredObjectIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredObjectIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
+	}
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Array field (listOfCovReferences)
+	if pullErr := readBuffer.PullContext("listOfCovReferences", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Terminated array
+	listOfCovReferences := make([]*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference, 0)
+	{
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, 1)) {
+			_item, _err := BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'listOfCovReferences' field")
+			}
+			listOfCovReferences = append(listOfCovReferences, CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(_item))
+
+		}
+	}
+	if closeErr := readBuffer.CloseContext("listOfCovReferences", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (closingTag)
+	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	if _closingTagErr != nil {
+		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
+	}
+	closingTag := CastBACnetClosingTag(_closingTag)
+	if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(monitoredObjectIdentifier, openingTag, listOfCovReferences, closingTag), nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
+		return pushErr
+	}
+	_monitoredObjectIdentifierErr := m.MonitoredObjectIdentifier.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("monitoredObjectIdentifier"); popErr != nil {
+		return popErr
+	}
+	if _monitoredObjectIdentifierErr != nil {
+		return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
+	}
+
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+		return pushErr
+	}
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+		return popErr
+	}
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+	}
+
+	// Array Field (listOfCovReferences)
+	if m.ListOfCovReferences != nil {
+		if pushErr := writeBuffer.PushContext("listOfCovReferences", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, _element := range m.ListOfCovReferences {
+			_elementErr := _element.Serialize(writeBuffer)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'listOfCovReferences' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("listOfCovReferences", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Simple Field (closingTag)
+	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+		return pushErr
+	}
+	_closingTagErr := m.ClosingTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("closingTag"); popErr != nil {
+		return popErr
+	}
+	if _closingTagErr != nil {
+		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) 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()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
new file mode 100644
index 0000000000..087ec5c78b
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
@@ -0,0 +1,248 @@
+/*
+ * 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.
+
+// BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList is the data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList struct {
+	OpeningTag     *BACnetOpeningTag
+	Specifications []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+	ClosingTag     *BACnetClosingTag
+
+	// Arguments.
+	TagNumber uint8
+}
+
+// IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList interface {
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
+	// GetSpecifications returns Specifications (property field)
+	GetSpecifications() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+	// GetClosingTag returns ClosingTag (property field)
+	GetClosingTag() *BACnetClosingTag
+	// 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 *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetSpecifications() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications {
+	return m.Specifications
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetClosingTag() *BACnetClosingTag {
+	return m.ClosingTag
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(openingTag *BACnetOpeningTag, specifications []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList{OpeningTag: openingTag, Specifications: specifications, ClosingTag: closingTag, TagNumber: tagNumber}
+}
+
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
+
+	// Array field
+	if len(m.Specifications) > 0 {
+		for _, element := range m.Specifications {
+			lengthInBits += element.GetLengthInBits()
+		}
+	}
+
+	// Simple field (closingTag)
+	lengthInBits += m.ClosingTag.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
+	}
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Array field (specifications)
+	if pullErr := readBuffer.PullContext("specifications", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Terminated array
+	specifications := make([]*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications, 0)
+	{
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, tagNumber)) {
+			_item, _err := BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'specifications' field")
+			}
+			specifications = append(specifications, CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(_item))
+
+		}
+	}
+	if closeErr := readBuffer.CloseContext("specifications", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (closingTag)
+	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	if _closingTagErr != nil {
+		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
+	}
+	closingTag := CastBACnetClosingTag(_closingTag)
+	if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(openingTag, specifications, closingTag, tagNumber), nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+		return pushErr
+	}
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+		return popErr
+	}
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+	}
+
+	// Array Field (specifications)
+	if m.Specifications != nil {
+		if pushErr := writeBuffer.PushContext("specifications", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, _element := range m.Specifications {
+			_elementErr := _element.Serialize(writeBuffer)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'specifications' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("specifications", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Simple Field (closingTag)
+	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+		return pushErr
+	}
+	_closingTagErr := m.ClosingTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("closingTag"); popErr != nil {
+		return popErr
+	}
+	if _closingTagErr != nil {
+		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) 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()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go
new file mode 100644
index 0000000000..c97abb1dff
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go
@@ -0,0 +1,245 @@
+/*
+ * 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"
+	"io"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference is the data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference struct {
+	MonitoredProperty *BACnetPropertyReferenceEnclosed
+	CovIncrement      *BACnetContextTagReal
+	Timestamped       *BACnetContextTagBoolean
+}
+
+// IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference interface {
+	// GetMonitoredProperty returns MonitoredProperty (property field)
+	GetMonitoredProperty() *BACnetPropertyReferenceEnclosed
+	// GetCovIncrement returns CovIncrement (property field)
+	GetCovIncrement() *BACnetContextTagReal
+	// GetTimestamped returns Timestamped (property field)
+	GetTimestamped() *BACnetContextTagBoolean
+	// 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 *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetMonitoredProperty() *BACnetPropertyReferenceEnclosed {
+	return m.MonitoredProperty
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetCovIncrement() *BACnetContextTagReal {
+	return m.CovIncrement
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetTimestamped() *BACnetContextTagBoolean {
+	return m.Timestamped
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(monitoredProperty *BACnetPropertyReferenceEnclosed, covIncrement *BACnetContextTagReal, timestamped *BACnetContextTagBoolean) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference{MonitoredProperty: monitoredProperty, CovIncrement: covIncrement, Timestamped: timestamped}
+}
+
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (monitoredProperty)
+	lengthInBits += m.MonitoredProperty.GetLengthInBits()
+
+	// Optional Field (covIncrement)
+	if m.CovIncrement != nil {
+		lengthInBits += (*m.CovIncrement).GetLengthInBits()
+	}
+
+	// Simple field (timestamped)
+	lengthInBits += m.Timestamped.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (monitoredProperty)
+	if pullErr := readBuffer.PullContext("monitoredProperty"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredProperty, _monitoredPropertyErr := BACnetPropertyReferenceEnclosedParse(readBuffer, uint8(uint8(1)))
+	if _monitoredPropertyErr != nil {
+		return nil, errors.Wrap(_monitoredPropertyErr, "Error parsing 'monitoredProperty' field")
+	}
+	monitoredProperty := CastBACnetPropertyReferenceEnclosed(_monitoredProperty)
+	if closeErr := readBuffer.CloseContext("monitoredProperty"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (covIncrement) (Can be skipped, if a given expression evaluates to false)
+	var covIncrement *BACnetContextTagReal = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("covIncrement"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_REAL)
+		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 'covIncrement' field")
+		default:
+			covIncrement = CastBACnetContextTagReal(_val)
+			if closeErr := readBuffer.CloseContext("covIncrement"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Simple Field (timestamped)
+	if pullErr := readBuffer.PullContext("timestamped"); pullErr != nil {
+		return nil, pullErr
+	}
+	_timestamped, _timestampedErr := BACnetContextTagParse(readBuffer, uint8(uint8(2)), BACnetDataType(BACnetDataType_BOOLEAN))
+	if _timestampedErr != nil {
+		return nil, errors.Wrap(_timestampedErr, "Error parsing 'timestamped' field")
+	}
+	timestamped := CastBACnetContextTagBoolean(_timestamped)
+	if closeErr := readBuffer.CloseContext("timestamped"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(monitoredProperty, covIncrement, timestamped), nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (monitoredProperty)
+	if pushErr := writeBuffer.PushContext("monitoredProperty"); pushErr != nil {
+		return pushErr
+	}
+	_monitoredPropertyErr := m.MonitoredProperty.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("monitoredProperty"); popErr != nil {
+		return popErr
+	}
+	if _monitoredPropertyErr != nil {
+		return errors.Wrap(_monitoredPropertyErr, "Error serializing 'monitoredProperty' field")
+	}
+
+	// Optional Field (covIncrement) (Can be skipped, if the value is null)
+	var covIncrement *BACnetContextTagReal = nil
+	if m.CovIncrement != nil {
+		if pushErr := writeBuffer.PushContext("covIncrement"); pushErr != nil {
+			return pushErr
+		}
+		covIncrement = m.CovIncrement
+		_covIncrementErr := covIncrement.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("covIncrement"); popErr != nil {
+			return popErr
+		}
+		if _covIncrementErr != nil {
+			return errors.Wrap(_covIncrementErr, "Error serializing 'covIncrement' field")
+		}
+	}
+
+	// Simple Field (timestamped)
+	if pushErr := writeBuffer.PushContext("timestamped"); pushErr != nil {
+		return pushErr
+	}
+	_timestampedErr := m.Timestamped.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("timestamped"); popErr != nil {
+		return popErr
+	}
+	if _timestampedErr != nil {
+		return errors.Wrap(_timestampedErr, "Error serializing 'timestamped' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) 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()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummaries.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummariesList.go
similarity index 72%
rename from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummaries.go
rename to plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummariesList.go
index ba73f83bd4..f42252e7f5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummaries.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummariesList.go
@@ -26,15 +26,18 @@ import (
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// BACnetEventSummaries is the data-structure of this message
-type BACnetEventSummaries struct {
+// BACnetEventSummariesList is the data-structure of this message
+type BACnetEventSummariesList struct {
 	OpeningTag           *BACnetOpeningTag
 	ListOfEventSummaries []*BACnetEventSummary
 	ClosingTag           *BACnetClosingTag
+
+	// Arguments.
+	TagNumber uint8
 }
 
-// IBACnetEventSummaries is the corresponding interface of BACnetEventSummaries
-type IBACnetEventSummaries interface {
+// IBACnetEventSummariesList is the corresponding interface of BACnetEventSummariesList
+type IBACnetEventSummariesList interface {
 	// GetOpeningTag returns OpeningTag (property field)
 	GetOpeningTag() *BACnetOpeningTag
 	// GetListOfEventSummaries returns ListOfEventSummaries (property field)
@@ -54,15 +57,15 @@ type IBACnetEventSummaries interface {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetEventSummaries) GetOpeningTag() *BACnetOpeningTag {
+func (m *BACnetEventSummariesList) GetOpeningTag() *BACnetOpeningTag {
 	return m.OpeningTag
 }
 
-func (m *BACnetEventSummaries) GetListOfEventSummaries() []*BACnetEventSummary {
+func (m *BACnetEventSummariesList) GetListOfEventSummaries() []*BACnetEventSummary {
 	return m.ListOfEventSummaries
 }
 
-func (m *BACnetEventSummaries) GetClosingTag() *BACnetClosingTag {
+func (m *BACnetEventSummariesList) GetClosingTag() *BACnetClosingTag {
 	return m.ClosingTag
 }
 
@@ -71,30 +74,30 @@ func (m *BACnetEventSummaries) GetClosingTag() *BACnetClosingTag {
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
-// NewBACnetEventSummaries factory function for BACnetEventSummaries
-func NewBACnetEventSummaries(openingTag *BACnetOpeningTag, listOfEventSummaries []*BACnetEventSummary, closingTag *BACnetClosingTag) *BACnetEventSummaries {
-	return &BACnetEventSummaries{OpeningTag: openingTag, ListOfEventSummaries: listOfEventSummaries, ClosingTag: closingTag}
+// NewBACnetEventSummariesList factory function for BACnetEventSummariesList
+func NewBACnetEventSummariesList(openingTag *BACnetOpeningTag, listOfEventSummaries []*BACnetEventSummary, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetEventSummariesList {
+	return &BACnetEventSummariesList{OpeningTag: openingTag, ListOfEventSummaries: listOfEventSummaries, ClosingTag: closingTag, TagNumber: tagNumber}
 }
 
-func CastBACnetEventSummaries(structType interface{}) *BACnetEventSummaries {
-	if casted, ok := structType.(BACnetEventSummaries); ok {
+func CastBACnetEventSummariesList(structType interface{}) *BACnetEventSummariesList {
+	if casted, ok := structType.(BACnetEventSummariesList); ok {
 		return &casted
 	}
-	if casted, ok := structType.(*BACnetEventSummaries); ok {
+	if casted, ok := structType.(*BACnetEventSummariesList); ok {
 		return casted
 	}
 	return nil
 }
 
-func (m *BACnetEventSummaries) GetTypeName() string {
-	return "BACnetEventSummaries"
+func (m *BACnetEventSummariesList) GetTypeName() string {
+	return "BACnetEventSummariesList"
 }
 
-func (m *BACnetEventSummaries) GetLengthInBits() uint16 {
+func (m *BACnetEventSummariesList) GetLengthInBits() uint16 {
 	return m.GetLengthInBitsConditional(false)
 }
 
-func (m *BACnetEventSummaries) GetLengthInBitsConditional(lastItem bool) uint16 {
+func (m *BACnetEventSummariesList) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
 	// Simple field (openingTag)
@@ -113,14 +116,14 @@ func (m *BACnetEventSummaries) GetLengthInBitsConditional(lastItem bool) uint16
 	return lengthInBits
 }
 
-func (m *BACnetEventSummaries) GetLengthInBytes() uint16 {
+func (m *BACnetEventSummariesList) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummaries, error) {
+func BACnetEventSummariesListParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetEventSummariesList, error) {
 	positionAware := readBuffer
 	_ = positionAware
-	if pullErr := readBuffer.PullContext("BACnetEventSummaries"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("BACnetEventSummariesList"); pullErr != nil {
 		return nil, pullErr
 	}
 	currentPos := positionAware.GetPos()
@@ -130,7 +133,7 @@ func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummari
 	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_OPENING_TAG))
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
 	if _openingTagErr != nil {
 		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
 	}
@@ -163,7 +166,7 @@ func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummari
 	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
 	if _closingTagErr != nil {
 		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
 	}
@@ -172,18 +175,18 @@ func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummari
 		return nil, closeErr
 	}
 
-	if closeErr := readBuffer.CloseContext("BACnetEventSummaries"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("BACnetEventSummariesList"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create the instance
-	return NewBACnetEventSummaries(openingTag, listOfEventSummaries, closingTag), nil
+	return NewBACnetEventSummariesList(openingTag, listOfEventSummaries, closingTag, tagNumber), nil
 }
 
-func (m *BACnetEventSummaries) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m *BACnetEventSummariesList) Serialize(writeBuffer utils.WriteBuffer) error {
 	positionAware := writeBuffer
 	_ = positionAware
-	if pushErr := writeBuffer.PushContext("BACnetEventSummaries"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("BACnetEventSummariesList"); pushErr != nil {
 		return pushErr
 	}
 
@@ -227,13 +230,13 @@ func (m *BACnetEventSummaries) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
 	}
 
-	if popErr := writeBuffer.PopContext("BACnetEventSummaries"); popErr != nil {
+	if popErr := writeBuffer.PopContext("BACnetEventSummariesList"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
 
-func (m *BACnetEventSummaries) String() string {
+func (m *BACnetEventSummariesList) String() string {
 	if m == nil {
 		return "<nil>"
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index 3afd76d921..ed291758e8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -29,7 +29,7 @@ import (
 // BACnetServiceAckGetEventInformation is the data-structure of this message
 type BACnetServiceAckGetEventInformation struct {
 	*BACnetServiceAck
-	ListOfEventSummaries *BACnetEventSummaries
+	ListOfEventSummaries *BACnetEventSummariesList
 	MoreEvents           *BACnetContextTagBoolean
 
 	// Arguments.
@@ -40,7 +40,7 @@ type BACnetServiceAckGetEventInformation struct {
 type IBACnetServiceAckGetEventInformation interface {
 	IBACnetServiceAck
 	// GetListOfEventSummaries returns ListOfEventSummaries (property field)
-	GetListOfEventSummaries() *BACnetEventSummaries
+	GetListOfEventSummaries() *BACnetEventSummariesList
 	// GetMoreEvents returns MoreEvents (property field)
 	GetMoreEvents() *BACnetContextTagBoolean
 	// GetLengthInBytes returns the length in bytes
@@ -76,7 +76,7 @@ func (m *BACnetServiceAckGetEventInformation) GetParent() *BACnetServiceAck {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetServiceAckGetEventInformation) GetListOfEventSummaries() *BACnetEventSummaries {
+func (m *BACnetServiceAckGetEventInformation) GetListOfEventSummaries() *BACnetEventSummariesList {
 	return m.ListOfEventSummaries
 }
 
@@ -90,7 +90,7 @@ func (m *BACnetServiceAckGetEventInformation) GetMoreEvents() *BACnetContextTagB
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckGetEventInformation factory function for BACnetServiceAckGetEventInformation
-func NewBACnetServiceAckGetEventInformation(listOfEventSummaries *BACnetEventSummaries, moreEvents *BACnetContextTagBoolean, serviceRequestLength uint16) *BACnetServiceAckGetEventInformation {
+func NewBACnetServiceAckGetEventInformation(listOfEventSummaries *BACnetEventSummariesList, moreEvents *BACnetContextTagBoolean, serviceRequestLength uint16) *BACnetServiceAckGetEventInformation {
 	_result := &BACnetServiceAckGetEventInformation{
 		ListOfEventSummaries: listOfEventSummaries,
 		MoreEvents:           moreEvents,
@@ -153,11 +153,11 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer, servi
 	if pullErr := readBuffer.PullContext("listOfEventSummaries"); pullErr != nil {
 		return nil, pullErr
 	}
-	_listOfEventSummaries, _listOfEventSummariesErr := BACnetEventSummariesParse(readBuffer)
+	_listOfEventSummaries, _listOfEventSummariesErr := BACnetEventSummariesListParse(readBuffer, uint8(uint8(0)))
 	if _listOfEventSummariesErr != nil {
 		return nil, errors.Wrap(_listOfEventSummariesErr, "Error parsing 'listOfEventSummaries' field")
 	}
-	listOfEventSummaries := CastBACnetEventSummaries(_listOfEventSummaries)
+	listOfEventSummaries := CastBACnetEventSummariesList(_listOfEventSummaries)
 	if closeErr := readBuffer.CloseContext("listOfEventSummaries"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -166,7 +166,7 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer, servi
 	if pullErr := readBuffer.PullContext("moreEvents"); pullErr != nil {
 		return nil, pullErr
 	}
-	_moreEvents, _moreEventsErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_BOOLEAN))
+	_moreEvents, _moreEventsErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_BOOLEAN))
 	if _moreEventsErr != nil {
 		return nil, errors.Wrap(_moreEventsErr, "Error parsing 'moreEvents' field")
 	}
@@ -181,7 +181,7 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer, servi
 
 	// Create a partially initialized instance
 	_child := &BACnetServiceAckGetEventInformation{
-		ListOfEventSummaries: CastBACnetEventSummaries(listOfEventSummaries),
+		ListOfEventSummaries: CastBACnetEventSummariesList(listOfEventSummaries),
 		MoreEvents:           CastBACnetContextTagBoolean(moreEvents),
 		BACnetServiceAck:     &BACnetServiceAck{},
 	}
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 41debe3a0c..4431c7e488 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -379,7 +379,7 @@
             [simple   BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') initiatingDeviceIdentifier  ]
             [simple   BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')          timeRemaining               ]
             [optional BACnetTimeStampEnclosed('3')                                                     timestamp                   ]
-            [simple   BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications('4')
+            [simple   BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList('4')
                                                                                                        listOfCovNotifications      ]
         ]
         ['CONFIRMED_EVENT_NOTIFICATION' BACnetConfirmedServiceRequestConfirmedEventNotification // Spec complete
@@ -423,8 +423,12 @@
             [optional BACnetContextTagReal('5', 'BACnetDataType.REAL')                                 covIncrement                 ]
         ]
         ['SUBSCRIBE_COV_PROPERTY_MULTIPLE' BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-            // TODO: implement me
-            [validation    '1 == 2'    "TODO: implement me"]
+            [simple   BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier  ]
+            [optional BACnetContextTagBoolean('1', 'BACnetDataType.BOOLEAN')                           issueConfirmedNotifications  ]
+            [optional BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')          lifetime                     ]
+            [optional BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          maxNotificationDelay         ]
+            [simple   BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList('4')
+                                                                                                       listOfCovSubscriptionSpecifications ]
         ]
         //
         ////
@@ -641,46 +645,85 @@
     ////
 ]
 
-[type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(uint 8 tagNumber)
+[type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(uint 8 tagNumber)
     [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                     openingTag                     ]
-    [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
+                     openingTag                                                                         ]
+    [array    BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+                     specifications
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)']
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                        closingTag                                                                      ]
+]
+
+[type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+    [simple     BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
+                        monitoredObjectIdentifier                                                       ]
     [simple     BACnetOpeningTag('1', 'BACnetDataType.OPENING_TAG')
-                         innerOpeningTag            ]
-    [array    BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue('monitoredObjectIdentifier.objectType')
+                        openingTag                                                                      ]
+    [array      BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue('monitoredObjectIdentifier.objectType')
                         listOfValues
-                        terminated
-                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'
-    ]
+                            terminated
+                            'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'    ]
     [simple     BACnetClosingTag('1', 'BACnetDataType.CLOSING_TAG')
-                     innerClosingTag                ]
-    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                     closingTag                     ]
+                        closingTag                                                                      ]
 ]
 
 [type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue(BACnetObjectType objectType)
     [simple   BACnetContextTagPropertyIdentifier('0', 'BACnetDataType.BACNET_PROPERTY_IDENTIFIER')
-                                propertyIdentifier      ]
+                                propertyIdentifier                                                      ]
     [optional BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')
-                                arrayIndex              ]
+                                arrayIndex                                                              ]
     [simple   BACnetConstructedData('2', 'objectType', 'propertyIdentifier')
-                                propertyValue           ]
+                                propertyValue                                                           ]
     [optional BACnetContextTagTime('3', 'BACnetDataType.TIME')
-                                timeOfChange            ]
+                                timeOfChange                                                            ]
+]
+
+[type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(uint 8 tagNumber)
+    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
+                     openingTag                                                                         ]
+    [array    BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+                     specifications
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)']
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                     closingTag                                                                         ]
+]
+
+[type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+    [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
+                    monitoredObjectIdentifier                                                           ]
+    [simple   BACnetOpeningTag('1', 'BACnetDataType.OPENING_TAG')
+                    openingTag                                                                          ]
+    [array    BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+                    listOfCovReferences
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'        ]
+    [simple     BACnetClosingTag('1', 'BACnetDataType.CLOSING_TAG')
+                    closingTag                                                                          ]
+]
+
+[type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+    [simple   BACnetPropertyReferenceEnclosed('1')
+                    monitoredProperty                                                                   ]
+    [optional BACnetContextTagReal('1', 'BACnetDataType.REAL')
+                    covIncrement                                                                        ]
+    [simple   BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')
+                    timestamped                                                                         ]
 ]
 
 [type BACnetReadAccessSpecification
     [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
-                    objectIdentifier                ]
+                    objectIdentifier                                                                    ]
     [simple     BACnetOpeningTag('1', 'BACnetDataType.OPENING_TAG')
-                     openingTag                     ]
+                     openingTag                                                                         ]
     [array    BACnetPropertyReference
                     listOfPropertyReferences
-                    terminated
-                    'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'
-    ]
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'        ]
     [simple     BACnetClosingTag('1', 'BACnetDataType.CLOSING_TAG')
-                     closingTag                     ]
+                     closingTag                                                                         ]
 ]
 
 [type BACnetPropertyReferenceEnclosed(uint 8 tagNumber)
@@ -931,10 +974,10 @@
             [validation    '1 == 2'    "TODO: implement me"]
         ]
         ['GET_EVENT_INFORMATION' BACnetServiceAckGetEventInformation
-            [simple BACnetEventSummaries
-                        listOfEventSummaries        ]
-            [simple BACnetContextTagBoolean('0', 'BACnetDataType.BOOLEAN')
-                        moreEvents                  ]
+            [simple BACnetEventSummariesList('0')
+                        listOfEventSummaries            ]
+            [simple BACnetContextTagBoolean('1', 'BACnetDataType.BOOLEAN')
+                        moreEvents                       ]
         ]
         ['LIFE_SAFETY_OPERATION' BACnetServiceAckLifeSafetyOperation
             // TODO: implement me
@@ -1086,15 +1129,15 @@
 ]
 
 // TODO: check if we should embed this type into BACnetServiceAckGetEventInformation as we double map
-[type BACnetEventSummaries
-    [simple     BACnetOpeningTag('0', 'BACnetDataType.OPENING_TAG')
+[type BACnetEventSummariesList(uint 8 tagNumber)
+    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
                      openingTag                     ]
     [array    BACnetEventSummary
                          listOfEventSummaries
                          terminated
                          'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'
     ]
-    [simple     BACnetClosingTag('0', 'BACnetDataType.CLOSING_TAG')
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
                      closingTag                     ]
 ]
 


[plc4x] 01/02: feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVProperty

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

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

commit 9a623d16f9a4c2c832ed53803243dfcbde69f724
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 17 11:47:41 2022 +0200

    feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVProperty
---
 ...tConfirmedServiceRequestSubscribeCOVProperty.go | 279 ++++++++++++++++++++-
 .../resources/protocols/bacnetip/bacnetip.mspec    |  18 +-
 2 files changed, 286 insertions(+), 11 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index d0d114ee48..1523775e83 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -21,6 +21,8 @@ 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.
@@ -28,6 +30,12 @@ import (
 // BACnetConfirmedServiceRequestSubscribeCOVProperty is the data-structure of this message
 type BACnetConfirmedServiceRequestSubscribeCOVProperty struct {
 	*BACnetConfirmedServiceRequest
+	SubscriberProcessIdentifier *BACnetContextTagUnsignedInteger
+	MonitoredObjectIdentifier   *BACnetContextTagObjectIdentifier
+	IssueConfirmedNotifications *BACnetContextTagBoolean
+	Lifetime                    *BACnetContextTagUnsignedInteger
+	MonitoredPropertyIdentifier *BACnetPropertyReferenceEnclosed
+	CovIncrement                *BACnetContextTagReal
 
 	// Arguments.
 	ServiceRequestLength uint16
@@ -36,6 +44,18 @@ type BACnetConfirmedServiceRequestSubscribeCOVProperty struct {
 // IBACnetConfirmedServiceRequestSubscribeCOVProperty is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVProperty
 type IBACnetConfirmedServiceRequestSubscribeCOVProperty interface {
 	IBACnetConfirmedServiceRequest
+	// GetSubscriberProcessIdentifier returns SubscriberProcessIdentifier (property field)
+	GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger
+	// GetMonitoredObjectIdentifier returns MonitoredObjectIdentifier (property field)
+	GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier
+	// GetIssueConfirmedNotifications returns IssueConfirmedNotifications (property field)
+	GetIssueConfirmedNotifications() *BACnetContextTagBoolean
+	// GetLifetime returns Lifetime (property field)
+	GetLifetime() *BACnetContextTagUnsignedInteger
+	// GetMonitoredPropertyIdentifier returns MonitoredPropertyIdentifier (property field)
+	GetMonitoredPropertyIdentifier() *BACnetPropertyReferenceEnclosed
+	// GetCovIncrement returns CovIncrement (property field)
+	GetCovIncrement() *BACnetContextTagReal
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -65,9 +85,49 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetParent() *BACnetC
 	return m.BACnetConfirmedServiceRequest
 }
 
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger {
+	return m.SubscriberProcessIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier {
+	return m.MonitoredObjectIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetIssueConfirmedNotifications() *BACnetContextTagBoolean {
+	return m.IssueConfirmedNotifications
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLifetime() *BACnetContextTagUnsignedInteger {
+	return m.Lifetime
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetMonitoredPropertyIdentifier() *BACnetPropertyReferenceEnclosed {
+	return m.MonitoredPropertyIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetCovIncrement() *BACnetContextTagReal {
+	return m.CovIncrement
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
 // NewBACnetConfirmedServiceRequestSubscribeCOVProperty factory function for BACnetConfirmedServiceRequestSubscribeCOVProperty
-func NewBACnetConfirmedServiceRequestSubscribeCOVProperty(serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
+func NewBACnetConfirmedServiceRequestSubscribeCOVProperty(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, issueConfirmedNotifications *BACnetContextTagBoolean, lifetime *BACnetContextTagUnsignedInteger, monitoredPropertyIdentifier *BACnetPropertyReferenceEnclosed, covIncrement *BACnetContextTagReal, serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
 	_result := &BACnetConfirmedServiceRequestSubscribeCOVProperty{
+		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
+		MonitoredObjectIdentifier:     monitoredObjectIdentifier,
+		IssueConfirmedNotifications:   issueConfirmedNotifications,
+		Lifetime:                      lifetime,
+		MonitoredPropertyIdentifier:   monitoredPropertyIdentifier,
+		CovIncrement:                  covIncrement,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(serviceRequestLength),
 	}
 	_result.Child = _result
@@ -101,6 +161,30 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLengthInBits() ui
 func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.GetParentLengthInBits())
 
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += m.SubscriberProcessIdentifier.GetLengthInBits()
+
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.GetLengthInBits()
+
+	// Optional Field (issueConfirmedNotifications)
+	if m.IssueConfirmedNotifications != nil {
+		lengthInBits += (*m.IssueConfirmedNotifications).GetLengthInBits()
+	}
+
+	// Optional Field (lifetime)
+	if m.Lifetime != nil {
+		lengthInBits += (*m.Lifetime).GetLengthInBits()
+	}
+
+	// Simple field (monitoredPropertyIdentifier)
+	lengthInBits += m.MonitoredPropertyIdentifier.GetLengthInBits()
+
+	// Optional Field (covIncrement)
+	if m.CovIncrement != nil {
+		lengthInBits += (*m.CovIncrement).GetLengthInBits()
+	}
+
 	return lengthInBits
 }
 
@@ -117,9 +201,106 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.Rea
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Validation
-	if !(bool((1) == (2))) {
-		return nil, utils.ParseValidationError{"TODO: implement me"}
+	// Simple Field (subscriberProcessIdentifier)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER))
+	if _subscriberProcessIdentifierErr != nil {
+		return nil, errors.Wrap(_subscriberProcessIdentifierErr, "Error parsing 'subscriberProcessIdentifier' field")
+	}
+	subscriberProcessIdentifier := CastBACnetContextTagUnsignedInteger(_subscriberProcessIdentifier)
+	if closeErr := readBuffer.CloseContext("subscriberProcessIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_BACNET_OBJECT_IDENTIFIER))
+	if _monitoredObjectIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredObjectIdentifierErr, "Error parsing 'monitoredObjectIdentifier' field")
+	}
+	monitoredObjectIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredObjectIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredObjectIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (issueConfirmedNotifications) (Can be skipped, if a given expression evaluates to false)
+	var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("issueConfirmedNotifications"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(2), 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 'issueConfirmedNotifications' field")
+		default:
+			issueConfirmedNotifications = CastBACnetContextTagBoolean(_val)
+			if closeErr := readBuffer.CloseContext("issueConfirmedNotifications"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Optional Field (lifetime) (Can be skipped, if a given expression evaluates to false)
+	var lifetime *BACnetContextTagUnsignedInteger = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("lifetime"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+		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 'lifetime' field")
+		default:
+			lifetime = CastBACnetContextTagUnsignedInteger(_val)
+			if closeErr := readBuffer.CloseContext("lifetime"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Simple Field (monitoredPropertyIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredPropertyIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredPropertyIdentifier, _monitoredPropertyIdentifierErr := BACnetPropertyReferenceEnclosedParse(readBuffer, uint8(uint8(4)))
+	if _monitoredPropertyIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredPropertyIdentifierErr, "Error parsing 'monitoredPropertyIdentifier' field")
+	}
+	monitoredPropertyIdentifier := CastBACnetPropertyReferenceEnclosed(_monitoredPropertyIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredPropertyIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (covIncrement) (Can be skipped, if a given expression evaluates to false)
+	var covIncrement *BACnetContextTagReal = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("covIncrement"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(5), BACnetDataType_REAL)
+		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 'covIncrement' field")
+		default:
+			covIncrement = CastBACnetContextTagReal(_val)
+			if closeErr := readBuffer.CloseContext("covIncrement"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
 	}
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVProperty"); closeErr != nil {
@@ -128,6 +309,12 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.Rea
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestSubscribeCOVProperty{
+		SubscriberProcessIdentifier:   CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		MonitoredObjectIdentifier:     CastBACnetContextTagObjectIdentifier(monitoredObjectIdentifier),
+		IssueConfirmedNotifications:   CastBACnetContextTagBoolean(issueConfirmedNotifications),
+		Lifetime:                      CastBACnetContextTagUnsignedInteger(lifetime),
+		MonitoredPropertyIdentifier:   CastBACnetPropertyReferenceEnclosed(monitoredPropertyIdentifier),
+		CovIncrement:                  CastBACnetContextTagReal(covIncrement),
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
@@ -142,6 +329,90 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) Serialize(writeBuffe
 			return pushErr
 		}
 
+		// Simple Field (subscriberProcessIdentifier)
+		if pushErr := writeBuffer.PushContext("subscriberProcessIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_subscriberProcessIdentifierErr := m.SubscriberProcessIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("subscriberProcessIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _subscriberProcessIdentifierErr != nil {
+			return errors.Wrap(_subscriberProcessIdentifierErr, "Error serializing 'subscriberProcessIdentifier' field")
+		}
+
+		// Simple Field (monitoredObjectIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_monitoredObjectIdentifierErr := m.MonitoredObjectIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredObjectIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _monitoredObjectIdentifierErr != nil {
+			return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
+		}
+
+		// Optional Field (issueConfirmedNotifications) (Can be skipped, if the value is null)
+		var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+		if m.IssueConfirmedNotifications != nil {
+			if pushErr := writeBuffer.PushContext("issueConfirmedNotifications"); pushErr != nil {
+				return pushErr
+			}
+			issueConfirmedNotifications = m.IssueConfirmedNotifications
+			_issueConfirmedNotificationsErr := issueConfirmedNotifications.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("issueConfirmedNotifications"); popErr != nil {
+				return popErr
+			}
+			if _issueConfirmedNotificationsErr != nil {
+				return errors.Wrap(_issueConfirmedNotificationsErr, "Error serializing 'issueConfirmedNotifications' field")
+			}
+		}
+
+		// Optional Field (lifetime) (Can be skipped, if the value is null)
+		var lifetime *BACnetContextTagUnsignedInteger = nil
+		if m.Lifetime != nil {
+			if pushErr := writeBuffer.PushContext("lifetime"); pushErr != nil {
+				return pushErr
+			}
+			lifetime = m.Lifetime
+			_lifetimeErr := lifetime.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("lifetime"); popErr != nil {
+				return popErr
+			}
+			if _lifetimeErr != nil {
+				return errors.Wrap(_lifetimeErr, "Error serializing 'lifetime' field")
+			}
+		}
+
+		// Simple Field (monitoredPropertyIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredPropertyIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_monitoredPropertyIdentifierErr := m.MonitoredPropertyIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredPropertyIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _monitoredPropertyIdentifierErr != nil {
+			return errors.Wrap(_monitoredPropertyIdentifierErr, "Error serializing 'monitoredPropertyIdentifier' field")
+		}
+
+		// Optional Field (covIncrement) (Can be skipped, if the value is null)
+		var covIncrement *BACnetContextTagReal = nil
+		if m.CovIncrement != nil {
+			if pushErr := writeBuffer.PushContext("covIncrement"); pushErr != nil {
+				return pushErr
+			}
+			covIncrement = m.CovIncrement
+			_covIncrementErr := covIncrement.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("covIncrement"); popErr != nil {
+				return popErr
+			}
+			if _covIncrementErr != nil {
+				return errors.Wrap(_covIncrementErr, "Error serializing 'covIncrement' field")
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVProperty"); popErr != nil {
 			return popErr
 		}
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 0e4fee2a6d..41debe3a0c 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -402,21 +402,25 @@
             [validation    '1 == 2'    "TODO: implement me"]
         ]
         ['GET_EVENT_INFORMATION' BACnetConfirmedServiceRequestGetEventInformation
-            [optional BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') lastReceivedObjectIdentifier   ]
+            [optional BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') lastReceivedObjectIdentifier ]
         ]
         ['LIFE_SAFETY_OPERATION' BACnetConfirmedServiceRequestLifeSafetyOperation
             // TODO: implement me
             [validation    '1 == 2'    "TODO: implement me"]
         ]
         ['SUBSCRIBE_COV' BACnetConfirmedServiceRequestSubscribeCOV
-            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier ]
-            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
-            [simple BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                           issueConfirmed              ]
-            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetimeInSeconds           ]
+            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')            subscriberProcessIdentifier  ]
+            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')   monitoredObjectIdentifier    ]
+            [simple BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                             issueConfirmed               ]
+            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')            lifetimeInSeconds            ]
         ]
         ['SUBSCRIBE_COV_PROPERTY' BACnetConfirmedServiceRequestSubscribeCOVProperty
-            // TODO: implement me
-            [validation    '1 == 2'    "TODO: implement me"]
+            [simple   BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier  ]
+            [simple   BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier    ]
+            [optional BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                           issueConfirmedNotifications  ]
+            [optional BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetime                     ]
+            [simple   BACnetPropertyReferenceEnclosed('4')                                             monitoredPropertyIdentifier  ]
+            [optional BACnetContextTagReal('5', 'BACnetDataType.REAL')                                 covIncrement                 ]
         ]
         ['SUBSCRIBE_COV_PROPERTY_MULTIPLE' BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
             // TODO: implement me