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 2021/11/30 10:02:15 UTC
[plc4x] branch develop updated (7d41e7c -> aa31014)
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 7d41e7c feat(bacnet): work in BACnetUnconfirmedServiceRequestWhoIs
new 7006b32 feat(bacnet): implemented I-Have
new aa31014 fix(bacnet): substract encoding field from length
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:
.../readwrite/model/BACnetCharacterEncoding.go | 144 ++++++++++++++
.../bacnetip/readwrite/model/BACnetComplexTag.go | 2 +-
.../model/BACnetComplexTagCharacterString.go | 66 ++++++-
.../model/BACnetComplexTagObjectIdentifier.go | 47 ++++-
.../readwrite/model/BACnetComplexTagOctetString.go | 32 ++--
.../BACnetConfirmedServiceRequestWriteProperty.go | 1 -
.../plc4go/bacnetip/readwrite/model/BACnetTag.go | 16 +-
.../model/BACnetTagApplicationBitString.go | 4 +-
.../model/BACnetTagApplicationCharacterString.go | 66 ++++++-
.../readwrite/model/BACnetTagApplicationDouble.go | 2 +-
.../model/BACnetTagApplicationEnumerated.go | 4 +-
.../model/BACnetTagApplicationObjectIdentifier.go | 47 ++++-
.../model/BACnetTagApplicationOctetString.go | 32 +++-
.../readwrite/model/BACnetTagApplicationReal.go | 2 +-
.../model/BACnetTagApplicationSignedInteger.go | 163 ++++++++++++----
.../model/BACnetTagApplicationUnsignedInteger.go | 163 ++++++++++++----
.../model/BACnetUnconfirmedServiceRequestIHave.go | 99 +++++++++-
.../model/BACnetUnconfirmedServiceRequestWhoHas.go | 4 -
.../model/BACnetUnconfirmedServiceRequestWhoIs.go | 2 -
.../plc4go/bacnetip/readwrite/model/NPDU.go | 2 -
.../knxnetip/readwrite/model/ConnectionResponse.go | 2 -
.../plc4go/s7/readwrite/model/COTPPacket.go | 1 -
.../plc4go/s7/readwrite/model/S7Message.go | 2 -
.../resources/protocols/bacnetip/bacnetip.mspec | 209 +++++++++++++--------
24 files changed, 889 insertions(+), 223 deletions(-)
create mode 100644 plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetCharacterEncoding.go
[plc4x] 01/02: feat(bacnet): implemented I-Have
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 7006b32d6ac6524abf511d65f4ea5b195a847989
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Nov 30 10:33:46 2021 +0100
feat(bacnet): implemented I-Have
---
.../readwrite/model/BACnetCharacterEncoding.go | 144 ++++++++++++++
.../bacnetip/readwrite/model/BACnetComplexTag.go | 2 +-
.../model/BACnetComplexTagCharacterString.go | 66 ++++++-
.../model/BACnetComplexTagObjectIdentifier.go | 47 ++++-
.../readwrite/model/BACnetComplexTagOctetString.go | 32 ++--
.../BACnetConfirmedServiceRequestWriteProperty.go | 1 -
.../plc4go/bacnetip/readwrite/model/BACnetTag.go | 16 +-
.../model/BACnetTagApplicationBitString.go | 4 +-
.../model/BACnetTagApplicationCharacterString.go | 66 ++++++-
.../readwrite/model/BACnetTagApplicationDouble.go | 2 +-
.../model/BACnetTagApplicationEnumerated.go | 4 +-
.../model/BACnetTagApplicationObjectIdentifier.go | 47 ++++-
.../model/BACnetTagApplicationOctetString.go | 32 +++-
.../readwrite/model/BACnetTagApplicationReal.go | 2 +-
.../model/BACnetTagApplicationSignedInteger.go | 163 ++++++++++++----
.../model/BACnetTagApplicationUnsignedInteger.go | 163 ++++++++++++----
.../model/BACnetUnconfirmedServiceRequestIHave.go | 99 +++++++++-
.../model/BACnetUnconfirmedServiceRequestWhoHas.go | 4 -
.../model/BACnetUnconfirmedServiceRequestWhoIs.go | 2 -
.../plc4go/bacnetip/readwrite/model/NPDU.go | 2 -
.../knxnetip/readwrite/model/ConnectionResponse.go | 2 -
.../plc4go/s7/readwrite/model/COTPPacket.go | 1 -
.../plc4go/s7/readwrite/model/S7Message.go | 2 -
.../resources/protocols/bacnetip/bacnetip.mspec | 209 +++++++++++++--------
24 files changed, 889 insertions(+), 223 deletions(-)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetCharacterEncoding.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetCharacterEncoding.go
new file mode 100644
index 0000000..2dd4b36
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetCharacterEncoding.go
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+type BACnetCharacterEncoding byte
+
+type IBACnetCharacterEncoding interface {
+ Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+ BACnetCharacterEncoding_ISO_10646 BACnetCharacterEncoding = 0x0
+ BACnetCharacterEncoding_IBM_Microsoft_DBCS BACnetCharacterEncoding = 0x1
+ BACnetCharacterEncoding_JIS_X_0208 BACnetCharacterEncoding = 0x2
+ BACnetCharacterEncoding_ISO_10646_4 BACnetCharacterEncoding = 0x3
+ BACnetCharacterEncoding_ISO_10646_2 BACnetCharacterEncoding = 0x4
+ BACnetCharacterEncoding_ISO_8859_1 BACnetCharacterEncoding = 0x5
+)
+
+var BACnetCharacterEncodingValues []BACnetCharacterEncoding
+
+func init() {
+ _ = errors.New
+ BACnetCharacterEncodingValues = []BACnetCharacterEncoding{
+ BACnetCharacterEncoding_ISO_10646,
+ BACnetCharacterEncoding_IBM_Microsoft_DBCS,
+ BACnetCharacterEncoding_JIS_X_0208,
+ BACnetCharacterEncoding_ISO_10646_4,
+ BACnetCharacterEncoding_ISO_10646_2,
+ BACnetCharacterEncoding_ISO_8859_1,
+ }
+}
+
+func BACnetCharacterEncodingByValue(value byte) BACnetCharacterEncoding {
+ switch value {
+ case 0x0:
+ return BACnetCharacterEncoding_ISO_10646
+ case 0x1:
+ return BACnetCharacterEncoding_IBM_Microsoft_DBCS
+ case 0x2:
+ return BACnetCharacterEncoding_JIS_X_0208
+ case 0x3:
+ return BACnetCharacterEncoding_ISO_10646_4
+ case 0x4:
+ return BACnetCharacterEncoding_ISO_10646_2
+ case 0x5:
+ return BACnetCharacterEncoding_ISO_8859_1
+ }
+ return 0
+}
+
+func BACnetCharacterEncodingByName(value string) BACnetCharacterEncoding {
+ switch value {
+ case "ISO_10646":
+ return BACnetCharacterEncoding_ISO_10646
+ case "IBM_Microsoft_DBCS":
+ return BACnetCharacterEncoding_IBM_Microsoft_DBCS
+ case "JIS_X_0208":
+ return BACnetCharacterEncoding_JIS_X_0208
+ case "ISO_10646_4":
+ return BACnetCharacterEncoding_ISO_10646_4
+ case "ISO_10646_2":
+ return BACnetCharacterEncoding_ISO_10646_2
+ case "ISO_8859_1":
+ return BACnetCharacterEncoding_ISO_8859_1
+ }
+ return 0
+}
+
+func CastBACnetCharacterEncoding(structType interface{}) BACnetCharacterEncoding {
+ castFunc := func(typ interface{}) BACnetCharacterEncoding {
+ if sBACnetCharacterEncoding, ok := typ.(BACnetCharacterEncoding); ok {
+ return sBACnetCharacterEncoding
+ }
+ return 0
+ }
+ return castFunc(structType)
+}
+
+func (m BACnetCharacterEncoding) LengthInBits() uint16 {
+ return 8
+}
+
+func (m BACnetCharacterEncoding) LengthInBytes() uint16 {
+ return m.LengthInBits() / 8
+}
+
+func BACnetCharacterEncodingParse(readBuffer utils.ReadBuffer) (BACnetCharacterEncoding, error) {
+ val, err := readBuffer.ReadByte("BACnetCharacterEncoding")
+ if err != nil {
+ return 0, nil
+ }
+ return BACnetCharacterEncodingByValue(val), nil
+}
+
+func (e BACnetCharacterEncoding) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteByte("BACnetCharacterEncoding", byte(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e BACnetCharacterEncoding) name() string {
+ switch e {
+ case BACnetCharacterEncoding_ISO_10646:
+ return "ISO_10646"
+ case BACnetCharacterEncoding_IBM_Microsoft_DBCS:
+ return "IBM_Microsoft_DBCS"
+ case BACnetCharacterEncoding_JIS_X_0208:
+ return "JIS_X_0208"
+ case BACnetCharacterEncoding_ISO_10646_4:
+ return "ISO_10646_4"
+ case BACnetCharacterEncoding_ISO_10646_2:
+ return "ISO_10646_2"
+ case BACnetCharacterEncoding_ISO_8859_1:
+ return "ISO_8859_1"
+ }
+ return ""
+}
+
+func (e BACnetCharacterEncoding) String() string {
+ return e.name()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go
index 84a8266..112b8b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTag.go
@@ -232,7 +232,7 @@ func BACnetComplexTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
case dataType == BACnetDataType_OCTET_STRING: // BACnetComplexTagOctetString
_parent, typeSwitchError = BACnetComplexTagOctetStringParse(readBuffer, tagNumberArgument, dataType, actualLength)
case dataType == BACnetDataType_CHARACTER_STRING: // BACnetComplexTagCharacterString
- _parent, typeSwitchError = BACnetComplexTagCharacterStringParse(readBuffer, tagNumberArgument, dataType)
+ _parent, typeSwitchError = BACnetComplexTagCharacterStringParse(readBuffer, tagNumberArgument, dataType, actualLength)
case dataType == BACnetDataType_BIT_STRING: // BACnetComplexTagBitString
_parent, typeSwitchError = BACnetComplexTagBitStringParse(readBuffer, tagNumberArgument, dataType, actualLength)
case dataType == BACnetDataType_ENUMERATED: // BACnetComplexTagEnumerated
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
index 85bdb9a..6e24ed8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
@@ -21,13 +21,17 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
)
// Code generated by code-generation. DO NOT EDIT.
// The data-structure of this message
type BACnetComplexTagCharacterString struct {
- Parent *BACnetComplexTag
+ Encoding BACnetCharacterEncoding
+ Value string
+ ActualLengthInBit uint16
+ Parent *BACnetComplexTag
}
// The corresponding interface
@@ -54,9 +58,11 @@ func (m *BACnetComplexTagCharacterString) InitializeParent(parent *BACnetComplex
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetComplexTagCharacterString(tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetComplexTag {
+func NewBACnetComplexTagCharacterString(encoding BACnetCharacterEncoding, value string, tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetComplexTag {
child := &BACnetComplexTagCharacterString{
- Parent: NewBACnetComplexTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ Encoding: encoding,
+ Value: value,
+ Parent: NewBACnetComplexTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -92,6 +98,14 @@ func (m *BACnetComplexTagCharacterString) LengthInBits() uint16 {
func (m *BACnetComplexTagCharacterString) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
+ // Simple field (encoding)
+ lengthInBits += 8
+
+ // A virtual field doesn't have any in- or output.
+
+ // Simple field (value)
+ lengthInBits += uint16(m.ActualLengthInBit)
+
return lengthInBits
}
@@ -99,18 +113,41 @@ func (m *BACnetComplexTagCharacterString) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetComplexTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetComplexTag, error) {
+func BACnetComplexTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetComplexTag, error) {
if pullErr := readBuffer.PullContext("BACnetComplexTagCharacterString"); pullErr != nil {
return nil, pullErr
}
+ // Simple Field (encoding)
+ if pullErr := readBuffer.PullContext("encoding"); pullErr != nil {
+ return nil, pullErr
+ }
+ encoding, _encodingErr := BACnetCharacterEncodingParse(readBuffer)
+ if _encodingErr != nil {
+ return nil, errors.Wrap(_encodingErr, "Error parsing 'encoding' field")
+ }
+ if closeErr := readBuffer.CloseContext("encoding"); closeErr != nil {
+ return nil, closeErr
+ }
+
+ // Virtual field
+ actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
+
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadString("value", uint32(actualLengthInBit))
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
+ }
+
if closeErr := readBuffer.CloseContext("BACnetComplexTagCharacterString"); closeErr != nil {
return nil, closeErr
}
// Create a partially initialized instance
_child := &BACnetComplexTagCharacterString{
- Parent: &BACnetComplexTag{},
+ Encoding: encoding,
+ Value: value,
+ Parent: &BACnetComplexTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -122,6 +159,25 @@ func (m *BACnetComplexTagCharacterString) Serialize(writeBuffer utils.WriteBuffe
return pushErr
}
+ // Simple Field (encoding)
+ if pushErr := writeBuffer.PushContext("encoding"); pushErr != nil {
+ return pushErr
+ }
+ _encodingErr := m.Encoding.Serialize(writeBuffer)
+ if popErr := writeBuffer.PopContext("encoding"); popErr != nil {
+ return popErr
+ }
+ if _encodingErr != nil {
+ return errors.Wrap(_encodingErr, "Error serializing 'encoding' field")
+ }
+
+ // Simple Field (value)
+ value := string(m.Value)
+ _valueErr := writeBuffer.WriteString("value", uint32(m.ActualLengthInBit), "UTF-8", (value))
+ if _valueErr != nil {
+ return errors.Wrap(_valueErr, "Error serializing 'value' field")
+ }
+
if popErr := writeBuffer.PopContext("BACnetComplexTagCharacterString"); popErr != nil {
return popErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go
index b2d291f..c878cdf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagObjectIdentifier.go
@@ -21,13 +21,16 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
)
// Code generated by code-generation. DO NOT EDIT.
// The data-structure of this message
type BACnetComplexTagObjectIdentifier struct {
- Parent *BACnetComplexTag
+ ObjectType uint16
+ InstanceNumber uint32
+ Parent *BACnetComplexTag
}
// The corresponding interface
@@ -54,9 +57,11 @@ func (m *BACnetComplexTagObjectIdentifier) InitializeParent(parent *BACnetComple
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetComplexTagObjectIdentifier(tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetComplexTag {
+func NewBACnetComplexTagObjectIdentifier(objectType uint16, instanceNumber uint32, tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetComplexTag {
child := &BACnetComplexTagObjectIdentifier{
- Parent: NewBACnetComplexTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ ObjectType: objectType,
+ InstanceNumber: instanceNumber,
+ Parent: NewBACnetComplexTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -92,6 +97,12 @@ func (m *BACnetComplexTagObjectIdentifier) LengthInBits() uint16 {
func (m *BACnetComplexTagObjectIdentifier) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
+ // Simple field (objectType)
+ lengthInBits += 10
+
+ // Simple field (instanceNumber)
+ lengthInBits += 22
+
return lengthInBits
}
@@ -104,13 +115,27 @@ func BACnetComplexTagObjectIdentifierParse(readBuffer utils.ReadBuffer, tagNumbe
return nil, pullErr
}
+ // Simple Field (objectType)
+ objectType, _objectTypeErr := readBuffer.ReadUint16("objectType", 10)
+ if _objectTypeErr != nil {
+ return nil, errors.Wrap(_objectTypeErr, "Error parsing 'objectType' field")
+ }
+
+ // Simple Field (instanceNumber)
+ instanceNumber, _instanceNumberErr := readBuffer.ReadUint32("instanceNumber", 22)
+ if _instanceNumberErr != nil {
+ return nil, errors.Wrap(_instanceNumberErr, "Error parsing 'instanceNumber' field")
+ }
+
if closeErr := readBuffer.CloseContext("BACnetComplexTagObjectIdentifier"); closeErr != nil {
return nil, closeErr
}
// Create a partially initialized instance
_child := &BACnetComplexTagObjectIdentifier{
- Parent: &BACnetComplexTag{},
+ ObjectType: objectType,
+ InstanceNumber: instanceNumber,
+ Parent: &BACnetComplexTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -122,6 +147,20 @@ func (m *BACnetComplexTagObjectIdentifier) Serialize(writeBuffer utils.WriteBuff
return pushErr
}
+ // Simple Field (objectType)
+ objectType := uint16(m.ObjectType)
+ _objectTypeErr := writeBuffer.WriteUint16("objectType", 10, (objectType))
+ if _objectTypeErr != nil {
+ return errors.Wrap(_objectTypeErr, "Error serializing 'objectType' field")
+ }
+
+ // Simple Field (instanceNumber)
+ instanceNumber := uint32(m.InstanceNumber)
+ _instanceNumberErr := writeBuffer.WriteUint32("instanceNumber", 22, (instanceNumber))
+ if _instanceNumberErr != nil {
+ return errors.Wrap(_instanceNumberErr, "Error serializing 'instanceNumber' field")
+ }
+
if popErr := writeBuffer.PopContext("BACnetComplexTagObjectIdentifier"); popErr != nil {
return popErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go
index 615da25..418936f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagOctetString.go
@@ -28,7 +28,7 @@ import (
// The data-structure of this message
type BACnetComplexTagOctetString struct {
- TheString string
+ Value string
ActualLengthInBit uint16
Parent *BACnetComplexTag
}
@@ -57,10 +57,10 @@ func (m *BACnetComplexTagOctetString) InitializeParent(parent *BACnetComplexTag,
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetComplexTagOctetString(theString string, tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetComplexTag {
+func NewBACnetComplexTagOctetString(value string, tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetComplexTag {
child := &BACnetComplexTagOctetString{
- TheString: theString,
- Parent: NewBACnetComplexTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ Value: value,
+ Parent: NewBACnetComplexTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -98,7 +98,7 @@ func (m *BACnetComplexTagOctetString) LengthInBitsConditional(lastItem bool) uin
// A virtual field doesn't have any in- or output.
- // Simple field (theString)
+ // Simple field (value)
lengthInBits += uint16(m.ActualLengthInBit)
return lengthInBits
@@ -116,10 +116,10 @@ func BACnetComplexTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgu
// Virtual field
actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
- // Simple Field (theString)
- theString, _theStringErr := readBuffer.ReadString("theString", uint32(actualLengthInBit))
- if _theStringErr != nil {
- return nil, errors.Wrap(_theStringErr, "Error parsing 'theString' field")
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadString("value", uint32(actualLengthInBit))
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
if closeErr := readBuffer.CloseContext("BACnetComplexTagOctetString"); closeErr != nil {
@@ -128,8 +128,8 @@ func BACnetComplexTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgu
// Create a partially initialized instance
_child := &BACnetComplexTagOctetString{
- TheString: theString,
- Parent: &BACnetComplexTag{},
+ Value: value,
+ Parent: &BACnetComplexTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -141,11 +141,11 @@ func (m *BACnetComplexTagOctetString) Serialize(writeBuffer utils.WriteBuffer) e
return pushErr
}
- // Simple Field (theString)
- theString := string(m.TheString)
- _theStringErr := writeBuffer.WriteString("theString", uint32(m.ActualLengthInBit), "ASCII", (theString))
- if _theStringErr != nil {
- return errors.Wrap(_theStringErr, "Error serializing 'theString' field")
+ // Simple Field (value)
+ value := string(m.Value)
+ _valueErr := writeBuffer.WriteString("value", uint32(m.ActualLengthInBit), "ASCII", (value))
+ if _valueErr != nil {
+ return errors.Wrap(_valueErr, "Error serializing 'value' field")
}
if popErr := writeBuffer.PopContext("BACnetComplexTagOctetString"); popErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 87f48d7..34140f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -245,7 +245,6 @@ func BACnetConfirmedServiceRequestWritePropertyParse(readBuffer utils.ReadBuffer
return nil, pullErr
}
_val, _err := BACnetTagParse(readBuffer)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'priority' field")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
index 5f585d5..89a1e3b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -221,21 +221,21 @@ func BACnetTagParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x1: // BACnetTagApplicationBoolean
_parent, typeSwitchError = BACnetTagApplicationBooleanParse(readBuffer)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x2: // BACnetTagApplicationUnsignedInteger
- _parent, typeSwitchError = BACnetTagApplicationUnsignedIntegerParse(readBuffer, lengthValueType, *extLength)
+ _parent, typeSwitchError = BACnetTagApplicationUnsignedIntegerParse(readBuffer, actualLength)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x3: // BACnetTagApplicationSignedInteger
- _parent, typeSwitchError = BACnetTagApplicationSignedIntegerParse(readBuffer, lengthValueType, *extLength)
+ _parent, typeSwitchError = BACnetTagApplicationSignedIntegerParse(readBuffer, actualLength)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x4: // BACnetTagApplicationReal
- _parent, typeSwitchError = BACnetTagApplicationRealParse(readBuffer, lengthValueType, *extLength)
+ _parent, typeSwitchError = BACnetTagApplicationRealParse(readBuffer)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x5: // BACnetTagApplicationDouble
- _parent, typeSwitchError = BACnetTagApplicationDoubleParse(readBuffer, lengthValueType, *extLength)
+ _parent, typeSwitchError = BACnetTagApplicationDoubleParse(readBuffer)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x6: // BACnetTagApplicationOctetString
- _parent, typeSwitchError = BACnetTagApplicationOctetStringParse(readBuffer)
+ _parent, typeSwitchError = BACnetTagApplicationOctetStringParse(readBuffer, actualLength)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x7: // BACnetTagApplicationCharacterString
- _parent, typeSwitchError = BACnetTagApplicationCharacterStringParse(readBuffer)
+ _parent, typeSwitchError = BACnetTagApplicationCharacterStringParse(readBuffer, actualLength)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x8: // BACnetTagApplicationBitString
- _parent, typeSwitchError = BACnetTagApplicationBitStringParse(readBuffer, lengthValueType, *extLength)
+ _parent, typeSwitchError = BACnetTagApplicationBitStringParse(readBuffer, actualLength)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0x9: // BACnetTagApplicationEnumerated
- _parent, typeSwitchError = BACnetTagApplicationEnumeratedParse(readBuffer, lengthValueType, *extLength)
+ _parent, typeSwitchError = BACnetTagApplicationEnumeratedParse(readBuffer, actualLength)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0xA: // BACnetTagApplicationDate
_parent, typeSwitchError = BACnetTagApplicationDateParse(readBuffer)
case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0xB: // BACnetTagApplicationTime
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
index c990294..a494054 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -111,7 +111,7 @@ func (m *BACnetTagApplicationBitString) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationBitStringParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetTag, error) {
+func BACnetTagApplicationBitStringParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationBitString"); pullErr != nil {
return nil, pullErr
}
@@ -128,7 +128,7 @@ func BACnetTagApplicationBitStringParse(readBuffer utils.ReadBuffer, lengthValue
}
// Length array
data := make([]int8, 0)
- _dataLength := utils.InlineIf(bool(bool((lengthValueType) == (5))), func() interface{} { return uint16(uint16(uint16(extLength) - uint16(uint16(1)))) }, func() interface{} { return uint16(uint16(uint16(lengthValueType) - uint16(uint16(1)))) }).(uint16)
+ _dataLength := actualLength
_dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
for readBuffer.GetPos() < _dataEndPos {
_item, _err := readBuffer.ReadInt8("", 8)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
index 114cdbf..ff31f2d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -21,13 +21,17 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
)
// Code generated by code-generation. DO NOT EDIT.
// The data-structure of this message
type BACnetTagApplicationCharacterString struct {
- Parent *BACnetTag
+ Encoding BACnetCharacterEncoding
+ Value string
+ ActualLengthInBit uint16
+ Parent *BACnetTag
}
// The corresponding interface
@@ -53,9 +57,11 @@ func (m *BACnetTagApplicationCharacterString) InitializeParent(parent *BACnetTag
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetTagApplicationCharacterString(tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
+func NewBACnetTagApplicationCharacterString(encoding BACnetCharacterEncoding, value string, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
child := &BACnetTagApplicationCharacterString{
- Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ Encoding: encoding,
+ Value: value,
+ Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -91,6 +97,14 @@ func (m *BACnetTagApplicationCharacterString) LengthInBits() uint16 {
func (m *BACnetTagApplicationCharacterString) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
+ // Simple field (encoding)
+ lengthInBits += 8
+
+ // A virtual field doesn't have any in- or output.
+
+ // Simple field (value)
+ lengthInBits += uint16(m.ActualLengthInBit)
+
return lengthInBits
}
@@ -98,18 +112,41 @@ func (m *BACnetTagApplicationCharacterString) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationCharacterStringParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
+func BACnetTagApplicationCharacterStringParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationCharacterString"); pullErr != nil {
return nil, pullErr
}
+ // Simple Field (encoding)
+ if pullErr := readBuffer.PullContext("encoding"); pullErr != nil {
+ return nil, pullErr
+ }
+ encoding, _encodingErr := BACnetCharacterEncodingParse(readBuffer)
+ if _encodingErr != nil {
+ return nil, errors.Wrap(_encodingErr, "Error parsing 'encoding' field")
+ }
+ if closeErr := readBuffer.CloseContext("encoding"); closeErr != nil {
+ return nil, closeErr
+ }
+
+ // Virtual field
+ actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
+
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadString("value", uint32(actualLengthInBit))
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
+ }
+
if closeErr := readBuffer.CloseContext("BACnetTagApplicationCharacterString"); closeErr != nil {
return nil, closeErr
}
// Create a partially initialized instance
_child := &BACnetTagApplicationCharacterString{
- Parent: &BACnetTag{},
+ Encoding: encoding,
+ Value: value,
+ Parent: &BACnetTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -121,6 +158,25 @@ func (m *BACnetTagApplicationCharacterString) Serialize(writeBuffer utils.WriteB
return pushErr
}
+ // Simple Field (encoding)
+ if pushErr := writeBuffer.PushContext("encoding"); pushErr != nil {
+ return pushErr
+ }
+ _encodingErr := m.Encoding.Serialize(writeBuffer)
+ if popErr := writeBuffer.PopContext("encoding"); popErr != nil {
+ return popErr
+ }
+ if _encodingErr != nil {
+ return errors.Wrap(_encodingErr, "Error serializing 'encoding' field")
+ }
+
+ // Simple Field (value)
+ value := string(m.Value)
+ _valueErr := writeBuffer.WriteString("value", uint32(m.ActualLengthInBit), "UTF-8", (value))
+ if _valueErr != nil {
+ return errors.Wrap(_valueErr, "Error serializing 'value' field")
+ }
+
if popErr := writeBuffer.PopContext("BACnetTagApplicationCharacterString"); popErr != nil {
return popErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
index 02dc85b..2f1427a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
@@ -104,7 +104,7 @@ func (m *BACnetTagApplicationDouble) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationDoubleParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetTag, error) {
+func BACnetTagApplicationDoubleParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationDouble"); pullErr != nil {
return nil, pullErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
index 1958d02..5d6c54b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -106,7 +106,7 @@ func (m *BACnetTagApplicationEnumerated) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationEnumeratedParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetTag, error) {
+func BACnetTagApplicationEnumeratedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationEnumerated"); pullErr != nil {
return nil, pullErr
}
@@ -117,7 +117,7 @@ func BACnetTagApplicationEnumeratedParse(readBuffer utils.ReadBuffer, lengthValu
}
// Length array
data := make([]int8, 0)
- _dataLength := utils.InlineIf(bool(bool((lengthValueType) == (5))), func() interface{} { return uint16(extLength) }, func() interface{} { return uint16(lengthValueType) }).(uint16)
+ _dataLength := actualLength
_dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
for readBuffer.GetPos() < _dataEndPos {
_item, _err := readBuffer.ReadInt8("", 8)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
index 5279ded..857d86e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
@@ -21,13 +21,16 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
)
// Code generated by code-generation. DO NOT EDIT.
// The data-structure of this message
type BACnetTagApplicationObjectIdentifier struct {
- Parent *BACnetTag
+ ObjectType uint16
+ InstanceNumber uint32
+ Parent *BACnetTag
}
// The corresponding interface
@@ -53,9 +56,11 @@ func (m *BACnetTagApplicationObjectIdentifier) InitializeParent(parent *BACnetTa
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetTagApplicationObjectIdentifier(tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
+func NewBACnetTagApplicationObjectIdentifier(objectType uint16, instanceNumber uint32, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
child := &BACnetTagApplicationObjectIdentifier{
- Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ ObjectType: objectType,
+ InstanceNumber: instanceNumber,
+ Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -91,6 +96,12 @@ func (m *BACnetTagApplicationObjectIdentifier) LengthInBits() uint16 {
func (m *BACnetTagApplicationObjectIdentifier) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
+ // Simple field (objectType)
+ lengthInBits += 10
+
+ // Simple field (instanceNumber)
+ lengthInBits += 22
+
return lengthInBits
}
@@ -103,13 +114,27 @@ func BACnetTagApplicationObjectIdentifierParse(readBuffer utils.ReadBuffer) (*BA
return nil, pullErr
}
+ // Simple Field (objectType)
+ objectType, _objectTypeErr := readBuffer.ReadUint16("objectType", 10)
+ if _objectTypeErr != nil {
+ return nil, errors.Wrap(_objectTypeErr, "Error parsing 'objectType' field")
+ }
+
+ // Simple Field (instanceNumber)
+ instanceNumber, _instanceNumberErr := readBuffer.ReadUint32("instanceNumber", 22)
+ if _instanceNumberErr != nil {
+ return nil, errors.Wrap(_instanceNumberErr, "Error parsing 'instanceNumber' field")
+ }
+
if closeErr := readBuffer.CloseContext("BACnetTagApplicationObjectIdentifier"); closeErr != nil {
return nil, closeErr
}
// Create a partially initialized instance
_child := &BACnetTagApplicationObjectIdentifier{
- Parent: &BACnetTag{},
+ ObjectType: objectType,
+ InstanceNumber: instanceNumber,
+ Parent: &BACnetTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -121,6 +146,20 @@ func (m *BACnetTagApplicationObjectIdentifier) Serialize(writeBuffer utils.Write
return pushErr
}
+ // Simple Field (objectType)
+ objectType := uint16(m.ObjectType)
+ _objectTypeErr := writeBuffer.WriteUint16("objectType", 10, (objectType))
+ if _objectTypeErr != nil {
+ return errors.Wrap(_objectTypeErr, "Error serializing 'objectType' field")
+ }
+
+ // Simple Field (instanceNumber)
+ instanceNumber := uint32(m.InstanceNumber)
+ _instanceNumberErr := writeBuffer.WriteUint32("instanceNumber", 22, (instanceNumber))
+ if _instanceNumberErr != nil {
+ return errors.Wrap(_instanceNumberErr, "Error serializing 'instanceNumber' field")
+ }
+
if popErr := writeBuffer.PopContext("BACnetTagApplicationObjectIdentifier"); popErr != nil {
return popErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
index 2a9ee2e..a2195a3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
@@ -21,13 +21,16 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
)
// Code generated by code-generation. DO NOT EDIT.
// The data-structure of this message
type BACnetTagApplicationOctetString struct {
- Parent *BACnetTag
+ Value string
+ ActualLengthInBit uint16
+ Parent *BACnetTag
}
// The corresponding interface
@@ -53,8 +56,9 @@ func (m *BACnetTagApplicationOctetString) InitializeParent(parent *BACnetTag, ta
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetTagApplicationOctetString(tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
+func NewBACnetTagApplicationOctetString(value string, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
child := &BACnetTagApplicationOctetString{
+ Value: value,
Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
@@ -91,6 +95,11 @@ func (m *BACnetTagApplicationOctetString) LengthInBits() uint16 {
func (m *BACnetTagApplicationOctetString) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
+ // A virtual field doesn't have any in- or output.
+
+ // Simple field (value)
+ lengthInBits += uint16(m.ActualLengthInBit)
+
return lengthInBits
}
@@ -98,17 +107,27 @@ func (m *BACnetTagApplicationOctetString) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationOctetStringParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
+func BACnetTagApplicationOctetStringParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationOctetString"); pullErr != nil {
return nil, pullErr
}
+ // Virtual field
+ actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
+
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadString("value", uint32(actualLengthInBit))
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
+ }
+
if closeErr := readBuffer.CloseContext("BACnetTagApplicationOctetString"); closeErr != nil {
return nil, closeErr
}
// Create a partially initialized instance
_child := &BACnetTagApplicationOctetString{
+ Value: value,
Parent: &BACnetTag{},
}
_child.Parent.Child = _child
@@ -121,6 +140,13 @@ func (m *BACnetTagApplicationOctetString) Serialize(writeBuffer utils.WriteBuffe
return pushErr
}
+ // Simple Field (value)
+ value := string(m.Value)
+ _valueErr := writeBuffer.WriteString("value", uint32(m.ActualLengthInBit), "ASCII", (value))
+ if _valueErr != nil {
+ return errors.Wrap(_valueErr, "Error serializing 'value' field")
+ }
+
if popErr := writeBuffer.PopContext("BACnetTagApplicationOctetString"); popErr != nil {
return popErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
index 7bdbe5d..d9cf1b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
@@ -104,7 +104,7 @@ func (m *BACnetTagApplicationReal) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationRealParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetTag, error) {
+func BACnetTagApplicationRealParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationReal"); pullErr != nil {
return nil, pullErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
index 16c23ad..29dcf69 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
@@ -28,8 +28,15 @@ import (
// The data-structure of this message
type BACnetTagApplicationSignedInteger struct {
- Data []int8
- Parent *BACnetTag
+ ValueInt8 *int8
+ ValueInt16 *int16
+ ValueInt32 *int32
+ ValueInt64 *int64
+ IsInt8 bool
+ IsInt16 bool
+ IsInt32 bool
+ IsInt64 bool
+ Parent *BACnetTag
}
// The corresponding interface
@@ -55,10 +62,13 @@ func (m *BACnetTagApplicationSignedInteger) InitializeParent(parent *BACnetTag,
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetTagApplicationSignedInteger(data []int8, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
+func NewBACnetTagApplicationSignedInteger(valueInt8 *int8, valueInt16 *int16, valueInt32 *int32, valueInt64 *int64, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
child := &BACnetTagApplicationSignedInteger{
- Data: data,
- Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ ValueInt8: valueInt8,
+ ValueInt16: valueInt16,
+ ValueInt32: valueInt32,
+ ValueInt64: valueInt64,
+ Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -94,9 +104,32 @@ func (m *BACnetTagApplicationSignedInteger) LengthInBits() uint16 {
func (m *BACnetTagApplicationSignedInteger) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
- // Array field
- if len(m.Data) > 0 {
- lengthInBits += 8 * uint16(len(m.Data))
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueInt8)
+ if m.ValueInt8 != nil {
+ lengthInBits += 8
+ }
+
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueInt16)
+ if m.ValueInt16 != nil {
+ lengthInBits += 16
+ }
+
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueInt32)
+ if m.ValueInt32 != nil {
+ lengthInBits += 32
+ }
+
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueInt64)
+ if m.ValueInt64 != nil {
+ lengthInBits += 64
}
return lengthInBits
@@ -106,28 +139,61 @@ func (m *BACnetTagApplicationSignedInteger) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationSignedIntegerParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetTag, error) {
+func BACnetTagApplicationSignedIntegerParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationSignedInteger"); pullErr != nil {
return nil, pullErr
}
- // Array field (data)
- if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
- return nil, pullErr
+ // Virtual field
+ isInt8 := bool((actualLength) == (1))
+
+ // Optional Field (valueInt8) (Can be skipped, if a given expression evaluates to false)
+ var valueInt8 *int8 = nil
+ if isInt8 {
+ _val, _err := readBuffer.ReadInt8("valueInt8", 8)
+ if _err != nil {
+ return nil, errors.Wrap(_err, "Error parsing 'valueInt8' field")
+ }
+ valueInt8 = &_val
}
- // Length array
- data := make([]int8, 0)
- _dataLength := utils.InlineIf(bool(bool((lengthValueType) == (5))), func() interface{} { return uint16(extLength) }, func() interface{} { return uint16(lengthValueType) }).(uint16)
- _dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
- for readBuffer.GetPos() < _dataEndPos {
- _item, _err := readBuffer.ReadInt8("", 8)
+
+ // Virtual field
+ isInt16 := bool((actualLength) == (2))
+
+ // Optional Field (valueInt16) (Can be skipped, if a given expression evaluates to false)
+ var valueInt16 *int16 = nil
+ if isInt16 {
+ _val, _err := readBuffer.ReadInt16("valueInt16", 16)
if _err != nil {
- return nil, errors.Wrap(_err, "Error parsing 'data' field")
+ return nil, errors.Wrap(_err, "Error parsing 'valueInt16' field")
}
- data = append(data, _item)
+ valueInt16 = &_val
}
- if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
- return nil, closeErr
+
+ // Virtual field
+ isInt32 := bool((actualLength) == (3))
+
+ // Optional Field (valueInt32) (Can be skipped, if a given expression evaluates to false)
+ var valueInt32 *int32 = nil
+ if isInt32 {
+ _val, _err := readBuffer.ReadInt32("valueInt32", 32)
+ if _err != nil {
+ return nil, errors.Wrap(_err, "Error parsing 'valueInt32' field")
+ }
+ valueInt32 = &_val
+ }
+
+ // Virtual field
+ isInt64 := bool((actualLength) == (4))
+
+ // Optional Field (valueInt64) (Can be skipped, if a given expression evaluates to false)
+ var valueInt64 *int64 = nil
+ if isInt64 {
+ _val, _err := readBuffer.ReadInt64("valueInt64", 64)
+ if _err != nil {
+ return nil, errors.Wrap(_err, "Error parsing 'valueInt64' field")
+ }
+ valueInt64 = &_val
}
if closeErr := readBuffer.CloseContext("BACnetTagApplicationSignedInteger"); closeErr != nil {
@@ -136,8 +202,11 @@ func BACnetTagApplicationSignedIntegerParse(readBuffer utils.ReadBuffer, lengthV
// Create a partially initialized instance
_child := &BACnetTagApplicationSignedInteger{
- Data: data,
- Parent: &BACnetTag{},
+ ValueInt8: valueInt8,
+ ValueInt16: valueInt16,
+ ValueInt32: valueInt32,
+ ValueInt64: valueInt64,
+ Parent: &BACnetTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -149,19 +218,43 @@ func (m *BACnetTagApplicationSignedInteger) Serialize(writeBuffer utils.WriteBuf
return pushErr
}
- // Array Field (data)
- if m.Data != nil {
- if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
- return pushErr
+ // Optional Field (valueInt8) (Can be skipped, if the value is null)
+ var valueInt8 *int8 = nil
+ if m.ValueInt8 != nil {
+ valueInt8 = m.ValueInt8
+ _valueInt8Err := writeBuffer.WriteInt8("valueInt8", 8, *(valueInt8))
+ if _valueInt8Err != nil {
+ return errors.Wrap(_valueInt8Err, "Error serializing 'valueInt8' field")
+ }
+ }
+
+ // Optional Field (valueInt16) (Can be skipped, if the value is null)
+ var valueInt16 *int16 = nil
+ if m.ValueInt16 != nil {
+ valueInt16 = m.ValueInt16
+ _valueInt16Err := writeBuffer.WriteInt16("valueInt16", 16, *(valueInt16))
+ if _valueInt16Err != nil {
+ return errors.Wrap(_valueInt16Err, "Error serializing 'valueInt16' field")
}
- for _, _element := range m.Data {
- _elementErr := writeBuffer.WriteInt8("", 8, _element)
- if _elementErr != nil {
- return errors.Wrap(_elementErr, "Error serializing 'data' field")
- }
+ }
+
+ // Optional Field (valueInt32) (Can be skipped, if the value is null)
+ var valueInt32 *int32 = nil
+ if m.ValueInt32 != nil {
+ valueInt32 = m.ValueInt32
+ _valueInt32Err := writeBuffer.WriteInt32("valueInt32", 32, *(valueInt32))
+ if _valueInt32Err != nil {
+ return errors.Wrap(_valueInt32Err, "Error serializing 'valueInt32' field")
}
- if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
- return popErr
+ }
+
+ // Optional Field (valueInt64) (Can be skipped, if the value is null)
+ var valueInt64 *int64 = nil
+ if m.ValueInt64 != nil {
+ valueInt64 = m.ValueInt64
+ _valueInt64Err := writeBuffer.WriteInt64("valueInt64", 64, *(valueInt64))
+ if _valueInt64Err != nil {
+ return errors.Wrap(_valueInt64Err, "Error serializing 'valueInt64' field")
}
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
index 41d496b..47c8fe4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
@@ -28,8 +28,15 @@ import (
// The data-structure of this message
type BACnetTagApplicationUnsignedInteger struct {
- Data []int8
- Parent *BACnetTag
+ ValueUint8 *uint8
+ ValueUint16 *uint16
+ ValueUint32 *uint32
+ ValueUint64 *uint64
+ IsUint8 bool
+ IsUint16 bool
+ IsUint32 bool
+ IsUint64 bool
+ Parent *BACnetTag
}
// The corresponding interface
@@ -55,10 +62,13 @@ func (m *BACnetTagApplicationUnsignedInteger) InitializeParent(parent *BACnetTag
m.Parent.ExtExtExtLength = extExtExtLength
}
-func NewBACnetTagApplicationUnsignedInteger(data []int8, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
+func NewBACnetTagApplicationUnsignedInteger(valueUint8 *uint8, valueUint16 *uint16, valueUint32 *uint32, valueUint64 *uint64, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
child := &BACnetTagApplicationUnsignedInteger{
- Data: data,
- Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+ ValueUint8: valueUint8,
+ ValueUint16: valueUint16,
+ ValueUint32: valueUint32,
+ ValueUint64: valueUint64,
+ Parent: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
}
child.Parent.Child = child
return child.Parent
@@ -94,9 +104,32 @@ func (m *BACnetTagApplicationUnsignedInteger) LengthInBits() uint16 {
func (m *BACnetTagApplicationUnsignedInteger) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
- // Array field
- if len(m.Data) > 0 {
- lengthInBits += 8 * uint16(len(m.Data))
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueUint8)
+ if m.ValueUint8 != nil {
+ lengthInBits += 8
+ }
+
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueUint16)
+ if m.ValueUint16 != nil {
+ lengthInBits += 16
+ }
+
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueUint32)
+ if m.ValueUint32 != nil {
+ lengthInBits += 32
+ }
+
+ // A virtual field doesn't have any in- or output.
+
+ // Optional Field (valueUint64)
+ if m.ValueUint64 != nil {
+ lengthInBits += 64
}
return lengthInBits
@@ -106,28 +139,61 @@ func (m *BACnetTagApplicationUnsignedInteger) LengthInBytes() uint16 {
return m.LengthInBits() / 8
}
-func BACnetTagApplicationUnsignedIntegerParse(readBuffer utils.ReadBuffer, lengthValueType uint8, extLength uint8) (*BACnetTag, error) {
+func BACnetTagApplicationUnsignedIntegerParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
if pullErr := readBuffer.PullContext("BACnetTagApplicationUnsignedInteger"); pullErr != nil {
return nil, pullErr
}
- // Array field (data)
- if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
- return nil, pullErr
+ // Virtual field
+ isUint8 := bool((actualLength) == (1))
+
+ // Optional Field (valueUint8) (Can be skipped, if a given expression evaluates to false)
+ var valueUint8 *uint8 = nil
+ if isUint8 {
+ _val, _err := readBuffer.ReadUint8("valueUint8", 8)
+ if _err != nil {
+ return nil, errors.Wrap(_err, "Error parsing 'valueUint8' field")
+ }
+ valueUint8 = &_val
}
- // Length array
- data := make([]int8, 0)
- _dataLength := utils.InlineIf(bool(bool((lengthValueType) == (5))), func() interface{} { return uint16(extLength) }, func() interface{} { return uint16(lengthValueType) }).(uint16)
- _dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
- for readBuffer.GetPos() < _dataEndPos {
- _item, _err := readBuffer.ReadInt8("", 8)
+
+ // Virtual field
+ isUint16 := bool((actualLength) == (2))
+
+ // Optional Field (valueUint16) (Can be skipped, if a given expression evaluates to false)
+ var valueUint16 *uint16 = nil
+ if isUint16 {
+ _val, _err := readBuffer.ReadUint16("valueUint16", 16)
if _err != nil {
- return nil, errors.Wrap(_err, "Error parsing 'data' field")
+ return nil, errors.Wrap(_err, "Error parsing 'valueUint16' field")
}
- data = append(data, _item)
+ valueUint16 = &_val
}
- if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
- return nil, closeErr
+
+ // Virtual field
+ isUint32 := bool((actualLength) == (3))
+
+ // Optional Field (valueUint32) (Can be skipped, if a given expression evaluates to false)
+ var valueUint32 *uint32 = nil
+ if isUint32 {
+ _val, _err := readBuffer.ReadUint32("valueUint32", 32)
+ if _err != nil {
+ return nil, errors.Wrap(_err, "Error parsing 'valueUint32' field")
+ }
+ valueUint32 = &_val
+ }
+
+ // Virtual field
+ isUint64 := bool((actualLength) == (4))
+
+ // Optional Field (valueUint64) (Can be skipped, if a given expression evaluates to false)
+ var valueUint64 *uint64 = nil
+ if isUint64 {
+ _val, _err := readBuffer.ReadUint64("valueUint64", 64)
+ if _err != nil {
+ return nil, errors.Wrap(_err, "Error parsing 'valueUint64' field")
+ }
+ valueUint64 = &_val
}
if closeErr := readBuffer.CloseContext("BACnetTagApplicationUnsignedInteger"); closeErr != nil {
@@ -136,8 +202,11 @@ func BACnetTagApplicationUnsignedIntegerParse(readBuffer utils.ReadBuffer, lengt
// Create a partially initialized instance
_child := &BACnetTagApplicationUnsignedInteger{
- Data: data,
- Parent: &BACnetTag{},
+ ValueUint8: valueUint8,
+ ValueUint16: valueUint16,
+ ValueUint32: valueUint32,
+ ValueUint64: valueUint64,
+ Parent: &BACnetTag{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -149,19 +218,43 @@ func (m *BACnetTagApplicationUnsignedInteger) Serialize(writeBuffer utils.WriteB
return pushErr
}
- // Array Field (data)
- if m.Data != nil {
- if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
- return pushErr
+ // Optional Field (valueUint8) (Can be skipped, if the value is null)
+ var valueUint8 *uint8 = nil
+ if m.ValueUint8 != nil {
+ valueUint8 = m.ValueUint8
+ _valueUint8Err := writeBuffer.WriteUint8("valueUint8", 8, *(valueUint8))
+ if _valueUint8Err != nil {
+ return errors.Wrap(_valueUint8Err, "Error serializing 'valueUint8' field")
+ }
+ }
+
+ // Optional Field (valueUint16) (Can be skipped, if the value is null)
+ var valueUint16 *uint16 = nil
+ if m.ValueUint16 != nil {
+ valueUint16 = m.ValueUint16
+ _valueUint16Err := writeBuffer.WriteUint16("valueUint16", 16, *(valueUint16))
+ if _valueUint16Err != nil {
+ return errors.Wrap(_valueUint16Err, "Error serializing 'valueUint16' field")
}
- for _, _element := range m.Data {
- _elementErr := writeBuffer.WriteInt8("", 8, _element)
- if _elementErr != nil {
- return errors.Wrap(_elementErr, "Error serializing 'data' field")
- }
+ }
+
+ // Optional Field (valueUint32) (Can be skipped, if the value is null)
+ var valueUint32 *uint32 = nil
+ if m.ValueUint32 != nil {
+ valueUint32 = m.ValueUint32
+ _valueUint32Err := writeBuffer.WriteUint32("valueUint32", 32, *(valueUint32))
+ if _valueUint32Err != nil {
+ return errors.Wrap(_valueUint32Err, "Error serializing 'valueUint32' field")
}
- if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
- return popErr
+ }
+
+ // Optional Field (valueUint64) (Can be skipped, if the value is null)
+ var valueUint64 *uint64 = nil
+ if m.ValueUint64 != nil {
+ valueUint64 = m.ValueUint64
+ _valueUint64Err := writeBuffer.WriteUint64("valueUint64", 64, *(valueUint64))
+ if _valueUint64Err != nil {
+ return errors.Wrap(_valueUint64Err, "Error serializing 'valueUint64' field")
}
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index 0b043a5..5c265af 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -21,13 +21,17 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/pkg/errors"
)
// Code generated by code-generation. DO NOT EDIT.
// The data-structure of this message
type BACnetUnconfirmedServiceRequestIHave struct {
- Parent *BACnetUnconfirmedServiceRequest
+ DeviceIdentifier *BACnetTagApplicationObjectIdentifier
+ ObjectIdentifier *BACnetTagApplicationObjectIdentifier
+ ObjectName *BACnetTagApplicationCharacterString
+ Parent *BACnetUnconfirmedServiceRequest
}
// The corresponding interface
@@ -47,9 +51,12 @@ func (m *BACnetUnconfirmedServiceRequestIHave) ServiceChoice() uint8 {
func (m *BACnetUnconfirmedServiceRequestIHave) InitializeParent(parent *BACnetUnconfirmedServiceRequest) {
}
-func NewBACnetUnconfirmedServiceRequestIHave() *BACnetUnconfirmedServiceRequest {
+func NewBACnetUnconfirmedServiceRequestIHave(deviceIdentifier *BACnetTagApplicationObjectIdentifier, objectIdentifier *BACnetTagApplicationObjectIdentifier, objectName *BACnetTagApplicationCharacterString) *BACnetUnconfirmedServiceRequest {
child := &BACnetUnconfirmedServiceRequestIHave{
- Parent: NewBACnetUnconfirmedServiceRequest(),
+ DeviceIdentifier: deviceIdentifier,
+ ObjectIdentifier: objectIdentifier,
+ ObjectName: objectName,
+ Parent: NewBACnetUnconfirmedServiceRequest(),
}
child.Parent.Child = child
return child.Parent
@@ -85,6 +92,15 @@ func (m *BACnetUnconfirmedServiceRequestIHave) LengthInBits() uint16 {
func (m *BACnetUnconfirmedServiceRequestIHave) LengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.Parent.ParentLengthInBits())
+ // Simple field (deviceIdentifier)
+ lengthInBits += m.DeviceIdentifier.LengthInBits()
+
+ // Simple field (objectIdentifier)
+ lengthInBits += m.ObjectIdentifier.LengthInBits()
+
+ // Simple field (objectName)
+ lengthInBits += m.ObjectName.LengthInBits()
+
return lengthInBits
}
@@ -97,13 +113,52 @@ func BACnetUnconfirmedServiceRequestIHaveParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
+ // Simple Field (deviceIdentifier)
+ if pullErr := readBuffer.PullContext("deviceIdentifier"); pullErr != nil {
+ return nil, pullErr
+ }
+ deviceIdentifier, _deviceIdentifierErr := BACnetTagParse(readBuffer)
+ if _deviceIdentifierErr != nil {
+ return nil, errors.Wrap(_deviceIdentifierErr, "Error parsing 'deviceIdentifier' field")
+ }
+ if closeErr := readBuffer.CloseContext("deviceIdentifier"); closeErr != nil {
+ return nil, closeErr
+ }
+
+ // Simple Field (objectIdentifier)
+ if pullErr := readBuffer.PullContext("objectIdentifier"); pullErr != nil {
+ return nil, pullErr
+ }
+ objectIdentifier, _objectIdentifierErr := BACnetTagParse(readBuffer)
+ if _objectIdentifierErr != nil {
+ return nil, errors.Wrap(_objectIdentifierErr, "Error parsing 'objectIdentifier' field")
+ }
+ if closeErr := readBuffer.CloseContext("objectIdentifier"); closeErr != nil {
+ return nil, closeErr
+ }
+
+ // Simple Field (objectName)
+ if pullErr := readBuffer.PullContext("objectName"); pullErr != nil {
+ return nil, pullErr
+ }
+ objectName, _objectNameErr := BACnetTagParse(readBuffer)
+ if _objectNameErr != nil {
+ return nil, errors.Wrap(_objectNameErr, "Error parsing 'objectName' field")
+ }
+ if closeErr := readBuffer.CloseContext("objectName"); closeErr != nil {
+ return nil, closeErr
+ }
+
if closeErr := readBuffer.CloseContext("BACnetUnconfirmedServiceRequestIHave"); closeErr != nil {
return nil, closeErr
}
// Create a partially initialized instance
_child := &BACnetUnconfirmedServiceRequestIHave{
- Parent: &BACnetUnconfirmedServiceRequest{},
+ DeviceIdentifier: CastBACnetTagApplicationObjectIdentifier(deviceIdentifier),
+ ObjectIdentifier: CastBACnetTagApplicationObjectIdentifier(objectIdentifier),
+ ObjectName: CastBACnetTagApplicationCharacterString(objectName),
+ Parent: &BACnetUnconfirmedServiceRequest{},
}
_child.Parent.Child = _child
return _child.Parent, nil
@@ -115,6 +170,42 @@ func (m *BACnetUnconfirmedServiceRequestIHave) Serialize(writeBuffer utils.Write
return pushErr
}
+ // Simple Field (deviceIdentifier)
+ if pushErr := writeBuffer.PushContext("deviceIdentifier"); pushErr != nil {
+ return pushErr
+ }
+ _deviceIdentifierErr := m.DeviceIdentifier.Serialize(writeBuffer)
+ if popErr := writeBuffer.PopContext("deviceIdentifier"); popErr != nil {
+ return popErr
+ }
+ if _deviceIdentifierErr != nil {
+ return errors.Wrap(_deviceIdentifierErr, "Error serializing 'deviceIdentifier' field")
+ }
+
+ // Simple Field (objectIdentifier)
+ if pushErr := writeBuffer.PushContext("objectIdentifier"); pushErr != nil {
+ return pushErr
+ }
+ _objectIdentifierErr := m.ObjectIdentifier.Serialize(writeBuffer)
+ if popErr := writeBuffer.PopContext("objectIdentifier"); popErr != nil {
+ return popErr
+ }
+ if _objectIdentifierErr != nil {
+ return errors.Wrap(_objectIdentifierErr, "Error serializing 'objectIdentifier' field")
+ }
+
+ // Simple Field (objectName)
+ if pushErr := writeBuffer.PushContext("objectName"); pushErr != nil {
+ return pushErr
+ }
+ _objectNameErr := m.ObjectName.Serialize(writeBuffer)
+ if popErr := writeBuffer.PopContext("objectName"); popErr != nil {
+ return popErr
+ }
+ if _objectNameErr != nil {
+ return errors.Wrap(_objectNameErr, "Error serializing 'objectName' field")
+ }
+
if popErr := writeBuffer.PopContext("BACnetUnconfirmedServiceRequestIHave"); popErr != nil {
return popErr
}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index 03d8d58..51de058 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -134,7 +134,6 @@ func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
_val, _err := BACnetComplexTagParse(readBuffer, uint8(0), BACnetDataType_UNSIGNED_INTEGER)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'deviceInstanceRangeLowLimit' field")
@@ -156,7 +155,6 @@ func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
_val, _err := BACnetComplexTagParse(readBuffer, uint8(1), BACnetDataType_UNSIGNED_INTEGER)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'deviceInstanceRangeHighLimit' field")
@@ -178,7 +176,6 @@ func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
_val, _err := BACnetComplexTagParse(readBuffer, uint8(2), BACnetDataType_OCTET_STRING)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'objectIdentifier' field")
@@ -200,7 +197,6 @@ func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
_val, _err := BACnetComplexTagParse(readBuffer, uint8(3), BACnetDataType_OCTET_STRING)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'objectName' field")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index fb42eb9..00e167e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -120,7 +120,6 @@ func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
_val, _err := BACnetComplexTagParse(readBuffer, uint8(0), BACnetDataType_UNSIGNED_INTEGER)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'deviceInstanceRangeLowLimit' field")
@@ -142,7 +141,6 @@ func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer, len
return nil, pullErr
}
_val, _err := BACnetComplexTagParse(readBuffer, uint8(1), BACnetDataType_UNSIGNED_INTEGER)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'deviceInstanceRangeHighLimit' field")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
index 600e74a..181e94f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
@@ -318,7 +318,6 @@ func NPDUParse(readBuffer utils.ReadBuffer, npduLength uint16) (*NPDU, error) {
return nil, pullErr
}
_val, _err := NLMParse(readBuffer, uint16(npduLength)-uint16(uint16(uint16(uint16(uint16(uint16(2))+uint16(uint16(utils.InlineIf(sourceSpecified, func() interface{} { return uint16(uint16(uint16(3)) + uint16((*sourceLength))) }, func() interface{} { return uint16(uint16(0)) }).(uint16))))+uint16(uint16(utils.InlineIf(destinationSpecified, func() interface{} { return uint16(uint16(uint16(3)) + uint16((*destinationLength))) }, func() interface{} { return uint16(uint16(0)) }).(uint16))))+ [...]
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'nlm' field")
@@ -340,7 +339,6 @@ func NPDUParse(readBuffer utils.ReadBuffer, npduLength uint16) (*NPDU, error) {
return nil, pullErr
}
_val, _err := APDUParse(readBuffer, uint16(npduLength)-uint16(uint16(uint16(uint16(uint16(uint16(2))+uint16(uint16(utils.InlineIf(sourceSpecified, func() interface{} { return uint16(uint16(uint16(3)) + uint16((*sourceLength))) }, func() interface{} { return uint16(uint16(0)) }).(uint16))))+uint16(uint16(utils.InlineIf(destinationSpecified, func() interface{} { return uint16(uint16(uint16(3)) + uint16((*destinationLength))) }, func() interface{} { return uint16(uint16(0)) }).(uint16)))) [...]
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'apdu' field")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
index 24fa745..7c4ba39 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
@@ -148,7 +148,6 @@ func ConnectionResponseParse(readBuffer utils.ReadBuffer) (*KnxNetIpMessage, err
return nil, pullErr
}
_val, _err := HPAIDataEndpointParse(readBuffer)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'hpaiDataEndpoint' field")
@@ -170,7 +169,6 @@ func ConnectionResponseParse(readBuffer utils.ReadBuffer) (*KnxNetIpMessage, err
return nil, pullErr
}
_val, _err := ConnectionResponseDataBlockParse(readBuffer)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'connectionResponseDataBlock' field")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index fc83413..965cd6d 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -183,7 +183,6 @@ func COTPPacketParse(readBuffer utils.ReadBuffer, cotpLen uint16) (*COTPPacket,
return nil, pullErr
}
_val, _err := S7MessageParse(readBuffer)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'payload' field")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
index 00b0eeb..cd25cfb 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
@@ -207,7 +207,6 @@ func S7MessageParse(readBuffer utils.ReadBuffer) (*S7Message, error) {
return nil, pullErr
}
_val, _err := S7ParameterParse(readBuffer, messageType)
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'parameter' field")
@@ -229,7 +228,6 @@ func S7MessageParse(readBuffer utils.ReadBuffer) (*S7Message, error) {
return nil, pullErr
}
_val, _err := S7PayloadParse(readBuffer, messageType, (parameter))
-
switch {
case _err != nil && _err != utils.ParseAssertError:
return nil, errors.Wrap(_err, "Error parsing 'payload' field")
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index e57e1cf..f71e317 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -283,6 +283,9 @@
[simple uint 8 vendorId]
]
['0x01' BACnetUnconfirmedServiceRequestIHave
+ [simple BACnetTagApplicationObjectIdentifier deviceIdentifier ]
+ [simple BACnetTagApplicationObjectIdentifier objectIdentifier ]
+ [simple BACnetTagApplicationCharacterString objectName ]
]
['0x02' BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification
]
@@ -320,75 +323,6 @@
]
]
-[discriminatedType BACnetComplexTag(uint 4 tagNumberArgument, BACnetDataType dataType)
- [assert uint 4 tagNumber 'tagNumberArgument' ]
- [assert TagClass tagClass 'TagClass.CONTEXT_SPECIFIC_TAGS' ]
- [simple uint 3 lengthValueType ]
- [optional uint 8 extTagNumber 'tagNumber == 15' ]
- [virtual uint 8 actualTagNumber 'tagNumber < 15 ? tagNumber : extTagNumber' ]
- [virtual bit isPrimitiveAndNotBoolean '!(lengthValueType == 6) && tagNumber != 1' ]
- [optional uint 8 extLength 'isPrimitiveAndNotBoolean && lengthValueType == 5' ]
- [optional uint 16 extExtLength 'isPrimitiveAndNotBoolean && lengthValueType == 5 && extLength == 254' ]
- [optional uint 32 extExtExtLength 'isPrimitiveAndNotBoolean && lengthValueType == 5 && extLength == 255' ]
- [virtual uint 32 actualLength 'lengthValueType == 5 && extLength == 255 ? extExtExtLength : (lengthValueType == 5 && extLength == 254 ? extExtLength : (lengthValueType == 5 ? extLength : (isPrimitiveAndNotBoolean ? lengthValueType : 0)))']
- [typeSwitch dataType
- ['NULL' BACnetComplexTagNull
- ]
- ['BOOLEAN' BACnetComplexTagBoolean
- ]
- ['UNSIGNED_INTEGER' BACnetComplexTagUnsignedInteger(uint 32 actualLength)
- [virtual bit isUint8 'actualLength == 1' ]
- [optional uint 8 valueUint8 'isUint8' ]
- [virtual bit isUint16 'actualLength == 2' ]
- [optional uint 16 valueUint16 'isUint16' ]
- [virtual bit isUint32 'actualLength == 3' ]
- [optional uint 32 valueUint32 'isUint32' ]
- [virtual bit isUint64 'actualLength == 4' ]
- [optional uint 64 valueUint64 'isUint64' ]
- ]
- ['SIGNED_INTEGER' BACnetComplexTagSignedInteger(uint 32 actualLength)
- [virtual bit isInt8 'actualLength == 1' ]
- [optional int 8 valueInt8 'isInt8' ]
- [virtual bit isInt16 'actualLength == 2' ]
- [optional int 16 valueInt16 'isInt16' ]
- [virtual bit isInt32 'actualLength == 3' ]
- [optional int 32 valueInt32 'isInt32' ]
- [virtual bit isInt64 'actualLength == 4' ]
- [optional int 64 valueInt64 'isInt64' ]
- ]
- ['REAL' BACnetComplexTagReal(uint 32 actualLength)
- [simple float 32 value]
- ]
- ['DOUBLE' BACnetComplexTagDouble(uint 32 actualLength)
- [simple float 64 value]
- ]
- ['OCTET_STRING' BACnetComplexTagOctetString(uint 32 actualLength)
- // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
- [virtual uint 16 actualLengthInBit 'actualLength * 8']
- [simple vstring 'actualLengthInBit' theString encoding='"ASCII"']
- ]
- ['CHARACTER_STRING' BACnetComplexTagCharacterString
- ]
- ['BIT_STRING' BACnetComplexTagBitString(uint 32 actualLength)
- // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
- [virtual uint 16 actualLengthInBit 'actualLength * 8']
- [simple uint 8 unusedBits]
- [array int 8 data length 'actualLengthInBit']
- ]
- ['ENUMERATED' BACnetComplexTagEnumerated(uint 32 actualLength)
- // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
- [virtual uint 16 actualLengthInBit 'actualLength * 8']
- [array int 8 data length 'actualLengthInBit']
- ]
- ['DATE' BACnetComplexTagDate
- ]
- ['TIME' BACnetComplexTagTime
- ]
- ['BACNET_OBJECT_IDENTIFIER' BACnetComplexTagObjectIdentifier
- ]
- ]
-]
-
[discriminatedType BACnetServiceAck
[discriminator uint 8 serviceChoice]
[typeSwitch serviceChoice
@@ -556,8 +490,8 @@
[discriminator TagClass tagClass ]
[simple uint 3 lengthValueType ]
[optional uint 8 extTagNumber 'tagNumber == 15' ]
- [virtual uint 8 actualTagNumber 'tagNumber < 15 ? tagNumber : extTagNumber' ]
- [virtual bit isPrimitiveAndNotBoolean '!(tagClass == TagClass.CONTEXT_SPECIFIC_TAGS && lengthValueType == 6) && tagNumber != 1']
+ [virtual uint 8 actualTagNumber 'tagNumber < 15 ? tagNumber : extTagNumber' ]
+ [virtual bit isPrimitiveAndNotBoolean '!(tagClass == TagClass.CONTEXT_SPECIFIC_TAGS && lengthValueType == 6) && tagNumber != 1']
[optional uint 8 extLength 'isPrimitiveAndNotBoolean && lengthValueType == 5' ]
[optional uint 16 extExtLength 'isPrimitiveAndNotBoolean && lengthValueType == 5 && extLength == 254' ]
[optional uint 32 extExtExtLength 'isPrimitiveAndNotBoolean && lengthValueType == 5 && extLength == 255' ]
@@ -567,34 +501,58 @@
]
['APPLICATION_TAGS','0x1' BACnetTagApplicationBoolean
]
- ['APPLICATION_TAGS','0x2' BACnetTagApplicationUnsignedInteger (uint 3 lengthValueType, uint 8 extLength)
- [array int 8 data length '(lengthValueType == 5) ? extLength : lengthValueType']
+ ['APPLICATION_TAGS','0x2' BACnetTagApplicationUnsignedInteger(uint 32 actualLength)
+ [virtual bit isUint8 'actualLength == 1' ]
+ [optional uint 8 valueUint8 'isUint8' ]
+ [virtual bit isUint16 'actualLength == 2' ]
+ [optional uint 16 valueUint16 'isUint16' ]
+ [virtual bit isUint32 'actualLength == 3' ]
+ [optional uint 32 valueUint32 'isUint32' ]
+ [virtual bit isUint64 'actualLength == 4' ]
+ [optional uint 64 valueUint64 'isUint64' ]
]
- ['APPLICATION_TAGS','0x3' BACnetTagApplicationSignedInteger (uint 3 lengthValueType, uint 8 extLength)
- [array int 8 data length '(lengthValueType == 5) ? extLength : lengthValueType']
+ ['APPLICATION_TAGS','0x3' BACnetTagApplicationSignedInteger(uint 32 actualLength)
+ [virtual bit isInt8 'actualLength == 1' ]
+ [optional int 8 valueInt8 'isInt8' ]
+ [virtual bit isInt16 'actualLength == 2' ]
+ [optional int 16 valueInt16 'isInt16' ]
+ [virtual bit isInt32 'actualLength == 3' ]
+ [optional int 32 valueInt32 'isInt32' ]
+ [virtual bit isInt64 'actualLength == 4' ]
+ [optional int 64 valueInt64 'isInt64' ]
]
- ['APPLICATION_TAGS','0x4' BACnetTagApplicationReal (uint 3 lengthValueType, uint 8 extLength)
+ ['APPLICATION_TAGS','0x4' BACnetTagApplicationReal
[simple float 32 value]
]
- ['APPLICATION_TAGS','0x5' BACnetTagApplicationDouble (uint 3 lengthValueType, uint 8 extLength)
+ ['APPLICATION_TAGS','0x5' BACnetTagApplicationDouble
[simple float 64 value]
]
- ['APPLICATION_TAGS','0x6' BACnetTagApplicationOctetString
+ ['APPLICATION_TAGS','0x6' BACnetTagApplicationOctetString(uint 32 actualLength)
+ // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
+ [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ [simple vstring 'actualLengthInBit' value encoding='"ASCII"']
]
- ['APPLICATION_TAGS','0x7' BACnetTagApplicationCharacterString
+ ['APPLICATION_TAGS','0x7' BACnetTagApplicationCharacterString(uint 32 actualLength)
+ [simple BACnetCharacterEncoding encoding]
+ // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
+ [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ // TODO: call to string on encoding or add type conversion so we can use the enum above
+ [simple vstring 'actualLengthInBit' value encoding='"UTF-8"']
]
- ['APPLICATION_TAGS','0x8' BACnetTagApplicationBitString (uint 3 lengthValueType, uint 8 extLength)
+ ['APPLICATION_TAGS','0x8' BACnetTagApplicationBitString(uint 32 actualLength)
[simple uint 8 unusedBits]
- [array int 8 data length '(lengthValueType == 5) ? (extLength - 1) : (lengthValueType - 1)']
+ [array int 8 data length 'actualLength']
]
- ['APPLICATION_TAGS','0x9' BACnetTagApplicationEnumerated (uint 3 lengthValueType, uint 8 extLength)
- [array int 8 data length '(lengthValueType == 5) ? extLength : lengthValueType']
+ ['APPLICATION_TAGS','0x9' BACnetTagApplicationEnumerated(uint 32 actualLength)
+ [array int 8 data length 'actualLength']
]
['APPLICATION_TAGS','0xA' BACnetTagApplicationDate
]
['APPLICATION_TAGS','0xB' BACnetTagApplicationTime
]
['APPLICATION_TAGS','0xC' BACnetTagApplicationObjectIdentifier
+ [simple uint 10 objectType]
+ [simple uint 22 instanceNumber]
]
['CONTEXT_SPECIFIC_TAGS' BACnetTagContext (uint 4 tagNumber, uint 8 extTagNumber, uint 3 lengthValueType, uint 8 extLength)
[array int 8 data length '(lengthValueType == 5) ? extLength : lengthValueType']
@@ -602,6 +560,82 @@
]
]
+[discriminatedType BACnetComplexTag(uint 4 tagNumberArgument, BACnetDataType dataType)
+ [assert uint 4 tagNumber 'tagNumberArgument' ]
+ [assert TagClass tagClass 'TagClass.CONTEXT_SPECIFIC_TAGS' ]
+ [simple uint 3 lengthValueType ]
+ [optional uint 8 extTagNumber 'tagNumber == 15' ]
+ [virtual uint 8 actualTagNumber 'tagNumber < 15 ? tagNumber : extTagNumber' ]
+ [virtual bit isPrimitiveAndNotBoolean '!(lengthValueType == 6) && tagNumber != 1' ]
+ [optional uint 8 extLength 'isPrimitiveAndNotBoolean && lengthValueType == 5' ]
+ [optional uint 16 extExtLength 'isPrimitiveAndNotBoolean && lengthValueType == 5 && extLength == 254' ]
+ [optional uint 32 extExtExtLength 'isPrimitiveAndNotBoolean && lengthValueType == 5 && extLength == 255' ]
+ [virtual uint 32 actualLength 'lengthValueType == 5 && extLength == 255 ? extExtExtLength : (lengthValueType == 5 && extLength == 254 ? extExtLength : (lengthValueType == 5 ? extLength : (isPrimitiveAndNotBoolean ? lengthValueType : 0)))']
+ [typeSwitch dataType
+ ['NULL' BACnetComplexTagNull
+ ]
+ ['BOOLEAN' BACnetComplexTagBoolean
+ ]
+ ['UNSIGNED_INTEGER' BACnetComplexTagUnsignedInteger(uint 32 actualLength)
+ [virtual bit isUint8 'actualLength == 1' ]
+ [optional uint 8 valueUint8 'isUint8' ]
+ [virtual bit isUint16 'actualLength == 2' ]
+ [optional uint 16 valueUint16 'isUint16' ]
+ [virtual bit isUint32 'actualLength == 3' ]
+ [optional uint 32 valueUint32 'isUint32' ]
+ [virtual bit isUint64 'actualLength == 4' ]
+ [optional uint 64 valueUint64 'isUint64' ]
+ ]
+ ['SIGNED_INTEGER' BACnetComplexTagSignedInteger(uint 32 actualLength)
+ [virtual bit isInt8 'actualLength == 1' ]
+ [optional int 8 valueInt8 'isInt8' ]
+ [virtual bit isInt16 'actualLength == 2' ]
+ [optional int 16 valueInt16 'isInt16' ]
+ [virtual bit isInt32 'actualLength == 3' ]
+ [optional int 32 valueInt32 'isInt32' ]
+ [virtual bit isInt64 'actualLength == 4' ]
+ [optional int 64 valueInt64 'isInt64' ]
+ ]
+ ['REAL' BACnetComplexTagReal(uint 32 actualLength)
+ [simple float 32 value]
+ ]
+ ['DOUBLE' BACnetComplexTagDouble(uint 32 actualLength)
+ [simple float 64 value]
+ ]
+ ['OCTET_STRING' BACnetComplexTagOctetString(uint 32 actualLength)
+ // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
+ [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ [simple vstring 'actualLengthInBit' value encoding='"ASCII"']
+ ]
+ ['CHARACTER_STRING' BACnetComplexTagCharacterString(uint 32 actualLength)
+ [simple BACnetCharacterEncoding encoding]
+ // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
+ [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ // TODO: call to string on encoding or add type conversion so we can use the enum above
+ [simple vstring 'actualLengthInBit' value encoding='"UTF-8"']
+ ]
+ ['BIT_STRING' BACnetComplexTagBitString(uint 32 actualLength)
+ // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
+ [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ [simple uint 8 unusedBits]
+ [array int 8 data length 'actualLengthInBit']
+ ]
+ ['ENUMERATED' BACnetComplexTagEnumerated(uint 32 actualLength)
+ // TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
+ [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ [array int 8 data length 'actualLengthInBit']
+ ]
+ ['DATE' BACnetComplexTagDate
+ ]
+ ['TIME' BACnetComplexTagTime
+ ]
+ ['BACNET_OBJECT_IDENTIFIER' BACnetComplexTagObjectIdentifier
+ [simple uint 10 objectType]
+ [simple uint 22 instanceNumber]
+ ]
+ ]
+]
+
[enum uint 1 TagClass
['0x0' APPLICATION_TAGS]
['0x1' CONTEXT_SPECIFIC_TAGS]
@@ -623,6 +657,15 @@
['0xC' BACNET_OBJECT_IDENTIFIER]
]
+[enum byte BACnetCharacterEncoding
+ ['0x0' ISO_10646] // UTF-8
+ ['0x1' IBM_Microsoft_DBCS]
+ ['0x2' JIS_X_0208]
+ ['0x3' ISO_10646_4] // (UCS-4)
+ ['0x4' ISO_10646_2] //(UCS-2)
+ ['0x5' ISO_8859_1]
+]
+
[enum uint 4 BACnetNetworkType
['0x0' ETHERNET]
['0x1' ARCNET]
[plc4x] 02/02: fix(bacnet): substract encoding field from length
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 aa31014b664430f5517074fdd126c0fa2e9f3f42
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Nov 30 11:02:07 2021 +0100
fix(bacnet): substract encoding field from length
---
.../bacnetip/readwrite/model/BACnetComplexTagCharacterString.go | 2 +-
.../bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go | 2 +-
.../bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
index 6e24ed8..c074ead 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetComplexTagCharacterString.go
@@ -131,7 +131,7 @@ func BACnetComplexTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumber
}
// Virtual field
- actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
+ actualLengthInBit := uint16(uint16(actualLength)*uint16(uint16(8))) - uint16(uint16(8))
// Simple Field (value)
value, _valueErr := readBuffer.ReadString("value", uint32(actualLengthInBit))
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
index ff31f2d..bbd4c9b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -130,7 +130,7 @@ func BACnetTagApplicationCharacterStringParse(readBuffer utils.ReadBuffer, actua
}
// Virtual field
- actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
+ actualLengthInBit := uint16(uint16(actualLength)*uint16(uint16(8))) - uint16(uint16(8))
// Simple Field (value)
value, _valueErr := readBuffer.ReadString("value", uint32(actualLengthInBit))
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index f71e317..5b11715 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -535,7 +535,7 @@
['APPLICATION_TAGS','0x7' BACnetTagApplicationCharacterString(uint 32 actualLength)
[simple BACnetCharacterEncoding encoding]
// TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
- [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ [virtual uint 16 actualLengthInBit 'actualLength * 8 - 8']
// TODO: call to string on encoding or add type conversion so we can use the enum above
[simple vstring 'actualLengthInBit' value encoding='"UTF-8"']
]
@@ -610,7 +610,7 @@
['CHARACTER_STRING' BACnetComplexTagCharacterString(uint 32 actualLength)
[simple BACnetCharacterEncoding encoding]
// TODO: The reader expects int but uint32 gets mapped to long so even uint32 would easily overflow...
- [virtual uint 16 actualLengthInBit 'actualLength * 8']
+ [virtual uint 16 actualLengthInBit 'actualLength * 8 - 8']
// TODO: call to string on encoding or add type conversion so we can use the enum above
[simple vstring 'actualLengthInBit' value encoding='"UTF-8"']
]