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/11/09 15:40:28 UTC

[plc4x] 01/02: fix(bacnet): use BACnetConfirmedServiceChoice where appropriate

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 ba86633aab7bb7f56473fe583c1d4954766cc83d
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Nov 9 15:24:11 2022 +0100

    fix(bacnet): use BACnetConfirmedServiceChoice where appropriate
---
 .../protocols/bacnet/ParserSerializerTestsuite.xml | 100 ++++++++++++++++++++-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |  28 ++++--
 .../readwrite/model/APDUConfirmedRequest.go        |  28 ++++--
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |  25 ++++--
 .../bacnetip/readwrite/model/StaticHelper.go       |   7 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    |   9 +-
 .../protocols/bacnet/ParserSerializerTestsuite.xml | 100 ++++++++++++++++++++-
 7 files changed, 259 insertions(+), 38 deletions(-)

diff --git a/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml b/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml
index 008a6588f3..f0dc20dea9 100644
--- a/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml
+++ b/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml
@@ -63,7 +63,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">2</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">0</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="ACKNOWLEDGE_ALARM">0</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -983,6 +985,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1066,6 +1070,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1226,6 +1232,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1309,6 +1317,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1469,6 +1479,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1552,6 +1564,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1712,6 +1726,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1795,6 +1811,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1955,6 +1973,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2038,6 +2058,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -2198,6 +2220,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2281,6 +2305,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -2441,6 +2467,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2524,6 +2552,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -2684,6 +2714,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2767,6 +2799,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -3106,6 +3140,8 @@
                         </BACnetConfirmedServiceRequestReinitializeDevice>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -3534,6 +3570,8 @@
                         </BACnetConfirmedServiceRequestReadProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -3962,6 +4000,8 @@
                         </BACnetConfirmedServiceRequestReadProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -4390,6 +4430,8 @@
                         </BACnetConfirmedServiceRequestReadProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -4830,6 +4872,8 @@
                         </BACnetServiceAckReadProperty>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -5466,6 +5510,8 @@
                         </BACnetConfirmedServiceRequestWriteProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -5897,6 +5943,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -5949,7 +5997,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">1</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">17</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="DEVICE_COMMUNICATION_CONTROL">17</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -6288,6 +6338,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6616,6 +6668,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6724,6 +6778,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6832,6 +6888,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6940,6 +6998,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -7176,6 +7236,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -7377,6 +7439,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -7430,7 +7494,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">51</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">17</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="DEVICE_COMMUNICATION_CONTROL">17</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -7988,6 +8054,8 @@
                         </BACnetConfirmedServiceRequestReinitializeDevice>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8189,6 +8257,8 @@
                         </BACnetConfirmedServiceRequestReinitializeDevice>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8242,7 +8312,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">53</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">20</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="REINITIALIZE_DEVICE">20</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -8405,6 +8477,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8562,6 +8636,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -8725,6 +8801,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8882,6 +8960,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -9045,6 +9125,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -9202,6 +9284,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -9365,6 +9449,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -9522,6 +9608,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -9681,6 +9769,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -9877,6 +9967,8 @@
                         </BACnetConfirmedServiceRequestReadPropertyMultiple>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
