keil/include/components/internet/inc/Socket.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,355 @@
#ifndef FML_SOCKET_H_
#define FML_SOCKET_H_
#include "HIDO_TypeDef.h"
#include "HIDO_VLQueue.h"
#define SOCKET_NUM                                    3
typedef enum
{
    SOCKET_TYPE_NONE = 0,
    SOCKET_TYPE_TCP,
    SOCKET_TYPE_UDP,
} E_SocketType;
typedef enum
{
    SOCKET_STATE_IDLE = 0,
    SOCKET_STATE_CLOSED,
    SOCKET_STATE_CREATED,
    SOCKET_STATE_CONNECT,
    SOCKET_STATE_CLOSE_BEFORE_CONNECT,
    SOCKET_STATE_CLOSE,
    SOCKET_STATE_CONNECTED,
    SOCKET_STATE_CONNECT_FAILED,
} E_SocketState;
typedef enum
{
    SOCKET_EVENT_CONNECT_FAILED,
    SOCKET_EVENT_CONNECTED,
    SOCKET_EVENT_CLOSED,
    SOCKET_EVENT_RECV_DATA,
} E_SocketEvent;
typedef HIDO_VOID (*FN_SocketEventProc)(HIDO_INT32, E_SocketEvent, HIDO_VOID *);
/*******************************************************************************
 * Function Name     : Socket_HaveRecvData
 * Description       : é€šçŸ¥Socket有数据需要接收
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_HaveRecvData(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_NoRecvData
 * Description       : é€šçŸ¥Socket没有数据需要接收
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_NoRecvData(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_HasRecvData
 * Description       : èŽ·å–Socket是否有数据需要接收
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_TRUE æœ‰æ•°æ®éœ€è¦æŽ¥æ”¶, HIDO_FALSE æ²¡æœ‰æ•°æ®éœ€è¦æŽ¥æ”¶
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_BOOL Socket_HasRecvData(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_GetSocketRecvQueue
 * Description       : èŽ·å–Socket接收队列
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : Socket接收队列
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_VLQStruct *Socket_GetSocketRecvQueue(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_GetSocketSendQueue
 * Description       : èŽ·å–Socket发送队列
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : Socket发送队列
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_VLQStruct *Socket_GetSocketSendQueue(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_GetType
 * Description       : èŽ·å–Socke类型
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : Socke类型
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
E_SocketType Socket_GetType(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_GetSocketState
 * Description       : èŽ·å–Socke内部状态
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : Socke内部状态
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
E_SocketState Socket_GetSocketState(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_SetSocketState
 * Description       : è®¾ç½®Socke内部状态
 * Input             : _i32Sock Socket描述符
 *                   : _eState Socke内部状态
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_SetSocketState(HIDO_INT32 _i32SockID, E_SocketState _eState);
/*******************************************************************************
 * Function Name     : Socket_GetRemoteAddr
 * Description       : èŽ·å–Socket远程地址
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : è¿œç¨‹åœ°å€
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_CHAR *Socket_GetRemoteAddr(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_GetRemotePort
 * Description       : èŽ·å–Socket远程端口
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : è¿œç¨‹ç«¯å£
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_UINT16 Socket_GetRemotePort(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_RecvAll
 * Description       : å…¨éƒ¨Socket需要接收数据的通知
 * Input             : None
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_RecvAll(void);
/*******************************************************************************
 * Function Name     : Socket_ClosedAll
 * Description       : å…¨éƒ¨Socket被断开的通知
 * Input             : None
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_ClosedAll(void);
/*******************************************************************************
 * Function Name     : Socket_OnConnectFailed
 * Description       : Socket连接失败时的内部通知
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_OnConnectFailed(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_OnConnected
 * Description       : Socket连接成功时的内部通知
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_OnConnected(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_OnClosed
 * Description       : Socket被关闭时的内部通知
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_OnClosed(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_RecvData
 * Description       : Socket收到数据时的内部处理
 * Input             : _i32Sock Socket描述符
 *                   : _pu8Data æ”¶åˆ°çš„æ•°æ®
 *                   : _u32Len æ”¶åˆ°çš„æ•°æ®é•¿åº¦
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_RecvData(HIDO_INT32 _i32SockID, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len);
/*******************************************************************************
 * Function Name     : Socket_OnRecv
 * Description       : Socket收到数据时的内部通知
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_OnRecv(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_Create
 * Description       : Socket创建
 * Input             : _eSocketType Socket类型
 *                   : _fnEventProc Socket事件处理函数
 *                   : _pArg å‚æ•°
 * Output            : _pi32SockID Socket描述符
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_Create(HIDO_INT32 *_pi32SockID, E_SocketType _eSocketType, FN_SocketEventProc _fnEventProc, HIDO_VOID *_pArg);
/*******************************************************************************
 * Function Name     : Socket_Connect
 * Description       : Socket连接
 * Input             : _i32Sock Socket描述符
 *                   : _pcRemoteAddr ç›®æ ‡åœ°å€
 *                   : _u16RemotePort ç›®æ ‡ç«¯å£
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_Connect(HIDO_INT32 _i32SockID, HIDO_CHAR *_pcRemoteAddr, HIDO_UINT16 _u16RemotePort);
/*******************************************************************************
 * Function Name     : Socket_Close
 * Description       : å…³é—­ä¸€ä¸ªSocket
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_Close(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_Destroy
 * Description       : é”€æ¯ä¸€ä¸ªSocket
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_Destroy(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_IsSendQueueEmpty
 * Description       : åˆ¤æ–­å‘送队列是否为空
 * Input             : _i32Sock Socket描述符
 * Output            : None
 * Return            : HIDO_TRUE å‘送队列为空, HIDO_FALSE å‘送队列不为空
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_BOOL Socket_IsSendQueueEmpty(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_Send
 * Description       : Socket发送数据
 * Input             : _i32Sock Socket描述符
 *                   : _pu8Data å‘送的数据
 *                   : _u32DataLen å‘送的数据长度
 * Output            : None
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_Send(HIDO_INT32 _i32SockID, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32DataLen);
/*******************************************************************************
 * Function Name     : Socket_IsClosed
 * Description       : æ£€æŸ¥Socket是否已断开
 * Input             : _i32Sock Socket描述符
 * Output            : _pbResult æ–­å¼€çŠ¶æ€ HIDO_TRUE å·²æ–­å¼€  HIDO_FALSE æœªæ–­å¼€
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_IsClosed(HIDO_INT32 _i32SockID, HIDO_BOOL *_pbResult);
/*******************************************************************************
 * Function Name     : Socket_IsConnected
 * Description       : æ£€æŸ¥Socket是否已连接
 * Input             : _i32Sock Socket描述符
 * Output            : _pbResult è¿žæŽ¥çŠ¶æ€ HIDO_TRUE å·²è¿žæŽ¥  HIDO_FALSE æœªè¿žæŽ¥
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_IsConnected(HIDO_INT32 _i32SockID, HIDO_BOOL *_pbResult);
/*******************************************************************************
 * Function Name     : Socket_UseHeartbeat
 *******************************************************************************/
