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/01/27 10:56:26 UTC

[plc4x] branch develop updated (c9d4dd4 -> cf8ebfe)

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 c9d4dd4  fix(plc4j/codegen): fix build
     new 43baaed  fix(plc4j/codegen): fix overflow issues on byte[]
     new cf8ebfe  fix(bacnet): use byte[] as base for enumerated for now

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:
 .../templates/java/model-template.java.ftlh        |   2 +-
 .../protocols/bacnet/ParserSerializerTestsuite.xml | 132 ++++++---------------
 .../bacnetip/readwrite/model/BACnetAction.go       |   4 +-
 .../model/BACnetApplicationTagEnumerated.go        |  57 ++++-----
 .../bacnetip/readwrite/model/BACnetBinaryPV.go     |   4 +-
 ...erviceRequestReinitializeDeviceEnableDisable.go |   6 +-
 .../readwrite/model/BACnetContextTagEnumerated.go  |  57 ++++-----
 .../bacnetip/readwrite/model/BACnetSegmentation.go |   8 +-
 .../bacnetip/readwrite/model/StaticHelper.go       |  10 ++
 .../bacnetip/readwrite/utils/StaticHelper.java     |   6 +
 .../plc4x/java/bacnetip/RandomPackagesTest.java    |  38 +++---
 .../resources/protocols/bacnetip/bacnetip.mspec    |  28 +++--
 .../protocols/bacnet/ParserSerializerTestsuite.xml | 132 ++++++---------------
 13 files changed, 176 insertions(+), 308 deletions(-)

[plc4x] 02/02: fix(bacnet): use byte[] as base for enumerated for now

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 cf8ebfe7051c0624457580a70c90df85a11307e3
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 27 11:56:18 2022 +0100

    fix(bacnet): use byte[] as base for enumerated for now
---
 .../protocols/bacnet/ParserSerializerTestsuite.xml | 132 ++++++---------------
 .../bacnetip/readwrite/model/BACnetAction.go       |   4 +-
 .../model/BACnetApplicationTagEnumerated.go        |  57 ++++-----
 .../bacnetip/readwrite/model/BACnetBinaryPV.go     |   4 +-
 ...erviceRequestReinitializeDeviceEnableDisable.go |   6 +-
 .../readwrite/model/BACnetContextTagEnumerated.go  |  57 ++++-----
 .../bacnetip/readwrite/model/BACnetSegmentation.go |   8 +-
 .../bacnetip/readwrite/model/StaticHelper.go       |  10 ++
 .../bacnetip/readwrite/utils/StaticHelper.java     |   6 +
 .../plc4x/java/bacnetip/RandomPackagesTest.java    |  38 +++---
 .../resources/protocols/bacnetip/bacnetip.mspec    |  28 +++--
 .../protocols/bacnet/ParserSerializerTestsuite.xml | 132 ++++++---------------
 12 files changed, 175 insertions(+), 307 deletions(-)

diff --git a/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml b/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml
index 0b8555a..dd09fb5 100644
--- a/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml
+++ b/plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml
@@ -706,9 +706,7 @@
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -2835,9 +2833,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -3028,9 +3024,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -3046,9 +3040,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -3243,9 +3235,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -3431,9 +3421,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">2</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x02</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -3449,9 +3437,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">32</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x20</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -3646,9 +3632,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -3834,9 +3818,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">2</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x02</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -3852,9 +3834,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">32</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x20</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -4049,9 +4029,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -4996,9 +4974,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -5239,9 +5215,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">1</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x01</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -5257,9 +5231,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">31</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1f</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -5454,9 +5426,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -5554,9 +5524,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -5824,9 +5792,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -5924,9 +5890,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6021,9 +5985,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -6039,9 +6001,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -6146,9 +6106,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">3</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x03</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -6245,9 +6203,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6348,9 +6304,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6451,9 +6405,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6554,9 +6506,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6684,9 +6634,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">3</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x03</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -6783,9 +6731,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6881,9 +6827,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -6899,9 +6843,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -6979,9 +6921,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -7160,9 +7100,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">3</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x03</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -7633,9 +7571,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -7651,9 +7587,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAction.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAction.go
index ea70a44..6951a96 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAction.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAction.go
@@ -112,11 +112,11 @@ func BACnetActionParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetAct
 	}
 
 	// Virtual field
