From c0163bb01e2022ff8e6fe89615f7e18b806072ba Mon Sep 17 00:00:00 2001 From: Alex Lisitsyn Date: Wed, 21 Jul 2021 10:07:44 +0800 Subject: [PATCH] freemodbus: fix uart_wait_tx_done() reenable tx_done interrupt fixes the issue with uart_wait_tx_done() when the task is suspended and transmission is done right before reenable tx_done interrupt * Original commit: espressif/esp-idf@c801b3a18209ae707d3f8224b0734315cdc99db8 --- components/freemodbus/port/port.h | 2 +- components/freemodbus/port/portserial_m.c | 2 +- .../serial_master/modbus_controller/mbc_serial_master.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/freemodbus/port/port.h b/components/freemodbus/port/port.h index 84d3d3f..81c3cd2 100644 --- a/components/freemodbus/port/port.h +++ b/components/freemodbus/port/port.h @@ -37,7 +37,7 @@ #define MB_SERIAL_BUF_SIZE (CONFIG_FMB_SERIAL_BUF_SIZE) // common definitions for serial port implementations -#define MB_SERIAL_TX_TOUT_MS (100) +#define MB_SERIAL_TX_TOUT_MS (2200) // maximum time for transmission of longest allowed frame buffer #define MB_SERIAL_TX_TOUT_TICKS (pdMS_TO_TICKS(MB_SERIAL_TX_TOUT_MS)) // timeout for transmission #define MB_SERIAL_RX_TOUT_MS (1) #define MB_SERIAL_RX_TOUT_TICKS (pdMS_TO_TICKS(MB_SERIAL_RX_TOUT_MS)) // timeout for receive diff --git a/components/freemodbus/port/portserial_m.c b/components/freemodbus/port/portserial_m.c index 023bcd0..6439442 100644 --- a/components/freemodbus/port/portserial_m.c +++ b/components/freemodbus/port/portserial_m.c @@ -115,7 +115,7 @@ BOOL xMBMasterPortSerialTxPoll(void) ESP_LOGD(TAG, "MB_TX_buffer sent: (%d) bytes.", (uint16_t)(usCount - 1)); // Waits while UART sending the packet esp_err_t xTxStatus = uart_wait_tx_done(ucUartNumber, MB_SERIAL_TX_TOUT_TICKS); - vMBMasterPortSerialEnable( TRUE, FALSE ); + vMBMasterPortSerialEnable(TRUE, FALSE); MB_PORT_CHECK((xTxStatus == ESP_OK), FALSE, "mb serial sent buffer failure."); return TRUE; } diff --git a/components/freemodbus/serial_master/modbus_controller/mbc_serial_master.c b/components/freemodbus/serial_master/modbus_controller/mbc_serial_master.c index 426a455..58bb1aa 100644 --- a/components/freemodbus/serial_master/modbus_controller/mbc_serial_master.c +++ b/components/freemodbus/serial_master/modbus_controller/mbc_serial_master.c @@ -61,7 +61,7 @@ static void modbus_master_task(void *pvParameters) // Send response buffer if ready to be sent BOOL xSentState = xMBMasterPortSerialTxPoll(); if (xSentState) { - // Let state machine know that response was transmitted out + // Let state machine know that request frame was transmitted out (void)xMBMasterPortEventPost(EV_MASTER_FRAME_SENT); } }