Selaa lähdekoodia

Merge branch 'bugfix/modbus_fix_start_after_destroy_issues_v44' into 'release/v4.4'

modbus: fix tcp slave destroy issues (backport v4.4)

See merge request espressif/esp-idf!17406
morris 3 vuotta sitten
vanhempi
sitoutus
0fca632ffd

+ 4 - 0
components/freemodbus/modbus/include/mbport.h

@@ -222,6 +222,8 @@ BOOL            xMBTCPPortInit( USHORT usTCPPort );
 
 void            vMBTCPPortClose( void );
 
+void            vMBTCPPortEnable( void );
+
 void            vMBTCPPortDisable( void );
 
 BOOL            xMBTCPPortGetRequest( UCHAR **ppucMBTCPFrame, USHORT * usTCPLength );
@@ -235,6 +237,8 @@ BOOL            xMBMasterTCPPortInit( USHORT usTCPPort );
 
 void            vMBMasterTCPPortClose( void );
 
+void            vMBMasterTCPPortEnable( void );
+
 void            vMBMasterTCPPortDisable( void );
 
 BOOL            xMBMasterTCPPortGetRequest( UCHAR **ppucMBTCPFrame, USHORT * usTCPLength );

+ 3 - 0
components/freemodbus/modbus/tcp/mbtcp.c

@@ -86,12 +86,15 @@ eMBTCPDoInit( USHORT ucTCPPort )
 void
 eMBTCPStart( void )
 {
+    ESP_LOGD(MB_PORT_TAG, "TCP Slave port enable.");
+    vMBTCPPortEnable( );
 }
 
 void
 eMBTCPStop( void )
 {
     /* Make sure that no more clients are connected. */
+    ESP_LOGD(MB_PORT_TAG, "TCP Slave port disable.");
     vMBTCPPortDisable( );
 }
 

+ 4 - 0
components/freemodbus/modbus/tcp/mbtcp_m.c

@@ -86,11 +86,15 @@ eMBMasterTCPDoInit( USHORT ucTCPPort )
 void
 eMBMasterTCPStart( void )
 {
+    ESP_LOGD(MB_PORT_TAG, "TCP Master port enable.");
+    vMBMasterTCPPortEnable( );
 }
 
 void
 eMBMasterTCPStop( void )
 {
+    ESP_LOGD(MB_PORT_TAG, "TCP Master port disable.");
+    vMBMasterTCPPortDisable( );
 }
 
 eMBErrorCode

+ 92 - 91
components/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c

@@ -165,7 +165,10 @@ static esp_err_t mbc_tcp_master_start(void)
     eMBPortProto proto = (comm_info->ip_mode == MB_MODE_TCP) ? MB_PROTO_TCP : MB_PROTO_UDP;
     eMBPortIpVer ip_ver = (comm_info->ip_addr_type == MB_IPV4) ? MB_PORT_IPV4 : MB_PORT_IPV6;
     vMBTCPPortMasterSetNetOpt(comm_info->ip_netif_ptr, ip_ver, proto);
-    vMBTCPPortMasterTaskStart();
+
+    status = eMBMasterEnable();
+    MB_MASTER_CHECK((status == MB_ENOERR), ESP_ERR_INVALID_STATE,
+                    "mb stack set slave ID failure, eMBMasterEnable() returned (0x%x).", (uint32_t)status);
 
     // Add slave IP address for each slave to initialize connection
     mb_slave_addr_entry_t *p_slave_info;
@@ -178,18 +181,13 @@ static esp_err_t mbc_tcp_master_start(void)
     // Add end of list condition
     (void)xMBTCPPortMasterAddSlaveIp(0xFF, NULL, 0xFF);
 
-    status = eMBMasterEnable();
-    MB_MASTER_CHECK((status == MB_ENOERR), ESP_ERR_INVALID_STATE,
-            "mb stack set slave ID failure, eMBMasterEnable() returned (0x%x).", (uint32_t)status);
-
 
     // Wait for connection done event
     bool start = (bool)xMBTCPPortMasterWaitEvent(mbm_opts->mbm_event_group,
-                                                    (EventBits_t)MB_EVENT_STACK_STARTED, MB_TCP_CONNECTION_TOUT);
+                                                 (EventBits_t)MB_EVENT_STACK_STARTED, MB_TCP_CONNECTION_TOUT);
     MB_MASTER_CHECK((start), ESP_ERR_INVALID_STATE,
-                            "mb stack could not connect to slaves for %d seconds.",
-                            CONFIG_FMB_TCP_CONNECTION_TOUT_SEC);
-
+                    "mb stack could not connect to slaves for %d seconds.",
+                    CONFIG_FMB_TCP_CONNECTION_TOUT_SEC);
     return ESP_OK;
 }
 
