From b88aabfd8de62fb4d52bcd616917055b14b151b7 Mon Sep 17 00:00:00 2001 From: Portisch Date: Tue, 16 Oct 2018 09:53:48 +0200 Subject: [PATCH] fix RF bridge raw receive --- sonoff/xdrv_06_snfbridge.ino | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sonoff/xdrv_06_snfbridge.ino b/sonoff/xdrv_06_snfbridge.ino index 0533e2d4a..cacf9a1a0 100644 --- a/sonoff/xdrv_06_snfbridge.ino +++ b/sonoff/xdrv_06_snfbridge.ino @@ -301,7 +301,7 @@ void SonoffBridgeReceived() boolean SonoffBridgeSerialInput() { // iTead Rf Universal Transceiver Module Serial Protocol Version 1.0 (20170420) - int8_t receive_len = 0; + static int8_t receive_len = 0; if (sonoff_bridge_receive_flag) { if (sonoff_bridge_receive_raw_flag) { @@ -309,12 +309,12 @@ boolean SonoffBridgeSerialInput() serial_in_buffer[serial_in_byte_counter++] = 0xAA; } serial_in_buffer[serial_in_byte_counter++] = serial_in_byte; - if (serial_in_byte_counter > 2) { - if ((0xA6 == serial_in_buffer[1]) || (0xAB == serial_in_buffer[1])) { // AA A6 06 023908010155 55 - 06 is receive_len - receive_len = serial_in_buffer[2] + 3 - serial_in_byte_counter; // Get at least receive_len bytes + if (serial_in_byte_counter == 3) { + if ((0xA6 == serial_in_buffer[serial_in_byte_counter - 2]) || (0xAB == serial_in_buffer[serial_in_byte_counter - 2])) { // AA A6 06 023908010155 55 - 06 is receive_len + receive_len = serial_in_buffer[serial_in_byte_counter - 1]; // Get at least receive_len bytes } } - if ((0 == receive_len) && (0x55 == serial_in_byte)) { // 0x55 - End of text + if (((0 == receive_len) && (0x55 == serial_in_byte)) || (serial_in_byte_counter == receive_len + 4)) { // 0x55 - End of text SonoffBridgeReceivedRaw(); sonoff_bridge_receive_flag = 0; return 1; @@ -345,6 +345,7 @@ boolean SonoffBridgeSerialInput() serial_in_byte_counter = 0; serial_in_byte = 0; sonoff_bridge_receive_flag = 1; + receive_len = 0; } return 0; }