diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index 4bf88d954..63cc8a9fa 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -67,8 +67,10 @@ void IRAM_ATTR EMSuart::emsuart_rx_intr_handler(void * para) { drop_next_rx_ = true; // we have a overflow } } - if (rxbuf[length - 1]) { // check if last byte is break - length++; + if (length > 0 && length < EMS_MAXBUFFERSIZE) { + if (rxbuf[length - 1]) { // check if last byte is break + length++; + } } if ((!drop_next_rx_) && ((length == 2) || (length > 4))) { int baseType = 0; diff --git a/src/uart/emsuart_esp32.h b/src/uart/emsuart_esp32.h index 61b1bcb47..2eaad94be 100644 --- a/src/uart/emsuart_esp32.h +++ b/src/uart/emsuart_esp32.h @@ -46,10 +46,10 @@ #define EMS_TXMODE_HW 4 // LEGACY -#define EMSUART_TX_BIT_TIME 104 // bit time @9600 baud +#define EMSUART_TX_BIT_TIME 104 // bit time @9600 baud // EMS 1.0 -#define EMSUART_TX_BUSY_WAIT (EMSUART_TX_BIT_TIME / 8) // 13 +#define EMSUART_TX_BUSY_WAIT (EMSUART_TX_BIT_TIME / 8) // 13 #define EMSUART_TX_TIMEOUT (20 * EMSUART_TX_BIT_TIME / EMSUART_TX_BUSY_WAIT) #define EMSUART_TX_BRK_EMS (EMSUART_TX_BIT_TIME * 10)