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/28 14:27:35 UTC
[plc4x] branch develop updated: refactor(cbus): streamline network routing
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 b93e7bffc refactor(cbus): streamline network routing
b93e7bffc is described below
commit b93e7bffc520d527b4e59c6efee0ff563e40bc39
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jul 28 16:26:58 2022 +0200
refactor(cbus): streamline network routing
---
.../protocols/cbus/readwrite/model/NetworkRoute.go | 119 +++--------
.../protocols/cbus/readwrite/model/ReplyNetwork.go | 169 +++------------
plc4go/protocols/cbus/readwrite/model/RouteType.go | 227 ---------------------
.../src/main/resources/protocols/cbus/c-bus.mspec | 36 +---
4 files changed, 63 insertions(+), 488 deletions(-)
diff --git a/plc4go/protocols/cbus/readwrite/model/NetworkRoute.go b/plc4go/protocols/cbus/readwrite/model/NetworkRoute.go
index 1d87f15e7..f5981a34f 100644
--- a/plc4go/protocols/cbus/readwrite/model/NetworkRoute.go
+++ b/plc4go/protocols/cbus/readwrite/model/NetworkRoute.go
@@ -22,7 +22,6 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/spi/utils"
"github.com/pkg/errors"
- "github.com/rs/zerolog/log"
)
// Code generated by code-generation. DO NOT EDIT.
@@ -31,10 +30,8 @@ import (
type NetworkRoute interface {
utils.LengthAware
utils.Serializable
- // GetReverseRouteType returns ReverseRouteType (property field)
- GetReverseRouteType() RouteType
- // GetRouteType returns RouteType (property field)
- GetRouteType() RouteType
+ // GetNetworkPCI returns NetworkPCI (property field)
+ GetNetworkPCI() NetworkProtocolControlInformation
// GetAdditionalBridgeAddresses returns AdditionalBridgeAddresses (property field)
GetAdditionalBridgeAddresses() []BridgeAddress
}
@@ -48,8 +45,7 @@ type NetworkRouteExactly interface {
// _NetworkRoute is the data-structure of this message
type _NetworkRoute struct {
- ReverseRouteType RouteType
- RouteType RouteType
+ NetworkPCI NetworkProtocolControlInformation
AdditionalBridgeAddresses []BridgeAddress
}
@@ -58,12 +54,8 @@ type _NetworkRoute struct {
/////////////////////// Accessors for property fields.
///////////////////////
-func (m *_NetworkRoute) GetReverseRouteType() RouteType {
- return m.ReverseRouteType
-}
-
-func (m *_NetworkRoute) GetRouteType() RouteType {
- return m.RouteType
+func (m *_NetworkRoute) GetNetworkPCI() NetworkProtocolControlInformation {
+ return m.NetworkPCI
}
func (m *_NetworkRoute) GetAdditionalBridgeAddresses() []BridgeAddress {
@@ -76,8 +68,8 @@ func (m *_NetworkRoute) GetAdditionalBridgeAddresses() []BridgeAddress {
///////////////////////////////////////////////////////////
// NewNetworkRoute factory function for _NetworkRoute
-func NewNetworkRoute(reverseRouteType RouteType, routeType RouteType, additionalBridgeAddresses []BridgeAddress) *_NetworkRoute {
- return &_NetworkRoute{ReverseRouteType: reverseRouteType, RouteType: routeType, AdditionalBridgeAddresses: additionalBridgeAddresses}
+func NewNetworkRoute(networkPCI NetworkProtocolControlInformation, additionalBridgeAddresses []BridgeAddress) *_NetworkRoute {
+ return &_NetworkRoute{NetworkPCI: networkPCI, AdditionalBridgeAddresses: additionalBridgeAddresses}
}
// Deprecated: use the interface for direct cast
@@ -102,14 +94,8 @@ func (m *_NetworkRoute) GetLengthInBits() uint16 {
func (m *_NetworkRoute) GetLengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(0)
- // Reserved Field (reserved)
- lengthInBits += 2
-
- // Simple field (reverseRouteType)
- lengthInBits += 3
-
- // Simple field (routeType)
- lengthInBits += 3
+ // Simple field (networkPCI)
+ lengthInBits += m.NetworkPCI.GetLengthInBits()
// Array field
if len(m.AdditionalBridgeAddresses) > 0 {
@@ -135,44 +121,17 @@ func NetworkRouteParse(readBuffer utils.ReadBuffer) (NetworkRoute, error) {
currentPos := positionAware.GetPos()
_ = currentPos
- // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
- {
- reserved, _err := readBuffer.ReadUint8("reserved", 2)
- if _err != nil {
- return nil, errors.Wrap(_err, "Error parsing 'reserved' field of NetworkRoute")
- }
- if reserved != uint8(0x00) {
- log.Info().Fields(map[string]interface{}{
- "expected value": uint8(0x00),
- "got value": reserved,
- }).Msg("Got unexpected response for reserved field.")
- }
- }
-
- // Simple Field (reverseRouteType)
- if pullErr := readBuffer.PullContext("reverseRouteType"); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for reverseRouteType")
+ // Simple Field (networkPCI)
+ if pullErr := readBuffer.PullContext("networkPCI"); pullErr != nil {
+ return nil, errors.Wrap(pullErr, "Error pulling for networkPCI")
}
- _reverseRouteType, _reverseRouteTypeErr := RouteTypeParse(readBuffer)
- if _reverseRouteTypeErr != nil {
- return nil, errors.Wrap(_reverseRouteTypeErr, "Error parsing 'reverseRouteType' field of NetworkRoute")
+ _networkPCI, _networkPCIErr := NetworkProtocolControlInformationParse(readBuffer)
+ if _networkPCIErr != nil {
+ return nil, errors.Wrap(_networkPCIErr, "Error parsing 'networkPCI' field of NetworkRoute")
}
- reverseRouteType := _reverseRouteType
- if closeErr := readBuffer.CloseContext("reverseRouteType"); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for reverseRouteType")
- }
-
- // Simple Field (routeType)
- if pullErr := readBuffer.PullContext("routeType"); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for routeType")
- }
- _routeType, _routeTypeErr := RouteTypeParse(readBuffer)
- if _routeTypeErr != nil {
- return nil, errors.Wrap(_routeTypeErr, "Error parsing 'routeType' field of NetworkRoute")
- }
- routeType := _routeType
- if closeErr := readBuffer.CloseContext("routeType"); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for routeType")
+ networkPCI := _networkPCI.(NetworkProtocolControlInformation)
+ if closeErr := readBuffer.CloseContext("networkPCI"); closeErr != nil {
+ return nil, errors.Wrap(closeErr, "Error closing for networkPCI")
}
// Array field (additionalBridgeAddresses)
@@ -180,13 +139,13 @@ func NetworkRouteParse(readBuffer utils.ReadBuffer) (NetworkRoute, error) {
return nil, errors.Wrap(pullErr, "Error pulling for additionalBridgeAddresses")
}
// Count array
- additionalBridgeAddresses := make([]BridgeAddress, routeType.AdditionalBridges())
+ additionalBridgeAddresses := make([]BridgeAddress, uint16(networkPCI.GetStackDepth())-uint16(uint16(1)))
// This happens when the size is set conditional to 0
if len(additionalBridgeAddresses) == 0 {
additionalBridgeAddresses = nil
}
{
- for curItem := uint16(0); curItem < uint16(routeType.AdditionalBridges()); curItem++ {
+ for curItem := uint16(0); curItem < uint16(uint16(networkPCI.GetStackDepth())-uint16(uint16(1))); curItem++ {
_item, _err := BridgeAddressParse(readBuffer)
if _err != nil {
return nil, errors.Wrap(_err, "Error parsing 'additionalBridgeAddresses' field of NetworkRoute")
@@ -203,7 +162,7 @@ func NetworkRouteParse(readBuffer utils.ReadBuffer) (NetworkRoute, error) {
}
// Create the instance
- return NewNetworkRoute(reverseRouteType, routeType, additionalBridgeAddresses), nil
+ return NewNetworkRoute(networkPCI, additionalBridgeAddresses), nil
}
func (m *_NetworkRoute) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -213,36 +172,16 @@ func (m *_NetworkRoute) Serialize(writeBuffer utils.WriteBuffer) error {
return errors.Wrap(pushErr, "Error pushing for NetworkRoute")
}
- // Reserved Field (reserved)
- {
- _err := writeBuffer.WriteUint8("reserved", 2, uint8(0x00))
- if _err != nil {
- return errors.Wrap(_err, "Error serializing 'reserved' field")
- }
- }
-
- // Simple Field (reverseRouteType)
- if pushErr := writeBuffer.PushContext("reverseRouteType"); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for reverseRouteType")
- }
- _reverseRouteTypeErr := writeBuffer.WriteSerializable(m.GetReverseRouteType())
- if popErr := writeBuffer.PopContext("reverseRouteType"); popErr != nil {
- return errors.Wrap(popErr, "Error popping for reverseRouteType")
- }
- if _reverseRouteTypeErr != nil {
- return errors.Wrap(_reverseRouteTypeErr, "Error serializing 'reverseRouteType' field")
- }
-
- // Simple Field (routeType)
- if pushErr := writeBuffer.PushContext("routeType"); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for routeType")
+ // Simple Field (networkPCI)
+ if pushErr := writeBuffer.PushContext("networkPCI"); pushErr != nil {
+ return errors.Wrap(pushErr, "Error pushing for networkPCI")
}
- _routeTypeErr := writeBuffer.WriteSerializable(m.GetRouteType())
- if popErr := writeBuffer.PopContext("routeType"); popErr != nil {
- return errors.Wrap(popErr, "Error popping for routeType")
+ _networkPCIErr := writeBuffer.WriteSerializable(m.GetNetworkPCI())
+ if popErr := writeBuffer.PopContext("networkPCI"); popErr != nil {
+ return errors.Wrap(popErr, "Error popping for networkPCI")
}
- if _routeTypeErr != nil {
- return errors.Wrap(_routeTypeErr, "Error serializing 'routeType' field")
+ if _networkPCIErr != nil {
+ return errors.Wrap(_networkPCIErr, "Error serializing 'networkPCI' field")
}
// Array Field (additionalBridgeAddresses)
diff --git a/plc4go/protocols/cbus/readwrite/model/ReplyNetwork.go b/plc4go/protocols/cbus/readwrite/model/ReplyNetwork.go
index 5e9596534..77f153106 100644
--- a/plc4go/protocols/cbus/readwrite/model/ReplyNetwork.go
+++ b/plc4go/protocols/cbus/readwrite/model/ReplyNetwork.go
@@ -22,7 +22,6 @@ package model
import (
"github.com/apache/plc4x/plc4go/internal/spi/utils"
"github.com/pkg/errors"
- "github.com/rs/zerolog/log"
)
// Code generated by code-generation. DO NOT EDIT.
@@ -31,12 +30,8 @@ import (
type ReplyNetwork interface {
utils.LengthAware
utils.Serializable
- // GetReverseRouteType returns ReverseRouteType (property field)
- GetReverseRouteType() RouteType
- // GetRouteType returns RouteType (property field)
- GetRouteType() RouteType
- // GetAdditionalBridgeAddresses returns AdditionalBridgeAddresses (property field)
- GetAdditionalBridgeAddresses() []BridgeAddress
+ // GetNetworkRoute returns NetworkRoute (property field)
+ GetNetworkRoute() NetworkRoute
// GetUnitAddress returns UnitAddress (property field)
GetUnitAddress() UnitAddress
}
@@ -50,10 +45,8 @@ type ReplyNetworkExactly interface {
// _ReplyNetwork is the data-structure of this message
type _ReplyNetwork struct {
- ReverseRouteType RouteType
- RouteType RouteType
- AdditionalBridgeAddresses []BridgeAddress
- UnitAddress UnitAddress
+ NetworkRoute NetworkRoute
+ UnitAddress UnitAddress
}
///////////////////////////////////////////////////////////
@@ -61,16 +54,8 @@ type _ReplyNetwork struct {
/////////////////////// Accessors for property fields.
///////////////////////
-func (m *_ReplyNetwork) GetReverseRouteType() RouteType {
- return m.ReverseRouteType
-}
-
-func (m *_ReplyNetwork) GetRouteType() RouteType {
- return m.RouteType
-}
-
-func (m *_ReplyNetwork) GetAdditionalBridgeAddresses() []BridgeAddress {
- return m.AdditionalBridgeAddresses
+func (m *_ReplyNetwork) GetNetworkRoute() NetworkRoute {
+ return m.NetworkRoute
}
func (m *_ReplyNetwork) GetUnitAddress() UnitAddress {
@@ -83,8 +68,8 @@ func (m *_ReplyNetwork) GetUnitAddress() UnitAddress {
///////////////////////////////////////////////////////////
// NewReplyNetwork factory function for _ReplyNetwork
-func NewReplyNetwork(reverseRouteType RouteType, routeType RouteType, additionalBridgeAddresses []BridgeAddress, unitAddress UnitAddress) *_ReplyNetwork {
- return &_ReplyNetwork{ReverseRouteType: reverseRouteType, RouteType: routeType, AdditionalBridgeAddresses: additionalBridgeAddresses, UnitAddress: unitAddress}
+func NewReplyNetwork(networkRoute NetworkRoute, unitAddress UnitAddress) *_ReplyNetwork {
+ return &_ReplyNetwork{NetworkRoute: networkRoute, UnitAddress: unitAddress}
}
// Deprecated: use the interface for direct cast
@@ -109,22 +94,8 @@ func (m *_ReplyNetwork) GetLengthInBits() uint16 {
func (m *_ReplyNetwork) GetLengthInBitsConditional(lastItem bool) uint16 {
lengthInBits := uint16(0)
- // Reserved Field (reserved)
- lengthInBits += 2
-
- // Simple field (reverseRouteType)
- lengthInBits += 3
-
- // Simple field (routeType)
- lengthInBits += 3
-
- // Array field
- if len(m.AdditionalBridgeAddresses) > 0 {
- for i, element := range m.AdditionalBridgeAddresses {
- last := i == len(m.AdditionalBridgeAddresses)-1
- lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
- }
- }
+ // Simple field (networkRoute)
+ lengthInBits += m.NetworkRoute.GetLengthInBits()
// Simple field (unitAddress)
lengthInBits += m.UnitAddress.GetLengthInBits()
@@ -145,67 +116,17 @@ func ReplyNetworkParse(readBuffer utils.ReadBuffer) (ReplyNetwork, error) {
currentPos := positionAware.GetPos()
_ = currentPos
- // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
- {
- reserved, _err := readBuffer.ReadUint8("reserved", 2)
- if _err != nil {
- return nil, errors.Wrap(_err, "Error parsing 'reserved' field of ReplyNetwork")
- }
- if reserved != uint8(0x00) {
- log.Info().Fields(map[string]interface{}{
- "expected value": uint8(0x00),
- "got value": reserved,
- }).Msg("Got unexpected response for reserved field.")
- }
+ // Simple Field (networkRoute)
+ if pullErr := readBuffer.PullContext("networkRoute"); pullErr != nil {
+ return nil, errors.Wrap(pullErr, "Error pulling for networkRoute")
}
-
- // Simple Field (reverseRouteType)
- if pullErr := readBuffer.PullContext("reverseRouteType"); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for reverseRouteType")
- }
- _reverseRouteType, _reverseRouteTypeErr := RouteTypeParse(readBuffer)
- if _reverseRouteTypeErr != nil {
- return nil, errors.Wrap(_reverseRouteTypeErr, "Error parsing 'reverseRouteType' field of ReplyNetwork")
+ _networkRoute, _networkRouteErr := NetworkRouteParse(readBuffer)
+ if _networkRouteErr != nil {
+ return nil, errors.Wrap(_networkRouteErr, "Error parsing 'networkRoute' field of ReplyNetwork")
}
- reverseRouteType := _reverseRouteType
- if closeErr := readBuffer.CloseContext("reverseRouteType"); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for reverseRouteType")
- }
-
- // Simple Field (routeType)
- if pullErr := readBuffer.PullContext("routeType"); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for routeType")
- }
- _routeType, _routeTypeErr := RouteTypeParse(readBuffer)
- if _routeTypeErr != nil {
- return nil, errors.Wrap(_routeTypeErr, "Error parsing 'routeType' field of ReplyNetwork")
- }
- routeType := _routeType
- if closeErr := readBuffer.CloseContext("routeType"); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for routeType")
- }
-
- // Array field (additionalBridgeAddresses)
- if pullErr := readBuffer.PullContext("additionalBridgeAddresses", utils.WithRenderAsList(true)); pullErr != nil {
- return nil, errors.Wrap(pullErr, "Error pulling for additionalBridgeAddresses")
- }
- // Count array
- additionalBridgeAddresses := make([]BridgeAddress, routeType.AdditionalBridges())
- // This happens when the size is set conditional to 0
- if len(additionalBridgeAddresses) == 0 {
- additionalBridgeAddresses = nil
- }
- {
- for curItem := uint16(0); curItem < uint16(routeType.AdditionalBridges()); curItem++ {
- _item, _err := BridgeAddressParse(readBuffer)
- if _err != nil {
- return nil, errors.Wrap(_err, "Error parsing 'additionalBridgeAddresses' field of ReplyNetwork")
- }
- additionalBridgeAddresses[curItem] = _item.(BridgeAddress)
- }
- }
- if closeErr := readBuffer.CloseContext("additionalBridgeAddresses", utils.WithRenderAsList(true)); closeErr != nil {
- return nil, errors.Wrap(closeErr, "Error closing for additionalBridgeAddresses")
+ networkRoute := _networkRoute.(NetworkRoute)
+ if closeErr := readBuffer.CloseContext("networkRoute"); closeErr != nil {
+ return nil, errors.Wrap(closeErr, "Error closing for networkRoute")
}
// Simple Field (unitAddress)
@@ -226,7 +147,7 @@ func ReplyNetworkParse(readBuffer utils.ReadBuffer) (ReplyNetwork, error) {
}
// Create the instance
- return NewReplyNetwork(reverseRouteType, routeType, additionalBridgeAddresses, unitAddress), nil
+ return NewReplyNetwork(networkRoute, unitAddress), nil
}
func (m *_ReplyNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -236,50 +157,16 @@ func (m *_ReplyNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
return errors.Wrap(pushErr, "Error pushing for ReplyNetwork")
}
- // Reserved Field (reserved)
- {
- _err := writeBuffer.WriteUint8("reserved", 2, uint8(0x00))
- if _err != nil {
- return errors.Wrap(_err, "Error serializing 'reserved' field")
- }
- }
-
- // Simple Field (reverseRouteType)
- if pushErr := writeBuffer.PushContext("reverseRouteType"); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for reverseRouteType")
- }
- _reverseRouteTypeErr := writeBuffer.WriteSerializable(m.GetReverseRouteType())
- if popErr := writeBuffer.PopContext("reverseRouteType"); popErr != nil {
- return errors.Wrap(popErr, "Error popping for reverseRouteType")
- }
- if _reverseRouteTypeErr != nil {
- return errors.Wrap(_reverseRouteTypeErr, "Error serializing 'reverseRouteType' field")
- }
-
- // Simple Field (routeType)
- if pushErr := writeBuffer.PushContext("routeType"); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for routeType")
- }
- _routeTypeErr := writeBuffer.WriteSerializable(m.GetRouteType())
- if popErr := writeBuffer.PopContext("routeType"); popErr != nil {
- return errors.Wrap(popErr, "Error popping for routeType")
- }
- if _routeTypeErr != nil {
- return errors.Wrap(_routeTypeErr, "Error serializing 'routeType' field")
- }
-
- // Array Field (additionalBridgeAddresses)
- if pushErr := writeBuffer.PushContext("additionalBridgeAddresses", utils.WithRenderAsList(true)); pushErr != nil {
- return errors.Wrap(pushErr, "Error pushing for additionalBridgeAddresses")
+ // Simple Field (networkRoute)
+ if pushErr := writeBuffer.PushContext("networkRoute"); pushErr != nil {
+ return errors.Wrap(pushErr, "Error pushing for networkRoute")
}
- for _, _element := range m.GetAdditionalBridgeAddresses() {
- _elementErr := writeBuffer.WriteSerializable(_element)
- if _elementErr != nil {
- return errors.Wrap(_elementErr, "Error serializing 'additionalBridgeAddresses' field")
- }
+ _networkRouteErr := writeBuffer.WriteSerializable(m.GetNetworkRoute())
+ if popErr := writeBuffer.PopContext("networkRoute"); popErr != nil {
+ return errors.Wrap(popErr, "Error popping for networkRoute")
}
- if popErr := writeBuffer.PopContext("additionalBridgeAddresses", utils.WithRenderAsList(true)); popErr != nil {
- return errors.Wrap(popErr, "Error popping for additionalBridgeAddresses")
+ if _networkRouteErr != nil {
+ return errors.Wrap(_networkRouteErr, "Error serializing 'networkRoute' field")
}
// Simple Field (unitAddress)
diff --git a/plc4go/protocols/cbus/readwrite/model/RouteType.go b/plc4go/protocols/cbus/readwrite/model/RouteType.go
deleted file mode 100644
index 0dab9da24..000000000
--- a/plc4go/protocols/cbus/readwrite/model/RouteType.go
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package model
-
-import (
- "github.com/apache/plc4x/plc4go/internal/spi/utils"
- "github.com/pkg/errors"
- "github.com/rs/zerolog/log"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// RouteType is an enum
-type RouteType uint8
-
-type IRouteType interface {
- AdditionalBridges() uint8
- Serialize(writeBuffer utils.WriteBuffer) error
-}
-
-const (
- RouteType_NoBridgeAtAll RouteType = 0x0
- RouteType_NoAdditionalBridge RouteType = 0x1
- RouteType_OneAdditionalBridge RouteType = 0x2
- RouteType_TwoAdditionalBridge RouteType = 0x3
- RouteType_ThreeAdditionalBridge RouteType = 0x4
- RouteType_FourAdditionalBridge RouteType = 0x5
- RouteType_FiveAdditionalBridge RouteType = 0x6
- RouteType_SixAdditionalBridge RouteType = 0x7
-)
-
-var RouteTypeValues []RouteType
-
-func init() {
- _ = errors.New
- RouteTypeValues = []RouteType{
- RouteType_NoBridgeAtAll,
- RouteType_NoAdditionalBridge,
- RouteType_OneAdditionalBridge,
- RouteType_TwoAdditionalBridge,
- RouteType_ThreeAdditionalBridge,
- RouteType_FourAdditionalBridge,
- RouteType_FiveAdditionalBridge,
- RouteType_SixAdditionalBridge,
- }
-}
-
-func (e RouteType) AdditionalBridges() uint8 {
- switch e {
- case 0x0:
- { /* '0x0' */
- return 0
- }
- case 0x1:
- { /* '0x1' */
- return 0
- }
- case 0x2:
- { /* '0x2' */
- return 1
- }
- case 0x3:
- { /* '0x3' */
- return 2
- }
- case 0x4:
- { /* '0x4' */
- return 3
- }
- case 0x5:
- { /* '0x5' */
- return 4
- }
- case 0x6:
- { /* '0x6' */
- return 5
- }
- case 0x7:
- { /* '0x7' */
- return 6
- }
- default:
- {
- return 0
- }
- }
-}
-
-func RouteTypeFirstEnumForFieldAdditionalBridges(value uint8) (RouteType, error) {
- for _, sizeValue := range RouteTypeValues {
- if sizeValue.AdditionalBridges() == value {
- return sizeValue, nil
- }
- }
- return 0, errors.Errorf("enum for %v describing AdditionalBridges not found", value)
-}
-func RouteTypeByValue(value uint8) (enum RouteType, ok bool) {
- switch value {
- case 0x0:
- return RouteType_NoBridgeAtAll, true
- case 0x1:
- return RouteType_NoAdditionalBridge, true
- case 0x2:
- return RouteType_OneAdditionalBridge, true
- case 0x3:
- return RouteType_TwoAdditionalBridge, true
- case 0x4:
- return RouteType_ThreeAdditionalBridge, true
- case 0x5:
- return RouteType_FourAdditionalBridge, true
- case 0x6:
- return RouteType_FiveAdditionalBridge, true
- case 0x7:
- return RouteType_SixAdditionalBridge, true
- }
- return 0, false
-}
-
-func RouteTypeByName(value string) (enum RouteType, ok bool) {
- switch value {
- case "NoBridgeAtAll":
- return RouteType_NoBridgeAtAll, true
- case "NoAdditionalBridge":
- return RouteType_NoAdditionalBridge, true
- case "OneAdditionalBridge":
- return RouteType_OneAdditionalBridge, true
- case "TwoAdditionalBridge":
- return RouteType_TwoAdditionalBridge, true
- case "ThreeAdditionalBridge":
- return RouteType_ThreeAdditionalBridge, true
- case "FourAdditionalBridge":
- return RouteType_FourAdditionalBridge, true
- case "FiveAdditionalBridge":
- return RouteType_FiveAdditionalBridge, true
- case "SixAdditionalBridge":
- return RouteType_SixAdditionalBridge, true
- }
- return 0, false
-}
-
-func RouteTypeKnows(value uint8) bool {
- for _, typeValue := range RouteTypeValues {
- if uint8(typeValue) == value {
- return true
- }
- }
- return false
-}
-
-func CastRouteType(structType interface{}) RouteType {
- castFunc := func(typ interface{}) RouteType {
- if sRouteType, ok := typ.(RouteType); ok {
- return sRouteType
- }
- return 0
- }
- return castFunc(structType)
-}
-
-func (m RouteType) GetLengthInBits() uint16 {
- return 3
-}
-
-func (m RouteType) GetLengthInBytes() uint16 {
- return m.GetLengthInBits() / 8
-}
-
-func RouteTypeParse(readBuffer utils.ReadBuffer) (RouteType, error) {
- val, err := readBuffer.ReadUint8("RouteType", 3)
- if err != nil {
- return 0, errors.Wrap(err, "error reading RouteType")
- }
- if enum, ok := RouteTypeByValue(val); !ok {
- log.Debug().Msgf("no value %x found for RequestType", val)
- return RouteType(val), nil
- } else {
- return enum, nil
- }
-}
-
-func (e RouteType) Serialize(writeBuffer utils.WriteBuffer) error {
- return writeBuffer.WriteUint8("RouteType", 3, uint8(e), utils.WithAdditionalStringRepresentation(e.PLC4XEnumName()))
-}
-
-// PLC4XEnumName returns the name that is used in code to identify this enum
-func (e RouteType) PLC4XEnumName() string {
- switch e {
- case RouteType_NoBridgeAtAll:
- return "NoBridgeAtAll"
- case RouteType_NoAdditionalBridge:
- return "NoAdditionalBridge"
- case RouteType_OneAdditionalBridge:
- return "OneAdditionalBridge"
- case RouteType_TwoAdditionalBridge:
- return "TwoAdditionalBridge"
- case RouteType_ThreeAdditionalBridge:
- return "ThreeAdditionalBridge"
- case RouteType_FourAdditionalBridge:
- return "FourAdditionalBridge"
- case RouteType_FiveAdditionalBridge:
- return "FiveAdditionalBridge"
- case RouteType_SixAdditionalBridge:
- return "SixAdditionalBridge"
- }
- return ""
-}
-
-func (e RouteType) String() string {
- return e.PLC4XEnumName()
-}
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 da627a0b1..2b27f891a 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
@@ -193,29 +193,8 @@
]
[type NetworkRoute
- [reserved uint 2 '0x00' ]
- [simple RouteType reverseRouteType ]
- [simple RouteType routeType ]
- [array BridgeAddress additionalBridgeAddresses count 'routeType.additionalBridges']
-]
-
-// The last 3 bits are the total number of bridges ... subtracting 1 results in the number of additional bridges.
-// It also seems as if these are generally 2 empty bits and then twice the number of bridges as 3-bit numbers.
-// The block of 3 in bit's 3..5 seem to be the reverse route.
-//
-// Observations on failing packets:
-// - In the first case the first two bits are not empty, but 01 ... the first block of bridges is then increased by one.
-// - In another packet the first two bits are 0, but the first group ist set to 111 and the number of bridges is set to 000.
-// - In another packet the first two bits are 0, the first group is set to 001 and the second to 101
-[enum uint 3 RouteType(uint 3 additionalBridges)
- ['0x0' NoBridgeAtAll ['0']]
- ['0x1' NoAdditionalBridge ['0']]
- ['0x2' OneAdditionalBridge ['1']]
- ['0x3' TwoAdditionalBridge ['2']]
- ['0x4' ThreeAdditionalBridge ['3']]
- ['0x5' FourAdditionalBridge ['4']]
- ['0x6' FiveAdditionalBridge ['5']]
- ['0x7' SixAdditionalBridge ['6']]
+ [simple NetworkProtocolControlInformation networkPCI ]
+ [array BridgeAddress additionalBridgeAddresses count 'networkPCI.stackDepth-1' ] // We substract 1 as when a route is used we always have one prefixed
]
[discriminatedType CBusPointToPointCommand(CBusOptions cBusOptions)
@@ -1519,11 +1498,8 @@
]
[type ReplyNetwork
- [reserved uint 2 '0x00' ]
- [simple RouteType reverseRouteType ]
- [simple RouteType routeType ]
- [array BridgeAddress additionalBridgeAddresses count 'routeType.additionalBridges']
- [simple UnitAddress unitAddress ]
+ [simple NetworkRoute networkRoute ]
+ [simple UnitAddress unitAddress ]
]
[type Checksum
@@ -1642,8 +1618,8 @@
[type NetworkProtocolControlInformation
[reserved uint 2 '0x0' ]
- [simple uint 3 stackCounter ]
- [simple uint 3 stackDepth ]
+ [simple uint 3 stackCounter ] // Number of bridges required to transmit information from source to destination
+ [simple uint 3 stackDepth ] // Number of bridges required to complete the transmission from source to destination
]
[type RequestTermination