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/08/12 13:44:40 UTC

[plc4x] 02/05: refactor(cbus): small adjustments on reset and optional alpha on direct command

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 cbce5d212b9ee7e0a335ef372c4982f74c20f55f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Aug 12 15:24:40 2022 +0200

    refactor(cbus): small adjustments on reset and optional alpha on direct command
---
 .../readwrite/model/RequestDirectCommandAccess.go  | 58 +++++++++++++++++++++-
 .../protocols/cbus/readwrite/model/RequestReset.go | 54 ++++++++++++++------
 .../src/main/resources/protocols/cbus/c-bus.mspec  |  5 +-
 3 files changed, 99 insertions(+), 18 deletions(-)

diff --git a/plc4go/protocols/cbus/readwrite/model/RequestDirectCommandAccess.go b/plc4go/protocols/cbus/readwrite/model/RequestDirectCommandAccess.go
index 2e7ee6e17..8dc3cb1e8 100644
--- a/plc4go/protocols/cbus/readwrite/model/RequestDirectCommandAccess.go
+++ b/plc4go/protocols/cbus/readwrite/model/RequestDirectCommandAccess.go
@@ -23,6 +23,8 @@ import (
 	"fmt"
 	"github.com/apache/plc4x/plc4go/spi/utils"
 	"github.com/pkg/errors"
+	"github.com/rs/zerolog/log"
+	"io"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -37,6 +39,8 @@ type RequestDirectCommandAccess interface {
 	Request
 	// GetCalData returns CalData (property field)
 	GetCalData() CALData
+	// GetAlpha returns Alpha (property field)
+	GetAlpha() Alpha
 	// GetCalDataDecoded returns CalDataDecoded (virtual field)
 	GetCalDataDecoded() CALData
 }
@@ -52,6 +56,7 @@ type RequestDirectCommandAccessExactly interface {
 type _RequestDirectCommandAccess struct {
 	*_Request
 	CalData CALData
+	Alpha   Alpha
 }
 
 ///////////////////////////////////////////////////////////
@@ -85,6 +90,10 @@ func (m *_RequestDirectCommandAccess) GetCalData() CALData {
 	return m.CalData
 }
 
+func (m *_RequestDirectCommandAccess) GetAlpha() Alpha {
+	return m.Alpha
+}
+
 ///////////////////////
 ///////////////////////
 ///////////////////////////////////////////////////////////
@@ -95,6 +104,8 @@ func (m *_RequestDirectCommandAccess) GetCalData() CALData {
 ///////////////////////
 
 func (m *_RequestDirectCommandAccess) GetCalDataDecoded() CALData {
+	alpha := m.Alpha
+	_ = alpha
 	return CastCALData(m.GetCalData())
 }
 
@@ -117,9 +128,10 @@ func (m *_RequestDirectCommandAccess) GetAt() byte {
 ///////////////////////////////////////////////////////////
 
 // NewRequestDirectCommandAccess factory function for _RequestDirectCommandAccess
-func NewRequestDirectCommandAccess(calData CALData, peekedByte RequestType, startingCR *RequestType, resetMode *RequestType, secondPeek RequestType, termination RequestTermination, cBusOptions CBusOptions) *_RequestDirectCommandAccess {
+func NewRequestDirectCommandAccess(calData CALData, alpha Alpha, peekedByte RequestType, startingCR *RequestType, resetMode *RequestType, secondPeek RequestType, termination RequestTermination, cBusOptions CBusOptions) *_RequestDirectCommandAccess {
 	_result := &_RequestDirectCommandAccess{
 		CalData:  calData,
+		Alpha:    alpha,
 		_Request: NewRequest(peekedByte, startingCR, resetMode, secondPeek, termination, cBusOptions),
 	}
 	_result._Request._RequestChildRequirements = _result
@@ -156,6 +168,11 @@ func (m *_RequestDirectCommandAccess) GetLengthInBitsConditional(lastItem bool)
 
 	// A virtual field doesn't have any in- or output.
 
+	// Optional Field (alpha)
+	if m.Alpha != nil {
+		lengthInBits += m.Alpha.GetLengthInBits()
+	}
+
 	return lengthInBits
 }
 
@@ -196,6 +213,28 @@ func RequestDirectCommandAccessParse(readBuffer utils.ReadBuffer, cBusOptions CB
 	calDataDecoded := _calDataDecoded
 	_ = calDataDecoded
 
+	// Optional Field (alpha) (Can be skipped, if a given expression evaluates to false)
+	var alpha Alpha = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("alpha"); pullErr != nil {
+			return nil, errors.Wrap(pullErr, "Error pulling for alpha")
+		}
+		_val, _err := AlphaParse(readBuffer)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			log.Debug().Err(_err).Msg("Resetting position because optional threw an error")
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'alpha' field of RequestDirectCommandAccess")
+		default:
+			alpha = _val.(Alpha)
+			if closeErr := readBuffer.CloseContext("alpha"); closeErr != nil {
+				return nil, errors.Wrap(closeErr, "Error closing for alpha")
+			}
+		}
+	}
+
 	if closeErr := readBuffer.CloseContext("RequestDirectCommandAccess"); closeErr != nil {
 		return nil, errors.Wrap(closeErr, "Error closing for RequestDirectCommandAccess")
 	}
@@ -206,6 +245,7 @@ func RequestDirectCommandAccessParse(readBuffer utils.ReadBuffer, cBusOptions CB
 			CBusOptions: cBusOptions,
 		},
 		CalData: calData,
+		Alpha:   alpha,
 	}
 	_child._Request._RequestChildRequirements = _child
 	return _child, nil
@@ -235,6 +275,22 @@ func (m *_RequestDirectCommandAccess) Serialize(writeBuffer utils.WriteBuffer) e
 			return errors.Wrap(_calDataDecodedErr, "Error serializing 'calDataDecoded' field")
 		}
 
+		// Optional Field (alpha) (Can be skipped, if the value is null)
+		var alpha Alpha = nil
+		if m.GetAlpha() != nil {
+			if pushErr := writeBuffer.PushContext("alpha"); pushErr != nil {
+				return errors.Wrap(pushErr, "Error pushing for alpha")
+			}
+			alpha = m.GetAlpha()
+			_alphaErr := writeBuffer.WriteSerializable(alpha)
+			if popErr := writeBuffer.PopContext("alpha"); popErr != nil {
+				return errors.Wrap(popErr, "Error popping for alpha")
+			}
+			if _alphaErr != nil {
+				return errors.Wrap(_alphaErr, "Error serializing 'alpha' field")
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("RequestDirectCommandAccess"); popErr != nil {
 			return errors.Wrap(popErr, "Error popping for RequestDirectCommandAccess")
 		}
diff --git a/plc4go/protocols/cbus/readwrite/model/RequestReset.go b/plc4go/protocols/cbus/readwrite/model/RequestReset.go
index 6ce42e07d..e53293a0f 100644
--- a/plc4go/protocols/cbus/readwrite/model/RequestReset.go
+++ b/plc4go/protocols/cbus/readwrite/model/RequestReset.go
@@ -34,11 +34,11 @@ type RequestReset interface {
 	// GetTildePeek returns TildePeek (property field)
 	GetTildePeek() RequestType
 	// GetSecondTilde returns SecondTilde (property field)
-	GetSecondTilde() *byte
+	GetSecondTilde() *RequestType
 	// GetTildePeek2 returns TildePeek2 (property field)
 	GetTildePeek2() RequestType
 	// GetThirdTilde returns ThirdTilde (property field)
-	GetThirdTilde() *byte
+	GetThirdTilde() *RequestType
 }
 
 // RequestResetExactly can be used when we want exactly this type and not a type which fulfills RequestReset.
@@ -52,9 +52,9 @@ type RequestResetExactly interface {
 type _RequestReset struct {
 	*_Request
 	TildePeek   RequestType
-	SecondTilde *byte
+	SecondTilde *RequestType
 	TildePeek2  RequestType
-	ThirdTilde  *byte
+	ThirdTilde  *RequestType
 }
 
 ///////////////////////////////////////////////////////////
@@ -88,7 +88,7 @@ func (m *_RequestReset) GetTildePeek() RequestType {
 	return m.TildePeek
 }
 
-func (m *_RequestReset) GetSecondTilde() *byte {
+func (m *_RequestReset) GetSecondTilde() *RequestType {
 	return m.SecondTilde
 }
 
@@ -96,7 +96,7 @@ func (m *_RequestReset) GetTildePeek2() RequestType {
 	return m.TildePeek2
 }
 
-func (m *_RequestReset) GetThirdTilde() *byte {
+func (m *_RequestReset) GetThirdTilde() *RequestType {
 	return m.ThirdTilde
 }
 
@@ -106,7 +106,7 @@ func (m *_RequestReset) GetThirdTilde() *byte {
 ///////////////////////////////////////////////////////////
 
 // NewRequestReset factory function for _RequestReset
-func NewRequestReset(tildePeek RequestType, secondTilde *byte, tildePeek2 RequestType, thirdTilde *byte, peekedByte RequestType, startingCR *RequestType, resetMode *RequestType, secondPeek RequestType, termination RequestTermination, cBusOptions CBusOptions) *_RequestReset {
+func NewRequestReset(tildePeek RequestType, secondTilde *RequestType, tildePeek2 RequestType, thirdTilde *RequestType, peekedByte RequestType, startingCR *RequestType, resetMode *RequestType, secondPeek RequestType, termination RequestTermination, cBusOptions CBusOptions) *_RequestReset {
 	_result := &_RequestReset{
 		TildePeek:   tildePeek,
 		SecondTilde: secondTilde,
@@ -182,13 +182,19 @@ func RequestResetParse(readBuffer utils.ReadBuffer, cBusOptions CBusOptions) (Re
 	readBuffer.Reset(currentPos)
 
 	// Optional Field (secondTilde) (Can be skipped, if a given expression evaluates to false)
-	var secondTilde *byte = nil
+	var secondTilde *RequestType = nil
 	if bool((tildePeek) == (RequestType_RESET)) {
-		_val, _err := readBuffer.ReadByte("secondTilde")
+		if pullErr := readBuffer.PullContext("secondTilde"); pullErr != nil {
+			return nil, errors.Wrap(pullErr, "Error pulling for secondTilde")
+		}
+		_val, _err := RequestTypeParse(readBuffer)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'secondTilde' field of RequestReset")
 		}
 		secondTilde = &_val
+		if closeErr := readBuffer.CloseContext("secondTilde"); closeErr != nil {
+			return nil, errors.Wrap(closeErr, "Error closing for secondTilde")
+		}
 	}
 
 	// Peek Field (tildePeek2)
@@ -207,13 +213,19 @@ func RequestResetParse(readBuffer utils.ReadBuffer, cBusOptions CBusOptions) (Re
 	readBuffer.Reset(currentPos)
 
 	// Optional Field (thirdTilde) (Can be skipped, if a given expression evaluates to false)
-	var thirdTilde *byte = nil
+	var thirdTilde *RequestType = nil
 	if bool((tildePeek2) == (RequestType_RESET)) {
-		_val, _err := readBuffer.ReadByte("thirdTilde")
+		if pullErr := readBuffer.PullContext("thirdTilde"); pullErr != nil {
+			return nil, errors.Wrap(pullErr, "Error pulling for thirdTilde")
+		}
+		_val, _err := RequestTypeParse(readBuffer)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'thirdTilde' field of RequestReset")
 		}
 		thirdTilde = &_val
+		if closeErr := readBuffer.CloseContext("thirdTilde"); closeErr != nil {
+			return nil, errors.Wrap(closeErr, "Error closing for thirdTilde")
+		}
 	}
 
 	if closeErr := readBuffer.CloseContext("RequestReset"); closeErr != nil {
@@ -243,20 +255,32 @@ func (m *_RequestReset) Serialize(writeBuffer utils.WriteBuffer) error {
 		}
 
 		// Optional Field (secondTilde) (Can be skipped, if the value is null)
-		var secondTilde *byte = nil
+		var secondTilde *RequestType = nil
 		if m.GetSecondTilde() != nil {
+			if pushErr := writeBuffer.PushContext("secondTilde"); pushErr != nil {
+				return errors.Wrap(pushErr, "Error pushing for secondTilde")
+			}
 			secondTilde = m.GetSecondTilde()
-			_secondTildeErr := writeBuffer.WriteByte("secondTilde", *(secondTilde))
+			_secondTildeErr := writeBuffer.WriteSerializable(secondTilde)
+			if popErr := writeBuffer.PopContext("secondTilde"); popErr != nil {
+				return errors.Wrap(popErr, "Error popping for secondTilde")
+			}
 			if _secondTildeErr != nil {
 				return errors.Wrap(_secondTildeErr, "Error serializing 'secondTilde' field")
 			}
 		}
 
 		// Optional Field (thirdTilde) (Can be skipped, if the value is null)
-		var thirdTilde *byte = nil
+		var thirdTilde *RequestType = nil
 		if m.GetThirdTilde() != nil {
+			if pushErr := writeBuffer.PushContext("thirdTilde"); pushErr != nil {
+				return errors.Wrap(pushErr, "Error pushing for thirdTilde")
+			}
 			thirdTilde = m.GetThirdTilde()
-			_thirdTildeErr := writeBuffer.WriteByte("thirdTilde", *(thirdTilde))
+			_thirdTildeErr := writeBuffer.WriteSerializable(thirdTilde)
+			if popErr := writeBuffer.PopContext("thirdTilde"); popErr != nil {
+				return errors.Wrap(popErr, "Error popping for thirdTilde")
+			}
 			if _thirdTildeErr != nil {
 				return errors.Wrap(_thirdTildeErr, "Error serializing 'thirdTilde' field")
 			}
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 e76267854..fdcc00327 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
@@ -74,9 +74,9 @@
         ]
         ['RESET' *Reset
             [peek     RequestType tildePeek                                     ]
-            [optional byte        secondTilde 'tildePeek == RequestType.RESET'  ]
+            [optional RequestType secondTilde 'tildePeek == RequestType.RESET'  ]
             [peek     RequestType tildePeek2                                    ]
-            [optional byte        thirdTilde 'tildePeek2 == RequestType.RESET'  ]
+            [optional RequestType thirdTilde 'tildePeek2 == RequestType.RESET'  ]
         ]
         ['DIRECT_COMMAND' *DirectCommandAccess
             [const    byte    at        0x40                                ]
@@ -87,6 +87,7 @@
                         '(calData.lengthInBytes*2)*8'                       ]
             [virtual  CALData
                               calDataDecoded 'calData'                      ]
+            [optional Alpha         alpha                                   ]
         ]
         ['REQUEST_COMMAND' *Command
             [const    byte  initiator 0x5C                                  ] // 0x5C == "\"