diff --git a/.gitignore b/.gitignore index 46be4cf264a..e54141d807c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.iml .vscode/** .java-version +.attach_pid* # Sensitive or high-churn files: .idea/**/dataSources/ diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go index 836d4a4cbef..e86efb4f1b6 100644 --- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go +++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.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,9 @@ import ( // BACnetConfirmedServiceRequestConfirmedPrivateTransfer is the data-structure of this message type BACnetConfirmedServiceRequestConfirmedPrivateTransfer struct { *BACnetConfirmedServiceRequest + VendorId *BACnetContextTagUnsignedInteger + ServiceNumber *BACnetContextTagUnsignedInteger + ServiceParameters *BACnetPropertyValues // Arguments. ServiceRequestLength uint16 @@ -36,6 +41,12 @@ type BACnetConfirmedServiceRequestConfirmedPrivateTransfer struct { // IBACnetConfirmedServiceRequestConfirmedPrivateTransfer is the corresponding interface of BACnetConfirmedServiceRequestConfirmedPrivateTransfer type IBACnetConfirmedServiceRequestConfirmedPrivateTransfer interface { IBACnetConfirmedServiceRequest + // GetVendorId returns VendorId (property field) + GetVendorId() *BACnetContextTagUnsignedInteger + // GetServiceNumber returns ServiceNumber (property field) + GetServiceNumber() *BACnetContextTagUnsignedInteger + // GetServiceParameters returns ServiceParameters (property field) + GetServiceParameters() *BACnetPropertyValues // GetLengthInBytes returns the length in bytes GetLengthInBytes() uint16 // GetLengthInBits returns the length in bits @@ -65,9 +76,34 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetParent() *BAC return m.BACnetConfirmedServiceRequest } +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////// Accessors for property fields. +/////////////////////// + +func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetVendorId() *BACnetContextTagUnsignedInteger { + return m.VendorId +} + +func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetServiceNumber() *BACnetContextTagUnsignedInteger { + return m.ServiceNumber +} + +func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetServiceParameters() *BACnetPropertyValues { + return m.ServiceParameters +} + +/////////////////////// +/////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + // NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer factory function for BACnetConfirmedServiceRequestConfirmedPrivateTransfer -func NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer(serviceRequestLength uint16) *BACnetConfirmedServiceRequestConfirmedPrivateTransfer { +func NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer(vendorId *BACnetContextTagUnsignedInteger, serviceNumber *BACnetContextTagUnsignedInteger, serviceParameters *BACnetPropertyValues, serviceRequestLength uint16) *BACnetConfirmedServiceRequestConfirmedPrivateTransfer { _result := &BACnetConfirmedServiceRequestConfirmedPrivateTransfer{ + VendorId: vendorId, + ServiceNumber: serviceNumber, + ServiceParameters: serviceParameters, BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(serviceRequestLength), } _result.Child = _result @@ -101,6 +137,17 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetLengthInBits( func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetLengthInBitsConditional(lastItem bool) uint16 { lengthInBits := uint16(m.GetParentLengthInBits()) + // Simple field (vendorId) + lengthInBits += m.VendorId.GetLengthInBits() + + // Simple field (serviceNumber) + lengthInBits += m.ServiceNumber.GetLengthInBits() + + // Optional Field (serviceParameters) + if m.ServiceParameters != nil { + lengthInBits += (*m.ServiceParameters).GetLengthInBits() + } + return lengthInBits } @@ -115,12 +162,62 @@ func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer utils currentPos := readBuffer.GetPos() _ = currentPos + // Simple Field (vendorId) + if pullErr := readBuffer.PullContext("vendorId"); pullErr != nil { + return nil, pullErr + } + _vendorId, _vendorIdErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) + if _vendorIdErr != nil { + return nil, errors.Wrap(_vendorIdErr, "Error parsing 'vendorId' field") + } + vendorId := CastBACnetContextTagUnsignedInteger(_vendorId) + if closeErr := readBuffer.CloseContext("vendorId"); closeErr != nil { + return nil, closeErr + } + + // Simple Field (serviceNumber) + if pullErr := readBuffer.PullContext("serviceNumber"); pullErr != nil { + return nil, pullErr + } + _serviceNumber, _serviceNumberErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) + if _serviceNumberErr != nil { + return nil, errors.Wrap(_serviceNumberErr, "Error parsing 'serviceNumber' field") + } + serviceNumber := CastBACnetContextTagUnsignedInteger(_serviceNumber) + if closeErr := readBuffer.CloseContext("serviceNumber"); closeErr != nil { + return nil, closeErr + } + + // Optional Field (serviceParameters) (Can be skipped, if a given expression evaluates to false) + var serviceParameters *BACnetPropertyValues = nil + { + currentPos = readBuffer.GetPos() + if pullErr := readBuffer.PullContext("serviceParameters"); pullErr != nil { + return nil, pullErr + } + _val, _err := BACnetPropertyValuesParse(readBuffer, uint8(2), BACnetObjectType_VENDOR_PROPRIETARY_VALUE) + 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 'serviceParameters' field") + default: + serviceParameters = CastBACnetPropertyValues(_val) + if closeErr := readBuffer.CloseContext("serviceParameters"); closeErr != nil { + return nil, closeErr + } + } + } + if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestConfirmedPrivateTransfer"); closeErr != nil { return nil, closeErr } // Create a partially initialized instance _child := &BACnetConfirmedServiceRequestConfirmedPrivateTransfer{ + VendorId: CastBACnetContextTagUnsignedInteger(vendorId), + ServiceNumber: CastBACnetContextTagUnsignedInteger(serviceNumber), + ServiceParameters: CastBACnetPropertyValues(serviceParameters), BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{}, } _child.BACnetConfirmedServiceRequest.Child = _child @@ -133,6 +230,46 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) Serialize(writeB return pushErr } + // Simple Field (vendorId) + if pushErr := writeBuffer.PushContext("vendorId"); pushErr != nil { + return pushErr + } + _vendorIdErr := m.VendorId.Serialize(writeBuffer) + if popErr := writeBuffer.PopContext("vendorId"); popErr != nil { + return popErr + } + if _vendorIdErr != nil { + return errors.Wrap(_vendorIdErr, "Error serializing 'vendorId' field") + } + + // Simple Field (serviceNumber) + if pushErr := writeBuffer.PushContext("serviceNumber"); pushErr != nil { + return pushErr + } + _serviceNumberErr := m.ServiceNumber.Serialize(writeBuffer) + if popErr := writeBuffer.PopContext("serviceNumber"); popErr != nil { + return popErr + } + if _serviceNumberErr != nil { + return errors.Wrap(_serviceNumberErr, "Error serializing 'serviceNumber' field") + } + + // Optional Field (serviceParameters) (Can be skipped, if the value is null) + var serviceParameters *BACnetPropertyValues = nil + if m.ServiceParameters != nil { + if pushErr := writeBuffer.PushContext("serviceParameters"); pushErr != nil { + return pushErr + } + serviceParameters = m.ServiceParameters + _serviceParametersErr := serviceParameters.Serialize(writeBuffer) + if popErr := writeBuffer.PopContext("serviceParameters"); popErr != nil { + return popErr + } + if _serviceParametersErr != nil { + return errors.Wrap(_serviceParametersErr, "Error serializing 'serviceParameters' field") + } + } + if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestConfirmedPrivateTransfer"); popErr != nil { return popErr } diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go index b9bac88ebf2..45c9c57808c 100644 --- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go +++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go @@ -115,6 +115,11 @@ func BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer utils.Rea currentPos := readBuffer.GetPos() _ = currentPos + // Validation + if !(bool((1) == (2))) { + return nil, utils.ParseAssertError{"TODO: implement me"} + } + if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestConfirmedTextMessage"); closeErr != nil { return nil, closeErr } diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go index 737b830e0e7..cc1ad6455b4 100644 --- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go +++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.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,9 @@ import ( // BACnetServiceAckConfirmedPrivateTransfer is the data-structure of this message type BACnetServiceAckConfirmedPrivateTransfer struct { *BACnetServiceAck + VendorId *BACnetContextTagUnsignedInteger + ServiceNumber *BACnetContextTagUnsignedInteger + ResultBlock *BACnetPropertyValues // Arguments. ServiceRequestLength uint16 @@ -36,6 +41,12 @@ type BACnetServiceAckConfirmedPrivateTransfer struct { // IBACnetServiceAckConfirmedPrivateTransfer is the corresponding interface of BACnetServiceAckConfirmedPrivateTransfer type IBACnetServiceAckConfirmedPrivateTransfer interface { IBACnetServiceAck + // GetVendorId returns VendorId (property field) + GetVendorId() *BACnetContextTagUnsignedInteger + // GetServiceNumber returns ServiceNumber (property field) + GetServiceNumber() *BACnetContextTagUnsignedInteger + // GetResultBlock returns ResultBlock (property field) + GetResultBlock() *BACnetPropertyValues // GetLengthInBytes returns the length in bytes GetLengthInBytes() uint16 // GetLengthInBits returns the length in bits @@ -64,9 +75,34 @@ func (m *BACnetServiceAckConfirmedPrivateTransfer) GetParent() *BACnetServiceAck return m.BACnetServiceAck } +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////// Accessors for property fields. +/////////////////////// + +func (m *BACnetServiceAckConfirmedPrivateTransfer) GetVendorId() *BACnetContextTagUnsignedInteger { + return m.VendorId +} + +func (m *BACnetServiceAckConfirmedPrivateTransfer) GetServiceNumber() *BACnetContextTagUnsignedInteger { + return m.ServiceNumber +} + +func (m *BACnetServiceAckConfirmedPrivateTransfer) GetResultBlock() *BACnetPropertyValues { + return m.ResultBlock +} + +/////////////////////// +/////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + // NewBACnetServiceAckConfirmedPrivateTransfer factory function for BACnetServiceAckConfirmedPrivateTransfer -func NewBACnetServiceAckConfirmedPrivateTransfer(serviceRequestLength uint16) *BACnetServiceAckConfirmedPrivateTransfer { +func NewBACnetServiceAckConfirmedPrivateTransfer(vendorId *BACnetContextTagUnsignedInteger, serviceNumber *BACnetContextTagUnsignedInteger, resultBlock *BACnetPropertyValues, serviceRequestLength uint16) *BACnetServiceAckConfirmedPrivateTransfer { _result := &BACnetServiceAckConfirmedPrivateTransfer{ + VendorId: vendorId, + ServiceNumber: serviceNumber, + ResultBlock: resultBlock, BACnetServiceAck: NewBACnetServiceAck(serviceRequestLength), } _result.Child = _result @@ -100,6 +136,17 @@ func (m *BACnetServiceAckConfirmedPrivateTransfer) GetLengthInBits() uint16 { func (m *BACnetServiceAckConfirmedPrivateTransfer) GetLengthInBitsConditional(lastItem bool) uint16 { lengthInBits := uint16(m.GetParentLengthInBits()) + // Simple field (vendorId) + lengthInBits += m.VendorId.GetLengthInBits() + + // Simple field (serviceNumber) + lengthInBits += m.ServiceNumber.GetLengthInBits() + + // Optional Field (resultBlock) + if m.ResultBlock != nil { + lengthInBits += (*m.ResultBlock).GetLengthInBits() + } + return lengthInBits } @@ -114,9 +161,51 @@ func BACnetServiceAckConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, currentPos := readBuffer.GetPos() _ = currentPos - // Validation - if !(bool((1) == (2))) { - return nil, utils.ParseAssertError{"TODO: implement me"} + // Simple Field (vendorId) + if pullErr := readBuffer.PullContext("vendorId"); pullErr != nil { + return nil, pullErr + } + _vendorId, _vendorIdErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) + if _vendorIdErr != nil { + return nil, errors.Wrap(_vendorIdErr, "Error parsing 'vendorId' field") + } + vendorId := CastBACnetContextTagUnsignedInteger(_vendorId) + if closeErr := readBuffer.CloseContext("vendorId"); closeErr != nil { + return nil, closeErr + } + + // Simple Field (serviceNumber) + if pullErr := readBuffer.PullContext("serviceNumber"); pullErr != nil { + return nil, pullErr + } + _serviceNumber, _serviceNumberErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) + if _serviceNumberErr != nil { + return nil, errors.Wrap(_serviceNumberErr, "Error parsing 'serviceNumber' field") + } + serviceNumber := CastBACnetContextTagUnsignedInteger(_serviceNumber) + if closeErr := readBuffer.CloseContext("serviceNumber"); closeErr != nil { + return nil, closeErr + } + + // Optional Field (resultBlock) (Can be skipped, if a given expression evaluates to false) + var resultBlock *BACnetPropertyValues = nil + { + currentPos = readBuffer.GetPos() + if pullErr := readBuffer.PullContext("resultBlock"); pullErr != nil { + return nil, pullErr + } + _val, _err := BACnetPropertyValuesParse(readBuffer, uint8(2), BACnetObjectType_VENDOR_PROPRIETARY_VALUE) + 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 'resultBlock' field") + default: + resultBlock = CastBACnetPropertyValues(_val) + if closeErr := readBuffer.CloseContext("resultBlock"); closeErr != nil { + return nil, closeErr + } + } } if closeErr := readBuffer.CloseContext("BACnetServiceAckConfirmedPrivateTransfer"); closeErr != nil { @@ -125,6 +214,9 @@ func BACnetServiceAckConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, // Create a partially initialized instance _child := &BACnetServiceAckConfirmedPrivateTransfer{ + VendorId: CastBACnetContextTagUnsignedInteger(vendorId), + ServiceNumber: CastBACnetContextTagUnsignedInteger(serviceNumber), + ResultBlock: CastBACnetPropertyValues(resultBlock), BACnetServiceAck: &BACnetServiceAck{}, } _child.BACnetServiceAck.Child = _child @@ -137,6 +229,46 @@ func (m *BACnetServiceAckConfirmedPrivateTransfer) Serialize(writeBuffer utils.W return pushErr } + // Simple Field (vendorId) + if pushErr := writeBuffer.PushContext("vendorId"); pushErr != nil { + return pushErr + } + _vendorIdErr := m.VendorId.Serialize(writeBuffer) + if popErr := writeBuffer.PopContext("vendorId"); popErr != nil { + return popErr + } + if _vendorIdErr != nil { + return errors.Wrap(_vendorIdErr, "Error serializing 'vendorId' field") + } + + // Simple Field (serviceNumber) + if pushErr := writeBuffer.PushContext("serviceNumber"); pushErr != nil { + return pushErr + } + _serviceNumberErr := m.ServiceNumber.Serialize(writeBuffer) + if popErr := writeBuffer.PopContext("serviceNumber"); popErr != nil { + return popErr + } + if _serviceNumberErr != nil { + return errors.Wrap(_serviceNumberErr, "Error serializing 'serviceNumber' field") + } + + // Optional Field (resultBlock) (Can be skipped, if the value is null) + var resultBlock *BACnetPropertyValues = nil + if m.ResultBlock != nil { + if pushErr := writeBuffer.PushContext("resultBlock"); pushErr != nil { + return pushErr + } + resultBlock = m.ResultBlock + _resultBlockErr := resultBlock.Serialize(writeBuffer) + if popErr := writeBuffer.PopContext("resultBlock"); popErr != nil { + return popErr + } + if _resultBlockErr != nil { + return errors.Wrap(_resultBlockErr, "Error serializing 'resultBlock' field") + } + } + if popErr := writeBuffer.PopContext("BACnetServiceAckConfirmedPrivateTransfer"); popErr != nil { return popErr } diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go index 0562a8c1a60..aaa7cc8c9db 100644 --- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go +++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go @@ -166,7 +166,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer u if pullErr := readBuffer.PullContext("vendorId"); pullErr != nil { return nil, pullErr } - _vendorId, _vendorIdErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) + _vendorId, _vendorIdErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) if _vendorIdErr != nil { return nil, errors.Wrap(_vendorIdErr, "Error parsing 'vendorId' field") } @@ -179,7 +179,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer u if pullErr := readBuffer.PullContext("serviceNumber"); pullErr != nil { return nil, pullErr } - _serviceNumber, _serviceNumberErr := BACnetContextTagParse(readBuffer, uint8(uint8(2)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) + _serviceNumber, _serviceNumberErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER)) if _serviceNumberErr != nil { return nil, errors.Wrap(_serviceNumberErr, "Error parsing 'serviceNumber' field") } diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec index 12434045ed5..96aa64c6ce6 100644 --- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec +++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec @@ -456,8 +456,13 @@ ] ['CONFIRMED_PRIVATE_TRANSFER' BACnetConfirmedServiceRequestConfirmedPrivateTransfer + [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER') vendorId ]// TODO: vendor list? + [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER') serviceNumber ] + [optional BACnetPropertyValues('2', 'BACnetObjectType.VENDOR_PROPRIETARY_VALUE') serviceParameters ] //TODO: what should we use as object identifier here? ] ['CONFIRMED_TEXT_MESSAGE' BACnetConfirmedServiceRequestConfirmedTextMessage + // TODO: implement me + [validation '1 == 2' "TODO: implement me"] ] ['REINITIALIZE_DEVICE' BACnetConfirmedServiceRequestReinitializeDevice [simple BACnetContextTagDeviceState('0', 'BACnetDataType.BACNET_DEVICE_STATE') reinitializedStateOfDevice ] @@ -717,8 +722,8 @@ [optional BACnetNotificationParameters('12', 'eventObjectIdentifier.objectType') eventValues ] ] ['UNCONFIRMED_PRIVATE_TRANSFER' BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer - [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER') vendorId ]// TODO: vendor list? - [simple BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER') serviceNumber ] + [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER') vendorId ]// TODO: vendor list? + [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER') serviceNumber ] [optional BACnetPropertyValues('2', 'BACnetObjectType.VENDOR_PROPRIETARY_VALUE') serviceParameters ] //TODO: what should we use as object identifier here? ] ['UNCONFIRMED_TEXT_MESSAGE' BACnetUnconfirmedServiceRequestUnconfirmedTextMessage @@ -907,8 +912,9 @@ [validation '1 == 2' "TODO: implement me"] ] ['CONFIRMED_PRIVATE_TRANSFER' BACnetServiceAckConfirmedPrivateTransfer - // TODO: implement me - [validation '1 == 2' "TODO: implement me"] + [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER') vendorId ]// TODO: vendor list? + [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER') serviceNumber ] + [optional BACnetPropertyValues('2', 'BACnetObjectType.VENDOR_PROPRIETARY_VALUE') resultBlock ] //TODO: what should we use as object identifier here? ] ['CONFIRMED_TEXT_MESSAGE' BACnetServiceAckConfirmedTextMessage // TODO: implement me