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 ]