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/07/19 15:04:53 UTC
[plc4x] 01/02: feat(cbus): implemented measurement application
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 238d80befe526880228ac2cbf26cda038358c8f3
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Jul 19 16:12:33 2022 +0200
feat(cbus): implemented measurement application
---
.../cbus/readwrite/model/SALDataMeasurement.go | 54 +++++++++++++++++++---
.../src/main/resources/protocols/cbus/c-bus.mspec | 18 ++++----
2 files changed, 57 insertions(+), 15 deletions(-)
diff --git a/plc4go/protocols/cbus/readwrite/model/SALDataMeasurement.go b/plc4go/protocols/cbus/readwrite/model/SALDataMeasurement.go
index 49ec1b55b..da497f8a4 100644
--- a/plc4go/protocols/cbus/readwrite/model/SALDataMeasurement.go
+++ b/plc4go/protocols/cbus/readwrite/model/SALDataMeasurement.go
@@ -31,6 +31,8 @@ type SALDataMeasurement interface {
utils.LengthAware
utils.Serializable
SALData
+ // GetMeasurementData returns MeasurementData (property field)
+ GetMeasurementData() MeasurementData
}
// SALDataMeasurementExactly can be used when we want exactly this type and not a type which fulfills SALDataMeasurement.
@@ -43,6 +45,7 @@ type SALDataMeasurementExactly interface {
// _SALDataMeasurement is the data-structure of this message
type _SALDataMeasurement struct {
*_SALData
+ MeasurementData MeasurementData
}
///////////////////////////////////////////////////////////
@@ -67,10 +70,25 @@ func (m *_SALDataMeasurement) GetParent() SALData {
return m._SALData
}
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_SALDataMeasurement) GetMeasurementData() MeasurementData {
+ return m.MeasurementData
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
// NewSALDataMeasurement factory function for _SALDataMeasurement
-func NewSALDataMeasurement(salData SALData) *_SALDataMeasurement {
+func NewSALDataMeasurement(measurementData MeasurementData, salData SALData) *_SALDataMeasurement {
_result := &_SALDataMeasurement{
- _SALData: NewSALData(salData),
+ MeasurementData: measurementData,
+ _SALData: NewSALData(salData),
}
_result._SALData._SALDataChildRequirements = _result
return _result
@@ -98,6 +116,9 @@ func (m *_SALDataMeasurement) GetLengthInBits() uint16 {
func (m *_SALDataMeasurement) GetLengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(m.GetParentLengthInBits())
+ // Simple field (measurementData)
+ lengthInBits += m.MeasurementData.GetLengthInBits()
+
return lengthInBits
}
@@ -114,9 +135,17 @@ func SALDataMeasurementParse(readBuffer utils.ReadBuffer, applicationId Applicat
currentPos := positionAware.GetPos()
_ = currentPos
- // Validation
- if !(bool((1) == (2))) {
- return nil, errors.WithStack(utils.ParseValidationError{"MEASUREMENT Not yet implemented"})
+ // Simple Field (measurementData)
+ if pullErr := readBuffer.PullContext("measurementData"); pullErr != nil {
+ return nil, errors.Wrap(pullErr, "Error pulling for measurementData")
+ }
+ _measurementData, _measurementDataErr := MeasurementDataParse(readBuffer)
+ if _measurementDataErr != nil {
+ return nil, errors.Wrap(_measurementDataErr, "Error parsing 'measurementData' field of SALDataMeasurement")
+ }
+ measurementData := _measurementData.(MeasurementData)
+ if closeErr := readBuffer.CloseContext("measurementData"); closeErr != nil {
+ return nil, errors.Wrap(closeErr, "Error closing for measurementData")
}
if closeErr := readBuffer.CloseContext("SALDataMeasurement"); closeErr != nil {
@@ -125,7 +154,8 @@ func SALDataMeasurementParse(readBuffer utils.ReadBuffer, applicationId Applicat
// Create a partially initialized instance
_child := &_SALDataMeasurement{
- _SALData: &_SALData{},
+ MeasurementData: measurementData,
+ _SALData: &_SALData{},
}
_child._SALData._SALDataChildRequirements = _child
return _child, nil
@@ -139,6 +169,18 @@ func (m *_SALDataMeasurement) Serialize(writeBuffer utils.WriteBuffer) error {
return errors.Wrap(pushErr, "Error pushing for SALDataMeasurement")
}
+ // Simple Field (measurementData)
+ if pushErr := writeBuffer.PushContext("measurementData"); pushErr != nil {
+ return errors.Wrap(pushErr, "Error pushing for measurementData")
+ }
+ _measurementDataErr := writeBuffer.WriteSerializable(m.GetMeasurementData())
+ if popErr := writeBuffer.PopContext("measurementData"); popErr != nil {
+ return errors.Wrap(popErr, "Error popping for measurementData")
+ }
+ if _measurementDataErr != nil {
+ return errors.Wrap(_measurementDataErr, "Error serializing 'measurementData' field")
+ }
+
if popErr := writeBuffer.PopContext("SALDataMeasurement"); popErr != nil {
return errors.Wrap(popErr, "Error popping for SALDataMeasurement")
}
diff --git a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
index 74cb2cf49..44ebb46af 100644
--- a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
+++ b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
@@ -1357,7 +1357,7 @@
[simple TelephonyData telephonyData]
]
['MEASUREMENT' *Measurement
- [validation '1==2' "MEASUREMENT Not yet implemented"] // TODO: implement me
+ [simple MeasurementData measurementData]
]
['TESTING' *Testing
[validation '1==2' "TESTING Not yet implemented"] // TODO: implement me
@@ -3282,6 +3282,14 @@
]
]
+[enum uint 8 MeasurementCommandTypeContainer(MeasurementCommandType commandType, uint 5 numBytes)
+ ['0x0E' MeasurementCommandChannelMeasurementData ['MEASUREMENT_EVENT', '6']]
+]
+
+[enum uint 4 MeasurementCommandType
+ ['0x00' MEASUREMENT_EVENT ]
+]
+
[enum uint 8 MeasurementUnits
['0x00' CELSIUS ]
['0x01' AMPS ]
@@ -3327,14 +3335,6 @@
['0xFF' CUSTOM ]
]
-[enum uint 8 MeasurementCommandTypeContainer(MeasurementCommandType commandType, uint 5 numBytes)
- ['0x0E' MeasurementCommandChannelMeasurementData ['MEASUREMENT_EVENT', '6']]
-]
-
-[enum uint 4 MeasurementCommandType
- ['0x00' MEASUREMENT_EVENT ]
-]
-
[type ReplyOrConfirmation(CBusOptions cBusOptions, uint 16 messageLength, RequestContext requestContext)
[peek byte peekedByte ]
[virtual bit isAlpha '(peekedByte >= 0x67) && (peekedByte <= 0x7A)' ]