diff --git a/plc4go/protocols/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/protocols/bacnetip/readwrite/model/APDUComplexAck.go
index e873de4179..8187af5fe5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/APDUComplexAck.go
@@ -46,7 +46,7 @@ type APDUComplexAck interface {
 	// GetServiceAck returns ServiceAck (property field)
 	GetServiceAck() BACnetServiceAck
 	// GetSegmentServiceChoice returns SegmentServiceChoice (property field)
-	GetSegmentServiceChoice() *uint8
+	GetSegmentServiceChoice() *BACnetConfirmedServiceChoice
 	// GetSegment returns Segment (property field)
 	GetSegment() []byte
 	// GetApduHeaderReduction returns ApduHeaderReduction (virtual field)
@@ -71,7 +71,7 @@ type _APDUComplexAck struct {
 	SequenceNumber       *uint8
 	ProposedWindowSize   *uint8
 	ServiceAck           BACnetServiceAck
-	SegmentServiceChoice *uint8
+	SegmentServiceChoice *BACnetConfirmedServiceChoice
 	Segment              []byte
 	// Reserved Fields
 	reservedField0 *uint8
@@ -126,7 +126,7 @@ func (m *_APDUComplexAck) GetServiceAck() BACnetServiceAck {
 	return m.ServiceAck
 }
 
-func (m *_APDUComplexAck) GetSegmentServiceChoice() *uint8 {
+func (m *_APDUComplexAck) GetSegmentServiceChoice() *BACnetConfirmedServiceChoice {
 	return m.SegmentServiceChoice
 }
 
@@ -173,7 +173,7 @@ func (m *_APDUComplexAck) GetSegmentReduction() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUComplexAck factory function for _APDUComplexAck
-func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceAck BACnetServiceAck, segmentServiceChoice *uint8, segment []byte, apduLength uint16) *_APDUComplexAck {
+func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceAck BACnetServiceAck, segmentServiceChoice *BACnetConfirmedServiceChoice, segment []byte, apduLength uint16) *_APDUComplexAck {
 	_result := &_APDUComplexAck{
 		SegmentedMessage:     segmentedMessage,
 		MoreFollows:          moreFollows,
@@ -363,13 +363,19 @@ func APDUComplexAckParseWithBuffer(readBuffer utils.ReadBuffer, apduLength uint1
 	}
 
 	// Optional Field (segmentServiceChoice) (Can be skipped, if a given expression evaluates to false)
-	var segmentServiceChoice *uint8 = nil
+	var segmentServiceChoice *BACnetConfirmedServiceChoice = nil
 	if bool(segmentedMessage) && bool(bool((*sequenceNumber) != (0))) {
-		_val, _err := readBuffer.ReadUint8("segmentServiceChoice", 8)
+		if pullErr := readBuffer.PullContext("segmentServiceChoice"); pullErr != nil {
+			return nil, errors.Wrap(pullErr, "Error pulling for segmentServiceChoice")
+		}
+		_val, _err := BACnetConfirmedServiceChoiceParseWithBuffer(readBuffer)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'segmentServiceChoice' field of APDUComplexAck")
 		}
 		segmentServiceChoice = &_val
+		if closeErr := readBuffer.CloseContext("segmentServiceChoice"); closeErr != nil {
+			return nil, errors.Wrap(closeErr, "Error closing for segmentServiceChoice")
+		}
 	}
 
 	// Virtual field
@@ -502,10 +508,16 @@ func (m *_APDUComplexAck) SerializeWithWriteBuffer(writeBuffer utils.WriteBuffer
 		}
 
 		// Optional Field (segmentServiceChoice) (Can be skipped, if the value is null)
-		var segmentServiceChoice *uint8 = nil
+		var segmentServiceChoice *BACnetConfirmedServiceChoice = nil
 		if m.GetSegmentServiceChoice() != nil {
+			if pushErr := writeBuffer.PushContext("segmentServiceChoice"); pushErr != nil {
+				return errors.Wrap(pushErr, "Error pushing for segmentServiceChoice")
+			}
 			segmentServiceChoice = m.GetSegmentServiceChoice()
-			_segmentServiceChoiceErr := writeBuffer.WriteUint8("segmentServiceChoice", 8, *(segmentServiceChoice))
+			_segmentServiceChoiceErr := writeBuffer.WriteSerializable(segmentServiceChoice)
+			if popErr := writeBuffer.PopContext("segmentServiceChoice"); popErr != nil {
+				return errors.Wrap(popErr, "Error popping for segmentServiceChoice")
+			}
 			if _segmentServiceChoiceErr != nil {
 				return errors.Wrap(_segmentServiceChoiceErr, "Error serializing 'segmentServiceChoice' field")
 			}
diff --git a/plc4go/protocols/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/protocols/bacnetip/readwrite/model/APDUConfirmedRequest.go
index 7d3d2eb385..7c2dba2914 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -52,7 +52,7 @@ type APDUConfirmedRequest interface {
 	// GetServiceRequest returns ServiceRequest (property field)
 	GetServiceRequest() BACnetConfirmedServiceRequest
 	// GetSegmentServiceChoice returns SegmentServiceChoice (property field)
-	GetSegmentServiceChoice() *uint8
+	GetSegmentServiceChoice() *BACnetConfirmedServiceChoice
 	// GetSegment returns Segment (property field)
 	GetSegment() []byte
 	// GetApduHeaderReduction returns ApduHeaderReduction (virtual field)
@@ -80,7 +80,7 @@ type _APDUConfirmedRequest struct {
 	SequenceNumber            *uint8
 	ProposedWindowSize        *uint8
 	ServiceRequest            BACnetConfirmedServiceRequest
-	SegmentServiceChoice      *uint8
+	SegmentServiceChoice      *BACnetConfirmedServiceChoice
 	Segment                   []byte
 	// Reserved Fields
 	reservedField0 *uint8
@@ -147,7 +147,7 @@ func (m *_APDUConfirmedRequest) GetServiceRequest() BACnetConfirmedServiceReques
 	return m.ServiceRequest
 }
 
-func (m *_APDUConfirmedRequest) GetSegmentServiceChoice() *uint8 {
+func (m *_APDUConfirmedRequest) GetSegmentServiceChoice() *BACnetConfirmedServiceChoice {
 	return m.SegmentServiceChoice
 }
 
@@ -194,7 +194,7 @@ func (m *_APDUConfirmedRequest) GetSegmentReduction() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUConfirmedRequest factory function for _APDUConfirmedRequest
-func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted MaxSegmentsAccepted, maxApduLengthAccepted MaxApduLengthAccepted, invokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceRequest BACnetConfirmedServiceRequest, segmentServiceChoice *uint8, segment []byte, apduLength uint16) *_APDUConfirmedRequest {
+func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted MaxSegmentsAccepted, maxApduLengthAccepted MaxApduLengthAccepted, invokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceRequest BACnetConfirmedServiceRequest, segmentServiceChoice *BACnetConfirmedServiceChoice, segment []byte, apduLength uint16) *_APDUConfirmedRequest {
 	_result := &_APDUConfirmedRequest{
 		SegmentedMessage:          segmentedMessage,
 		MoreFollows:               moreFollows,
@@ -429,13 +429,19 @@ func APDUConfirmedRequestParseWithBuffer(readBuffer utils.ReadBuffer, apduLength
 	}
 
 	// Optional Field (segmentServiceChoice) (Can be skipped, if a given expression evaluates to false)
-	var segmentServiceChoice *uint8 = nil
+	var segmentServiceChoice *BACnetConfirmedServiceChoice = nil
 	if bool(segmentedMessage) && bool(bool((*sequenceNumber) != (0))) {
-		_val, _err := readBuffer.ReadUint8("segmentServiceChoice", 8)
+		if pullErr := readBuffer.PullContext("segmentServiceChoice"); pullErr != nil {
+			return nil, errors.Wrap(pullErr, "Error pulling for segmentServiceChoice")
+		}
+		_val, _err := BACnetConfirmedServiceChoiceParseWithBuffer(readBuffer)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'segmentServiceChoice' field of APDUConfirmedRequest")
 		}
 		segmentServiceChoice = &_val
+		if closeErr := readBuffer.CloseContext("segmentServiceChoice"); closeErr != nil {
+			return nil, errors.Wrap(closeErr, "Error closing for segmentServiceChoice")
+		}
 	}
 
 	// Virtual field
@@ -602,10 +608,16 @@ func (m *_APDUConfirmedRequest) SerializeWithWriteBuffer(writeBuffer utils.Write
 		}
 
 		// Optional Field (segmentServiceChoice) (Can be skipped, if the value is null)
-		var segmentServiceChoice *uint8 = nil
+		var segmentServiceChoice *BACnetConfirmedServiceChoice = nil
 		if m.GetSegmentServiceChoice() != nil {
+			if pushErr := writeBuffer.PushContext("segmentServiceChoice"); pushErr != nil {
+				return errors.Wrap(pushErr, "Error pushing for segmentServiceChoice")
+			}
 			segmentServiceChoice = m.GetSegmentServiceChoice()
-			_segmentServiceChoiceErr := writeBuffer.WriteUint8("segmentServiceChoice", 8, *(segmentServiceChoice))
+			_segmentServiceChoiceErr := writeBuffer.WriteSerializable(segmentServiceChoice)
+			if popErr := writeBuffer.PopContext("segmentServiceChoice"); popErr != nil {
+				return errors.Wrap(popErr, "Error popping for segmentServiceChoice")
+			}
 			if _segmentServiceChoiceErr != nil {
 				return errors.Wrap(_segmentServiceChoiceErr, "Error serializing 'segmentServiceChoice' field")
 			}
diff --git a/plc4go/protocols/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/protocols/bacnetip/readwrite/model/APDUSimpleAck.go
index 8126a5aeb8..b7bd105ae8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -35,7 +35,7 @@ type APDUSimpleAck interface {
 	// GetOriginalInvokeId returns OriginalInvokeId (property field)
 	GetOriginalInvokeId() uint8
 	// GetServiceChoice returns ServiceChoice (property field)
-	GetServiceChoice() uint8
+	GetServiceChoice() BACnetConfirmedServiceChoice
 }
 
 // APDUSimpleAckExactly can be used when we want exactly this type and not a type which fulfills APDUSimpleAck.
@@ -49,7 +49,7 @@ type APDUSimpleAckExactly interface {
 type _APDUSimpleAck struct {
 	*_APDU
 	OriginalInvokeId uint8
-	ServiceChoice    uint8
+	ServiceChoice    BACnetConfirmedServiceChoice
 	// Reserved Fields
 	reservedField0 *uint8
 }
@@ -83,7 +83,7 @@ func (m *_APDUSimpleAck) GetOriginalInvokeId() uint8 {
 	return m.OriginalInvokeId
 }
 
-func (m *_APDUSimpleAck) GetServiceChoice() uint8 {
+func (m *_APDUSimpleAck) GetServiceChoice() BACnetConfirmedServiceChoice {
 	return m.ServiceChoice
 }
 
@@ -93,7 +93,7 @@ func (m *_APDUSimpleAck) GetServiceChoice() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUSimpleAck factory function for _APDUSimpleAck
-func NewAPDUSimpleAck(originalInvokeId uint8, serviceChoice uint8, apduLength uint16) *_APDUSimpleAck {
+func NewAPDUSimpleAck(originalInvokeId uint8, serviceChoice BACnetConfirmedServiceChoice, apduLength uint16) *_APDUSimpleAck {
 	_result := &_APDUSimpleAck{
 		OriginalInvokeId: originalInvokeId,
 		ServiceChoice:    serviceChoice,
@@ -179,11 +179,17 @@ func APDUSimpleAckParseWithBuffer(readBuffer utils.ReadBuffer, apduLength uint16
 	originalInvokeId := _originalInvokeId
 
 	// Simple Field (serviceChoice)
-	_serviceChoice, _serviceChoiceErr := readBuffer.ReadUint8("serviceChoice", 8)
+	if pullErr := readBuffer.PullContext("serviceChoice"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for serviceChoice")
+	}
+	_serviceChoice, _serviceChoiceErr := BACnetConfirmedServiceChoiceParseWithBuffer(readBuffer)
 	if _serviceChoiceErr != nil {
 		return nil, errors.Wrap(_serviceChoiceErr, "Error parsing 'serviceChoice' field of APDUSimpleAck")
 	}
 	serviceChoice := _serviceChoice
+	if closeErr := readBuffer.CloseContext("serviceChoice"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for serviceChoice")
+	}
 
 	if closeErr := readBuffer.CloseContext("APDUSimpleAck"); closeErr != nil {
 		return nil, errors.Wrap(closeErr, "Error closing for APDUSimpleAck")
@@ -242,8 +248,13 @@ func (m *_APDUSimpleAck) SerializeWithWriteBuffer(writeBuffer utils.WriteBuffer)
 		}
 
 		// Simple Field (serviceChoice)
-		serviceChoice := uint8(m.GetServiceChoice())
-		_serviceChoiceErr := writeBuffer.WriteUint8("serviceChoice", 8, (serviceChoice))
+		if pushErr := writeBuffer.PushContext("serviceChoice"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for serviceChoice")
+		}
+		_serviceChoiceErr := writeBuffer.WriteSerializable(m.GetServiceChoice())
+		if popErr := writeBuffer.PopContext("serviceChoice"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for serviceChoice")
+		}
 		if _serviceChoiceErr != nil {
 			return errors.Wrap(_serviceChoiceErr, "Error serializing 'serviceChoice' field")
 		}
diff --git a/plc4go/protocols/bacnetip/readwrite/model/StaticHelper.go b/plc4go/protocols/bacnetip/readwrite/model/StaticHelper.go
index 04cb39aba2..559c8da8cf 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/StaticHelper.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/StaticHelper.go
@@ -798,8 +798,7 @@ func CreateBACnetContextTagUnsignedInteger(tagNumber uint8, value uint) BACnetCo
 	return NewBACnetContextTagUnsignedInteger(payload, header, tagNumber)
 }
 
-func CreateUnsignedPayload(value uint) (uint32, BACnetTagPayloadUnsignedInteger) {
-	var length uint32
+func CreateUnsignedPayload(value uint) (length uint32, payload BACnetTagPayloadUnsignedInteger) {
 	var valueUint8 *uint8
 	var valueUint16 *uint16
 	var valueUint24 *uint32
@@ -827,8 +826,8 @@ func CreateUnsignedPayload(value uint) (uint32, BACnetTagPayloadUnsignedInteger)
 		valueUint32_ := uint32(value)
 		valueUint32 = &valueUint32_
 	}
-	payload := NewBACnetTagPayloadUnsignedInteger(valueUint8, valueUint16, valueUint24, valueUint32, valueUint40, valueUint48, valueUint56, valueUint64, length)
-	return length, payload
+	payload = NewBACnetTagPayloadUnsignedInteger(valueUint8, valueUint16, valueUint24, valueUint32, valueUint40, valueUint48, valueUint56, valueUint64, length)
+	return
 }
 
 func CreateBACnetApplicationTagSignedInteger(value int) BACnetApplicationTagSignedInteger {
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 0af5248f08..348ebe93e2 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -297,7 +297,8 @@
             [validation '(!segmentedMessage && serviceRequest != null) || segmentedMessage'
                         "service request should be set"                     ]
             // When we read the first segment we want the service choice to be part of the bytes so we only read it > 0
-            [optional uint 8    segmentServiceChoice 'segmentedMessage && sequenceNumber != 0']
+            [optional BACnetConfirmedServiceChoice
+                                segmentServiceChoice 'segmentedMessage && sequenceNumber != 0']
             [virtual  uint 16   segmentReduction
                                     '(segmentServiceChoice != null)?(apduHeaderReduction+1):apduHeaderReduction'       ]
             [array    byte      segment
@@ -312,7 +313,8 @@
         ['SIMPLE_ACK_PDU' *SimpleAck
             [reserved uint 4    '0'                                     ]
             [simple   uint 8    originalInvokeId                        ]
-            [simple   uint 8    serviceChoice                           ]
+            [simple   BACnetConfirmedServiceChoice
+                                serviceChoice                           ]
         ]
         ['COMPLEX_ACK_PDU' *ComplexAck
             [simple   bit       segmentedMessage                        ]
@@ -329,7 +331,8 @@
             [validation '(!segmentedMessage && serviceAck != null) || segmentedMessage'
                         "service ack should be set"                     ]
             // When we read the first segment we want the service choice to be part of the bytes so we only read it > 0
-            [optional uint 8    segmentServiceChoice 'segmentedMessage && sequenceNumber != 0']
+            [optional BACnetConfirmedServiceChoice
+                                segmentServiceChoice 'segmentedMessage && sequenceNumber != 0']
             [virtual  uint 16   segmentReduction
                                     '(segmentServiceChoice != null)?(apduHeaderReduction+1):apduHeaderReduction'
                                                                         ]
diff --git a/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml b/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml
index 008a6588f3..f0dc20dea9 100644
--- a/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml
+++ b/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml
@@ -63,7 +63,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">2</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">0</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="ACKNOWLEDGE_ALARM">0</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -983,6 +985,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1066,6 +1070,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1226,6 +1232,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1309,6 +1317,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1469,6 +1479,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1552,6 +1564,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1712,6 +1726,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -1795,6 +1811,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -1955,6 +1973,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2038,6 +2058,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -2198,6 +2220,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2281,6 +2305,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -2441,6 +2467,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2524,6 +2552,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -2684,6 +2714,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -2767,6 +2799,8 @@
                         </BACnetServiceAckAtomicWriteFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -3106,6 +3140,8 @@
                         </BACnetConfirmedServiceRequestReinitializeDevice>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -3534,6 +3570,8 @@
                         </BACnetConfirmedServiceRequestReadProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -3962,6 +4000,8 @@
                         </BACnetConfirmedServiceRequestReadProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -4390,6 +4430,8 @@
                         </BACnetConfirmedServiceRequestReadProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -4830,6 +4872,8 @@
                         </BACnetServiceAckReadProperty>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -5466,6 +5510,8 @@
                         </BACnetConfirmedServiceRequestWriteProperty>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -5897,6 +5943,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -5949,7 +5997,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">1</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">17</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="DEVICE_COMMUNICATION_CONTROL">17</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -6288,6 +6338,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6616,6 +6668,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6724,6 +6778,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6832,6 +6888,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -6940,6 +6998,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -7176,6 +7236,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -7377,6 +7439,8 @@
                         </BACnetConfirmedServiceRequestDeviceCommunicationControl>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -7430,7 +7494,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">51</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">17</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="DEVICE_COMMUNICATION_CONTROL">17</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -7988,6 +8054,8 @@
                         </BACnetConfirmedServiceRequestReinitializeDevice>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8189,6 +8257,8 @@
                         </BACnetConfirmedServiceRequestReinitializeDevice>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8242,7 +8312,9 @@
                   <APDUSimpleAck>
                     <reserved dataType="uint" bitLength="4">0</reserved>
                     <originalInvokeId dataType="uint" bitLength="8">53</originalInvokeId>
-                    <serviceChoice dataType="uint" bitLength="8">20</serviceChoice>
+                    <serviceChoice>
+                      <BACnetConfirmedServiceChoice dataType="uint" bitLength="8" stringRepresentation="REINITIALIZE_DEVICE">20</BACnetConfirmedServiceChoice>
+                    </serviceChoice>
                   </APDUSimpleAck>
                 </APDU>
               </apdu>
@@ -8405,6 +8477,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8562,6 +8636,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -8725,6 +8801,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -8882,6 +8960,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -9045,6 +9125,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -9202,6 +9284,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -9365,6 +9449,8 @@
                         </BACnetConfirmedServiceRequestAtomicReadFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -9522,6 +9608,8 @@
                         </BACnetServiceAckAtomicReadFile>
                       </BACnetServiceAck>
                     </serviceAck>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUComplexAck>
                 </APDU>
@@ -9681,6 +9769,8 @@
                         </BACnetConfirmedServiceRequestAtomicWriteFile>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>
@@ -9877,6 +9967,8 @@
                         </BACnetConfirmedServiceRequestReadPropertyMultiple>
                       </BACnetConfirmedServiceRequest>
                     </serviceRequest>
+                    <segmentServiceChoice>
+                    </segmentServiceChoice>
                     <segment dataType="byte" bitLength="0">0x</segment>
                   </APDUConfirmedRequest>
                 </APDU>