-	_isDirect := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (0)))
+	_isDirect := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (0)))
 	isDirect := bool(_isDirect)
 
 	// Virtual field
-	_isReverse := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (1)))
+	_isReverse := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (1)))
 	isReverse := bool(_isReverse)
 
 	if closeErr := readBuffer.CloseContext("BACnetAction"); closeErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
index 3f9d514..fa453b4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
@@ -29,7 +29,8 @@ import (
 // The data-structure of this message
 type BACnetApplicationTagEnumerated struct {
 	*BACnetApplicationTag
-	Data []int8
+	Data        []byte
+	ActualValue uint32
 }
 
 // The corresponding interface
@@ -52,9 +53,10 @@ func (m *BACnetApplicationTagEnumerated) InitializeParent(parent *BACnetApplicat
 	m.BACnetApplicationTag.ActualLength = actualLength
 }
 
-func NewBACnetApplicationTagEnumerated(data []int8, header *BACnetTagHeader, actualTagNumber uint8, actualLength uint32) *BACnetApplicationTag {
+func NewBACnetApplicationTagEnumerated(data []byte, actualValue uint32, header *BACnetTagHeader, actualTagNumber uint8, actualLength uint32) *BACnetApplicationTag {
 	child := &BACnetApplicationTagEnumerated{
 		Data:                 data,
+		ActualValue:          actualValue,
 		BACnetApplicationTag: NewBACnetApplicationTag(header, actualTagNumber, actualLength),
 	}
 	child.Child = child
@@ -96,6 +98,8 @@ func (m *BACnetApplicationTagEnumerated) LengthInBitsConditional(lastItem bool)
 		lengthInBits += 8 * uint16(len(m.Data))
 	}
 
+	// A virtual field doesn't have any in- or output.
+
 	return lengthInBits
 }
 
@@ -107,28 +111,17 @@ func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, actualLeng
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagEnumerated"); pullErr != nil {
 		return nil, pullErr
 	}
-
-	// Array field (data)
-	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
-		return nil, pullErr
-	}
-	// Length array
-	data := make([]int8, 0)
-	{
-		_dataLength := actualLength
-		_dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
-		for readBuffer.GetPos() < _dataEndPos {
-			_item, _err := readBuffer.ReadInt8("", 8)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'data' field")
-			}
-			data = append(data, _item)
-		}
-	}
-	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
-		return nil, closeErr
+	// Byte Array field (data)
+	numberOfBytesdata := int(actualLength)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
+	if _readArrayErr != nil {
+		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
 
+	// Virtual field
+	_actualValue := ParseVarUint(data)
+	actualValue := uint32(_actualValue)
+
 	if closeErr := readBuffer.CloseContext("BACnetApplicationTagEnumerated"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -136,6 +129,7 @@ func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, actualLeng
 	// Create a partially initialized instance
 	_child := &BACnetApplicationTagEnumerated{
 		Data:                 data,
+		ActualValue:          actualValue,
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
@@ -150,19 +144,16 @@ func (m *BACnetApplicationTagEnumerated) Serialize(writeBuffer utils.WriteBuffer
 
 		// Array Field (data)
 		if m.Data != nil {
-			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
-				return pushErr
-			}
-			for _, _element := range m.Data {
-				_elementErr := writeBuffer.WriteInt8("", 8, _element)
-				if _elementErr != nil {
-					return errors.Wrap(_elementErr, "Error serializing 'data' field")
-				}
-			}
-			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
-				return popErr
+			// Byte Array field (data)
+			_writeArrayErr := writeBuffer.WriteByteArray("data", m.Data)
+			if _writeArrayErr != nil {
+				return errors.Wrap(_writeArrayErr, "Error serializing 'data' field")
 			}
 		}
+		// Virtual field
+		if _actualValueErr := writeBuffer.WriteVirtual("actualValue", m.ActualValue); _actualValueErr != nil {
+			return errors.Wrap(_actualValueErr, "Error serializing 'actualValue' field")
+		}
 
 		if popErr := writeBuffer.PopContext("BACnetApplicationTagEnumerated"); popErr != nil {
 			return popErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go
index 936ea86..a8d8a17 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetBinaryPV.go
@@ -112,11 +112,11 @@ func BACnetBinaryPVParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetB
 	}
 
 	// Virtual field
-	_isInactive := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (0)))
+	_isInactive := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (0)))
 	isInactive := bool(_isInactive)
 
 	// Virtual field
