| | |
| | | /******************************************************************************* |
| | | * 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 * |
| | |
| | | u32 TCPfailetimer; |
| | | HIDO_INT32 TCPClient_Poll(void) |
| | | { |
| | | // 如果TCP被暂停(路径下载期间),不进行重连操作 |
| | | if (l_bTCPPaused) { |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | if (Internet_IsIPReady() == HIDO_TRUE) |
| | | { |
| | | HIDO_UINT32 u32CurTick = HIDO_TimerGetTick(); |
| | |
| | | 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; |
| | | } |