From 96316533a686fa409fcf34c59cad650d2afa5120 Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Fri, 1 Jul 2022 15:39:31 +0800 Subject: [PATCH] fix tcp layer data corruption --- freemodbus/modbus/include/mbframe.h | 6 ++++++ freemodbus/modbus/mb_m.c | 2 +- freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c | 2 +- idf_component.yml | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/freemodbus/modbus/include/mbframe.h b/freemodbus/modbus/include/mbframe.h index 6e6abac..9df0b1d 100644 --- a/freemodbus/modbus/include/mbframe.h +++ b/freemodbus/modbus/include/mbframe.h @@ -87,6 +87,12 @@ PR_BEGIN_EXTERN_C #define MB_TCP_UID 6 #define MB_TCP_FUNC 7 +#if MB_MASTER_TCP_ENABLED +#define MB_SEND_BUF_PDU_OFF MB_TCP_FUNC +#else +#define MB_SEND_BUF_PDU_OFF MB_SER_PDU_PDU_OFF +#endif + #define MB_TCP_PSEUDO_ADDRESS 255 /* ----------------------- Prototypes 0-------------------------------------*/ diff --git a/freemodbus/modbus/mb_m.c b/freemodbus/modbus/mb_m.c index 1f13b9a..708aedc 100644 --- a/freemodbus/modbus/mb_m.c +++ b/freemodbus/modbus/mb_m.c @@ -508,7 +508,7 @@ void IRAM_ATTR vMBMasterSetErrorType( eMBMasterErrorEventType errorType ) /* Get Modbus Master send PDU's buffer address pointer.*/ void vMBMasterGetPDUSndBuf( UCHAR ** pucFrame ) { - *pucFrame = ( UCHAR * ) &ucMasterSndBuf[MB_SER_PDU_PDU_OFF]; + *pucFrame = ( UCHAR * ) &ucMasterSndBuf[MB_SEND_BUF_PDU_OFF]; } /* Set Modbus Master send PDU's buffer length.*/ diff --git a/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c b/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c index f1f3916..279caad 100644 --- a/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c +++ b/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c @@ -81,7 +81,7 @@ static void mbc_tcp_master_free_slave_list(void) // Initialize interface properties mb_master_options_t* mbm_opts = &mbm_interface_ptr->opts; - LIST_FOREACH(it, &mbm_opts->mbm_slave_list, entries) { + while ((it = LIST_FIRST(&mbm_opts->mbm_slave_list))) { LIST_REMOVE(it, entries); mbm_opts->mbm_slave_list_count--; free(it); diff --git a/idf_component.yml b/idf_component.yml index 2edf7a6..ff7a8ad 100644 --- a/idf_component.yml +++ b/idf_component.yml @@ -1,4 +1,4 @@ -version: "1.0.2" +version: "1.0.3" description: ESP-MODBUS is the official Modbus library for Espressif SoCs. url: https://github.com/espressif/esp-modbus dependencies: