yincheng.zhong
2 天以前 2ebb8217f43b69f491620423ea4d5d5944d1f91d
keil/include/components/internet/src/AIR780ESocket.c
@@ -71,28 +71,28 @@
    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:
        {
    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;
        }
        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780ESocketHeartbeat), HIDO_NULL);
        break;
    }
    default:
    {
        return HIDO_EVENT_NO_PROC;
    }
    }
    return HIDO_EVENT_OK;
@@ -112,29 +112,29 @@
    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:
        {
    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;
        }
        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
        break;
    }
    default:
    {
        return HIDO_EVENT_NO_PROC;
    }
    }
    return HIDO_EVENT_OK;
@@ -157,108 +157,108 @@
    switch (_u32Event)
    {
        case HIDO_EVENT_ENTRY:
    case HIDO_EVENT_ENTRY:
    {
        l_i32SocketID = (HIDO_INT32) _pArg;
        HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CIPSTART=%d,\"%s\",\"%s\",%u\r\n", l_i32SocketID,
                           Socket_GetType(l_i32SocketID) == SOCKET_TYPE_TCP ? "TCP" : "UDP",
                           Socket_GetRemoteAddr(l_i32SocketID), Socket_GetRemotePort(l_i32SocketID));
        HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(180), _pstFSM, AIR780E_EVENT_DELAY);
        break;
    }
    case HIDO_EVENT_EXIT:
    {
        HIDO_ATLiteCmdSendOver(pstATDevice);
        HIDO_TimerCancel(u32FSMTimerID);
        break;
    }
    case HIDO_AT_EVENT_OK:
    {
        break;
    }
    case HIDO_AT_EVENT_ERROR:
    {
        Socket_OnConnectFailed(l_i32SocketID);
        l_u32FailedCnt++;
        if(l_u32FailedCnt >= 3)
        {
            l_i32SocketID = (HIDO_INT32) _pArg;
            HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CIPSTART=%d,\"%s\",\"%s\",%u\r\n", l_i32SocketID,
                    Socket_GetType(l_i32SocketID) == SOCKET_TYPE_TCP ? "TCP" : "UDP",
                    Socket_GetRemoteAddr(l_i32SocketID), Socket_GetRemotePort(l_i32SocketID));
            HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(180), _pstFSM, AIR780E_EVENT_DELAY);
            break;
            l_u32FailedCnt = 0;
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780E), HIDO_NULL);
        }
        case HIDO_EVENT_EXIT:
        {
            HIDO_ATLiteCmdSendOver(pstATDevice);
            HIDO_TimerCancel(u32FSMTimerID);
            break;
        }
        case HIDO_AT_EVENT_OK:
        {
            break;
        }
        case HIDO_AT_EVENT_ERROR:
        {
            Socket_OnConnectFailed(l_i32SocketID);
            l_u32FailedCnt++;
            if(l_u32FailedCnt >= 3)
            {
                l_u32FailedCnt = 0;
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780E), HIDO_NULL);
            }
            else
            {
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
            }
            break;
        }
        case AIR780E_EVENT_NUM_0:
        case AIR780E_EVENT_NUM_1:
        case AIR780E_EVENT_NUM_2:
        case AIR780E_EVENT_NUM_3:
        case AIR780E_EVENT_NUM_4:
        case AIR780E_EVENT_NUM_5:
        {
            HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
            HIDO_UINT32 u32ConnectID = 0;
         HIDO_DataStruct stEvent;
            if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n",
                    &u32ConnectID, &stEvent) != 2)
            {
                break;
            }
            if (l_i32SocketID == u32ConnectID)
            {
                if (strncmp(stEvent.m_pData, "ALREADY CONNECT", stEvent.m_u32Len) == 0
                    || strncmp(stEvent.m_pData, "CONNECT OK", stEvent.m_u32Len) == 0)
                {
                    l_u32FailedCnt = 0;
                    Socket_OnConnected(l_i32SocketID);
                    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)
                {
                    Socket_OnConnectFailed(l_i32SocketID);
                    l_u32FailedCnt++;
                    if (l_u32FailedCnt >= 3)
                    {
                        l_u32FailedCnt = 3;
                        Socket_Destroy(l_i32SocketID);
                        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
                    }
                    else
                    {
                        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
                    }
                }
            }
            break;
        }
        case AIR780E_EVENT_DELAY:
        else
        {
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
        }
        break;
    }
    case AIR780E_EVENT_NUM_0:
    case AIR780E_EVENT_NUM_1:
    case AIR780E_EVENT_NUM_2:
    case AIR780E_EVENT_NUM_3:
    case AIR780E_EVENT_NUM_4:
    case AIR780E_EVENT_NUM_5:
    {
        HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
        HIDO_UINT32 u32ConnectID = 0;
        HIDO_DataStruct stEvent;
        if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n",
                                 &u32ConnectID, &stEvent) != 2)
        {
            break;
        }
        default:
        if (l_i32SocketID == u32ConnectID)
        {
            return HIDO_EVENT_NO_PROC;
            if (strncmp(stEvent.m_pData, "ALREADY CONNECT", stEvent.m_u32Len) == 0
                    || strncmp(stEvent.m_pData, "CONNECT OK", stEvent.m_u32Len) == 0)
            {
                l_u32FailedCnt = 0;
                Socket_OnConnected(l_i32SocketID);
                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)
            {
                Socket_OnConnectFailed(l_i32SocketID);
                l_u32FailedCnt++;
                if (l_u32FailedCnt >= 3)
                {
                    l_u32FailedCnt = 3;
                    Socket_Destroy(l_i32SocketID);
                    HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
                }
                else
                {
                    HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
                }
            }
        }
        break;
    }
    case AIR780E_EVENT_DELAY:
    {
        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
        break;
    }
    default:
    {
        return HIDO_EVENT_NO_PROC;
    }
    }
    return HIDO_EVENT_OK;
