STM32H743/APL/TCPClient.c
@@ -15,11 +15,11 @@
#include "string.h"
#include "HIDO_Timer.h"
#include "HIDO_Util.h"
#include "Battery.h"
//#include "Battery.h"
#include "global_param.h"
#include "AppConfig.h"
#include "OTA.h"
#include "Log.h"
//#include "OTA.h"
//#include "Log.h"
#include "Uart.h"
/*******************************************************************************
@@ -29,20 +29,17 @@
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
typedef enum
{
    TCP_CLIENT_STATE_IDLE,
    TCP_CLIENT_STATE_CONNECTING,
    TCP_CLIENT_STATE_CONNECTED,
}E_TCPClientState;
/*******************************************************************************
 *                             Local Variable                                  *
 *******************************************************************************/
HIDO_INT32 l_i32TCPClientID = 0;
static E_TCPClientState l_eTCPClientState = TCP_CLIENT_STATE_IDLE;
E_TCPClientState l_eTCPClientState = TCP_CLIENT_STATE_IDLE;  /* 导出供PathTest使用 */
static HIDO_UINT32 l_u32HeartBeatTick = 0;
static HIDO_UINT8 l_au8CmdBuff[1024];
static HIDO_BOOL l_bTCPPaused = HIDO_FALSE;  /* TCP暂停标志(路径下载期间) */
static E_TCPClientState l_eSavedTCPState = TCP_CLIENT_STATE_IDLE;  /* 保存的TCP状态 */
/*******************************************************************************
 *                        Local Function Declaration                           *
@@ -146,6 +143,11 @@
u32 TCPfailetimer;
HIDO_INT32 TCPClient_Poll(void)
{
    // 如果TCP被暂停(路径下载期间),不进行重连操作
    if (l_bTCPPaused) {
        return HIDO_OK;
    }
    if (Internet_IsIPReady() == HIDO_TRUE)
    {
        HIDO_UINT32 u32CurTick = HIDO_TimerGetTick();
@@ -198,7 +200,68 @@
HIDO_INT32 TCPClient_Init(void)
{
    l_eTCPClientState = TCP_CLIENT_STATE_IDLE;
    l_bTCPPaused = HIDO_FALSE;
    Socket_Create(&l_i32TCPClientID, SOCKET_TYPE_TCP, TCPClient_SocketEventProc, HIDO_NULL);
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : TCPClient_Pause
 * Description       : 暂停TCP连接(用于路径下载期间避免差分数据干扰)
 * Input             : None
 * Output            : None
 * Return            : HIDO_OK
 *******************************************************************************/
HIDO_INT32 TCPClient_Pause(void)
{
    if (l_bTCPPaused) {
        HIDO_Debug("[TCPClient] Already paused\r\n");
        return HIDO_OK;
    }
    HIDO_Debug("[TCPClient] Pausing TCP connection...\r\n");
    // 保存当前状态
    l_eSavedTCPState = l_eTCPClientState;
    // 如果当前已连接,关闭连接
    if (l_eTCPClientState == TCP_CLIENT_STATE_CONNECTED ||
        l_eTCPClientState == TCP_CLIENT_STATE_CONNECTING) {
        Socket_Close(l_i32TCPClientID);
        l_eTCPClientState = TCP_CLIENT_STATE_IDLE;
        HIDO_Debug("[TCPClient] TCP connection closed\r\n");
    }
    // 设置暂停标志
    l_bTCPPaused = HIDO_TRUE;
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : TCPClient_Resume
 * Description       : 恢复TCP连接(路径下载完成后)
 * Input             : None
 * Output            : None
 * Return            : HIDO_OK
 *******************************************************************************/
HIDO_INT32 TCPClient_Resume(void)
{
    if (!l_bTCPPaused) {
        HIDO_Debug("[TCPClient] Not paused, no need to resume\r\n");
        return HIDO_OK;
    }
    HIDO_Debug("[TCPClient] Resuming TCP connection...\r\n");
    // 清除暂停标志
    l_bTCPPaused = HIDO_FALSE;
    // 重置状态为IDLE,让Poll函数自动重连
    l_eTCPClientState = TCP_CLIENT_STATE_IDLE;
    HIDO_Debug("[TCPClient] TCP will reconnect automatically\r\n");
    return HIDO_OK;
}