@@ -206,10 +204,10 @@ static esp_err_t mbc_tcp_master_destroy(void)
     MB_MASTER_CHECK((mb_error == MB_ENOERR), ESP_ERR_INVALID_STATE, "mb stack disable failure.");
     mb_error = eMBMasterClose();
     MB_MASTER_CHECK((mb_error == MB_ENOERR), ESP_ERR_INVALID_STATE,
-            "mb stack close failure returned (0x%x).", (uint32_t)mb_error);
+                    "mb stack close failure returned (0x%x).", (uint32_t)mb_error);
     // Stop polling by clearing correspondent bit in the event group
     xEventGroupClearBits(mbm_opts->mbm_event_group,
-                                    (EventBits_t)MB_EVENT_STACK_STARTED);
+                         (EventBits_t)MB_EVENT_STACK_STARTED);
     (void)vTaskDelete(mbm_opts->mbm_task_handle);
     mbm_opts->mbm_task_handle = NULL;
     (void)vEventGroupDelete(mbm_opts->mbm_event_group);
@@ -282,52 +280,52 @@ static esp_err_t mbc_tcp_master_send_request(mb_param_request_t* request, void*
     // Calls appropriate request function to send request and waits response
     switch(mb_command)
     {
-        case MB_FUNC_READ_COILS:
-            mb_error = eMBMasterReqReadCoils((UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                               (USHORT)mb_size , (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-        case MB_FUNC_WRITE_SINGLE_COIL:
-            mb_error = eMBMasterReqWriteCoil((UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                *(USHORT*)data_ptr, (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-        case MB_FUNC_WRITE_MULTIPLE_COILS:
-            mb_error = eMBMasterReqWriteMultipleCoils((UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                            (USHORT)mb_size, (UCHAR*)data_ptr,
-                                                            (LONG)MB_RESPONSE_TIMEOUT);
-            break;
-        case MB_FUNC_READ_DISCRETE_INPUTS:
-            mb_error = eMBMasterReqReadDiscreteInputs((UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                        (USHORT)mb_size, (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-        case MB_FUNC_READ_HOLDING_REGISTER:
-            mb_error = eMBMasterReqReadHoldingRegister((UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                            (USHORT)mb_size, (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-        case MB_FUNC_WRITE_REGISTER:
-            mb_error = eMBMasterReqWriteHoldingRegister( (UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                            *(USHORT*)data_ptr, (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-
-        case MB_FUNC_WRITE_MULTIPLE_REGISTERS:
-            mb_error = eMBMasterReqWriteMultipleHoldingRegister( (UCHAR)mb_slave_addr,
-                                                                    (USHORT)mb_offset, (USHORT)mb_size,
-                                                                    (USHORT*)data_ptr, (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-        case MB_FUNC_READWRITE_MULTIPLE_REGISTERS:
-            mb_error = eMBMasterReqReadWriteMultipleHoldingRegister( (UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                                       (USHORT)mb_size, (USHORT*)data_ptr,
-                                                                       (USHORT)mb_offset, (USHORT)mb_size,
-                                                                       (LONG)MB_RESPONSE_TIMEOUT );
-            break;
-        case MB_FUNC_READ_INPUT_REGISTER:
-            mb_error = eMBMasterReqReadInputRegister( (UCHAR)mb_slave_addr, (USHORT)mb_offset,
-                                                        (USHORT)mb_size, (LONG) MB_RESPONSE_TIMEOUT );
-            break;
-        default:
-            ESP_LOGE(TAG, "%s: Incorrect function in request (%u) ",
-                                                    __FUNCTION__, mb_command);
-            mb_error = MB_MRE_NO_REG;
-            break;
+    case MB_FUNC_READ_COILS:
+        mb_error = eMBMasterReqReadCoils((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                         (USHORT)mb_size, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_WRITE_SINGLE_COIL:
+        mb_error = eMBMasterReqWriteCoil((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                         *(USHORT *)data_ptr, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_WRITE_MULTIPLE_COILS:
+        mb_error = eMBMasterReqWriteMultipleCoils((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                                  (USHORT)mb_size, (UCHAR *)data_ptr,
+                                                  (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_READ_DISCRETE_INPUTS:
+        mb_error = eMBMasterReqReadDiscreteInputs((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                                  (USHORT)mb_size, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_READ_HOLDING_REGISTER:
+        mb_error = eMBMasterReqReadHoldingRegister((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                                   (USHORT)mb_size, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_WRITE_REGISTER:
+        mb_error = eMBMasterReqWriteHoldingRegister((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                                    *(USHORT *)data_ptr, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+
+    case MB_FUNC_WRITE_MULTIPLE_REGISTERS:
+        mb_error = eMBMasterReqWriteMultipleHoldingRegister((UCHAR)mb_slave_addr,
+                                                            (USHORT)mb_offset, (USHORT)mb_size,
+                                                            (USHORT *)data_ptr, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_READWRITE_MULTIPLE_REGISTERS:
+        mb_error = eMBMasterReqReadWriteMultipleHoldingRegister((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                                                (USHORT)mb_size, (USHORT *)data_ptr,
+                                                                (USHORT)mb_offset, (USHORT)mb_size,
+                                                                (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    case MB_FUNC_READ_INPUT_REGISTER:
+        mb_error = eMBMasterReqReadInputRegister((UCHAR)mb_slave_addr, (USHORT)mb_offset,
+                                                 (USHORT)mb_size, (LONG)MB_RESPONSE_TIMEOUT);
+        break;
+    default:
+        ESP_LOGE(TAG, "%s: Incorrect function in request (%u) ",
+                 __FUNCTION__, mb_command);
+        mb_error = MB_MRE_NO_REG;
+        break;
     }
 
     // Propagate the Modbus errors to higher level
@@ -510,12 +508,12 @@ static esp_err_t mbc_tcp_master_get_parameter(uint16_t cid, char* name, uint8_t*
                     error = ESP_ERR_INVALID_STATE;
                 } else {
                     ESP_LOGD(TAG, "%s: Good response for get cid(%u) = %s",
-                                                        __FUNCTION__, (unsigned)reg_info.cid, (char*)esp_err_to_name(error));
+                             __FUNCTION__, (unsigned)reg_info.cid, (char*)esp_err_to_name(error));
                 }
             }
         } else {
             ESP_LOGD(TAG, "%s: Bad response to get cid(%u) = %s",
-                                            __FUNCTION__, reg_info.cid, (char*)esp_err_to_name(error));
+                     __FUNCTION__, reg_info.cid, (char*)esp_err_to_name(error));
             error = ESP_ERR_INVALID_RESPONSE;
         }
         free(pdata);
@@ -523,7 +521,7 @@ static esp_err_t mbc_tcp_master_get_parameter(uint16_t cid, char* name, uint8_t*
         *type = reg_info.param_type;
     } else {
         ESP_LOGE(TAG, "%s: The cid(%u) not found in the data dictionary.",
-                                                    __FUNCTION__, reg_info.cid);
+                 __FUNCTION__, reg_info.cid);
         error = ESP_ERR_INVALID_ARG;
     }
     return error;
@@ -549,7 +547,7 @@ static esp_err_t mbc_tcp_master_set_parameter(uint16_t cid, char* name, uint8_t*
         }
         // Transfer value of characteristic into parameter buffer
         error = mbc_tcp_master_set_param_data((void*)pdata, (void*)value,
-                                                reg_info.param_type, reg_info.param_size);
+                                              reg_info.param_type, reg_info.param_size);
         if (error != ESP_OK) {
             ESP_LOGE(TAG, "fail to set parameter data.");
             free(pdata);
@@ -588,8 +586,7 @@ static esp_err_t mbc_tcp_master_set_parameter(uint16_t cid, char* name, uint8_t*
  * @return result
  */
 // Callback function for reading of MB Input Registers
-eMBErrorCode eMBRegInputCBTcpMaster(UCHAR * pucRegBuffer, USHORT usAddress,
-                                USHORT usNRegs)
+eMBErrorCode eMBRegInputCBTcpMaster(UCHAR* pucRegBuffer, USHORT usAddress, USHORT usNRegs)
 {
     MB_MASTER_ASSERT(mbm_interface_ptr != NULL);
     mb_master_options_t* mbm_opts = &mbm_interface_ptr->opts;
@@ -624,36 +621,40 @@ eMBErrorCode eMBRegInputCBTcpMaster(UCHAR * pucRegBuffer, USHORT usAddress,
  */
 // Callback function for reading of MB Holding Registers
 // Executed by stack when request to read/write holding registers is received
-eMBErrorCode eMBRegHoldingCBTcpMaster(UCHAR * pucRegBuffer, USHORT usAddress,
-        USHORT usNRegs, eMBRegisterMode eMode)
+eMBErrorCode eMBRegHoldingCBTcpMaster(UCHAR *pucRegBuffer, USHORT usAddress,
+                                      USHORT usNRegs, eMBRegisterMode eMode)
 {
     MB_MASTER_ASSERT(mbm_interface_ptr != NULL);
-    mb_master_options_t* mbm_opts = &mbm_interface_ptr->opts;
+    mb_master_options_t *mbm_opts = &mbm_interface_ptr->opts;
     MB_MASTER_ASSERT(pucRegBuffer != NULL);
     USHORT usRegHoldingNregs = (USHORT)mbm_opts->mbm_reg_buffer_size;
-    UCHAR* pucHoldingBuffer = (UCHAR*)mbm_opts->mbm_reg_buffer_ptr;
+    UCHAR *pucHoldingBuffer = (UCHAR *)mbm_opts->mbm_reg_buffer_ptr;
     eMBErrorCode eStatus = MB_ENOERR;
     USHORT usRegs = usNRegs;
     // Check input and configuration parameters for correctness
-    if ((pucHoldingBuffer != NULL)
-            && (usRegHoldingNregs == usNRegs)
-            && (usNRegs >= 1)) {
-        switch (eMode) {
-            case MB_REG_WRITE:
-                while (usRegs > 0) {
-                    _XFER_2_RD(pucRegBuffer, pucHoldingBuffer);
-                    usRegs -= 1;
-                };
-                break;
-            case MB_REG_READ:
-                while (usRegs > 0) {
-                    _XFER_2_WR(pucHoldingBuffer, pucRegBuffer);
-                    pucHoldingBuffer += 2;
-                    usRegs -= 1;
-                };
-                break;
+    if ((pucHoldingBuffer != NULL) && (usRegHoldingNregs == usNRegs) && (usNRegs >= 1))
+    {
+        switch (eMode)
+        {
+        case MB_REG_WRITE:
+            while (usRegs > 0)
+            {
+                _XFER_2_RD(pucRegBuffer, pucHoldingBuffer);
+                usRegs -= 1;
+            };
+            break;
+        case MB_REG_READ:
+            while (usRegs > 0)
+            {
+                _XFER_2_WR(pucHoldingBuffer, pucRegBuffer);
+                pucHoldingBuffer += 2;
+                usRegs -= 1;
+            };
+            break;
         }
-    } else {
+    }
+    else
+    {
         eStatus = MB_ENOREG;
     }
     return eStatus;
@@ -670,8 +671,8 @@ eMBErrorCode eMBRegHoldingCBTcpMaster(UCHAR * pucRegBuffer, USHORT usAddress,
  * @return result
  */
 // Callback function for reading of MB Coils Registers
-eMBErrorCode eMBRegCoilsCBTcpMaster(UCHAR* pucRegBuffer, USHORT usAddress,
-        USHORT usNCoils, eMBRegisterMode eMode)
+eMBErrorCode eMBRegCoilsCBTcpMaster(UCHAR *pucRegBuffer, USHORT usAddress,
+                                    USHORT usNCoils, eMBRegisterMode eMode)
 {
     MB_MASTER_ASSERT(mbm_interface_ptr != NULL);
     mb_master_options_t* mbm_opts = &mbm_interface_ptr->opts;
@@ -722,7 +723,7 @@ eMBErrorCode eMBRegCoilsCBTcpMaster(UCHAR* pucRegBuffer, USHORT usAddress,
  */
 // Callback function for reading of MB Discrete Input Registers
 eMBErrorCode eMBRegDiscreteCBTcpMaster(UCHAR * pucRegBuffer, USHORT usAddress,
-                            USHORT usNDiscrete)
+                                       USHORT usNDiscrete)
 {
     MB_MASTER_ASSERT(mbm_interface_ptr != NULL);
     mb_master_options_t* mbm_opts = &mbm_interface_ptr->opts;
@@ -785,14 +786,14 @@ esp_err_t mbc_tcp_master_create(void** handler)
     status = xTaskCreate((void*)&modbus_tcp_master_task,
                             "modbus_tcp_master_task",
                             MB_CONTROLLER_STACK_SIZE,
-                            NULL,                       // No parameters
+                            NULL, // No parameters
                             MB_CONTROLLER_PRIORITY,
                             &mbm_opts->mbm_task_handle);
     if (status != pdPASS) {
         vTaskDelete(mbm_opts->mbm_task_handle);
         MB_MASTER_CHECK((status == pdPASS), ESP_ERR_NO_MEM,
-                "mb controller task creation error, xTaskCreate() returns (0x%x).",
-                (uint32_t)status);
+                        "mb controller task creation error, xTaskCreate() returns (0x%x).",
+                        (uint32_t)status);
     }
     MB_MASTER_ASSERT(mbm_opts->mbm_task_handle != NULL); // The task is created but handle is incorrect
 

+ 19 - 19
components/freemodbus/tcp_master/port/port_tcp_master.c

@@ -248,11 +248,6 @@ void vMBTCPPortMasterSetNetOpt(void* pvNetIf, eMBPortIpVer xIpVersion, eMBPortPr
     xMbPortConfig.eMbIpVer = xIpVersion;
 }
 
-void vMBTCPPortMasterTaskStart(void)
-{
-    vTaskResume(xMbPortConfig.xMbTcpTaskHandle);
-}
-
 // Function returns time left for response processing according to response timeout
 static int64_t xMBTCPPortMasterGetRespTimeLeft(MbSlaveInfo_t* pxInfo)
 {
@@ -890,23 +885,13 @@ extern void vMBMasterPortEventClose(void);
 extern void vMBMasterPortTimerClose(void);
 
 void
-vMBMasterTCPPortDisable(void)
+vMBMasterTCPPortEnable(void)
 {
-    for (USHORT ucCnt = 0; ucCnt < MB_TCP_PORT_MAX_CONN; ucCnt++) {
-        MbSlaveInfo_t* pxInfo = xMbPortConfig.pxMbSlaveInfo[ucCnt];
-        if (pxInfo) {
-            xMBTCPPortMasterCloseConnection(pxInfo);
-            if (pxInfo->pucRcvBuf) {
-                free(pxInfo->pucRcvBuf);
-            }
-            free(pxInfo);
-            xMbPortConfig.pxMbSlaveInfo[ucCnt] = NULL;
-        }
-    }
+    vTaskResume(xMbPortConfig.xMbTcpTaskHandle);
 }
 
 void
-vMBMasterTCPPortClose(void)
+vMBMasterTCPPortDisable(void)
 {
     // Try to exit the task gracefully, so select could release its internal callbacks
     // that were allocated on the stack of the task we're going to delete
@@ -920,8 +905,23 @@ vMBMasterTCPPortClose(void)
         vSemaphoreDelete(xShutdownSemaphore);
         xShutdownSemaphore = NULL;
     }
-    vMBMasterTCPPortDisable();
+    for (USHORT ucCnt = 0; ucCnt < MB_TCP_PORT_MAX_CONN; ucCnt++) {
+        MbSlaveInfo_t* pxInfo = xMbPortConfig.pxMbSlaveInfo[ucCnt];
+        if (pxInfo) {
+            xMBTCPPortMasterCloseConnection(pxInfo);
+            if (pxInfo->pucRcvBuf) {
+                free(pxInfo->pucRcvBuf);
+            }
+            free(pxInfo);
+            xMbPortConfig.pxMbSlaveInfo[ucCnt] = NULL;
+        }
+    }
     free(xMbPortConfig.pxMbSlaveInfo);
+}
+
+void
+vMBMasterTCPPortClose(void)
+{
     vQueueDelete(xMbPortConfig.xConnectQueue);
     vMBMasterPortTimerClose();
     // Release resources for the event queue.

+ 0 - 7
components/freemodbus/tcp_master/port/port_tcp_master.h

@@ -132,13 +132,6 @@ BOOL xMBTCPPortMasterWaitEvent(EventGroupHandle_t xEventHandle, EventBits_t xEve
  */
 void vMBTCPPortMasterSetNetOpt(void* pvNetIf, eMBPortIpVer xIpVersion, eMBPortProto xProto);
 
-/**
- * Resume TCP/UDP Master processing task
- *
- * @return None
- */
-void vMBTCPPortMasterTaskStart(void);
-
 #ifdef __cplusplus
 PR_END_EXTERN_C
 #endif

+ 1 - 2
components/freemodbus/tcp_slave/modbus_controller/mbc_tcp_slave.c

@@ -88,7 +88,6 @@ static esp_err_t mbc_tcp_slave_start(void)
     eMBPortProto proto = (mbs_opts->mbs_comm.ip_mode == MB_MODE_TCP) ? MB_PROTO_TCP : MB_PROTO_UDP;
     eMBPortIpVer ip_ver = (mbs_opts->mbs_comm.ip_addr_type == MB_IPV4) ? MB_PORT_IPV4 : MB_PORT_IPV6;
     vMBTCPPortSlaveSetNetOpt(mbs_opts->mbs_comm.ip_netif_ptr, ip_ver, proto, (char*)mbs_opts->mbs_comm.ip_addr);
-    vMBTCPPortSlaveStartServerTask();
 
     status = eMBEnable();
     MB_SLAVE_CHECK((status == MB_ENOERR), ESP_ERR_INVALID_STATE,
@@ -119,7 +118,7 @@ static esp_err_t mbc_tcp_slave_destroy(void)
     (void)vQueueDelete(mbs_opts->mbs_notification_queue_handle);
     (void)vEventGroupDelete(mbs_opts->mbs_event_group);
     (void)vMBTCPPortClose();
-
+    mbs_interface_ptr = NULL;
     vMBPortSetMode((UCHAR)MB_PORT_INACTIVE);
     return ESP_OK;
 }

+ 6 - 5
components/freemodbus/tcp_slave/port/port_tcp_slave.c

@@ -176,11 +176,6 @@ void vMBTCPPortSlaveSetNetOpt(void* pvNetIf, eMBPortIpVer xIpVersion, eMBPortPro
     xConfig.pcBindAddr = pcBindAddrStr;
 }
 
-void vMBTCPPortSlaveStartServerTask(void)
-{
-    vTaskResume(xConfig.xMbTcpTaskHandle);
-}
-
 static int xMBTCPPortAcceptConnection(int xListenSockId, char** pcIPAddr)
 {
     MB_PORT_CHECK(pcIPAddr, -1, "Wrong IP address pointer.");
@@ -655,6 +650,11 @@ vMBTCPPortClose( )
     vMBPortEventClose( );
 }
 
+void vMBTCPPortEnable( void )
+{
+    vTaskResume(xConfig.xMbTcpTaskHandle);
+}
+
 void
 vMBTCPPortDisable( void )
 {
@@ -667,6 +667,7 @@ vMBTCPPortDisable( void )
             xConfig.pxMbClientInfo[i] = NULL;
         }
     }
+    free(xConfig.pxMbClientInfo);
     close(xListenSock);
     xListenSock = -1;
     vMBTCPPortRespQueueDelete(xConfig.xRespQueueHandle);

+ 0 - 7
components/freemodbus/tcp_slave/port/port_tcp_slave.h

@@ -101,13 +101,6 @@ typedef struct {
  */
 void vMBTCPPortSlaveSetNetOpt(void* pvNetIf, eMBPortIpVer xIpVersion, eMBPortProto xProto, CHAR* pcBindAddr);
 
-/**
- * Resume TCP Slave processing task
- *
- * @return None
- */
-void vMBTCPPortSlaveStartServerTask(void);
-
 #ifdef __cplusplus
 PR_END_EXTERN_C
 #endif

+ 1 - 1
examples/protocols/modbus/tcp/mb_tcp_slave/main/tcp_slave.c

@@ -98,7 +98,7 @@ static void start_mdns_service(void)
     ESP_ERROR_CHECK(mdns_init());
     //set mDNS hostname (required if you want to advertise services)
     ESP_ERROR_CHECK(mdns_hostname_set(hostname));
-    ESP_LOGI(SLAVE_TAG, "mdns hostname set to: [%s]", hostname);
+    ESP_LOGI(TAG, "mdns hostname set to: [%s]", hostname);
 
     //set default mDNS instance name
     ESP_ERROR_CHECK(mdns_instance_name_set(MB_MDNS_INSTANCE("esp32_")));