-	_isActive := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (1)))
+	_isActive := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (1)))
 	isActive := bool(_isActive)
 
 	if closeErr := readBuffer.CloseContext("BACnetBinaryPV"); closeErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable.go
index 1a0b525..f2caa62 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable.go
@@ -115,15 +115,15 @@ func BACnetConfirmedServiceRequestReinitializeDeviceEnableDisableParse(readBuffe
 	}
 
 	// Virtual field
-	_isEnable := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (0)))
+	_isEnable := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (0)))
 	isEnable := bool(_isEnable)
 
 	// Virtual field
-	_isDisable := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (1)))
+	_isDisable := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (1)))
 	isDisable := bool(_isDisable)
 
 	// Virtual field
-	_isDisableInitiation := bool(bool(bool((rawData) != (nil))) && bool(bool((len((*rawData).Data)) == (1)))) && bool(bool(((*rawData).Data[0]) == (2)))
+	_isDisableInitiation := bool(bool((rawData) != (nil))) && bool(bool(((*rawData).ActualValue) == (2)))
 	isDisableInitiation := bool(_isDisableInitiation)
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable"); closeErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
index 10bcb28..f6ed821 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
@@ -29,7 +29,8 @@ import (
 // The data-structure of this message
 type BACnetContextTagEnumerated struct {
 	*BACnetContextTag
-	Data []int8
+	Data        []byte
+	ActualValue uint32
 }
 
 // The corresponding interface
@@ -53,9 +54,10 @@ func (m *BACnetContextTagEnumerated) InitializeParent(parent *BACnetContextTag,
 	m.BACnetContextTag.IsNotOpeningOrClosingTag = isNotOpeningOrClosingTag
 }
 
-func NewBACnetContextTagEnumerated(data []int8, header *BACnetTagHeader, tagNumber uint8, actualLength uint32, isNotOpeningOrClosingTag bool) *BACnetContextTag {
+func NewBACnetContextTagEnumerated(data []byte, actualValue uint32, header *BACnetTagHeader, tagNumber uint8, actualLength uint32, isNotOpeningOrClosingTag bool) *BACnetContextTag {
 	child := &BACnetContextTagEnumerated{
 		Data:             data,
+		ActualValue:      actualValue,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumber, actualLength, isNotOpeningOrClosingTag),
 	}
 	child.Child = child
@@ -97,6 +99,8 @@ func (m *BACnetContextTagEnumerated) LengthInBitsConditional(lastItem bool) uint
 		lengthInBits += 8 * uint16(len(m.Data))
 	}
 
+	// A virtual field doesn't have any in- or output.
+
 	return lengthInBits
 }
 
@@ -113,28 +117,17 @@ func BACnetContextTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgum
 	if !(isNotOpeningOrClosingTag) {
 		return nil, utils.ParseAssertError{"length 6 and 7 reserved for opening and closing tag"}
 	}
-
-	// Array field (data)
-	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
-		return nil, pullErr
-	}
-	// Length array
-	data := make([]int8, 0)
-	{
-		_dataLength := actualLength
-		_dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
-		for readBuffer.GetPos() < _dataEndPos {
-			_item, _err := readBuffer.ReadInt8("", 8)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'data' field")
-			}
-			data = append(data, _item)
-		}
-	}
-	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
-		return nil, closeErr
+	// Byte Array field (data)
+	numberOfBytesdata := int(actualLength)
+	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
+	if _readArrayErr != nil {
+		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field")
 	}
 