@@ -278,55 +278,55 @@
    switch (_u32Event)
    {
        case HIDO_EVENT_ENTRY:
    case HIDO_EVENT_ENTRY:
    {
        l_i32SocketID = (HIDO_INT32) _pArg;
        HIDO_ATLiteCmdSend(pstATDevice, HIDO_TIMER_TICK_S(30), "AT+CIPCLOSE=%d\r\n", l_i32SocketID);
        break;
    }
    case HIDO_EVENT_EXIT:
    {
        HIDO_ATLiteCmdSendOver(pstATDevice);
        break;
    }
    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);
        break;
    }
    case AIR780E_EVENT_NUM_0:
    case AIR780E_EVENT_NUM_1:
    case AIR780E_EVENT_NUM_2:
    case AIR780E_EVENT_NUM_3:
    case AIR780E_EVENT_NUM_4:
    case AIR780E_EVENT_NUM_5:
    {
        HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
        HIDO_UINT32 u32ConnectID = 0;
        HIDO_DataStruct stEvent;
        if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n",
                                 &u32ConnectID, &stEvent) != 2)
        {
            l_i32SocketID = (HIDO_INT32) _pArg;
            HIDO_ATLiteCmdSend(pstATDevice, HIDO_TIMER_TICK_S(30), "AT+CIPCLOSE=%d\r\n", l_i32SocketID);
            break;
        }
        case HIDO_EVENT_EXIT:
        {
            HIDO_ATLiteCmdSendOver(pstATDevice);
            break;
        }
        case HIDO_AT_EVENT_ERROR:
        case HIDO_AT_EVENT_OK:
        case HIDO_AT_EVENT_TIMEOUT:
        if (strncmp(stEvent.m_pData, "CLOSE OK", stEvent.m_u32Len) == 0)
        {
            Socket_OnClosed(l_i32SocketID);
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
            break;
        }
      case AIR780E_EVENT_NUM_0:
        case AIR780E_EVENT_NUM_1:
        case AIR780E_EVENT_NUM_2:
        case AIR780E_EVENT_NUM_3:
        case AIR780E_EVENT_NUM_4:
        case AIR780E_EVENT_NUM_5:
        {
            HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
            HIDO_UINT32 u32ConnectID = 0;
            HIDO_DataStruct stEvent;
            if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n",
                    &u32ConnectID, &stEvent) != 2)
            {
                break;
            }
            if (strncmp(stEvent.m_pData, "CLOSE OK", stEvent.m_u32Len) == 0)
            {
                Socket_OnClosed(l_i32SocketID);
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
                break;
            }
            break;
        }
        default:
        {
            return HIDO_EVENT_NO_PROC;
        }
        break;
    }
    default:
    {
        return HIDO_EVENT_NO_PROC;
    }
    }
    return HIDO_EVENT_OK;
