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/13 09:20:55 UTC

[plc4x] branch develop updated: feat(cbus): added support for deprecated binary state status request

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 b56ad323c feat(cbus): added support for deprecated binary state status request
b56ad323c is described below

commit b56ad323c40c38923f53b5ce273f48b49e4c2dea
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Jul 13 11:20:46 2022 +0200

    feat(cbus): added support for deprecated binary state status request
---
 .../cbus/readwrite/model/StatusRequest.go          |   2 +
 .../model/StatusRequestBinaryStateDeprecated.go    | 241 +++++++++++++++++++++
 .../java/cbus/readwrite/utils/StaticHelper.java    |   3 -
 .../apache/plc4x/java/cbus/RandomPackagesTest.java |  14 ++
 .../src/main/resources/protocols/cbus/c-bus.mspec  |   9 +-
 5 files changed, 264 insertions(+), 5 deletions(-)

diff --git a/plc4go/protocols/cbus/readwrite/model/StatusRequest.go b/plc4go/protocols/cbus/readwrite/model/StatusRequest.go
index 5400c6805..34e3f9c8c 100644
--- a/plc4go/protocols/cbus/readwrite/model/StatusRequest.go
+++ b/plc4go/protocols/cbus/readwrite/model/StatusRequest.go
@@ -141,6 +141,8 @@ func StatusRequestParse(readBuffer utils.ReadBuffer) (StatusRequest, error) {
 	switch {
 	case statusType == 0x7A: // StatusRequestBinaryState
 		_childTemp, typeSwitchError = StatusRequestBinaryStateParse(readBuffer)
+	case statusType == 0xFA: // StatusRequestBinaryStateDeprecated
+		_childTemp, typeSwitchError = StatusRequestBinaryStateDeprecatedParse(readBuffer)
 	case statusType == 0x73: // StatusRequestLevel
 		_childTemp, typeSwitchError = StatusRequestLevelParse(readBuffer)
 	default:
diff --git a/plc4go/protocols/cbus/readwrite/model/StatusRequestBinaryStateDeprecated.go b/plc4go/protocols/cbus/readwrite/model/StatusRequestBinaryStateDeprecated.go
new file mode 100644
index 000000000..9149f9e12
--- /dev/null
+++ b/plc4go/protocols/cbus/readwrite/model/StatusRequestBinaryStateDeprecated.go
@@ -0,0 +1,241 @@
+/*
+ * 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.
+
+// StatusRequestBinaryStateDeprecated is the corresponding interface of StatusRequestBinaryStateDeprecated
+type StatusRequestBinaryStateDeprecated interface {
+	utils.LengthAware
+	utils.Serializable
+	StatusRequest
+	// GetApplication returns Application (property field)
+	GetApplication() byte
+}
+
+// StatusRequestBinaryStateDeprecatedExactly can be used when we want exactly this type and not a type which fulfills StatusRequestBinaryStateDeprecated.
+// This is useful for switch cases.
+type StatusRequestBinaryStateDeprecatedExactly interface {
+	StatusRequestBinaryStateDeprecated
+	isStatusRequestBinaryStateDeprecated() bool
+}
+
+// _StatusRequestBinaryStateDeprecated is the data-structure of this message
+type _StatusRequestBinaryStateDeprecated struct {
+	*_StatusRequest
+	Application byte
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for discriminator values.
+///////////////////////
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+func (m *_StatusRequestBinaryStateDeprecated) InitializeParent(parent StatusRequest, statusType byte) {
+	m.StatusType = statusType
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) GetParent() StatusRequest {
+	return m._StatusRequest
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *_StatusRequestBinaryStateDeprecated) GetApplication() byte {
+	return m.Application
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewStatusRequestBinaryStateDeprecated factory function for _StatusRequestBinaryStateDeprecated
+func NewStatusRequestBinaryStateDeprecated(application byte, statusType byte) *_StatusRequestBinaryStateDeprecated {
+	_result := &_StatusRequestBinaryStateDeprecated{
+		Application:    application,
+		_StatusRequest: NewStatusRequest(statusType),
+	}
+	_result._StatusRequest._StatusRequestChildRequirements = _result
+	return _result
+}
+
+// Deprecated: use the interface for direct cast
+func CastStatusRequestBinaryStateDeprecated(structType interface{}) StatusRequestBinaryStateDeprecated {
+	if casted, ok := structType.(StatusRequestBinaryStateDeprecated); ok {
+		return casted
+	}
+	if casted, ok := structType.(*StatusRequestBinaryStateDeprecated); ok {
+		return *casted
+	}
+	return nil
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) GetTypeName() string {
+	return "StatusRequestBinaryStateDeprecated"
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.GetParentLengthInBits())
+
+	// Reserved Field (reserved)
+	lengthInBits += 8
+
+	// Simple field (application)
+	lengthInBits += 8
+
+	// Reserved Field (reserved)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func StatusRequestBinaryStateDeprecatedParse(readBuffer utils.ReadBuffer) (StatusRequestBinaryStateDeprecated, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("StatusRequestBinaryStateDeprecated"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for StatusRequestBinaryStateDeprecated")
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadByte("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of StatusRequestBinaryStateDeprecated")
+		}
+		if reserved != byte(0xFA) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": byte(0xFA),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+		}
+	}
+
+	// Simple Field (application)
+	_application, _applicationErr := readBuffer.ReadByte("application")
+	if _applicationErr != nil {
+		return nil, errors.Wrap(_applicationErr, "Error parsing 'application' field of StatusRequestBinaryStateDeprecated")
+	}
+	application := _application
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		reserved, _err := readBuffer.ReadByte("reserved")
+		if _err != nil {
+			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of StatusRequestBinaryStateDeprecated")
+		}
+		if reserved != byte(0x00) {
+			log.Info().Fields(map[string]interface{}{
+				"expected value": byte(0x00),
+				"got value":      reserved,
+			}).Msg("Got unexpected response for reserved field.")
+		}
+	}
+
+	if closeErr := readBuffer.CloseContext("StatusRequestBinaryStateDeprecated"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for StatusRequestBinaryStateDeprecated")
+	}
+
+	// Create a partially initialized instance
+	_child := &_StatusRequestBinaryStateDeprecated{
+		Application:    application,
+		_StatusRequest: &_StatusRequest{},
+	}
+	_child._StatusRequest._StatusRequestChildRequirements = _child
+	return _child, nil
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("StatusRequestBinaryStateDeprecated"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for StatusRequestBinaryStateDeprecated")
+		}
+
+		// Reserved Field (reserved)
+		{
+			_err := writeBuffer.WriteByte("reserved", byte(0xFA))
+			if _err != nil {
+				return errors.Wrap(_err, "Error serializing 'reserved' field")
+			}
+		}
+
+		// Simple Field (application)
+		application := byte(m.GetApplication())
+		_applicationErr := writeBuffer.WriteByte("application", (application))
+		if _applicationErr != nil {
+			return errors.Wrap(_applicationErr, "Error serializing 'application' field")
+		}
+
+		// Reserved Field (reserved)
+		{
+			_err := writeBuffer.WriteByte("reserved", byte(0x00))
+			if _err != nil {
+				return errors.Wrap(_err, "Error serializing 'reserved' field")
+			}
+		}
+
+		if popErr := writeBuffer.PopContext("StatusRequestBinaryStateDeprecated"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for StatusRequestBinaryStateDeprecated")
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) isStatusRequestBinaryStateDeprecated() bool {
+	return true
+}
+
+func (m *_StatusRequestBinaryStateDeprecated) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java b/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java
index 582586bca..973db0a40 100644
--- a/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java
+++ b/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java
@@ -133,7 +133,4 @@ public class StaticHelper {
         }
     }
 
-    public static boolean moreThanOneByteLeft(ReadBuffer readBuffer) {
-        return readBuffer.hasMore(16);
-    }
 }
diff --git a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
index fbd232b4d..259bba7ad 100644
--- a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
@@ -773,5 +773,19 @@ public class RandomPackagesTest {
             byte[] bytes1 = writeBuffer.getBytes();
             assertThat(bytes1).isEqualTo(bytes);
         }
+
+        @Test
+        void statusRequestBinaryState() throws Exception {
+            byte[] bytes = "\\05FF00FAFF00v\r".getBytes(StandardCharsets.UTF_8);
+            ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+            cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+            CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions, bytes.length);
+            assertThat(msg).isNotNull();
+            System.out.println(msg);
+            CBusMessageToServer messageToServer = (CBusMessageToServer) msg;
+            RequestCommand requestCommand = (RequestCommand) messageToServer.getRequest();
+            CBusCommand cbusCommand = requestCommand.getCbusCommand();
+            System.out.println(cbusCommand);
+        }
     }
 }
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 a51851d4f..f80d959b7 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
@@ -1228,12 +1228,17 @@
 [type StatusRequest
     [peek    byte     statusType           ]
     [typeSwitch statusType
-        ['0x7A' StatusRequestBinaryState
+        ['0x7A' *BinaryState
             [reserved   byte      '0x7A'                                              ]
             [simple     byte      application                                         ]
             [reserved   byte      '0x00'                                              ]
         ]
-        ['0x73' StatusRequestLevel
+        ['0xFA' *BinaryStateDeprecated
+            [reserved   byte      '0xFA'                                              ]
+            [simple     byte      application                                         ]
+            [reserved   byte      '0x00'                                              ]
+        ]
+        ['0x73' *Level
             [reserved   byte      '0x73'                                              ]
             [reserved   byte      '0x07'                                              ]
             [simple     byte      application                                         ]