From 562254e0f3c501306147bd88807596ee51c0390e Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 25 十二月 2024 10:12:07 +0800 Subject: [PATCH] 调试完成,功耗可以 目前是5分钟上发一次心跳包 --- FML/Internet/Module/AIR780E/AIR780ESocket.c | 98 +++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 91 insertions(+), 7 deletions(-) diff --git a/FML/Internet/Module/AIR780E/AIR780ESocket.c b/FML/Internet/Module/AIR780E/AIR780ESocket.c index 243909a..8c691fe 100644 --- a/FML/Internet/Module/AIR780E/AIR780ESocket.c +++ b/FML/Internet/Module/AIR780E/AIR780ESocket.c @@ -39,6 +39,8 @@ HIDO_FSM_STATE_FULL_DECLARE(AIR780EIPReady, AIR780ESocketClose) /* SOCKET关闭状态 */ HIDO_FSM_STATE_FULL_DECLARE(AIR780EIPReady, AIR780ESocketSendData) /* SOCKET发送数据状态 */ HIDO_FSM_STATE_FULL_DECLARE(AIR780EIPReady, AIR780ESocketSendAck) +HIDO_FSM_STATE_FULL_DECLARE(AIR780EIPReady, AIR780ESocketHeartConfig) +HIDO_FSM_STATE_FULL_DECLARE(AIR780EIPReady, AIR780ESocketHeartbeat) static HIDO_BOOL l_abSocketUnAck[SOCKET_NUM]; static HIDO_UINT32 l_au32SocketUnAckTick[SOCKET_NUM]; @@ -56,6 +58,82 @@ * Global Function * *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780ESocketHeartConfig, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + static HIDO_INT32 l_i32SocketID = 0; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + l_i32SocketID = (HIDO_INT32) _pArg; + HIDO_ATLiteCmdSend(pstATDevice, HIDO_TIMER_TICK_S(30), "AT^HEARTCONFIG=1,%d,%u\r\n", l_i32SocketID, Socket_GetHeartbeatFreq(l_i32SocketID)); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_OK: + { + + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780ESocketHeartbeat), HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780ESocketHeartbeat + * Parent State : AIR780E + * Description : + * Author : 杜键 + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780ESocketHeartbeat, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + static HIDO_INT32 l_i32SocketID = 0; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + l_i32SocketID = (HIDO_INT32) _pArg; + HIDO_ATLiteCmdSend(pstATDevice, HIDO_TIMER_TICK_S(30), "AT^HEARTBEATHEX=%d,%u,%s\r\n", l_i32SocketID, + strlen(Socket_GetHeartbeatData(l_i32SocketID)) / 2, Socket_GetHeartbeatData(l_i32SocketID)); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_OK: + { + + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + /******************************************************************************* * State Name : AIR780ESocketConnect * Parent State : AIR780E @@ -63,8 +141,6 @@ * Author : 杜键 * Modified Date: : 2018-05-01 *******************************************************************************/ -//extern uint8_t TCPfail_flag; -//extern uint32_t TCPfailetimer; HIDO_FSM_STATE_IMPLEMENT(AIR780ESocketConnect, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) { static HIDO_INT32 l_i32SocketID = 0; @@ -135,7 +211,18 @@ { l_u32FailedCnt = 0; Socket_OnConnected(l_i32SocketID); - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL); + + if(Socket_UseHeartbeat(l_i32SocketID)) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780ESocketHeartConfig), HIDO_NULL); + + } + else + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL); + } + + break; } else if (strncmp(stEvent.m_pData, "CONNECT FAIL", stEvent.m_u32Len) == 0) { @@ -145,10 +232,7 @@ if (l_u32FailedCnt >= 3) { l_u32FailedCnt = 3; - //TCPfail_flag = 1; Socket_Destroy(l_i32SocketID); - //TCPfailetimer = HIDO_TimerGetTick(); - // HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780E), HIDO_NULL); HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL); } else @@ -337,7 +421,7 @@ else if (strncmp(stEvent.m_pData, "SEND FAIL", stEvent.m_u32Len) == 0) { Socket_OnClosed(l_i32SocketID); - HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), NULL); + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), NULL); } } -- Gitblit v1.9.3