@@ -349,95 +349,95 @@
    switch (_u32Event)
    {
        case HIDO_EVENT_ENTRY:
    case HIDO_EVENT_ENTRY:
    {
        l_i32SocketID = (HIDO_INT32) _pArg;
        pstSendQueue = Socket_GetSocketSendQueue(l_i32SocketID);
        if(HIDO_NULL == pstSendQueue)
        {
            l_i32SocketID = (HIDO_INT32) _pArg;
            pstSendQueue = Socket_GetSocketSendQueue(l_i32SocketID);
            if(HIDO_NULL == pstSendQueue)
            {
                break;
            }
            l_pstMember = HIDO_VLQGetDequeueMember(pstSendQueue);
            if(HIDO_NULL == l_pstMember)
            {
                break;
            }
            HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CIPSEND=%d,%u\r\n", l_i32SocketID, l_pstMember->m_u32DataLen);
            break;
        }
        case HIDO_EVENT_EXIT:
        {
            l_pstMember = HIDO_NULL;
            HIDO_ATLiteCmdSendOver(pstATDevice);
            break;
        }
        case HIDO_AT_EVENT_OK:
        {
            //HIDO_Debug("OK\r\n");
            break;
        }
        case HIDO_AT_EVENT_ERROR:
        {
            Socket_OnClosed(l_i32SocketID);
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
            break;
        }
        case AIR780E_EVENT_ACK:
        {
            if(HIDO_ATLiteGetDebugFlag() == HIDO_TRUE)
            {
                HIDO_DebugHex((HIDO_UINT8 *)l_pstMember->m_pDataAddr, l_pstMember->m_u32DataLen);
            }
            HIDO_ATLiteDataSend(pstATDevice, 20000, (HIDO_UINT8 *)l_pstMember->m_pDataAddr, l_pstMember->m_u32DataLen);
        l_pstMember = HIDO_VLQGetDequeueMember(pstSendQueue);
        if(HIDO_NULL == l_pstMember)
        {
            break;
        }
        case AIR780E_EVENT_NUM_0:
        case AIR780E_EVENT_NUM_1:
        case AIR780E_EVENT_NUM_2:
        case AIR780E_EVENT_NUM_3:
        case AIR780E_EVENT_NUM_4:
        case AIR780E_EVENT_NUM_5:
      {
            HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
            HIDO_UINT32 u32ConnectID = 0;
            HIDO_DataStruct stEvent;
            if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n",
                    &u32ConnectID, &stEvent) != 2)
            {
                break;
            }
        HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CIPSEND=%d,%u\r\n", l_i32SocketID, l_pstMember->m_u32DataLen);
        break;
    }
    case HIDO_EVENT_EXIT:
    {
        l_pstMember = HIDO_NULL;
        HIDO_ATLiteCmdSendOver(pstATDevice);
        break;
    }
    case HIDO_AT_EVENT_OK:
    {
        //HIDO_Debug("OK\r\n");
        break;
    }
    case HIDO_AT_EVENT_ERROR:
    {
        Socket_OnClosed(l_i32SocketID);
        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL);
        break;
    }
    case AIR780E_EVENT_ACK:
    {
        if(HIDO_ATLiteGetDebugFlag() == HIDO_TRUE)
        {
            HIDO_DebugHex((HIDO_UINT8 *)l_pstMember->m_pDataAddr, l_pstMember->m_u32DataLen);
        }
            if (l_i32SocketID == u32ConnectID)
        HIDO_ATLiteDataSend(pstATDevice, 20000, (HIDO_UINT8 *)l_pstMember->m_pDataAddr, l_pstMember->m_u32DataLen);
        break;
    }
    case AIR780E_EVENT_NUM_0:
    case AIR780E_EVENT_NUM_1:
    case AIR780E_EVENT_NUM_2:
    case AIR780E_EVENT_NUM_3:
    case AIR780E_EVENT_NUM_4:
    case AIR780E_EVENT_NUM_5:
    {
        HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg;
        HIDO_UINT32 u32ConnectID = 0;
        HIDO_DataStruct stEvent;
        if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n",
                                 &u32ConnectID, &stEvent) != 2)
        {
            break;
        }
        if (l_i32SocketID == u32ConnectID)
        {
            if (strncmp(stEvent.m_pData, "SEND OK", stEvent.m_u32Len) == 0)
            {
                if (strncmp(stEvent.m_pData, "SEND OK", stEvent.m_u32Len) == 0)
                pstSendQueue = Socket_GetSocketSendQueue(l_i32SocketID);
                if (NULL == pstSendQueue)
                {
                    pstSendQueue = Socket_GetSocketSendQueue(l_i32SocketID);
                    if (NULL == pstSendQueue)
                    {
                        break;
                    }
                    break;
                }
                    HIDO_VLQDequeue(pstSendQueue, l_pstMember);
                    HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), NULL);
                }
                else if (strncmp(stEvent.m_pData, "SEND FAIL", stEvent.m_u32Len) == 0)
                {
                    Socket_OnClosed(l_i32SocketID);
                    HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), NULL);
                }
                HIDO_VLQDequeue(pstSendQueue, l_pstMember);
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), NULL);
            }
            else if (strncmp(stEvent.m_pData, "SEND FAIL", stEvent.m_u32Len) == 0)
            {
                Socket_OnClosed(l_i32SocketID);
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), NULL);
            }
        }
            break;
        }
        default:
        {
            return HIDO_EVENT_NO_PROC;
        }
        break;
    }
    default:
    {
        return HIDO_EVENT_NO_PROC;
    }
    }
    return HIDO_EVENT_OK;
@@ -468,7 +468,7 @@
        else if (SOCKET_STATE_CLOSE == Socket_GetSocketState(i32SocketIndex))
        {
            HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780ESocketClose),
                    (HIDO_VOID *) (HIDO_UINT32) i32SocketIndex);
                                (HIDO_VOID *) (HIDO_UINT32) i32SocketIndex);
            return HIDO_OK;
        }