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
The following commit(s) were added to refs/heads/develop by this push:
new cdb1e74 feat(bacnet/plc4go/codegen): added factory methods to
calculated headers
cdb1e74 is described below
commit cdb1e74712f578256e4b1cb08896b77d870088fb
Author: Sebastian Rühl <[email protected]>
AuthorDate: Mon Feb 14 15:13:39 2022 +0100
feat(bacnet/plc4go/codegen): added factory methods to calculated headers
---
.../bacnetip/readwrite/model/StaticHelper.go | 42 ++++++++++++++++++++++
.../bacnetip/readwrite/utils/StaticHelper.java | 38 ++++++++++++++++++++
2 files changed, 80 insertions(+)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
b/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
index 43f8e67..56aaf01 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/StaticHelper.go
@@ -305,3 +305,45 @@ func ParseVarUint(data []byte) uint32 {
func WriteVarUint(value uint32) []byte {
return big.NewInt(int64(value)).Bytes()
}
+
+func NewBACnetTagHeaderBalanced(isContext bool, id uint8, value uint32)
*BACnetTagHeader {
+ tagClass := TagClass_APPLICATION_TAGS
+ if isContext {
+ tagClass = TagClass_CONTEXT_SPECIFIC_TAGS
+ }
+
+ var tagNumber uint8
+ var extTagNumber *uint8
+ if id <= 14 {
+ tagNumber = id
+ } else {
+ tagNumber = 0xF
+ extTagNumber = &id
+ }
+
+ var lengthValueType uint8
+ var extLength *uint8
+ var extExtLength *uint16
+ var extExtExtLength *uint32
+ if value <= 4 {
+ lengthValueType = uint8(value)
+ } else {
+ lengthValueType = 5
+ // Depending on the length, we will either write it as an 8
bit, 32 bit, or 64 bit integer
+ if value <= 253 {
+ _extLength := uint8(value)
+ extLength = &_extLength
+ } else if value <= 65535 {
+ _extLength := uint8(254)
+ extLength = &_extLength
+ _extExtLength := uint16(value)
+ extExtLength = &_extExtLength
+ } else {
+ _extLength := uint8(255)
+ extLength = &_extLength
+ extExtExtLength = &value
+ }
+ }
+
+ return NewBACnetTagHeader(tagNumber, tagClass, lengthValueType,
extTagNumber, extLength, extExtLength, extExtExtLength)
+}
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 53f3879..1390d1b 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
@@ -344,4 +344,42 @@ public class StaticHelper {
public static long parseVarUint(byte[] data) {
return new BigInteger(data).longValue();
}
+
+ public static BACnetTagHeader newBACnetTagHeaderBalanced(boolean
isContext, short id, long value) {
+ TagClass tagClass = TagClass.APPLICATION_TAGS;
+ if (isContext) {
+ tagClass = TagClass.CONTEXT_SPECIFIC_TAGS;
+ }
+
+ byte tagNumber;
+ Short extTagNumber = null;
+ if (id <= 14) {
+ tagNumber = (byte) id;
+ } else {
+ tagNumber = 0xF;
+ extTagNumber = id;
+ }
+
+ byte lengthValueType;
+ Short extLength = null;
+ Integer extExtLength = null;
+ Long extExtExtLength = null;
+ if (value <= 4) {
+ lengthValueType = (byte) value;
+ } else {
+ lengthValueType = 5;
+ // Depending on the length, we will either write it as an 8 bit,
32 bit, or 64 bit integer
+ if (value <= 253) {
+ extLength = (short) value;
+ } else if (value <= 65535) {
+ extLength = 254;
+ extExtLength = (int) value;
+ } else {
+ extLength = 255;
+ extExtExtLength = value;
+ }
+ }
+
+ return new BACnetTagHeader(tagNumber, tagClass, lengthValueType,
extTagNumber, extLength, extExtLength, extExtExtLength);
+ }
}