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()>