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);
+    }
 }

Reply via email to