yincheng.zhong
3 天以前 2ebb8217f43b69f491620423ea4d5d5944d1f91d
keil/include/components/internet/src/Socket.c
@@ -18,8 +18,8 @@
 *                                  Macro                                      *
 *******************************************************************************/
/* SOICKET相关 */
#define SOCKET_SEND_QUEUE_BUF_SIZE                    (512)
#define SOCKET_RECV_QUEUE_BUF_SIZE                    (512)
#define SOCKET_SEND_QUEUE_BUF_SIZE                    (1024)
#define SOCKET_RECV_QUEUE_BUF_SIZE                    (2000)
#define SOCKET_SEND_QUEUE_MEMBER_CNT                  16
#define SOCKET_RECV_QUEUE_MEMBER_CNT                  16
@@ -46,7 +46,11 @@
    HIDO_UINT8 l_au8SendQueueBuf[SOCKET_SEND_QUEUE_BUF_SIZE];
    HIDO_UINT8 l_au8RecvQueueBuf[SOCKET_RECV_QUEUE_BUF_SIZE];
}ST_SocketData;
    HIDO_BOOL m_bUseHeartbeat;
    HIDO_UINT32 m_u32HeartbeatFreq;
    HIDO_CHAR m_acHeartbeatData[128];
} ST_SocketData;
/*******************************************************************************
 *                             Local Variable                                  *
@@ -307,23 +311,23 @@
        switch (pstSocketData->m_eState)
        {
            case SOCKET_STATE_CONNECT:
            case SOCKET_STATE_CLOSE_BEFORE_CONNECT:
            case SOCKET_STATE_CONNECTED:
            {
                pstSocketData->m_bHasRecvData = HIDO_FALSE;
                pstSocketData->m_eState = SOCKET_STATE_CLOSED;
        case SOCKET_STATE_CONNECT:
        case SOCKET_STATE_CLOSE_BEFORE_CONNECT:
        case SOCKET_STATE_CONNECTED:
        {
            pstSocketData->m_bHasRecvData = HIDO_FALSE;
            pstSocketData->m_eState = SOCKET_STATE_CLOSED;
                if (pstSocketData->m_fnEventProc != HIDO_NULL)
                {
                    pstSocketData->m_fnEventProc(i32SockID, SOCKET_EVENT_CLOSED, pstSocketData->m_pArg);
                }
                break;
            }
            default:
            if (pstSocketData->m_fnEventProc != HIDO_NULL)
            {
                break;
                pstSocketData->m_fnEventProc(i32SockID, SOCKET_EVENT_CLOSED, pstSocketData->m_pArg);
            }
            break;
        }
        default:
        {
            break;
        }
        }
    }
@@ -378,18 +382,20 @@
    pstSocketData->m_eState = SOCKET_STATE_CONNECTED;
    /* 重置队列 */
#if 0
    HIDO_VLQInit(&pstSocketData->m_stSendQueue, pstSocketData->l_au8SendQueueBuf,
            SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT);
                 SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT);
    if(SOCKET_TYPE_TCP == pstSocketData->m_eType)
    {
        HIDO_ArraryQueueInit(&pstSocketData->m_stTCPRecvQueue, pstSocketData->l_au8RecvQueueBuf,
                SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8));
                             SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8));
    }
    else
    {
        HIDO_VLQInit(&pstSocketData->m_stRecvQueue, pstSocketData->l_au8RecvQueueBuf,
                SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT);
                     SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT);
    }
#endif
    /* 通知上层 */
    if(pstSocketData->m_fnEventProc != HIDO_NULL)
@@ -420,7 +426,7 @@
    if(SOCKET_STATE_CLOSE_BEFORE_CONNECT == pstSocketData->m_eState)
    {
       return HIDO_ERR;
        return HIDO_ERR;
    }
    pstSocketData->m_eState = SOCKET_STATE_CLOSED;
@@ -457,15 +463,15 @@
    {
        for(i = 0; i < _u32Len; i++)
        {
           if(HIDO_ArraryQueueIn(&(pstSocketData->m_stTCPRecvQueue), &_pu8Data[i]) != HIDO_OK)
           {
               return HIDO_ERR;
           }
            if(HIDO_ArraryQueueIn(&(pstSocketData->m_stTCPRecvQueue), &_pu8Data[i]) != HIDO_OK)
            {
                return HIDO_ERR;
            }
        }
    }
    else
    {
       HIDO_VLQMemberStruct *pstMember = HIDO_NULL;
        HIDO_VLQMemberStruct *pstMember = HIDO_NULL;
        pstMember = HIDO_VLQGetEnqueueMember(&l_astSocketData[_i32SockID].m_stRecvQueue, _u32Len);
        if (pstMember != HIDO_NULL)
@@ -537,19 +543,19 @@
            pstSocketData->m_eState = SOCKET_STATE_CREATED;
            pstSocketData->m_fnEventProc = _fnEventProc;
            pstSocketData->m_pArg = _pArg;
            HIDO_VLQInit(&pstSocketData->m_stSendQueue, pstSocketData->l_au8SendQueueBuf,
                    SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT);
                         SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT);
            if(SOCKET_TYPE_TCP == _eSocketType)
            {
               HIDO_ArraryQueueInit(&pstSocketData->m_stTCPRecvQueue, pstSocketData->l_au8RecvQueueBuf,
                     SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8));
                HIDO_ArraryQueueInit(&pstSocketData->m_stTCPRecvQueue, pstSocketData->l_au8RecvQueueBuf,
                                     SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8));
            }
            else
            {
                HIDO_VLQInit(&pstSocketData->m_stRecvQueue, pstSocketData->l_au8RecvQueueBuf,
                      SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT);
                             SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT);
            }
            *_pi32SockID = i32SockID;
