You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2022/08/10 11:11:05 UTC
[plc4x] 05/06: chore(ads): Added back the previously deleted tests
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch splatch/ads-symbol-discovery
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 0133e10183bf2bac98b2766d13b2a3dca7d50b71
Author: christoferdutz <ch...@c-ware.de>
AuthorDate: Wed Aug 10 08:51:22 2022 +0200
chore(ads): Added back the previously deleted tests
---
.../apache/plc4x/java/cbus/RandomPackagesTest.java | 403 ++++
.../org/apache/plc4x/java/cbus/ReferenceTest.java | 2052 ++++++++++++++++++++
2 files changed, 2455 insertions(+)
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
new file mode 100644
index 000000000..ab42558ad
--- /dev/null
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
@@ -0,0 +1,403 @@
+/*
+ * 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 org.apache.plc4x.java.cbus;
+
+import org.apache.plc4x.java.cbus.readwrite.*;
+import org.apache.plc4x.java.spi.generation.ReadBufferByteBased;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import java.nio.charset.StandardCharsets;
+
+import static org.apache.plc4x.java.cbus.Util.assertMessageMatches;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class RandomPackagesTest {
+
+ public static final CBusOptions C_BUS_OPTIONS_WITH_SRCHK = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ RequestContext requestContext;
+ CBusOptions cBusOptions;
+
+ @BeforeEach
+ void setUp() {
+ requestContext = new RequestContext(false);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, false);
+ }
+
+ @Disabled
+ @Test
+ void whatEverThisIs() throws Exception {
+ byte[] bytes = "\\3436303230303231303167\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void deviceManagementInstruction() throws Exception {
+ byte[] bytes = "@1A2001\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void setLight() throws Exception {
+ byte[] bytes = "\\0538000100g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void identifyResponse() throws Exception {
+ byte[] bytes = "g.890150435F434E49454421\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ // We know we send an identify command so we set the cal flag
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void someResponse() throws Exception {
+ byte[] bytes = "nl.8220025C\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void someOtherResponse() throws Exception {
+ byte[] bytes = "\\0538000100g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+
+ @Test
+ void identifyRequest2() throws Exception {
+ byte[] bytes = "21021A2102i\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void identifyResponse2() throws Exception {
+ byte[] bytes = "i.8902352E342E3030202010\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ // We know we send an identify command so we set the cal flag
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void recall() throws Exception {
+ byte[] bytes = "@1A2001\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void identifyTypeReply() throws Exception {
+ byte[] bytes = "h.890150435F434E49454421\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void write30to9755() throws Exception {
+ byte[] bytes = "A3309755s\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void strangeNotYetParsableCommandResponse() throws Exception {
+ byte[] bytes = "s.860202003230977D\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @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, false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled
+ @Test
+ void wat() throws Exception {
+ byte[] bytes = "D8FF0024000002000000000000000008000000000000000000\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void WriteCommand() throws Exception {
+ byte[] bytes = "\\46310900A400410600r\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void statusReply() throws Exception {
+ byte[] bytes = "D8FF5800000000000000000000000000000000000000000000D1\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void identifyUnitSummary() throws Exception {
+ byte[] bytes = "2110\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void identifyUnitSummaryResponse() throws Exception {
+ byte[] bytes = "o.8510020000FF6A\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void hvacAndCoolingSAL() throws Exception {
+ byte[] bytes = "0531AC0079042F0401430316000011\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled("apparently something is broken, the second cal data can't be parsed")
+ @Test
+ void calIdentifyReplyAndAnotherCal() throws Exception {
+ byte[] bytes = "h.860102008902312E362E30302020832138FFAE\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void routedAcknowledge() throws Exception {
+ byte[] bytes = "r.8631020100320041D3\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void gavValuesCurrentReply() throws Exception {
+ byte[] bytes = "w.860C02008A08000000C8000000000012\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void SetHvacLevel() throws Exception {
+ byte[] bytes = "0531AC0036040108FF0000DC\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void salHvac() throws Exception {
+ byte[] bytes = "0531AC0036040142037F001F\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled("Not clear yet what this is")
+ @Test
+ void closestFitIsAStatusRequestButWeDonTHaveAnyBytesBeforeThat() throws Exception {
+ byte[] bytes = "FAFF00r\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void ownSal() throws Exception {
+ byte[] bytes = "003809AF10\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void powerUpNotification() throws Exception {
+ byte[] bytes = "++\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void incmoingMMI() throws Exception {
+ byte[] bytes = ("86040200F940380001000000000000000008000000000000000000000000FA\r\n").getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void justAnError() throws Exception {
+ byte[] bytes = ("!").getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+}
diff --git a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
new file mode 100644
index 000000000..3e626678b
--- /dev/null
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
@@ -0,0 +1,2052 @@
+/*
+ * 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 org.apache.plc4x.java.cbus;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.plc4x.java.cbus.readwrite.*;
+import org.apache.plc4x.java.spi.generation.ReadBufferByteBased;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.nio.charset.StandardCharsets;
+
+import static org.apache.plc4x.java.cbus.Util.assertMessageMatches;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ReferenceTest {
+
+ public static final CBusOptions C_BUS_OPTIONS_WITH_SRCHK = new CBusOptions(false, false, false, false, false, false, false, false, true);
+
+ RequestContext requestContext;
+ CBusOptions cBusOptions;
+
+ @BeforeEach
+ void setUp() {
+ requestContext = new RequestContext(false);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, false);
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/C-Bus%20Interface%20Requirements.pdf
+ @Nested
+ class InterfaceRequirementsTest {
+
+ // 8.2
+ @Nested
+ class Level1InterfaceImplementationRequirements {
+
+ // 8.2.4
+ @Nested
+ class SerialInterfaceInitialisation {
+
+ @Test
+ void Step_1_Reset() throws Exception {
+ byte[] bytes = "~~~\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_2_SetInterfaceOptions3() throws Exception {
+ byte[] bytes = "@A3420002\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_3_SetInterfaceOptions1_PUN() throws Exception {
+ byte[] bytes = "@A3410058\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_4_SetInterfaceOptions1() throws Exception {
+ byte[] bytes = "@A3300058\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 8.2.5
+ @Nested
+ class ConfirmationOfTransmission {
+ @Test
+ void SomeCommand() throws Exception {
+ byte[] bytes = "\\0538000121A1g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void success() throws Exception {
+ byte[] bytes = "g.".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void checksumFailure() throws Exception {
+ byte[] bytes = "g!".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void tooManyRetransmissions() throws Exception {
+ byte[] bytes = "g#".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void corruptionInTransmission() throws Exception {
+ byte[] bytes = "g$".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void noSystemClock() throws Exception {
+ byte[] bytes = "g%".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // 8.3
+ @Nested
+ class Level2InterfaceImplementationRequirements {
+
+ // 8.3.4
+ @Nested
+ class SerialInterfaceInitialisation {
+ @Test
+ void Step_1_Reset() throws Exception {
+ byte[] bytes = "~~~\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_2_AnyApplicationFilter() throws Exception {
+ byte[] bytes = "@A3210038\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_3_SetInterfaceOptions3() throws Exception {
+ byte[] bytes = "@A3420002\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_4_SetInterfaceOptions1_PUN() throws Exception {
+ byte[] bytes = "@A3410059\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_5_SetInterfaceOptions1() throws Exception {
+ byte[] bytes = "@A3300059\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 8.3.5
+ @Nested
+ class ProgrammingTheSerialInterfaceToFilterSALMessageTraffic {
+
+ @Test
+ void Step_1_SelectOnlyLighting() throws Exception {
+ byte[] bytes = "@A3210038\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_2_SelectHeatingAsSecondApplication() throws Exception {
+ byte[] bytes = "@A3220088\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // 8.4
+ @Nested
+ class Level3InterfaceImplementationRequirements {
+ // No specific tests
+ }
+
+ // 8.5
+ @Nested
+ class Level4InterfaceImplementationRequirements {
+
+ // 8.5.4
+ @Nested
+ class SerialInterfaceInitialisation {
+ @Test
+ void Step_1_Reset() throws Exception {
+ byte[] bytes = "~~~\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_2_AnyApplicationFilter() throws Exception {
+ byte[] bytes = "@A3210038\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_3_SetInterfaceOptions3() throws Exception {
+ byte[] bytes = "@A342000A\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_4_SetInterfaceOptions1_PUN() throws Exception {
+ byte[] bytes = "@A3410079\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Step_5_SetInterfaceOptions1() throws Exception {
+ byte[] bytes = "@A3300079\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // 8.6
+ @Nested
+ class Level5InterfaceImplementationRequirements {
+ // No specific tests
+ }
+
+ // 8.7
+ @Nested
+ class Level6InterfaceImplementationRequirements {
+ // No specific tests
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Serial%20Interface%20User%20Guide.pdf
+ @Nested
+ class SerialInterfaceGuideTest {
+
+ // 3.4
+ @Nested
+ class Header {
+ @Test
+ void Point_point_multipoint_lowest_priority_class() throws Exception {
+ byte[] bytes = new byte[]{0x03};
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusHeader msg = CBusHeader.staticParse(readBufferByteBased);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ @Test
+ void Point_multipoint_lowest_priority_class() throws Exception {
+ byte[] bytes = new byte[]{0x05};
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusHeader msg = CBusHeader.staticParse(readBufferByteBased);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ @Test
+ void Point_point_lowest_priority_class() throws Exception {
+ byte[] bytes = new byte[]{0x06};
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusHeader msg = CBusHeader.staticParse(readBufferByteBased);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ }
+
+ // 4
+ @Nested
+ class SerialInterface {
+
+ // 4.2.3
+ @Test
+ void reset() throws Exception {
+ byte[] bytes = "~\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ @Disabled("not implemented yet")
+ // 4.2.4
+ @Test
+ void cancel() throws Exception {
+ byte[] bytes = "AB0123?9876\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ // 4.2.5
+ @Test
+ void smartConnectShortcut() throws Exception {
+ byte[] bytes = "\r|\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ @Disabled("not implemented yet")
+ // 4.2.4
+ @Test
+ void confirmation() throws Exception {
+ // If you follow the spec a confirmation can occur at any place... seems strange
+ byte[] bytes = "AB0123n9876\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+
+ System.out.println(msg);
+ }
+
+ // 4.2.7
+ @Test
+ void directCommandAccess1() throws Exception {
+ byte[] bytes = "@2102\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 4.2.7
+ @Test
+ void directCommandAccess2() throws Exception {
+ // TODO: this should be the same as the @above but that is not yet implemented
+ byte[] bytes = "~2102\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+
+
+ // 4.2.9.1
+ @Nested
+ class PointToPointCommands {
+ @Test
+ void pointToPointCommandDirect() throws Exception {
+ byte[] bytes = "\\0603002102D4\r".getBytes(StandardCharsets.UTF_8);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void pointToPointCommandBridged() throws Exception {
+ byte[] bytes = "\\06420903210289\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+
+ // 4.2.9.2
+ @Nested
+ class PointToMultiPointCommands {
+ @Test
+ void pointToMultiPointCommandDirect() throws Exception {
+ byte[] bytes = "\\0538000108BA\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void pointToMultiPointCommandBridged() throws Exception {
+ byte[] bytes = "\\05FF007A38004A\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 4.2.9.3
+ @Nested
+ class PointToPointToMultoPointCommands {
+ @Test
+ void pointToPointToMultiPointCommand2() throws Exception {
+ byte[] bytes = "\\03420938010871\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 4.3.3.1
+ @Nested
+ class _CALReply {
+ @Test
+ void calRequest() throws Exception {
+ byte[] bytes = "\\0605002102\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void calReplyNormal() throws Exception {
+ byte[] bytes = "8902312E322E363620200A\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void calReplySmart() throws Exception {
+ // TODO: seems like the checksum is wrong here???
+ //byte[] bytes = "860593008902312E322E363620207F\r\n".getBytes(StandardCharsets.UTF_8);
+ byte[] bytes = "860593008902312E322E36362020EC\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 4.3.3.2
+ @Nested
+ class _MonitoredSAL {
+ @Test
+ void monitoredSal() throws Exception {
+ byte[] bytes = "0503380079083F\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ ReplyOrConfirmation msg = ReplyOrConfirmation.staticParse(readBufferByteBased, cBusOptions, requestContext);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 4.3.3.3
+ @Nested
+ class Confirmation {
+ @Test
+ void successful() throws Exception {
+ byte[] bytes = "g.".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ ReplyOrConfirmation msg = ReplyOrConfirmation.staticParse(readBufferByteBased, cBusOptions, requestContext);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void toManyRetransmissions() throws Exception {
+ byte[] bytes = "g#".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ ReplyOrConfirmation msg = ReplyOrConfirmation.staticParse(readBufferByteBased, cBusOptions, requestContext);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void corruption() throws Exception {
+ byte[] bytes = "g$".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ ReplyOrConfirmation msg = ReplyOrConfirmation.staticParse(readBufferByteBased, cBusOptions, requestContext);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void desync() throws Exception {
+ byte[] bytes = "g%".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ ReplyOrConfirmation msg = ReplyOrConfirmation.staticParse(readBufferByteBased, cBusOptions, requestContext);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void tooLong() throws Exception {
+ byte[] bytes = "g'".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ ReplyOrConfirmation msg = ReplyOrConfirmation.staticParse(readBufferByteBased, cBusOptions, requestContext);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 7.3
+ @Test
+ void StandardFormatStatusReply1() throws Exception {
+ byte[] bytes = "D8380068AA0140550550001000000014000000000000000000CF\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void StandardFormatStatusReply2() throws Exception {
+ byte[] bytes = "D838580000000000000000000000000000000000000000000098\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void StandardFormatStatusReply3() throws Exception {
+ byte[] bytes = "D638B000000000FF00000000000000000000000000000043\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 7.4
+ @Test
+ void ExtendedFormatStatusReply1() throws Exception {
+ byte[] bytes = "F9073800AAAA000095990000000055550000000000005555555548\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void ExtendedFormatStatusReply2() throws Exception {
+ byte[] bytes = "F907380B0000000000005555000000000000000000000000000013\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void ExtendedFormatStatusReply3() throws Exception {
+ byte[] bytes = "F70738160000000000000000000000000000000000000000B4\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 9.1
+ @Nested
+ class PointToMultiPointCommandsIntoLocalCBusNetwork {
+ @Test
+ void LightningOff() throws Exception {
+ byte[] bytes = "\\0538000114AE\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LightningStatus() throws Exception {
+ byte[] bytes = "\\05FF007A38004A\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LightningStatusReply1() throws Exception {
+ byte[] bytes = "D83800A8AA02000000000000000000000000000000000000009C\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(true);
+ cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LightningStatusReply2() throws Exception {
+ byte[] bytes = "D838580000000000000000000000000000000000000000000098\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LightningStatusReply3() throws Exception {
+ byte[] bytes = "D638B0000000000000000000000000000000000000000042\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LightningStatusReply4() throws Exception {
+ // TODO: the command header seems wrong as it is missing a byte
+ //byte[] bytes = "86999900F8003800A8AA0200000000000000000000000000000000000000C4\r\n".getBytes(StandardCharsets.UTF_8);
+ byte[] bytes = "86999900F9003800A8AA0200000000000000000000000000000000000000C3\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+
+ @Test
+ void LightningStatusReply5() throws Exception {
+ // TODO: the command header seems wrong as it is missing a byte
+ // byte[] bytes = "86999900F800385800000000000000000000000000000000000000000000C0\r\n".getBytes(StandardCharsets.UTF_8);
+ byte[] bytes = "86999900F900385800000000000000000000000000000000000000000000BF\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LightningStatusReply6() throws Exception {
+ // TODO: wrong checksum in this example???
+ // TODO: the command header seems wrong as it is missing a byte
+ //byte[] bytes = "86999900F60038B000000000000000000000000000000000000000008F\r\n".getBytes(StandardCharsets.UTF_8);
+ byte[] bytes = "86999900F70038B0000000000000000000000000000000000000000069\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 9.2
+ @Nested
+ class PointToPointCommandsIntoLocalCBusNetwork {
+ @Test
+ void RecallCurrentValueOfParameter0x30onUnit0x04() throws Exception {
+ // TODO: the section describes that on non smart mode the message doesn't have the last CR
+ byte[] bytes = "\\0604001A3001AB\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // TODO: due the usage of reserved we lose bits here so we need to fix that
+ @Disabled("TODO: due the usage of reserved we lose bits here so we need to fix that")
+ @Test
+ void Reply() throws Exception {
+ byte[] bytes = "8604990082300328\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+
+ // 9.3
+ @Nested
+ class PointToMultiPointCommandsIntoaRemoteCBusNetwork {
+ @Test
+ void IssueLightningOf() throws Exception {
+ // TODO: the section describes that on non smart mode the message doesn't have the last CR
+ byte[] bytes = "\\03421B53643801149C\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled("the transformation from point to point to multipoint message is not yet implemented as described in 8.4... not sure if we will ever implement that")
+ @Test
+ void Reply() throws Exception {
+ byte[] bytes = Hex.decodeHex("0565380354432101148E");
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusCommand msg = CBusCommand.staticParse(readBufferByteBased, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+
+ // 9.4
+ @Test
+ void SwitchMode() throws Exception {
+ byte[] bytes = "~@A3300019\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 9.5
+ @Test
+ void MultipleCommands() throws Exception {
+ byte[] bytes = "\\05380001210122012301240A25010A2601D4\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 10.2.1
+ @Test
+ void testParameterSet() throws Exception {
+ byte[] bytes = "@A3470011\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 10.2.1
+ @Test
+ void testParameterSetObsolete() throws Exception {
+ byte[] bytes = "A3470011\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/C-Bus%20Quick%20Start%20Guide.pdf
+ @Nested
+ class CBusQuickStartGuideTest {
+
+ // 4.3
+ @Test
+ void checksums() throws Exception {
+ byte[] bytes = "\\0538007988C2g\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ //5.2
+ @Nested
+ class PCI_Setup {
+
+ // 5.2.1
+ @Nested
+ class MMIMessagesNotRequired {
+
+ @Test
+ void init() throws Exception {
+ byte[] bytes = "~~~\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void writeSomething() throws Exception {
+ byte[] bytes = "A3210038g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void writeSomethingResponse() throws Exception {
+ byte[] bytes = "g.322100AD\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ requestContext = new RequestContext(false);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void writeSomething2() throws Exception {
+ byte[] bytes = "A3420002g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void writeSomethingResponse2() throws Exception {
+ byte[] bytes = "g.3242008C\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ requestContext = new RequestContext(false);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void writeSomething3() throws Exception {
+ byte[] bytes = "A3300059g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void writeSomethingResponse3() throws Exception {
+ byte[] bytes = "g.8600000032300018\r\n".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 5.2.2
+ @Test
+ void MMIMessagesRequired() throws Exception {
+ byte[] bytes = "A3300079g\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 6
+ @Nested
+ class TransmittingCBusLightingControlCommands {
+ // 6.1
+ @Test
+ void TransmitAnONCommand() throws Exception {
+ byte[] bytes = "\\053800790842u\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 6.2
+ @Test
+ void TransmitAnOFFCommand() throws Exception {
+ byte[] bytes = "\\0538000108BAu\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 6.3
+ @Test
+ void TransmitAnRampToLevelCommand() throws Exception {
+ byte[] bytes = "\\0538005A08550Cu\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 7
+ @Nested
+ class ReceivingCBusLightingControlCommands {
+ // 7.1
+ @Test
+ void ReceiveAnONCommand() throws Exception {
+ byte[] bytes = "05003800790842\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 7.1
+ @Test
+ void ReceiveAnONCommandAlternative() throws Exception {
+ byte[] bytes = "0500380100790841\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 7.2
+ @Test
+ void ReceiveAnOFFCommand() throws Exception {
+ byte[] bytes = "050038000108BA\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 7.2
+ @Test
+ void ReceiveAnOFFCommandAlternative() throws Exception {
+ byte[] bytes = "05003801000108B9\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 7.3
+ @Test
+ void ReceiveAnRampToLevelCommand() throws Exception {
+ byte[] bytes = "050038005A08550C\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 7.3
+ @Test
+ void ReceiveAnRampToLevelCommandAlternative() throws Exception {
+ byte[] bytes = "05003801005A08550B\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled("Needs to be implemented")
+ // 7.4
+ @Nested
+ class ReceivingOtherCommands {
+ @Test
+ void Case1() throws Exception {
+ // Test with nn not 00 or 01... they should be discarded
+ byte[] bytes = "05ss38nn....zz\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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Case2() throws Exception {
+ // Test with nn not 00 or 01... they should be discarded
+ byte[] bytes = "05ss3800cc....zz\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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Case2Alternative() throws Exception {
+ // Test with nn not 00 or 01... they should be discarded
+ byte[] bytes = "05ss380100cc....zz\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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ }
+
+ // 8
+ @Nested
+ class InterpretingTheMmi {
+ @Test
+ void BigMMI1() throws Exception {
+ byte[] bytes = "D8380068AA0140550550001000000014000000000000000000CF\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void BigMMI2() throws Exception {
+ byte[] bytes = "D838580000000000000000000000000000000000000000000098\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void BigMMI3() throws Exception {
+ byte[] bytes = "D638B000000000FF00000000000000000000000000000043\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ // 9
+ @Nested
+ class Example {
+ @Nested
+ class ControlExamples {
+ @Test
+ void turnOnLight() throws Exception {
+ byte[] bytes = "\\053800792129g\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void turnOffLight() throws Exception {
+ byte[] bytes = "\\0538000121A1g\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void rampLight() throws Exception {
+ byte[] bytes = "\\0538000A217F19g\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ @Nested
+ class MontiorExamples {
+ @Test
+ void onCommand() throws Exception {
+ byte[] bytes = "050B380079201F\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void offCommand() throws Exception {
+ byte[] bytes = "050B3800012097\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Ramp() throws Exception {
+ byte[] bytes = "050B38000220484E\r\n".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, true, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2002%20-%20C-Bus%20Lighting%20Application.pdf
+ @Nested
+ class LightningApplicationsTest {
+
+ // 2.9.6.4.4 Command Sequence
+ @Nested
+ class CommandSquence {
+
+ @Test
+ void StartDynamicIcon() throws Exception {
+ byte[] bytes = "\\053800A412080020\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void IconBitmap() throws Exception {
+ byte[] bytes = "\\053800A412080021\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void CompleteDynamicIcon() throws Exception {
+ byte[] bytes = "\\053800A412080022\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Nested
+ class ChineseTable {
+
+ @Test
+ void StartDynamicIcon() throws Exception {
+ byte[] bytes = "\\053800A401080020\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void IconHeader() throws Exception {
+ byte[] bytes = "\\053800A80104CA00130C0600\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void AppendDynamicIcon() throws Exception {
+ byte[] bytes = "\\053800A401080021\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void WriteIconBitmapData1() throws Exception {
+ byte[] bytes = "\\053800A80104AAF05500FF50\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void WriteIconBitmapData2() throws Exception {
+ byte[] bytes = "\\053800A801040000F0F00F00\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void useDynamicIcon() throws Exception {
+ byte[] bytes = "\\053800A401080022\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void displayIcon() throws Exception {
+ byte[] bytes = "\\053800A60102CA010013\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+ }
+
+ // 2.11 Examples
+ @Nested
+ class Examples {
+ @Test
+ void switchElectricalLoads() throws Exception {
+ byte[] bytes = "\\0538007993B7\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void switchElectricalLoadsBridged() throws Exception {
+ byte[] bytes = "\\0356093879935A\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2005%20-%20C-Bus%20Security%20Application.pdf
+ @Nested
+ class SecurityApplicationsTest {
+
+ //5.11.1
+ @Nested
+ class SecuritySystemEmitsAlarmOn {
+ @Test
+ void AlarmOnWrongPrio() throws Exception {
+ byte[] bytes = "\\05D00079832F\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void AlarmOn() throws Exception {
+ byte[] bytes = "\\85D0007983AF\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+
+ //5.11.2
+ @Test
+ void Zone3Unsealed() throws Exception {
+ byte[] bytes = "\\05D0000A860398\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ //5.11.3
+ @Test
+ void ZoneName() throws Exception {
+ byte[] bytes = "\\05D000AD8D034B49544348452E2020202088\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 5.11.4
+ @Nested
+ class DeviceRequestsSecuritySystemtoArm {
+
+ @Test
+ void ArmSecurity() throws Exception {
+ byte[] bytes = "\\05D0000AA2FF80\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void ArmSecurityRemote() throws Exception {
+ byte[] bytes = "\\039209D00AA2FFE7\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2006%20-%20C-Bus%20Metering%20Application.pdf
+ @Nested
+ class MeteringApplicationsTest {
+
+ //6.11.1
+ @Nested
+ class DeviceRequestsMeteringApplicationtoMeasureElectricity {
+ @Test
+ void LocalMeasurement() throws Exception {
+ byte[] bytes = "\\05D100090120\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void RemoteMeasurement() throws Exception {
+ byte[] bytes = "\\035609D10901C3\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+
+ //6.11.2
+ @Nested
+ class MeterMeasurementDevicesendsElectricityUse {
+ @Test
+ void LocalMeasurement() throws Exception {
+ byte[] bytes = "\\05D1000D810000DBF8C9\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void RemoteMeasurement() throws Exception {
+ byte[] bytes = "\\033709D10D810000DBF88B\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2007%20-%20C-Bus%20Trigger%20Control%20Application.pdf
+ @Nested
+ class TriggerControlApplicationsTest {
+
+ //7.12
+ @Nested
+ class Examples {
+ @Test
+ void LocalTrigger() throws Exception {
+ byte[] bytes = "\\05CA0002250109\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void RemoteTrigger() throws Exception {
+ byte[] bytes = "\\035609CA022501AC\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2008%20-%20C-Bus%20Enable%20Control%20Application.pdf
+ @Nested
+ class EnableControlApplicationsTest {
+
+ //8.11
+ @Nested
+ class Examples {
+ @Test
+ void LocalTrigger() throws Exception {
+ byte[] bytes = "\\05CB0002378275\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void RemoteTrigger() throws Exception {
+ // TODO: seems like the checksum is wrong here again...
+ //byte[] bytes = "\\035609CB02378216\r".getBytes(StandardCharsets.UTF_8);
+ byte[] bytes = "\\035609CB02378218\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2009%20-%20C-Bus%20Temperature%20Broadcast%20Application.pdf
+ @Nested
+ class TemperatureBroadcastApplicationsTest {
+
+ //9.11
+ @Nested
+ class Examples {
+
+ @Test
+ void temperatureBroadcast() throws Exception {
+ byte[] bytes = "\\051900020564\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2010%20-%20C-Bus%20Ventilation%20Application.pdf
+ @Nested
+ class VentilationApplicationTest {
+ // TODO: no tests described here but it should work by adjusting the values from Lightning...
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2009%20-%20C-Bus%20Temperature%20Control%20Application.pdf
+ @Nested
+ class AccessControlApplicationsTest {
+
+ //9.11
+ @Nested
+ class Examples {
+
+ @Test
+ void validAccessRequest() throws Exception {
+ byte[] bytes = "\\05D500A4010300017D\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void closeAccessPoint() throws Exception {
+ byte[] bytes = "\\05D5000201FF24\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void lockAccessPoint() throws Exception {
+ byte[] bytes = "\\05D5000AFFFF1E\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void lockAccessPointRemote() throws Exception {
+ byte[] bytes = "\\039209D50AFFFF85\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2021%20-%20C-Bus%20Media%20Transport%20Control%20Application.pdf
+ @Nested
+ class MediaTransportControlApplicationsTest {
+ // TODO: no tests described here
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2023%20-%20C-Bus%20Clock%20and%20Timekeeping%20Application.pdf
+ @Nested
+ class ClockAndTimekeeping {
+
+ //23.13
+ @Nested
+ class Examples {
+
+ @Test
+ void outputATimeCommand() throws Exception {
+ byte[] bytes = "\\05DF000D010A2B1700C2\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void outputADateCommand() throws Exception {
+ byte[] bytes = "\\05DF000E0207D502190411\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled("This example just seems plain wrong... First of all there is no command for 0x10 defined and the argument which should be it 0x11 requires a argument of 0x03... So either documenation wrong or the example")
+ @Test
+ void outputARequestRefreshCommand() throws Exception {
+ byte[] bytes = "\\05DF00100C\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void outputARequestRefreshCommandFixedQuestionMark() throws Exception {
+ byte[] bytes = "\\05DF001103\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2024%20-%20C-Bus%20Telephony%20Application.pdf
+ @Nested
+ class Telephony {
+
+ //24.11
+ @Nested
+ class Examples {
+
+ @Test
+ void LineOnHook() throws Exception {
+ byte[] bytes = "\\05E000090111\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Disabled("Again it seems as this command is just wrong... there is no command definition for 2C")
+ @Test
+ void LineOffHook() throws Exception {
+ byte[] bytes = "\\05E0002C020230333935323734333231FD\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void LineOffHookFixedQuestionMark() throws Exception {
+ byte[] bytes = "\\05E000AC02013033393532373433323168\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);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ }
+ }
+
+ // from: https://updates.clipsal.com/ClipsalSoftwareDownload/DL/downloads/OpenCBus/Chapter%2034%20-%20C-Bus%20Error%20Reporting%20Application.pdf
+ @Nested
+ class ErrorReporting {
+
+ //34.13
+ @Nested
+ class Examples {
+
+ // 34.13.1
+ @Test
+ void AllOk() throws Exception {
+ byte[] bytes = "\\05CE0015FF20DE0000\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ // 34.13.2
+ @Test
+ void MinorFailure() throws Exception {
+ byte[] bytes = "\\05CE0015882A6721B4\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+
+ // 34.13.3
+ @Nested
+ class GeneralFailureWhichGetsAcknowledged {
+ @Test
+ void Reporting() throws Exception {
+ byte[] bytes = "\\05CE00159023426633\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void Acknowledge() throws Exception {
+ byte[] bytes = "\\05CE00259033426633\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+
+ @Nested
+ class LatchedExtremeFailureWhichGetsCleared {
+ @Test
+ void mostRecent() throws Exception {
+ byte[] bytes = "\\05CE001569E1FE0100\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void mostSevere() throws Exception {
+ byte[] bytes = "\\05CE001569CCFE0102\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void clearMostSevere() throws Exception {
+ byte[] bytes = "\\05CE003569C9FE0102\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+
+ @Test
+ void newError() throws Exception {
+ byte[] bytes = "\\05CE001569E9FE0100\r".getBytes(StandardCharsets.UTF_8);
+ ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+ CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, false, requestContext, cBusOptions);
+ assertThat(msg).isNotNull();
+ System.out.println(msg);
+
+ assertMessageMatches(bytes, msg);
+ }
+ }
+ }
+ }
+}