mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-08 08:49:52 +03:00
fix uart crash with dev platform
This commit is contained in:
@@ -31,7 +31,7 @@
|
|||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
static QueueHandle_t uart_queue;
|
static QueueHandle_t uart_queue;
|
||||||
uint8_t tx_mode_;
|
uint8_t tx_mode_ = 0xFF;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* receive task, wait for break and call incoming_telegram
|
* receive task, wait for break and call incoming_telegram
|
||||||
@@ -40,7 +40,6 @@ void EMSuart::uart_event_task(void * pvParameters) {
|
|||||||
uart_event_t event;
|
uart_event_t event;
|
||||||
uint8_t telegram[EMS_MAXBUFFERSIZE];
|
uint8_t telegram[EMS_MAXBUFFERSIZE];
|
||||||
uint8_t length = 0;
|
uint8_t length = 0;
|
||||||
// size_t length;
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
//Waiting for UART event.
|
//Waiting for UART event.
|
||||||
@@ -48,17 +47,15 @@ void EMSuart::uart_event_task(void * pvParameters) {
|
|||||||
if (event.type == UART_DATA) {
|
if (event.type == UART_DATA) {
|
||||||
length += event.size;
|
length += event.size;
|
||||||
} else if (event.type == UART_BREAK) {
|
} else if (event.type == UART_BREAK) {
|
||||||
// uart_get_buffered_data_len(EMSUART_NUM, &length);
|
|
||||||
if (length == 2 || (length >= 6 && length <= EMS_MAXBUFFERSIZE)) {
|
if (length == 2 || (length >= 6 && length <= EMS_MAXBUFFERSIZE)) {
|
||||||
uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY);
|
uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY);
|
||||||
// if (telegram[0] && !telegram[length - 1]) {
|
// if (telegram[0] && !telegram[length - 1]) {
|
||||||
EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1));
|
EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1));
|
||||||
// }
|
// }
|
||||||
} else {
|
} else {
|
||||||
// flush buffer up to break
|
// flush buffer up to break
|
||||||
uint8_t buf[length];
|
uint8_t buf[length];
|
||||||
uart_read_bytes(EMSUART_NUM, buf, length, portMAX_DELAY);
|
uart_read_bytes(EMSUART_NUM, buf, length, portMAX_DELAY);
|
||||||
// uart_flush_input(EMSUART_NUM);
|
|
||||||
}
|
}
|
||||||
length = 0;
|
length = 0;
|
||||||
} else if (event.type == UART_BUFFER_FULL) {
|
} else if (event.type == UART_BUFFER_FULL) {
|
||||||
@@ -74,7 +71,7 @@ void EMSuart::uart_event_task(void * pvParameters) {
|
|||||||
* init UART driver
|
* init UART driver
|
||||||
*/
|
*/
|
||||||
void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) {
|
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 = {
|
uart_config_t uart_config = {
|
||||||
.baud_rate = EMSUART_BAUD,
|
.baud_rate = EMSUART_BAUD,
|
||||||
.data_bits = UART_DATA_8_BITS,
|
.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_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_full_threshold(EMSUART_NUM, 1);
|
||||||
uart_set_rx_timeout(EMSUART_NUM, 0); // disable
|
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;
|
tx_mode_ = tx_mode;
|
||||||
uart_enable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA);
|
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
|
* Stop, disable interrupt
|
||||||
*/
|
*/
|
||||||
void EMSuart::stop() {
|
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);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user