From bbe1f133dce040db1f15c4ac726b3203d0677c33 Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 26 Dec 2025 09:33:17 +0100 Subject: [PATCH] add EMS_TXMODE_INIT and EMS_TXMODE_NONE --- src/uart/emsuart_esp32.cpp | 52 +++++++++++++++----------------------- src/uart/emsuart_esp32.h | 2 ++ 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index f4f0e0d17..b4f5ff692 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -16,9 +16,7 @@ * along with this program. If not, see . */ -/* - * ESP32 UART port by @ArwedL and improved by @MichaelDvP. See https://github.com/emsesp/EMS-ESP/issues/380 - */ +// ESP32 UART port by @ArwedL and improved by @MichaelDvP. See https://github.com/emsesp/EMS-ESP/issues/380 #ifndef EMSESP_STANDALONE @@ -35,12 +33,10 @@ uint8_t EMSuart::last_tx_src_ = 0; static TaskHandle_t xHandle; static QueueHandle_t uart_queue; -uint8_t tx_mode_ = 0xFF; +uint8_t tx_mode_ = EMS_TXMODE_INIT; uint32_t inverse_mask = 0; -/* -* receive task, wait for break and call incoming_telegram -*/ +// 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]; @@ -69,11 +65,9 @@ void EMSuart::uart_event_task(void * pvParameters) { vTaskDelete(NULL); } -/* - * init UART driver - */ +// initialize UART driver void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) { - if (tx_mode_ == 0xFF) { + if (tx_mode_ == EMS_TXMODE_INIT) { uart_config_t uart_config = {.baud_rate = EMSUART_BAUD, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, @@ -113,9 +107,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t uart_enable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA); } -/* - * Stop, disable interrupt - */ +// Stop, disable interrupt void EMSuart::stop() { 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); @@ -123,9 +115,7 @@ void EMSuart::stop() { } }; -/* - * generate by inverting tx - */ +// generate by inverting tx void IRAM_ATTR EMSuart::uart_gen_break(uint32_t length_us) { portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; portENTER_CRITICAL(&mux); @@ -135,35 +125,34 @@ void IRAM_ATTR EMSuart::uart_gen_break(uint32_t length_us) { portEXIT_CRITICAL(&mux); } -/* - * Sends a 1-byte poll, ending with a - */ +// Sends a 1-byte poll, ending with a void EMSuart::send_poll(const uint8_t data) { transmit(&data, 1); } -/* - * Send data to Tx line, ending with a - * buf contains the CRC and len is #bytes including the CRC - * returns code, 1=success - */ +// Send data to Tx line, ending with a +// buf contains the CRC and len is #bytes including the CRC +// returns code, 1=success uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { if (len == 0 || len >= EMS_MAXBUFFERSIZE) { return EMS_TX_STATUS_ERR; } - if (tx_mode_ == 0) { + // TXMODE is OFF + if (tx_mode_ == EMS_TXMODE_OFF) { return EMS_TX_STATUS_OK; } - last_tx_src_ = len < 4 ? 0 : buf[0]; + last_tx_src_ = len < 4 ? 0 : buf[0]; // update last tx source - if (tx_mode_ == EMS_TXMODE_HW) { // hardware controlled mode + // TXMODE is hardware controlled mode + if (tx_mode_ == EMS_TXMODE_HW) { uart_write_bytes_with_break(EMSUART_NUM, buf, len, 10); return EMS_TX_STATUS_OK; } - if (tx_mode_ == EMS_TXMODE_EMSPLUS) { // EMS+ with long delay + // TXMODE is EMS+ with long delay + if (tx_mode_ == EMS_TXMODE_EMSPLUS) { for (uint8_t i = 0; i < len; i++) { uart_write_bytes(EMSUART_NUM, &buf[i], 1); delayMicroseconds(EMSUART_TX_WAIT_PLUS); @@ -172,7 +161,8 @@ uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { return EMS_TX_STATUS_OK; } - if (tx_mode_ == EMS_TXMODE_HT3) { // HT3 with 7 bittimes delay + // TXMODE is HT3 with 7 bittimes delay + if (tx_mode_ == EMS_TXMODE_HT3) { for (uint8_t i = 0; i < len; i++) { uart_write_bytes(EMSUART_NUM, &buf[i], 1); delayMicroseconds(EMSUART_TX_WAIT_HT3); @@ -181,7 +171,7 @@ uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { return EMS_TX_STATUS_OK; } - // mode 1: wait for echo after each byte + // TXMODE default: wait for echo after each byte for (uint8_t i = 0; i < len; i++) { size_t rx0, rx1; uart_get_buffered_data_len(EMSUART_NUM, &rx0); diff --git a/src/uart/emsuart_esp32.h b/src/uart/emsuart_esp32.h index 6a6f2f2d1..d0727f3ee 100644 --- a/src/uart/emsuart_esp32.h +++ b/src/uart/emsuart_esp32.h @@ -40,6 +40,8 @@ #define EMSUART_NUM UART_NUM_1 // on C3 and S2 there is no UART2, use UART1 for all #define EMSUART_BAUD 9600 // uart baud rate for the EMS circuit +#define EMS_TXMODE_INIT 0xFF +#define EMS_TXMODE_OFF 0 #define EMS_TXMODE_DEFAULT 1 #define EMS_TXMODE_EMSPLUS 2 #define EMS_TXMODE_HT3 3