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/04 14:25:18 UTC

[plc4x] branch develop updated: feat(cbus): change some fields to c-bus now that they don't loose data

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 0e48de1c3 feat(cbus): change some fields to c-bus now that they don't loose data
0e48de1c3 is described below

commit 0e48de1c3b8914b64439889907a6d55e70005a11
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Aug 4 16:25:12 2022 +0200

    feat(cbus): change some fields to c-bus now that they don't loose data
---
 .../cbus/readwrite/model/LightingLabelOptions.go   | 165 +++++++++++++--------
 .../readwrite/model/TriggerControlLabelOptions.go  | 165 +++++++++++++--------
 .../cbus/c-bus_lighting_application.mspec          |   6 +-
 .../cbus/c-bus_trigger_control_application.mspec   |   6 +-
 4 files changed, 210 insertions(+), 132 deletions(-)

diff --git a/plc4go/protocols/cbus/readwrite/model/LightingLabelOptions.go b/plc4go/protocols/cbus/readwrite/model/LightingLabelOptions.go
index e7d17615b..4d7af15c4 100644
--- a/plc4go/protocols/cbus/readwrite/model/LightingLabelOptions.go
+++ b/plc4go/protocols/cbus/readwrite/model/LightingLabelOptions.go
@@ -31,16 +31,10 @@ import (
 type LightingLabelOptions interface {
 	utils.LengthAware
 	utils.Serializable
-	// GetReservedBit7 returns ReservedBit7 (property field)
-	GetReservedBit7() bool
 	// GetLabelFlavour returns LabelFlavour (property field)
 	GetLabelFlavour() LightingLabelFlavour
-	// GetReservedBit3 returns ReservedBit3 (property field)
-	GetReservedBit3() bool
 	// GetLabelType returns LabelType (property field)
 	GetLabelType() LightingLabelType
-	// GetReservedBit0 returns ReservedBit0 (property field)
-	GetReservedBit0() bool
 }
 
 // LightingLabelOptionsExactly can be used when we want exactly this type and not a type which fulfills LightingLabelOptions.
@@ -52,13 +46,13 @@ type LightingLabelOptionsExactly interface {
 
 // _LightingLabelOptions is the data-structure of this message
 type _LightingLabelOptions struct {
-	ReservedBit7 bool
 	LabelFlavour LightingLabelFlavour
-	ReservedBit3 bool
 	LabelType    LightingLabelType
-	ReservedBit0 bool
 	// Reserved Fields
 	reservedField0 *bool
+	reservedField1 *bool
+	reservedField2 *bool
+	reservedField3 *bool
 }
 
 ///////////////////////////////////////////////////////////
@@ -66,34 +60,22 @@ type _LightingLabelOptions struct {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *_LightingLabelOptions) GetReservedBit7() bool {
-	return m.ReservedBit7
-}
-
 func (m *_LightingLabelOptions) GetLabelFlavour() LightingLabelFlavour {
 	return m.LabelFlavour
 }
 
-func (m *_LightingLabelOptions) GetReservedBit3() bool {
-	return m.ReservedBit3
-}
-
 func (m *_LightingLabelOptions) GetLabelType() LightingLabelType {
 	return m.LabelType
 }
 
-func (m *_LightingLabelOptions) GetReservedBit0() bool {
-	return m.ReservedBit0
-}
-
 ///////////////////////
 ///////////////////////
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
 // NewLightingLabelOptions factory function for _LightingLabelOptions
-func NewLightingLabelOptions(reservedBit7 bool, labelFlavour LightingLabelFlavour, reservedBit3 bool, labelType LightingLabelType, reservedBit0 bool) *_LightingLabelOptions {
-	return &_LightingLabelOptions{ReservedBit7: reservedBit7, LabelFlavour: labelFlavour, ReservedBit3: reservedBit3, LabelType: labelType, ReservedBit0: reservedBit0}
+func NewLightingLabelOptions(labelFlavour LightingLabelFlavour, labelType LightingLabelType) *_LightingLabelOptions {
+	return &_LightingLabelOptions{LabelFlavour: labelFlavour, LabelType: labelType}
 }
 
 // Deprecated: use the interface for direct cast
@@ -118,7 +100,7 @@ func (m *_LightingLabelOptions) GetLengthInBits() uint16 {
 func (m *_LightingLabelOptions) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
-	// Simple field (reservedBit7)
+	// Reserved Field (reserved)
 	lengthInBits += 1
 
 	// Simple field (labelFlavour)
@@ -127,13 +109,13 @@ func (m *_LightingLabelOptions) GetLengthInBitsConditional(lastItem bool) uint16
 	// Reserved Field (reserved)
 	lengthInBits += 1
 
-	// Simple field (reservedBit3)
+	// Reserved Field (reserved)
 	lengthInBits += 1
 
 	// Simple field (labelType)
 	lengthInBits += 2
 
-	// Simple field (reservedBit0)
+	// Reserved Field (reserved)
 	lengthInBits += 1
 
 	return lengthInBits
@@ -152,12 +134,22 @@ func LightingLabelOptionsParse(readBuffer utils.ReadBuffer) (LightingLabelOption
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Simple Field (reservedBit7)
-	_reservedBit7, _reservedBit7Err := readBuffer.ReadBit("reservedBit7")
-	if _reservedBit7Err != nil {
-		return nil, errors.Wrap(_reservedBit7Err, "Error parsing 'reservedBit7' field of LightingLabelOptions")
+	var reservedField0 *bool
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadBit("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of LightingLabelOptions")
+		}
+		if reserved != bool(false) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+			// We save the value, so it can be re-serialized
+			reservedField0 = &reserved
+		}
 	}
-	reservedBit7 := _reservedBit7
 
 	// Simple Field (labelFlavour)
 	if pullErr := readBuffer.PullContext("labelFlavour"); pullErr != nil {
@@ -172,7 +164,7 @@ func LightingLabelOptionsParse(readBuffer utils.ReadBuffer) (LightingLabelOption
 		return nil, errors.Wrap(closeErr, "Error closing for labelFlavour")
 	}
 
-	var reservedField0 *bool
+	var reservedField1 *bool
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
 		reserved, _err := readBuffer.ReadBit("reserved")
@@ -185,16 +177,26 @@ func LightingLabelOptionsParse(readBuffer utils.ReadBuffer) (LightingLabelOption
 				"got value":      reserved,
 			}).Msg("Got unexpected response for reserved field.")
 			// We save the value, so it can be re-serialized
-			reservedField0 = &reserved
+			reservedField1 = &reserved
 		}
 	}
 
-	// Simple Field (reservedBit3)
-	_reservedBit3, _reservedBit3Err := readBuffer.ReadBit("reservedBit3")
-	if _reservedBit3Err != nil {
-		return nil, errors.Wrap(_reservedBit3Err, "Error parsing 'reservedBit3' field of LightingLabelOptions")
+	var reservedField2 *bool
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadBit("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of LightingLabelOptions")
+		}
+		if reserved != bool(false) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+			// We save the value, so it can be re-serialized
+			reservedField2 = &reserved
+		}
 	}
