From 9522945e06f8e0afa72ba17b4d0aa99242fa8d33 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 13 Apr 2026 13:58:30 +0200 Subject: [PATCH] uart buffer size --- src/uart/emsuart_esp32.cpp | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index a3c51c711..344e991f2 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -39,21 +39,19 @@ uint32_t inverse_mask = 0; // receive task, wait for break and call incoming_telegram void EMSuart::uart_event_task(void * pvParameters) { uart_event_t event; - uint8_t telegram[EMS_MAXBUFFERSIZE]; + uint8_t telegram[UART_FIFO_LEN + 1]; // same size as in driver_install uint8_t length = 0; while (1) { - //Waiting for UART event. + // Waiting for UART event. if (xQueueReceive(uart_queue, (void *)&event, portMAX_DELAY)) { if (event.type == UART_DATA) { length += event.size; } else if (event.type == UART_BREAK) { + // read buffer up to break + uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY); if (length == 2 || (length >= 6 && length <= EMS_MAXBUFFERSIZE)) { - uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY); EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1)); - } else { // flush buffer up to break - uint8_t buf[UART_FIFO_LEN]; - uart_read_bytes(EMSUART_NUM, buf, length, portMAX_DELAY); } length = 0; } else if (event.type == UART_BUFFER_FULL) { @@ -68,14 +66,6 @@ void EMSuart::uart_event_task(void * pvParameters) { // initialize UART driver void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) { if (tx_mode_ == EMS_TXMODE_INIT) { -#if CONFIG_IDF_TARGET_ESP32C6 - uart_config_t uart_config = {.baud_rate = EMSUART_BAUD, - .data_bits = UART_DATA_8_BITS, - .parity = UART_PARITY_DISABLE, - .stop_bits = UART_STOP_BITS_1, - .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, - .rx_flow_ctrl_thresh = 0}; -#else uart_config_t uart_config = {.baud_rate = EMSUART_BAUD, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, @@ -85,10 +75,9 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t .source_clk = UART_SCLK_APB #if ESP_ARDUINO_VERSION_MAJOR >= 3 , - .flags = {0, 0} + .flags = {0} #endif }; -#endif #if defined(EMSUART_RX_INVERT) inverse_mask |= UART_SIGNAL_RXD_INV; #endif @@ -98,7 +87,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t uart_param_config(EMSUART_NUM, &uart_config); uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_set_line_inverse(EMSUART_NUM, inverse_mask); - uart_driver_install(EMSUART_NUM, UART_FIFO_LEN + 1, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo + uart_driver_install(EMSUART_NUM, UART_FIFO_LEN + 1, 0, UART_FIFO_LEN + 3, &uart_queue, 0); // buffer must be > fifo, queue can hold data+break+overflow message uart_set_rx_full_threshold(EMSUART_NUM, 1); uart_set_rx_timeout(EMSUART_NUM, 0); // disable