You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/05/17 10:16:36 UTC

[plc4x] 01/02: feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVProperty

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 9a623d16f9a4c2c832ed53803243dfcbde69f724
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 17 11:47:41 2022 +0200

    feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVProperty
---
 ...tConfirmedServiceRequestSubscribeCOVProperty.go | 279 ++++++++++++++++++++-
 .../resources/protocols/bacnetip/bacnetip.mspec    |  18 +-
 2 files changed, 286 insertions(+), 11 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index d0d114ee48..1523775e83 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -21,6 +21,8 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+	"io"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -28,6 +30,12 @@ import (
 // BACnetConfirmedServiceRequestSubscribeCOVProperty is the data-structure of this message
 type BACnetConfirmedServiceRequestSubscribeCOVProperty struct {
 	*BACnetConfirmedServiceRequest
+	SubscriberProcessIdentifier *BACnetContextTagUnsignedInteger
+	MonitoredObjectIdentifier   *BACnetContextTagObjectIdentifier
+	IssueConfirmedNotifications *BACnetContextTagBoolean
+	Lifetime                    *BACnetContextTagUnsignedInteger
+	MonitoredPropertyIdentifier *BACnetPropertyReferenceEnclosed
+	CovIncrement                *BACnetContextTagReal
 
 	// Arguments.
 	ServiceRequestLength uint16
@@ -36,6 +44,18 @@ type BACnetConfirmedServiceRequestSubscribeCOVProperty struct {
 // IBACnetConfirmedServiceRequestSubscribeCOVProperty is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVProperty
 type IBACnetConfirmedServiceRequestSubscribeCOVProperty interface {
 	IBACnetConfirmedServiceRequest
+	// GetSubscriberProcessIdentifier returns SubscriberProcessIdentifier (property field)
+	GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger
+	// GetMonitoredObjectIdentifier returns MonitoredObjectIdentifier (property field)
+	GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier
+	// GetIssueConfirmedNotifications returns IssueConfirmedNotifications (property field)
+	GetIssueConfirmedNotifications() *BACnetContextTagBoolean
+	// GetLifetime returns Lifetime (property field)
+	GetLifetime() *BACnetContextTagUnsignedInteger
+	// GetMonitoredPropertyIdentifier returns MonitoredPropertyIdentifier (property field)
+	GetMonitoredPropertyIdentifier() *BACnetPropertyReferenceEnclosed
+	// GetCovIncrement returns CovIncrement (property field)
+	GetCovIncrement() *BACnetContextTagReal
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -65,9 +85,49 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetParent() *BACnetC
 	return m.BACnetConfirmedServiceRequest
 }
 
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger {
+	return m.SubscriberProcessIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier {
+	return m.MonitoredObjectIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetIssueConfirmedNotifications() *BACnetContextTagBoolean {
+	return m.IssueConfirmedNotifications
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLifetime() *BACnetContextTagUnsignedInteger {
+	return m.Lifetime
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetMonitoredPropertyIdentifier() *BACnetPropertyReferenceEnclosed {
+	return m.MonitoredPropertyIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetCovIncrement() *BACnetContextTagReal {
+	return m.CovIncrement
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
 // NewBACnetConfirmedServiceRequestSubscribeCOVProperty factory function for BACnetConfirmedServiceRequestSubscribeCOVProperty
-func NewBACnetConfirmedServiceRequestSubscribeCOVProperty(serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
+func NewBACnetConfirmedServiceRequestSubscribeCOVProperty(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, issueConfirmedNotifications *BACnetContextTagBoolean, lifetime *BACnetContextTagUnsignedInteger, monitoredPropertyIdentifier *BACnetPropertyReferenceEnclosed, covIncrement *BACnetContextTagReal, serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
 	_result := &BACnetConfirmedServiceRequestSubscribeCOVProperty{
+		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
+		MonitoredObjectIdentifier:     monitoredObjectIdentifier,
+		IssueConfirmedNotifications:   issueConfirmedNotifications,
+		Lifetime:                      lifetime,
+		MonitoredPropertyIdentifier:   monitoredPropertyIdentifier,
+		CovIncrement:                  covIncrement,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(serviceRequestLength),
 	}
 	_result.Child = _result
@@ -101,6 +161,30 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLengthInBits() ui
 func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.GetParentLengthInBits())
 
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += m.SubscriberProcessIdentifier.GetLengthInBits()
+
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.GetLengthInBits()
+
+	// Optional Field (issueConfirmedNotifications)
+	if m.IssueConfirmedNotifications != nil {
+		lengthInBits += (*m.IssueConfirmedNotifications).GetLengthInBits()
+	}
+
+	// Optional Field (lifetime)
+	if m.Lifetime != nil {
+		lengthInBits += (*m.Lifetime).GetLengthInBits()
+	}
+
+	// Simple field (monitoredPropertyIdentifier)
+	lengthInBits += m.MonitoredPropertyIdentifier.GetLengthInBits()
+
+	// Optional Field (covIncrement)
+	if m.CovIncrement != nil {
+		lengthInBits += (*m.CovIncrement).GetLengthInBits()
+	}
+
 	return lengthInBits
 }
 
@@ -117,9 +201,106 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.Rea
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Validation
-	if !(bool((1) == (2))) {
-		return nil, utils.ParseValidationError{"TODO: implement me"}
+	// Simple Field (subscriberProcessIdentifier)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER))
+	if _subscriberProcessIdentifierErr != nil {
+		return nil, errors.Wrap(_subscriberProcessIdentifierErr, "Error parsing 'subscriberProcessIdentifier' field")
+	}
+	subscriberProcessIdentifier := CastBACnetContextTagUnsignedInteger(_subscriberProcessIdentifier)
+	if closeErr := readBuffer.CloseContext("subscriberProcessIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_BACNET_OBJECT_IDENTIFIER))
+	if _monitoredObjectIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredObjectIdentifierErr, "Error parsing 'monitoredObjectIdentifier' field")
+	}
+	monitoredObjectIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredObjectIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredObjectIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (issueConfirmedNotifications) (Can be skipped, if a given expression evaluates to false)
+	var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("issueConfirmedNotifications"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(2), BACnetDataType_BOOLEAN)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'issueConfirmedNotifications' field")
+		default:
+			issueConfirmedNotifications = CastBACnetContextTagBoolean(_val)
+			if closeErr := readBuffer.CloseContext("issueConfirmedNotifications"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Optional Field (lifetime) (Can be skipped, if a given expression evaluates to false)
+	var lifetime *BACnetContextTagUnsignedInteger = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("lifetime"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'lifetime' field")
+		default:
+			lifetime = CastBACnetContextTagUnsignedInteger(_val)
+			if closeErr := readBuffer.CloseContext("lifetime"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Simple Field (monitoredPropertyIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredPropertyIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredPropertyIdentifier, _monitoredPropertyIdentifierErr := BACnetPropertyReferenceEnclosedParse(readBuffer, uint8(uint8(4)))
+	if _monitoredPropertyIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredPropertyIdentifierErr, "Error parsing 'monitoredPropertyIdentifier' field")
+	}
+	monitoredPropertyIdentifier := CastBACnetPropertyReferenceEnclosed(_monitoredPropertyIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredPropertyIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (covIncrement) (Can be skipped, if a given expression evaluates to false)
+	var covIncrement *BACnetContextTagReal = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("covIncrement"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(5), BACnetDataType_REAL)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'covIncrement' field")
+		default:
+			covIncrement = CastBACnetContextTagReal(_val)
+			if closeErr := readBuffer.CloseContext("covIncrement"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
 	}
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVProperty"); closeErr != nil {
@@ -128,6 +309,12 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.Rea
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestSubscribeCOVProperty{
+		SubscriberProcessIdentifier:   CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		MonitoredObjectIdentifier:     CastBACnetContextTagObjectIdentifier(monitoredObjectIdentifier),
+		IssueConfirmedNotifications:   CastBACnetContextTagBoolean(issueConfirmedNotifications),
+		Lifetime:                      CastBACnetContextTagUnsignedInteger(lifetime),
+		MonitoredPropertyIdentifier:   CastBACnetPropertyReferenceEnclosed(monitoredPropertyIdentifier),
+		CovIncrement:                  CastBACnetContextTagReal(covIncrement),
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
@@ -142,6 +329,90 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) Serialize(writeBuffe
 			return pushErr
 		}
 
+		// Simple Field (subscriberProcessIdentifier)
+		if pushErr := writeBuffer.PushContext("subscriberProcessIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_subscriberProcessIdentifierErr := m.SubscriberProcessIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("subscriberProcessIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _subscriberProcessIdentifierErr != nil {
+			return errors.Wrap(_subscriberProcessIdentifierErr, "Error serializing 'subscriberProcessIdentifier' field")
+		}
+
+		// Simple Field (monitoredObjectIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_monitoredObjectIdentifierErr := m.MonitoredObjectIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredObjectIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _monitoredObjectIdentifierErr != nil {
+			return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
+		}
+
+		// Optional Field (issueConfirmedNotifications) (Can be skipped, if the value is null)
+		var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+		if m.IssueConfirmedNotifications != nil {
+			if pushErr := writeBuffer.PushContext("issueConfirmedNotifications"); pushErr != nil {
+				return pushErr
+			}
+			issueConfirmedNotifications = m.IssueConfirmedNotifications
+			_issueConfirmedNotificationsErr := issueConfirmedNotifications.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("issueConfirmedNotifications"); popErr != nil {
+				return popErr
+			}
+			if _issueConfirmedNotificationsErr != nil {
+				return errors.Wrap(_issueConfirmedNotificationsErr, "Error serializing 'issueConfirmedNotifications' field")
+			}
+		}
+
+		// Optional Field (lifetime) (Can be skipped, if the value is null)
+		var lifetime *BACnetContextTagUnsignedInteger = nil
+		if m.Lifetime != nil {
+			if pushErr := writeBuffer.PushContext("lifetime"); pushErr != nil {
+				return pushErr
+			}
+			lifetime = m.Lifetime
+			_lifetimeErr := lifetime.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("lifetime"); popErr != nil {
+				return popErr
+			}
+			if _lifetimeErr != nil {
+				return errors.Wrap(_lifetimeErr, "Error serializing 'lifetime' field")
+			}
+		}
+
+		// Simple Field (monitoredPropertyIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredPropertyIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_monitoredPropertyIdentifierErr := m.MonitoredPropertyIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredPropertyIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _monitoredPropertyIdentifierErr != nil {
+			return errors.Wrap(_monitoredPropertyIdentifierErr, "Error serializing 'monitoredPropertyIdentifier' field")
+		}
+
+		// Optional Field (covIncrement) (Can be skipped, if the value is null)
+		var covIncrement *BACnetContextTagReal = nil
+		if m.CovIncrement != nil {
+			if pushErr := writeBuffer.PushContext("covIncrement"); pushErr != nil {
+				return pushErr
+			}
+			covIncrement = m.CovIncrement
+			_covIncrementErr := covIncrement.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("covIncrement"); popErr != nil {
+				return popErr
+			}
+			if _covIncrementErr != nil {
+				return errors.Wrap(_covIncrementErr, "Error serializing 'covIncrement' field")
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVProperty"); popErr != nil {
 			return popErr
 		}
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 0e4fee2a6d..41debe3a0c 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -402,21 +402,25 @@
             [validation    '1 == 2'    "TODO: implement me"]
         ]
         ['GET_EVENT_INFORMATION' BACnetConfirmedServiceRequestGetEventInformation
-            [optional BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') lastReceivedObjectIdentifier   ]
+            [optional BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') lastReceivedObjectIdentifier ]
         ]
         ['LIFE_SAFETY_OPERATION' BACnetConfirmedServiceRequestLifeSafetyOperation
             // TODO: implement me
             [validation    '1 == 2'    "TODO: implement me"]
         ]
         ['SUBSCRIBE_COV' BACnetConfirmedServiceRequestSubscribeCOV
-            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier ]
-            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
-            [simple BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                           issueConfirmed              ]
-            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetimeInSeconds           ]
+            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')            subscriberProcessIdentifier  ]
+            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')   monitoredObjectIdentifier    ]
+            [simple BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                             issueConfirmed               ]
+            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')            lifetimeInSeconds            ]
         ]
         ['SUBSCRIBE_COV_PROPERTY' BACnetConfirmedServiceRequestSubscribeCOVProperty
-            // TODO: implement me
-            [validation    '1 == 2'    "TODO: implement me"]
+            [simple   BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier  ]
+            [simple   BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier    ]
+            [optional BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                           issueConfirmedNotifications  ]
+            [optional BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetime                     ]
+            [simple   BACnetPropertyReferenceEnclosed('4')                                             monitoredPropertyIdentifier  ]
+            [optional BACnetContextTagReal('5', 'BACnetDataType.REAL')                                 covIncrement                 ]
         ]
         ['SUBSCRIBE_COV_PROPERTY_MULTIPLE' BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
             // TODO: implement me