-	reservedBit3 := _reservedBit3
 
 	// Simple Field (labelType)
 	if pullErr := readBuffer.PullContext("labelType"); pullErr != nil {
@@ -209,12 +211,22 @@ func LightingLabelOptionsParse(readBuffer utils.ReadBuffer) (LightingLabelOption
 		return nil, errors.Wrap(closeErr, "Error closing for labelType")
 	}
 
-	// Simple Field (reservedBit0)
-	_reservedBit0, _reservedBit0Err := readBuffer.ReadBit("reservedBit0")
-	if _reservedBit0Err != nil {
-		return nil, errors.Wrap(_reservedBit0Err, "Error parsing 'reservedBit0' field of LightingLabelOptions")
+	var reservedField3 *bool
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadBit("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of LightingLabelOptions")
+		}
+		if reserved != bool(false) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+			// We save the value, so it can be re-serialized
+			reservedField3 = &reserved
+		}
 	}
-	reservedBit0 := _reservedBit0
 
 	if closeErr := readBuffer.CloseContext("LightingLabelOptions"); closeErr != nil {
 		return nil, errors.Wrap(closeErr, "Error closing for LightingLabelOptions")
@@ -222,12 +234,12 @@ func LightingLabelOptionsParse(readBuffer utils.ReadBuffer) (LightingLabelOption
 
 	// Create the instance
 	return &_LightingLabelOptions{
-		ReservedBit7:   reservedBit7,
 		LabelFlavour:   labelFlavour,
-		ReservedBit3:   reservedBit3,
 		LabelType:      labelType,
-		ReservedBit0:   reservedBit0,
 		reservedField0: reservedField0,
+		reservedField1: reservedField1,
+		reservedField2: reservedField2,
+		reservedField3: reservedField3,
 	}, nil
 }
 
@@ -238,11 +250,20 @@ func (m *_LightingLabelOptions) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(pushErr, "Error pushing for LightingLabelOptions")
 	}
 
