From 75284f09fe979576e341da6515ced704ed54997e Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 11 Aug 2018 15:47:27 +0200 Subject: [PATCH] Re-fix S31/Pow R2 serial sync Re-fix S31/Pow R2 energy data serial sync (#3425) --- sonoff/xdrv_03_energy.ino | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/sonoff/xdrv_03_energy.ino b/sonoff/xdrv_03_energy.ino index 3e12ef94f..5fef4631e 100644 --- a/sonoff/xdrv_03_energy.ino +++ b/sonoff/xdrv_03_energy.ino @@ -398,14 +398,18 @@ bool CseSerialInput() } } else { if ((0x5A == serial_in_byte) && (serial_in_byte_counter)) { // 0x5A - Packet header 2 - if (serial_in_byte_counter > 1) { // Sync buffer with data (issue #1907) - serial_in_buffer[0] = serial_in_buffer[--serial_in_byte_counter]; - serial_in_byte_counter = 1; - AddLog_P(LOG_LEVEL_DEBUG, PSTR("CSE: Fixed out-of-sync")); + if ((0x55 == serial_in_buffer[serial_in_byte_counter -1]) || + (0xAA == serial_in_buffer[serial_in_byte_counter -1]) || + (serial_in_buffer[serial_in_byte_counter -1] > 0xF0)) { + if (serial_in_byte_counter > 1) { // Sync buffer with data (issue #1907 and #3425) + serial_in_buffer[0] = serial_in_buffer[--serial_in_byte_counter]; + serial_in_byte_counter = 1; + AddLog_P(LOG_LEVEL_DEBUG, PSTR("CSE: Fixed out-of-sync")); + } + cse_receive_flag = 1; + } else { + serial_in_byte_counter = 0; } - cse_receive_flag = 1; - } else { - serial_in_byte_counter = 0; } serial_in_buffer[serial_in_byte_counter++] = serial_in_byte; }