HIDO_BOOL Socket_UseHeartbeat(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_HeartbeatConfig
 *******************************************************************************/
HIDO_INT32 Socket_HeartbeatConfig(HIDO_INT32 _i32SockID, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len, HIDO_UINT32 _u32HeartbeatFreq);
/*******************************************************************************
 * Function Name     : Socket_GetHeartbeatFreq
 *******************************************************************************/
HIDO_UINT32 Socket_GetHeartbeatFreq(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_GetHeartbeatFreq
 *******************************************************************************/
HIDO_CHAR *Socket_GetHeartbeatData(HIDO_INT32 _i32SockID);
/*******************************************************************************
 * Function Name     : Socket_Recv
 * Description       : ä»ŽSocket接收队列中读取数据
 * Input             : _i32Sock Socket描述符
 *                   : _u32RecvBuffSize è¯»å–数据的缓存地址
 * Output            : _pu8RecvBuff è¯»å–数据的缓存
 *                   : _pu32RecvLen æ•°æ®é•¿åº¦
 * Return            : HIDO_OK æˆåŠŸ, HIDO_ERR å¤±è´¥
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018å¹´5月17日
 *******************************************************************************/
HIDO_INT32 Socket_Recv(HIDO_INT32 _i32SockID, HIDO_UINT8 *_pu8RecvBuff, HIDO_UINT32 _u32RecvBuffSize, HIDO_UINT32 *_pu32RecvLen);
#endif /* FML_GPRS_SOCKET_SOCKET_H_ */