]> git.basschouten.com Git - openhab-addons.git/commitdiff
[rfxcom] Read multiple bytes at a time over serial connection (#10832)
authorJames Hewitt <james.hewitt@gmail.com>
Sat, 12 Jun 2021 11:22:00 +0000 (12:22 +0100)
committerGitHub <noreply@github.com>
Sat, 12 Jun 2021 11:22:00 +0000 (13:22 +0200)
There's no reason not to read multiple bytes at a time (that I could find) so
for best practice, set the read limit to be the maximum size of an rfxcom
message. Tested fine on my system.

Signed-off-by: James Hewitt <james.hewitt@uk.ibm.com>
bundles/org.openhab.binding.rfxcom/src/main/java/org/openhab/binding/rfxcom/internal/RFXComBindingConstants.java
bundles/org.openhab.binding.rfxcom/src/main/java/org/openhab/binding/rfxcom/internal/connector/RFXComSerialConnector.java
bundles/org.openhab.binding.rfxcom/src/main/java/org/openhab/binding/rfxcom/internal/connector/RFXComStreamReader.java

index aa8442c6165b201b9c34e7b3a7fc95babe3b694e..c558cdc223f256898ea6a933fd818be1ed102888 100644 (file)
@@ -47,6 +47,8 @@ public class RFXComBindingConstants {
     public static final ThingTypeUID BRIDGE_RFXTRX315 = new ThingTypeUID(BINDING_ID, BRIDGE_TYPE_RFXTRX315);
     public static final ThingTypeUID BRIDGE_RFXREC443 = new ThingTypeUID(BINDING_ID, BRIDGE_TYPE_RFXREC433);
 
+    public static final int MAX_RFXCOM_MESSAGE_LEN = 256;
+
     /**
      * Presents all supported Bridge types by RFXCOM binding.
      */
index ca4bf6a45f4f71890f0951051f6bad2872271166..0c40e043870e353ea8504c950f438d42e41fc3d6 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.binding.rfxcom.internal.connector;
 
+import static org.openhab.binding.rfxcom.internal.RFXComBindingConstants.MAX_RFXCOM_MESSAGE_LEN;
+
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.TooManyListenersException;
@@ -63,7 +65,7 @@ public class RFXComSerialConnector extends RFXComBaseConnector implements Serial
 
         serialPort = commPort;
         serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
-        serialPort.enableReceiveThreshold(1);
+        serialPort.enableReceiveThreshold(MAX_RFXCOM_MESSAGE_LEN);
         serialPort.enableReceiveTimeout(100); // In ms. Small values mean faster shutdown but more cpu usage.
 
         in = serialPort.getInputStream();
index 33da3b0451edfc887a266978185df97cab989278..77f9a4f747de67d06f12d6f0f44e3f6e356d2860 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.binding.rfxcom.internal.connector;
 
+import static org.openhab.binding.rfxcom.internal.RFXComBindingConstants.MAX_RFXCOM_MESSAGE_LEN;
+
 import java.io.IOException;
 import java.util.Arrays;
 
@@ -30,7 +32,6 @@ import org.slf4j.LoggerFactory;
 public class RFXComStreamReader extends Thread {
     private final Logger logger = LoggerFactory.getLogger(RFXComStreamReader.class);
     private static final int MAX_READ_TIMEOUTS = 4;
-    private static final int MAX_RFXCOM_MESSAGE_LEN = 256;
 
     private RFXComBaseConnector connector;