@@ -690,7 +696,7 @@
    if(HIDO_NULL == pstMember)
    {
        HIDO_Debug("socket[%d] send buf full\r\n", _i32SockID);
//        AIR780E_Reset();
        return HIDO_ERR;
    }
@@ -719,13 +725,13 @@
    }
    if(SOCKET_STATE_CLOSED == pstSocketData->m_eState || SOCKET_STATE_IDLE == pstSocketData->m_eState
          || SOCKET_STATE_CONNECT_FAILED == pstSocketData->m_eState || SOCKET_STATE_CREATED == pstSocketData->m_eState)
            || SOCKET_STATE_CONNECT_FAILED == pstSocketData->m_eState || SOCKET_STATE_CREATED == pstSocketData->m_eState)
    {
       *_pbResult = HIDO_TRUE;
        *_pbResult = HIDO_TRUE;
    }
    else
    {
       *_pbResult = HIDO_FALSE;
        *_pbResult = HIDO_FALSE;
    }
    return HIDO_OK;
@@ -762,6 +768,70 @@
}
/*******************************************************************************
 * Function Name     : Socket_UseHeartbeat
 *******************************************************************************/
HIDO_BOOL Socket_UseHeartbeat(HIDO_INT32 _i32SockID)
{
    ST_SocketData *pstSocketData = &l_astSocketData[_i32SockID];
    if(_i32SockID < 0 || _i32SockID >= SOCKET_NUM)
    {
        return HIDO_FALSE;
    }
    return pstSocketData->m_bUseHeartbeat;
}
/*******************************************************************************
 * Function Name     : Socket_SetHeartbeatData
 *******************************************************************************/
HIDO_INT32 Socket_HeartbeatConfig(HIDO_INT32 _i32SockID, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len, HIDO_UINT32 _u32HeartbeatFreq)
{
    ST_SocketData *pstSocketData = &l_astSocketData[_i32SockID];
    if(_i32SockID < 0 || _i32SockID >= SOCKET_NUM)
    {
        return HIDO_ERR;
    }
    pstSocketData->m_bUseHeartbeat = HIDO_TRUE;
    pstSocketData->m_u32HeartbeatFreq = _u32HeartbeatFreq;
    HIDO_UtilByteArrayToHexString(_pu8Data, _u32Len, pstSocketData->m_acHeartbeatData, sizeof(pstSocketData->m_acHeartbeatData), HIDO_FALSE);
    return HIDO_OK;
}
/*******************************************************************************
 * Function Name     : Socket_GetHeartbeatFreq
 *******************************************************************************/
HIDO_UINT32 Socket_GetHeartbeatFreq(HIDO_INT32 _i32SockID)
{
    ST_SocketData *pstSocketData = &l_astSocketData[_i32SockID];
    if(_i32SockID < 0 || _i32SockID >= SOCKET_NUM)
    {
        return 300;
    }
    return pstSocketData->m_u32HeartbeatFreq;
}
/*******************************************************************************
 * Function Name     : Socket_GetHeartbeatFreq
 *******************************************************************************/
HIDO_CHAR *Socket_GetHeartbeatData(HIDO_INT32 _i32SockID)
{
    ST_SocketData *pstSocketData = &l_astSocketData[_i32SockID];
    if(_i32SockID < 0 || _i32SockID >= SOCKET_NUM)
    {
        return 300;
    }
    return pstSocketData->m_acHeartbeatData;
}
/*******************************************************************************
 * Function Name     : Socket_Recv
 * Description       : 从Socket接收队列中读取数据
 * Input             : _i32Sock Socket描述符
@@ -785,22 +855,22 @@
    if(SOCKET_TYPE_TCP == pstSocketData->m_eType)
    {
       HIDO_UINT32 i = 0;
       HIDO_UINT32 u32RecvLen = 0;
        HIDO_UINT32 i = 0;
        HIDO_UINT32 u32RecvLen = 0;
       for(i = 0; i < _u32RecvBuffSize; i++)
       {
          if(HIDO_ArraryQueueOut(&pstSocketData->m_stTCPRecvQueue, &_pu8RecvBuff[i]) != HIDO_OK)
          {
             *_pu32RecvLen = u32RecvLen;
             return HIDO_OK;
          }
        for(i = 0; i < _u32RecvBuffSize; i++)
        {
            if(HIDO_ArraryQueueOut(&pstSocketData->m_stTCPRecvQueue, &_pu8RecvBuff[i]) != HIDO_OK)
            {
                *_pu32RecvLen = u32RecvLen;
                return HIDO_OK;
            }
          u32RecvLen++;
       }
            u32RecvLen++;
        }
       *_pu32RecvLen = u32RecvLen;
       i32Result = HIDO_OK;
        *_pu32RecvLen = u32RecvLen;
        i32Result = HIDO_OK;
    }
    else
    {