diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index 8acb181c3..cc1cfdb40 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -31,7 +31,7 @@ namespace emsesp { static QueueHandle_t uart_queue; -uint8_t tx_mode_; +uint8_t tx_mode_ = 0xFF; /* * receive task, wait for break and call incoming_telegram @@ -40,7 +40,6 @@ void EMSuart::uart_event_task(void * pvParameters) { uart_event_t event; uint8_t telegram[EMS_MAXBUFFERSIZE]; uint8_t length = 0; - // size_t length; while (1) { //Waiting for UART event. @@ -48,17 +47,15 @@ void EMSuart::uart_event_task(void * pvParameters) { if (event.type == UART_DATA) { length += event.size; } else if (event.type == UART_BREAK) { - // uart_get_buffered_data_len(EMSUART_NUM, &length); if (length == 2 || (length >= 6 && length <= EMS_MAXBUFFERSIZE)) { uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY); // if (telegram[0] && !telegram[length - 1]) { - EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1)); + EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1)); // } } else { // flush buffer up to break uint8_t buf[length]; uart_read_bytes(EMSUART_NUM, buf, length, portMAX_DELAY); - // uart_flush_input(EMSUART_NUM); } length = 0; } else if (event.type == UART_BUFFER_FULL) { @@ -74,7 +71,7 @@ void EMSuart::uart_event_task(void * pvParameters) { * init UART driver */ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) { - if (!uart_is_driver_installed(EMSUART_NUM)) { + if (tx_mode_ == 0xFF) { uart_config_t uart_config = { .baud_rate = EMSUART_BAUD, .data_bits = UART_DATA_8_BITS, @@ -88,7 +85,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_set_rx_full_threshold(EMSUART_NUM, 1); uart_set_rx_timeout(EMSUART_NUM, 0); // disable - xTaskCreate(uart_event_task, "uart_event_task", 2048, NULL, configMAX_PRIORITIES - 1, NULL); + xTaskCreate(uart_event_task, "uart_event_task", 2048, NULL, configMAX_PRIORITIES - 3, NULL); } tx_mode_ = tx_mode; uart_enable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA); @@ -98,7 +95,9 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t * Stop, disable interrupt */ void EMSuart::stop() { - uart_disable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA); + if (tx_mode_ != 0xFF) { // only call after driver initialisation + uart_disable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA); + } }; /*