WXK
2025-05-22 e7101a7064d3e6da5a946d64bb0e43a77377e2f0
keil/include/components/internet/src/AIR780ESocket.c
@@ -38,6 +38,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,14 +58,95 @@
 *******************************************************************************/
/*******************************************************************************
 * State Name        : AIR780ESocketHeartConfig
 * Parent State      : AIR780E
 * Description       :
 * Author            : 杜键
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
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
 * Description       :
 * 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;
@@ -134,7 +217,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)
                {
@@ -144,10 +238,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
@@ -200,6 +291,7 @@
        }
        case HIDO_AT_EVENT_ERROR:
        case HIDO_AT_EVENT_OK:
        case HIDO_AT_EVENT_TIMEOUT:
        {
            Socket_OnClosed(l_i32SocketID);
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
@@ -336,7 +428,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);
                }
            }