+	// Virtual field
+	_actualValue := ParseVarUint(data)
+	actualValue := uint32(_actualValue)
+
 	if closeErr := readBuffer.CloseContext("BACnetContextTagEnumerated"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -142,6 +135,7 @@ func BACnetContextTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgum
 	// Create a partially initialized instance
 	_child := &BACnetContextTagEnumerated{
 		Data:             data,
+		ActualValue:      actualValue,
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
@@ -156,19 +150,16 @@ func (m *BACnetContextTagEnumerated) Serialize(writeBuffer utils.WriteBuffer) er
 
 		// Array Field (data)
 		if m.Data != nil {
-			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
-				return pushErr
-			}
-			for _, _element := range m.Data {
-				_elementErr := writeBuffer.WriteInt8("", 8, _element)
-				if _elementErr != nil {
-					return errors.Wrap(_elementErr, "Error serializing 'data' field")
-				}
-			}
-			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
-				return popErr
+			// Byte Array field (data)
+			_writeArrayErr := writeBuffer.WriteByteArray("data", m.Data)
+			if _writeArrayErr != nil {
+				return errors.Wrap(_writeArrayErr, "Error serializing 'data' field")
 			}
 		}
+		// Virtual field
+		if _actualValueErr := writeBuffer.WriteVirtual("actualValue", m.ActualValue); _actualValueErr != nil {
+			return errors.Wrap(_actualValueErr, "Error serializing 'actualValue' field")
+		}
 
 		if popErr := writeBuffer.PopContext("BACnetContextTagEnumerated"); popErr != nil {
 			return popErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSegmentation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSegmentation.go
index 634b06b..7af777a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSegmentation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetSegmentation.go
@@ -107,19 +107,19 @@ func BACnetSegmentationParse(readBuffer utils.ReadBuffer) (*BACnetSegmentation,
 	}
 
 	// Virtual field
-	_isSegmentedBoth := bool(bool(bool((rawData) != (nil))) && bool(bool((len(rawData.Data)) == (1)))) && bool(bool((rawData.Data[0]) == (0)))
+	_isSegmentedBoth := bool(bool((rawData) != (nil))) && bool(bool((rawData.ActualValue) == (0)))
 	isSegmentedBoth := bool(_isSegmentedBoth)
 
 	// Virtual field
-	_isSegmentedTransmit := bool(bool(bool((rawData) != (nil))) && bool(bool((len(rawData.Data)) == (1)))) && bool(bool((rawData.Data[0]) == (1)))
+	_isSegmentedTransmit := bool(bool((rawData) != (nil))) && bool(bool((rawData.ActualValue) == (1)))
 	isSegmentedTransmit := bool(_isSegmentedTransmit)
 
 	// Virtual field
-	_isSegmentedReceive := bool(bool(bool((rawData) != (nil))) && bool(bool((len(rawData.Data)) == (1)))) && bool(bool((rawData.Data[0]) == (3)))
+	_isSegmentedReceive := bool(bool((rawData) != (nil))) && bool(bool((rawData.ActualValue) == (3)))
 	isSegmentedReceive := bool(_isSegmentedReceive)
 
 	// Virtual field
-	_isNoSegmentation := bool(bool(bool((rawData) != (nil))) && bool(bool((len(rawData.Data)) == (1)))) && bool(bool((rawData.Data[0]) == (4)))
+	_isNoSegmentation := bool(bool((rawData) != (nil))) && bool(bool((rawData.ActualValue) == (4)))
 	isNoSegmentation := bool(_isNoSegmentation)
 
 	if closeErr := readBuffer.CloseContext("BACnetSegmentation"); closeErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
index 5855dec..43f8e67 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
@@ -22,6 +22,7 @@ package model
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
+	"math/big"
 )
 
 func ReadPropertyIdentifier(readBuffer utils.ReadBuffer, actualLength uint32) (BACnetPropertyIdentifier, error) {
@@ -295,3 +296,12 @@ func GuessDataType(objectType BACnetObjectType) BACnetDataType {
 	// TODO: implement me
 	return BACnetDataType_BACNET_PROPERTY_IDENTIFIER
 }
+
+func ParseVarUint(data []byte) uint32 {
+	bigInt := big.NewInt(0)
+	return uint32(bigInt.SetBytes(data).Uint64())
+}
+
+func WriteVarUint(value uint32) []byte {
+	return big.NewInt(int64(value)).Bytes()
+}
diff --git a/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java b/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java
index 9155566..53f3879 100644
--- a/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java
+++ b/plc4j/drivers/bacnet/src/main/java/org/apache/plc4x/java/bacnetip/readwrite/utils/StaticHelper.java
@@ -26,6 +26,8 @@ import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigInteger;
+
 import static org.apache.plc4x.java.spi.generation.WithReaderWriterArgs.WithAdditionalStringRepresentation;
 
 public class StaticHelper {
@@ -338,4 +340,8 @@ public class StaticHelper {
         // TODO: temporary
         return BACnetDataType.BACNET_PROPERTY_IDENTIFIER;
     }
+
+    public static long parseVarUint(byte[] data) {
+        return new BigInteger(data).longValue();
+    }
 }
diff --git a/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java b/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
index 90754b2..ad2952c 100644
--- a/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
+++ b/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
@@ -594,9 +594,9 @@ public class RandomPackagesTest {
                     APDUError apduError = (APDUError) npdu.getApdu();
                     BACnetErrorWriteProperty baCnetErrorWriteProperty = (BACnetErrorWriteProperty) apduError.getError();
                     // TODO: change to enum
-                    assertEquals(List.of((byte) 0x02), baCnetErrorWriteProperty.getErrorClass().getData());
+                    assertEquals(0x02, baCnetErrorWriteProperty.getErrorClass().getActualValue());
                     // TODO: change to enum
-                    assertEquals(List.of((byte) 0x28), baCnetErrorWriteProperty.getErrorCode().getData());
+                    assertEquals(0x28, baCnetErrorWriteProperty.getErrorCode().getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 79-86 - Skip Misc 8 packages",
                 () -> {
@@ -629,9 +629,9 @@ public class RandomPackagesTest {
                     APDUError apduError = (APDUError) npdu.getApdu();
                     BACnetErrorWriteProperty baCnetErrorWriteProperty = (BACnetErrorWriteProperty) apduError.getError();
                     // TODO: change to enum
-                    assertEquals(List.of((byte) 0x02), baCnetErrorWriteProperty.getErrorClass().getData());
+                    assertEquals(0x02, baCnetErrorWriteProperty.getErrorClass().getActualValue());
                     // TODO: change to enum
-                    assertEquals(List.of((byte) 0x25), baCnetErrorWriteProperty.getErrorCode().getData());
+                    assertEquals(0x25, baCnetErrorWriteProperty.getErrorCode().getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 89-142 - Skip to 142 Misc packages",
                 () -> {
@@ -976,7 +976,7 @@ public class RandomPackagesTest {
                     }
                     {
                         BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetUnconfirmedServiceRequestUnconfirmedCOVNotification.getListOfValues().getData().get(0).getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                        assertEquals(List.of((byte) 0x0), baCnetApplicationTagEnumerated.getData());
+                        assertEquals(0, baCnetApplicationTagEnumerated.getActualValue());
                     }
                     {
                         BACnetContextTagPropertyIdentifier baCnetContextTagPropertyIdentifier = baCnetUnconfirmedServiceRequestUnconfirmedCOVNotification.getListOfValues().getData().get(1).getPropertyIdentifier();
@@ -1161,7 +1161,7 @@ public class RandomPackagesTest {
                             assertEquals(BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE, baCnetPropertyValue.getPropertyIdentifier().getPropertyIdentifier());
                             assertEquals(2201, baCnetPropertyValue.getPropertyIdentifier().getProprietaryValue());
                             BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetPropertyValue.getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                            assertEquals(List.of((byte) 85), baCnetApplicationTagEnumerated.getData());
+                            assertEquals(85, baCnetApplicationTagEnumerated.getActualValue());
                         }
                         {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(3);
@@ -1174,34 +1174,34 @@ public class RandomPackagesTest {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(4);
                             assertEquals(BACnetPropertyIdentifier.RELIABILITY, baCnetPropertyValue.getPropertyIdentifier().getPropertyIdentifier());
                             BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetPropertyValue.getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                            assertEquals(List.of((byte) 0), baCnetApplicationTagEnumerated.getData());
+                            assertEquals(0, baCnetApplicationTagEnumerated.getActualValue());
                         }
                         {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(5);
                             assertEquals(BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE, baCnetPropertyValue.getPropertyIdentifier().getPropertyIdentifier());
                             assertEquals(661, baCnetPropertyValue.getPropertyIdentifier().getProprietaryValue());
                             BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetPropertyValue.getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                            assertEquals(List.of((byte) 5), baCnetApplicationTagEnumerated.getData());
+                            assertEquals(5, baCnetApplicationTagEnumerated.getActualValue());
                         }
                         {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(6);
                             assertEquals(BACnetPropertyIdentifier.UNITS, baCnetPropertyValue.getPropertyIdentifier().getPropertyIdentifier());
                             BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetPropertyValue.getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                            assertEquals(List.of((byte) 64), baCnetApplicationTagEnumerated.getData());
+                            assertEquals(64, baCnetApplicationTagEnumerated.getActualValue());
                         }
                         {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(7);
                             assertEquals(BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE, baCnetPropertyValue.getPropertyIdentifier().getPropertyIdentifier());
                             assertEquals(1659, baCnetPropertyValue.getPropertyIdentifier().getProprietaryValue());
                             BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetPropertyValue.getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                            assertEquals(List.of((byte) 0), baCnetApplicationTagEnumerated.getData());
+                            assertEquals(0, baCnetApplicationTagEnumerated.getActualValue());
                         }
                         {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(8);
                             assertEquals(BACnetPropertyIdentifier.VENDOR_PROPRIETARY_VALUE, baCnetPropertyValue.getPropertyIdentifier().getPropertyIdentifier());
                             assertEquals(2203, baCnetPropertyValue.getPropertyIdentifier().getProprietaryValue());
                             BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) ((BACnetConstructedDataUnspecified) baCnetPropertyValue.getPropertyValue().getConstructedData()).getData().get(0).getApplicationTag();
-                            assertEquals(List.of((byte) 0), baCnetApplicationTagEnumerated.getData());
+                            assertEquals(0, baCnetApplicationTagEnumerated.getActualValue());
                         }
                         {
                             BACnetPropertyValue baCnetPropertyValue = baCnetNotificationParametersComplexEventType.getListOfValues().getData().get(9);
@@ -2955,7 +2955,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetPropertyIdentifier.SYSTEM_STATUS, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
                     BACnetApplicationTag value = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) value;
-                    assertEquals(List.of((byte) 0x0), baCnetApplicationTagEnumerated.getData());
+                    assertEquals(0x0, baCnetApplicationTagEnumerated.getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 19 - Confirmed-REQ   readProperty[ 33] device,201 vendor-name",
                 () -> {
@@ -3271,7 +3271,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetPropertyIdentifier.SEGMENTATION_SUPPORTED, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
                     BACnetApplicationTag value = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     BACnetApplicationTagEnumerated BACnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) value;
-                    assertEquals(List.of((byte) 0), BACnetApplicationTagEnumerated.getData());
+                    assertEquals(0, BACnetApplicationTagEnumerated.getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 41 - Confirmed-REQ   readProperty[ 44] device,201 local-time",
                 () -> {
@@ -3502,7 +3502,7 @@ public class RandomPackagesTest {
                     APDUError apduError = (APDUError) npdu.getApdu();
                     BACnetErrorReadProperty baCnetErrorReadProperty = (BACnetErrorReadProperty) apduError.getError();
                     // TODO: use proper enums
-                    assertEquals(List.of((byte) 32), baCnetErrorReadProperty.getErrorCode().getData());
+                    assertEquals(32, baCnetErrorReadProperty.getErrorCode().getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 57 - Confirmed-REQ   readProperty[ 52] device,201 max-master",
                 () -> {
@@ -3638,7 +3638,7 @@ public class RandomPackagesTest {
                     APDUError apduError = (APDUError) npdu.getApdu();
                     BACnetErrorReadProperty baCnetErrorReadProperty = (BACnetErrorReadProperty) apduError.getError();
                     // TODO: use proper enums
-                    assertEquals(List.of((byte) 32), baCnetErrorReadProperty.getErrorCode().getData());
+                    assertEquals(32, baCnetErrorReadProperty.getErrorCode().getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 67 - Confirmed-REQ   readProperty[ 57] device,61 object-identifier",
                 () -> {
@@ -3726,7 +3726,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetPropertyIdentifier.OBJECT_TYPE, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
                     BACnetApplicationTag value = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) value;
-                    assertEquals(List.of((byte) 8), baCnetApplicationTagEnumerated.getData());
+                    assertEquals(8, baCnetApplicationTagEnumerated.getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 73 - Confirmed-REQ   readProperty[ 60] device,61 system-status",
                 () -> {
@@ -3755,7 +3755,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetPropertyIdentifier.SYSTEM_STATUS, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
                     BACnetApplicationTag value = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     BACnetApplicationTagEnumerated baCnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) value;
-                    assertEquals(List.of((byte) 0x0), baCnetApplicationTagEnumerated.getData());
+                    assertEquals(0, baCnetApplicationTagEnumerated.getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 75 - Confirmed-REQ   readProperty[ 61] device,61 vendor-name",
                 () -> {
@@ -4071,7 +4071,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetPropertyIdentifier.SEGMENTATION_SUPPORTED, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
                     BACnetApplicationTag value = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     BACnetApplicationTagEnumerated BACnetApplicationTagEnumerated = (BACnetApplicationTagEnumerated) value;
-                    assertEquals(List.of((byte) 0), BACnetApplicationTagEnumerated.getData());
+                    assertEquals(0, BACnetApplicationTagEnumerated.getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 97 - Confirmed-REQ   readProperty[ 72] device,61 local-time",
                 () -> {
@@ -4302,7 +4302,7 @@ public class RandomPackagesTest {
                     APDUError apduError = (APDUError) npdu.getApdu();
                     BACnetErrorReadProperty baCnetErrorReadProperty = (BACnetErrorReadProperty) apduError.getError();
                     // TODO: use proper enums
-                    assertEquals(List.of((byte) 32), baCnetErrorReadProperty.getErrorCode().getData());
+                    assertEquals(32, baCnetErrorReadProperty.getErrorCode().getActualValue());
                 }),
             DynamicTest.dynamicTest("No. 113 - Confirmed-REQ   readProperty[ 80] device,61 max-master",
                 () -> {
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index f2f94ea..dc0d0f7 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -400,9 +400,9 @@
 [type BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable(uint 8 tagNumber)
     [optional   BACnetContextTagEnumerated('tagNumber', 'BACnetDataType.ENUMERATED')
                     rawData                         ]
-    [virtual    bit isEnable            'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 0']
-    [virtual    bit isDisable           'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 1']
-    [virtual    bit isDisableInitiation 'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 2']
+    [virtual    bit isEnable            'rawData != null && rawData.actualValue == 0']
+    [virtual    bit isDisable           'rawData != null && rawData.actualValue == 1']
+    [virtual    bit isDisableInitiation 'rawData != null && rawData.actualValue == 2']
 ]
 
 [type BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord
@@ -485,10 +485,10 @@
 // TODO: this is a enum so we should build a static call which maps a enum (could be solved by using only the tag header with a length validation and the enum itself)
 [type BACnetSegmentation
     [simple BACnetApplicationTagEnumerated          rawData ]
-    [virtual    bit isSegmentedBoth           'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 0']
-    [virtual    bit isSegmentedTransmit       'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 1']
-    [virtual    bit isSegmentedReceive        'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 3']
-    [virtual    bit isNoSegmentation          'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 4']
+    [virtual    bit isSegmentedBoth           'rawData != null && rawData.actualValue == 0']
+    [virtual    bit isSegmentedTransmit       'rawData != null && rawData.actualValue == 1']
+    [virtual    bit isSegmentedReceive        'rawData != null && rawData.actualValue == 3']
+    [virtual    bit isNoSegmentation          'rawData != null && rawData.actualValue == 4']
 ]
 
 [discriminatedType BACnetServiceAck
@@ -948,8 +948,8 @@
     [optional   BACnetContextTagEnumerated('tagNumber', 'BACnetDataType.ENUMERATED')
                 rawData
     ]
-    [virtual    bit isDirect         'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 0']
-    [virtual    bit isReverse        'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 1']
+    [virtual    bit isDirect         'rawData != null && rawData.actualValue == 0']
+    [virtual    bit isReverse        'rawData != null && rawData.actualValue == 1']
 ]
 
 [type BACnetActionCommand
@@ -987,8 +987,8 @@
     [optional   BACnetContextTagEnumerated('tagNumber', 'BACnetDataType.ENUMERATED')
                 rawData
     ]
-    [virtual    bit isInactive         'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 0']
-    [virtual    bit isActive           'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 1']
+    [virtual    bit isInactive         'rawData != null && rawData.actualValue == 0']
+    [virtual    bit isActive           'rawData != null && rawData.actualValue == 1']
 ]
 
 [type BACnetPropertyStates(uint 8 tagNumber)
@@ -1163,7 +1163,8 @@
             [array      bit         unused count 'unusedBits'                            ]
         ]
         ['0x9' BACnetApplicationTagEnumerated(uint 32 actualLength)
-            [array int 8 data length 'actualLength']
+            [array   byte       data length 'actualLength']
+            [virtual uint 32    actualValue 'STATIC_CALL("parseVarUint", data)'  ]
         ]
         ['0xA' BACnetApplicationTagDate
             [virtual int  8 wildcard '0xFF'                                 ]
@@ -1286,7 +1287,8 @@
         ]
         ['ENUMERATED' BACnetContextTagEnumerated(bit isNotOpeningOrClosingTag, uint 32 actualLength)
             [validation 'isNotOpeningOrClosingTag' "length 6 and 7 reserved for opening and closing tag"]
-            [array int 8 data length 'actualLength']
+            [array byte data length 'actualLength']
+            [virtual uint 32    actualValue 'STATIC_CALL("parseVarUint", data)'  ]
         ]
         ['DATE' BACnetContextTagDate(bit isNotOpeningOrClosingTag)
             [validation 'isNotOpeningOrClosingTag' "length 6 and 7 reserved for opening and closing tag"]
diff --git a/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml b/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml
index 0b8555a..dd09fb5 100644
--- a/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml
+++ b/protocols/bacnetip/src/test/resources/protocols/bacnet/ParserSerializerTestsuite.xml
@@ -706,9 +706,7 @@
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -2835,9 +2833,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -3028,9 +3024,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -3046,9 +3040,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -3243,9 +3235,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -3431,9 +3421,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">2</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x02</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -3449,9 +3437,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">32</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x20</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -3646,9 +3632,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -3834,9 +3818,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">2</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x02</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -3852,9 +3834,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">32</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x20</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -4049,9 +4029,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -4996,9 +4974,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -5239,9 +5215,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">1</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x01</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -5257,9 +5231,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">31</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1f</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -5454,9 +5426,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -5554,9 +5524,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -5824,9 +5792,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -5924,9 +5890,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">0</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x00</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6021,9 +5985,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -6039,9 +6001,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -6146,9 +6106,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">3</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x03</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -6245,9 +6203,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6348,9 +6304,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6451,9 +6405,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6554,9 +6506,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6684,9 +6634,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">3</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x03</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -6783,9 +6731,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -6881,9 +6827,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -6899,9 +6843,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>
@@ -6979,9 +6921,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetContextTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">1</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x01</data>
                                   </BACnetContextTagEnumerated>
                                 </BACnetContextTag>
                               </rawData>
@@ -7160,9 +7100,7 @@ make -f wp.mak clean</value>
                                     </BACnetTagHeader>
                                   </header>
                                   <BACnetApplicationTagEnumerated>
-                                    <data isList="true">
-                                      <value dataType="int" bitLength="8">3</value>
-                                    </data>
+                                    <data dataType="byte" bitLength="8">0x03</data>
                                   </BACnetApplicationTagEnumerated>
                                 </BACnetApplicationTag>
                               </rawData>
@@ -7633,9 +7571,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">5</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x05</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorClass>
@@ -7651,9 +7587,7 @@ make -f wp.mak clean</value>
                               </BACnetTagHeader>
                             </header>
                             <BACnetApplicationTagEnumerated>
-                              <data isList="true">
-                                <value dataType="int" bitLength="8">26</value>
-                              </data>
+                              <data dataType="byte" bitLength="8">0x1a</data>
                             </BACnetApplicationTagEnumerated>
                           </BACnetApplicationTag>
                         </errorCode>

[plc4x] 01/02: fix(plc4j/codegen): fix overflow issues on byte[]

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 43baaedd5b73d8ae887b85ee9e438e6e2065dc96
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jan 27 11:42:26 2022 +0100

    fix(plc4j/codegen): fix overflow issues on byte[]
---
 .../src/main/resources/templates/java/model-template.java.ftlh          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
index 1c007a5..be5d074 100644
--- a/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
+++ b/code-generation/language-java/src/main/resources/templates/java/model-template.java.ftlh
@@ -522,7 +522,7 @@ public<#if type.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${ty
                     <#if !field.isCountArrayField() && !field.isLengthArrayField()>
                         throw new ParseException("array fields of type byte only support 'count' and 'length' loop-types.");
                     </#if>
-                    byte[] ${namedField.name} = readBuffer.readByteArray("${namedField.name}", (int) ${helper.toParseExpression(arrayField, helper.intTypeReference, arrayField.loopExpression, parserArguments)}${helper.getFieldOptions(typedField, parserArguments)});
+                    byte[] ${namedField.name} = readBuffer.readByteArray("${namedField.name}", Math.toIntExact(${helper.toParseExpression(arrayField, helper.intTypeReference, arrayField.loopExpression, parserArguments)})${helper.getFieldOptions(typedField, parserArguments)});
                 <#else>
                 <#-- If this is a count array, we can directly initialize an array with the given size -->
                     <#if field.isCountArrayField()>