From 69daf139372c316e75cb7e5d31fd7a59afadc7ca Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Thu, 13 Mar 2025 15:17:34 -0300 Subject: [PATCH 1/5] fix(uart): uart begin does not set the clock source when baudrate changes --- cores/esp32/esp32-hal-uart.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 59a95a084f6..6364a85784b 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -588,7 +588,7 @@ uart_t *uartBegin( UART_MUTEX_LOCK(); //User may just want to change some parameters, such as baudrate, data length, parity, stop bits or pins if (uart->_baudrate != baudrate) { - if (ESP_OK != uart_set_baudrate(uart_nr, baudrate)) { + if !uartSetBaudRate(uart, baudrate)) { log_e("UART%d changing baudrate failed.", uart_nr); retCode = false; } else { @@ -972,10 +972,11 @@ void uartFlushTxOnly(uart_t *uart, bool txOnly) { UART_MUTEX_UNLOCK(); } -void uartSetBaudRate(uart_t *uart, uint32_t baud_rate) { +bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate) { if (uart == NULL) { - return; + return false; } + bool retCode = true; UART_MUTEX_LOCK(); #if SOC_UART_SUPPORT_XTAL_CLK // ESP32-S3, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-H2 and ESP32-P4 soc_module_clk_t newClkSrc = UART_SCLK_XTAL; @@ -996,9 +997,11 @@ void uartSetBaudRate(uart_t *uart, uint32_t baud_rate) { log_v("Setting UART%d baud rate to %d.", uart->num, baud_rate); uart->_baudrate = baud_rate; } else { + retCode = false; log_e("Setting UART%d baud rate to %d has failed.", uart->num, baud_rate); } UART_MUTEX_UNLOCK(); + return retCode; } uint32_t uartGetBaudRate(uart_t *uart) { From 6a5dd48c631105c8c2049b833c5d1c0022ccd33b Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Thu, 13 Mar 2025 15:22:23 -0300 Subject: [PATCH 2/5] fix(uart): returns success on baud rate change operation --- cores/esp32/esp32-hal-uart.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/esp32-hal-uart.h b/cores/esp32/esp32-hal-uart.h index 74249194da3..9edbc4bfd22 100644 --- a/cores/esp32/esp32-hal-uart.h +++ b/cores/esp32/esp32-hal-uart.h @@ -58,7 +58,7 @@ void uartWriteBuf(uart_t *uart, const uint8_t *data, size_t len); void uartFlush(uart_t *uart); void uartFlushTxOnly(uart_t *uart, bool txOnly); -void uartSetBaudRate(uart_t *uart, uint32_t baud_rate); +bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate); uint32_t uartGetBaudRate(uart_t *uart); void uartSetRxInvert(uart_t *uart, bool invert); From 14acad763db60f94b0a8f6f7f2946227c345a3f3 Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Thu, 13 Mar 2025 15:34:14 -0300 Subject: [PATCH 3/5] fix(code): uart typo - missing ( in the code --- cores/esp32/esp32-hal-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 6364a85784b..30ac9457377 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -588,7 +588,7 @@ uart_t *uartBegin( UART_MUTEX_LOCK(); //User may just want to change some parameters, such as baudrate, data length, parity, stop bits or pins if (uart->_baudrate != baudrate) { - if !uartSetBaudRate(uart, baudrate)) { + if (!uartSetBaudRate(uart, baudrate)) { log_e("UART%d changing baudrate failed.", uart_nr); retCode = false; } else { From c75c28f8d9e854f7433fd7bf5fef791f643b2fdc Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Fri, 14 Mar 2025 10:17:25 -0300 Subject: [PATCH 4/5] fix(uart): replacing mutex lock to avoid double lock --- cores/esp32/esp32-hal-uart.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 30ac9457377..13619cf4ccf 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -585,17 +585,11 @@ uart_t *uartBegin( uartEnd(uart_nr); } else { bool retCode = true; - UART_MUTEX_LOCK(); //User may just want to change some parameters, such as baudrate, data length, parity, stop bits or pins if (uart->_baudrate != baudrate) { - if (!uartSetBaudRate(uart, baudrate)) { - log_e("UART%d changing baudrate failed.", uart_nr); - retCode = false; - } else { - log_v("UART%d changed baudrate to %d", uart_nr, baudrate); - uart->_baudrate = baudrate; - } + retCode = uartSetBaudRate(uart, baudrate); } + UART_MUTEX_LOCK(); uart_word_length_t data_bits = (config & 0xc) >> 2; uart_parity_t parity = config & 0x3; uart_stop_bits_t stop_bits = (config & 0x30) >> 4; @@ -994,11 +988,11 @@ bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate) { uart_ll_set_sclk(UART_LL_GET_HW(uart->num), newClkSrc); #endif if (uart_set_baudrate(uart->num, baud_rate) == ESP_OK) { - log_v("Setting UART%d baud rate to %d.", uart->num, baud_rate); + log_v("Setting UART%d baud rate to %ld.", uart->num, baud_rate); uart->_baudrate = baud_rate; } else { retCode = false; - log_e("Setting UART%d baud rate to %d has failed.", uart->num, baud_rate); + log_e("Setting UART%d baud rate to %ld has failed.", uart->num, baud_rate); } UART_MUTEX_UNLOCK(); return retCode; From 83e2ad5d232e85d91feae19904de277fa2294e4e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 13:24:46 +0000 Subject: [PATCH 5/5] ci(pre-commit): Apply automatic fixes --- cores/esp32/esp32-hal-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 13619cf4ccf..d76578480f5 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -587,7 +587,7 @@ uart_t *uartBegin( bool retCode = true; //User may just want to change some parameters, such as baudrate, data length, parity, stop bits or pins if (uart->_baudrate != baudrate) { - retCode = uartSetBaudRate(uart, baudrate); + retCode = uartSetBaudRate(uart, baudrate); } UART_MUTEX_LOCK(); uart_word_length_t data_bits = (config & 0xc) >> 2;