-	// Simple Field (reservedBit7)
-	reservedBit7 := bool(m.GetReservedBit7())
-	_reservedBit7Err := writeBuffer.WriteBit("reservedBit7", (reservedBit7))
-	if _reservedBit7Err != nil {
-		return errors.Wrap(_reservedBit7Err, "Error serializing 'reservedBit7' field")
+	// Reserved Field (reserved)
+	{
+		var reserved bool = bool(false)
+		if m.reservedField0 != nil {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Overriding reserved field with unexpected value.")
+			reserved = *m.reservedField0
+		}
+		_err := writeBuffer.WriteBit("reserved", reserved)
+		if _err != nil {
+			return errors.Wrap(_err, "Error serializing 'reserved' field")
+		}
 	}
 
 	// Simple Field (labelFlavour)
@@ -260,12 +281,12 @@ func (m *_LightingLabelOptions) Serialize(writeBuffer utils.WriteBuffer) error {
 	// Reserved Field (reserved)
 	{
 		var reserved bool = bool(false)
-		if m.reservedField0 != nil {
+		if m.reservedField1 != nil {
 			log.Info().Fields(map[string]interface{}{
 				"expected value": bool(false),
 				"got value":      reserved,
 			}).Msg("Overriding reserved field with unexpected value.")
-			reserved = *m.reservedField0
+			reserved = *m.reservedField1
 		}
 		_err := writeBuffer.WriteBit("reserved", reserved)
 		if _err != nil {
@@ -273,11 +294,20 @@ func (m *_LightingLabelOptions) Serialize(writeBuffer utils.WriteBuffer) error {
 		}
 	}
 
-	// Simple Field (reservedBit3)
-	reservedBit3 := bool(m.GetReservedBit3())
-	_reservedBit3Err := writeBuffer.WriteBit("reservedBit3", (reservedBit3))
-	if _reservedBit3Err != nil {
-		return errors.Wrap(_reservedBit3Err, "Error serializing 'reservedBit3' field")
+	// Reserved Field (reserved)
+	{
+		var reserved bool = bool(false)
+		if m.reservedField2 != nil {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Overriding reserved field with unexpected value.")
+			reserved = *m.reservedField2
+		}
+		_err := writeBuffer.WriteBit("reserved", reserved)
+		if _err != nil {
+			return errors.Wrap(_err, "Error serializing 'reserved' field")
+		}
 	}
 
 	// Simple Field (labelType)
@@ -292,11 +322,20 @@ func (m *_LightingLabelOptions) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(_labelTypeErr, "Error serializing 'labelType' field")
 	}
 
-	// Simple Field (reservedBit0)
-	reservedBit0 := bool(m.GetReservedBit0())
-	_reservedBit0Err := writeBuffer.WriteBit("reservedBit0", (reservedBit0))
-	if _reservedBit0Err != nil {
-		return errors.Wrap(_reservedBit0Err, "Error serializing 'reservedBit0' field")
+	// Reserved Field (reserved)
+	{
+		var reserved bool = bool(false)
+		if m.reservedField3 != nil {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Overriding reserved field with unexpected value.")
+			reserved = *m.reservedField3
+		}
+		_err := writeBuffer.WriteBit("reserved", reserved)
+		if _err != nil {
+			return errors.Wrap(_err, "Error serializing 'reserved' field")
+		}
 	}
 
 	if popErr := writeBuffer.PopContext("LightingLabelOptions"); popErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/TriggerControlLabelOptions.go b/plc4go/protocols/cbus/readwrite/model/TriggerControlLabelOptions.go
index e1f51f699..111cb3551 100644
--- a/plc4go/protocols/cbus/readwrite/model/TriggerControlLabelOptions.go
+++ b/plc4go/protocols/cbus/readwrite/model/TriggerControlLabelOptions.go
@@ -31,16 +31,10 @@ import (
 type TriggerControlLabelOptions interface {
 	utils.LengthAware
 	utils.Serializable
-	// GetReservedBit7 returns ReservedBit7 (property field)
-	GetReservedBit7() bool
 	// GetLabelFlavour returns LabelFlavour (property field)
 	GetLabelFlavour() TriggerControlLabelFlavour
-	// GetReservedBit3 returns ReservedBit3 (property field)
-	GetReservedBit3() bool
 	// GetLabelType returns LabelType (property field)
 	GetLabelType() TriggerControlLabelType
-	// GetReservedBit0 returns ReservedBit0 (property field)
-	GetReservedBit0() bool
 }
 
 // TriggerControlLabelOptionsExactly can be used when we want exactly this type and not a type which fulfills TriggerControlLabelOptions.
@@ -52,13 +46,13 @@ type TriggerControlLabelOptionsExactly interface {
 
 // _TriggerControlLabelOptions is the data-structure of this message
 type _TriggerControlLabelOptions struct {
-	ReservedBit7 bool
 	LabelFlavour TriggerControlLabelFlavour
-	ReservedBit3 bool
 	LabelType    TriggerControlLabelType
-	ReservedBit0 bool
 	// Reserved Fields
 	reservedField0 *bool
+	reservedField1 *bool
+	reservedField2 *bool
+	reservedField3 *bool
 }
 
 ///////////////////////////////////////////////////////////
@@ -66,34 +60,22 @@ type _TriggerControlLabelOptions struct {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *_TriggerControlLabelOptions) GetReservedBit7() bool {
-	return m.ReservedBit7
-}
-
 func (m *_TriggerControlLabelOptions) GetLabelFlavour() TriggerControlLabelFlavour {
 	return m.LabelFlavour
 }
 
-func (m *_TriggerControlLabelOptions) GetReservedBit3() bool {
-	return m.ReservedBit3
-}
-
 func (m *_TriggerControlLabelOptions) GetLabelType() TriggerControlLabelType {
 	return m.LabelType
 }
 
-func (m *_TriggerControlLabelOptions) GetReservedBit0() bool {
-	return m.ReservedBit0
-}
-
 ///////////////////////
 ///////////////////////
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
 // NewTriggerControlLabelOptions factory function for _TriggerControlLabelOptions
-func NewTriggerControlLabelOptions(reservedBit7 bool, labelFlavour TriggerControlLabelFlavour, reservedBit3 bool, labelType TriggerControlLabelType, reservedBit0 bool) *_TriggerControlLabelOptions {
-	return &_TriggerControlLabelOptions{ReservedBit7: reservedBit7, LabelFlavour: labelFlavour, ReservedBit3: reservedBit3, LabelType: labelType, ReservedBit0: reservedBit0}
+func NewTriggerControlLabelOptions(labelFlavour TriggerControlLabelFlavour, labelType TriggerControlLabelType) *_TriggerControlLabelOptions {
+	return &_TriggerControlLabelOptions{LabelFlavour: labelFlavour, LabelType: labelType}
 }
 
 // Deprecated: use the interface for direct cast
@@ -118,7 +100,7 @@ func (m *_TriggerControlLabelOptions) GetLengthInBits() uint16 {
 func (m *_TriggerControlLabelOptions) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
-	// Simple field (reservedBit7)
+	// Reserved Field (reserved)
 	lengthInBits += 1
 
 	// Simple field (labelFlavour)
@@ -127,13 +109,13 @@ func (m *_TriggerControlLabelOptions) GetLengthInBitsConditional(lastItem bool)
 	// Reserved Field (reserved)
 	lengthInBits += 1
 
-	// Simple field (reservedBit3)
+	// Reserved Field (reserved)
 	lengthInBits += 1
 
 	// Simple field (labelType)
 	lengthInBits += 2
 
-	// Simple field (reservedBit0)
+	// Reserved Field (reserved)
 	lengthInBits += 1
 
 	return lengthInBits
@@ -152,12 +134,22 @@ func TriggerControlLabelOptionsParse(readBuffer utils.ReadBuffer) (TriggerContro
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Simple Field (reservedBit7)
-	_reservedBit7, _reservedBit7Err := readBuffer.ReadBit("reservedBit7")
-	if _reservedBit7Err != nil {
-		return nil, errors.Wrap(_reservedBit7Err, "Error parsing 'reservedBit7' field of TriggerControlLabelOptions")
+	var reservedField0 *bool
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadBit("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of TriggerControlLabelOptions")
+		}
+		if reserved != bool(false) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+			// We save the value, so it can be re-serialized
+			reservedField0 = &reserved
+		}
 	}
-	reservedBit7 := _reservedBit7
 
 	// Simple Field (labelFlavour)
 	if pullErr := readBuffer.PullContext("labelFlavour"); pullErr != nil {
@@ -172,7 +164,7 @@ func TriggerControlLabelOptionsParse(readBuffer utils.ReadBuffer) (TriggerContro
 		return nil, errors.Wrap(closeErr, "Error closing for labelFlavour")
 	}
 
-	var reservedField0 *bool
+	var reservedField1 *bool
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
 		reserved, _err := readBuffer.ReadBit("reserved")
@@ -185,16 +177,26 @@ func TriggerControlLabelOptionsParse(readBuffer utils.ReadBuffer) (TriggerContro
 				"got value":      reserved,
 			}).Msg("Got unexpected response for reserved field.")
 			// We save the value, so it can be re-serialized
-			reservedField0 = &reserved
+			reservedField1 = &reserved
 		}
 	}
 
-	// Simple Field (reservedBit3)
-	_reservedBit3, _reservedBit3Err := readBuffer.ReadBit("reservedBit3")
-	if _reservedBit3Err != nil {
-		return nil, errors.Wrap(_reservedBit3Err, "Error parsing 'reservedBit3' field of TriggerControlLabelOptions")
+	var reservedField2 *bool
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadBit("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of TriggerControlLabelOptions")
+		}
+		if reserved != bool(false) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+			// We save the value, so it can be re-serialized
+			reservedField2 = &reserved
+		}
 	}
-	reservedBit3 := _reservedBit3
 
 	// Simple Field (labelType)
 	if pullErr := readBuffer.PullContext("labelType"); pullErr != nil {
@@ -209,12 +211,22 @@ func TriggerControlLabelOptionsParse(readBuffer utils.ReadBuffer) (TriggerContro
 		return nil, errors.Wrap(closeErr, "Error closing for labelType")
 	}
 
-	// Simple Field (reservedBit0)
-	_reservedBit0, _reservedBit0Err := readBuffer.ReadBit("reservedBit0")
-	if _reservedBit0Err != nil {
-		return nil, errors.Wrap(_reservedBit0Err, "Error parsing 'reservedBit0' field of TriggerControlLabelOptions")
+	var reservedField3 *bool
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadBit("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of TriggerControlLabelOptions")
+		}
+		if reserved != bool(false) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+			// We save the value, so it can be re-serialized
+			reservedField3 = &reserved
+		}
 	}
-	reservedBit0 := _reservedBit0
 
 	if closeErr := readBuffer.CloseContext("TriggerControlLabelOptions"); closeErr != nil {
 		return nil, errors.Wrap(closeErr, "Error closing for TriggerControlLabelOptions")
@@ -222,12 +234,12 @@ func TriggerControlLabelOptionsParse(readBuffer utils.ReadBuffer) (TriggerContro
 
 	// Create the instance
 	return &_TriggerControlLabelOptions{
-		ReservedBit7:   reservedBit7,
 		LabelFlavour:   labelFlavour,
-		ReservedBit3:   reservedBit3,
 		LabelType:      labelType,
-		ReservedBit0:   reservedBit0,
 		reservedField0: reservedField0,
+		reservedField1: reservedField1,
+		reservedField2: reservedField2,
+		reservedField3: reservedField3,
 	}, nil
 }
 
@@ -238,11 +250,20 @@ func (m *_TriggerControlLabelOptions) Serialize(writeBuffer utils.WriteBuffer) e
 		return errors.Wrap(pushErr, "Error pushing for TriggerControlLabelOptions")
 	}
 
-	// Simple Field (reservedBit7)
-	reservedBit7 := bool(m.GetReservedBit7())
-	_reservedBit7Err := writeBuffer.WriteBit("reservedBit7", (reservedBit7))
-	if _reservedBit7Err != nil {
-		return errors.Wrap(_reservedBit7Err, "Error serializing 'reservedBit7' field")
+	// Reserved Field (reserved)
+	{
+		var reserved bool = bool(false)
+		if m.reservedField0 != nil {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Overriding reserved field with unexpected value.")
+			reserved = *m.reservedField0
+		}
+		_err := writeBuffer.WriteBit("reserved", reserved)
+		if _err != nil {
+			return errors.Wrap(_err, "Error serializing 'reserved' field")
+		}
 	}
 
 	// Simple Field (labelFlavour)
@@ -260,12 +281,12 @@ func (m *_TriggerControlLabelOptions) Serialize(writeBuffer utils.WriteBuffer) e
 	// Reserved Field (reserved)
 	{
 		var reserved bool = bool(false)
-		if m.reservedField0 != nil {
+		if m.reservedField1 != nil {
 			log.Info().Fields(map[string]interface{}{
 				"expected value": bool(false),
 				"got value":      reserved,
 			}).Msg("Overriding reserved field with unexpected value.")
-			reserved = *m.reservedField0
+			reserved = *m.reservedField1
 		}
 		_err := writeBuffer.WriteBit("reserved", reserved)
 		if _err != nil {
@@ -273,11 +294,20 @@ func (m *_TriggerControlLabelOptions) Serialize(writeBuffer utils.WriteBuffer) e
 		}
 	}
 
-	// Simple Field (reservedBit3)
-	reservedBit3 := bool(m.GetReservedBit3())
-	_reservedBit3Err := writeBuffer.WriteBit("reservedBit3", (reservedBit3))
-	if _reservedBit3Err != nil {
-		return errors.Wrap(_reservedBit3Err, "Error serializing 'reservedBit3' field")
+	// Reserved Field (reserved)
+	{
+		var reserved bool = bool(false)
+		if m.reservedField2 != nil {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Overriding reserved field with unexpected value.")
+			reserved = *m.reservedField2
+		}
+		_err := writeBuffer.WriteBit("reserved", reserved)
+		if _err != nil {
+			return errors.Wrap(_err, "Error serializing 'reserved' field")
+		}
 	}
 
 	// Simple Field (labelType)
@@ -292,11 +322,20 @@ func (m *_TriggerControlLabelOptions) Serialize(writeBuffer utils.WriteBuffer) e
 		return errors.Wrap(_labelTypeErr, "Error serializing 'labelType' field")
 	}
 
-	// Simple Field (reservedBit0)
-	reservedBit0 := bool(m.GetReservedBit0())
-	_reservedBit0Err := writeBuffer.WriteBit("reservedBit0", (reservedBit0))
-	if _reservedBit0Err != nil {
-		return errors.Wrap(_reservedBit0Err, "Error serializing 'reservedBit0' field")
+	// Reserved Field (reserved)
+	{
+		var reserved bool = bool(false)
+		if m.reservedField3 != nil {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": bool(false),
+				"got value":      reserved,
+			}).Msg("Overriding reserved field with unexpected value.")
+			reserved = *m.reservedField3
+		}
+		_err := writeBuffer.WriteBit("reserved", reserved)
+		if _err != nil {
+			return errors.Wrap(_err, "Error serializing 'reserved' field")
+		}
 	}
 
 	if popErr := writeBuffer.PopContext("TriggerControlLabelOptions"); popErr != nil {
diff --git a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_lighting_application.mspec b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_lighting_application.mspec
index 9e0baf70b..be49513e3 100644
--- a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_lighting_application.mspec
+++ b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_lighting_application.mspec
@@ -46,12 +46,12 @@
 ]
 
 [type LightingLabelOptions
-    [simple   bit                   reservedBit7] // only for dynamic icon loading can switch to 1 (note this could use mspec reserved field but sadly this discards data)
+    [reserved bit                   'false'     ] // only for dynamic icon loading can switch to 1
     [simple   LightingLabelFlavour  labelFlavour]
     [reserved bit                   'false'     ]
-    [simple   bit                   reservedBit3] // For Lighting, this bit must be 0 (note this could use mspec reserved field but sadly this discards data)
+    [reserved bit                   'false'     ] // For Lighting, this bit must be 0
     [simple   LightingLabelType     labelType   ]
-    [simple   bit                   reservedBit0] // For Lighting, this bit must be 0 (note this could use mspec reserved field but sadly this discards data)
+    [reserved bit                   'false'     ] // For Lighting, this bit must be 0
 ]
 
 [enum uint 2 LightingLabelFlavour
diff --git a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_trigger_control_application.mspec b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_trigger_control_application.mspec
index 724640e27..2789d0d2b 100644
--- a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_trigger_control_application.mspec
+++ b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus_trigger_control_application.mspec
@@ -107,12 +107,12 @@
 
 // TODO: maybe can be merged with lightning labels
 [type TriggerControlLabelOptions
-    [simple   bit                           reservedBit7] // only for dynamic icon loading can switch to 1 (note this could use mspec reserved field but sadly this discards data)
+    [reserved bit                           'false'     ] // only for dynamic icon loading can switch to 1
     [simple   TriggerControlLabelFlavour    labelFlavour]
     [reserved bit                           'false'     ]
-    [simple   bit                           reservedBit3] // For Control Trigger, this bit must be 0 (note this could use mspec reserved field but sadly this discards data)
+    [reserved bit                           'false'     ] // For Control Trigger, this bit must be 0
     [simple   TriggerControlLabelType       labelType   ]
-    [simple   bit                           reservedBit0] // For Control Trigger, this bit must be 1 (note this could use mspec reserved field but sadly this discards data)
+    [reserved bit                           'false'     ] // For Control Trigger, this bit must be 1
 ]
 
 // TODO: maybe can be merged with lightning labels