nt9856x/rtos/code/lib/include/UsockIpc/UsockIpcAPI.h
2023-03-28 15:07:53 +08:00

252 lines
6.6 KiB
C
Executable File

/**
User socket export variables and function prototypes.
UsockIpc is simple socket API.
Through this API user can send and receive network data.
@file UsockIpcAPI.h
@ingroup mIUsockIpcAPI
Copyright Novatek Microelectronics Corp. 2015. All rights reserved.
*/
#ifndef _USOCKIPCAPI_H
#define _USOCKIPCAPI_H
#ifdef __ECOS
#define USE_IPC 0
#elif defined (__FREERTOS)
#define USE_IPC 0
#elif defined (__LINUX_USER__)
#define USE_IPC 0
#else
#define USE_IPC 1
#endif
#include "kwrap/type.h"
/**
@name Usocket error status.
*/
//@{
#define USOCKET_RET_OK 0 // funcion success
#define USOCKET_RET_OPENED 1 // is opend
#define USOCKET_RET_ERR (-1) // function fail
#define USOCKET_RET_NO_FUNC (-2) // no command function
#define USOCKET_RET_NOT_OPEN (-3) // not open ipc
#define USOCKET_RET_ERR_PAR (-4) // error parameter
//@}
/**
usocket ID
*/
typedef enum _USOCKIPC_ID {
USOCKIPC_ID_0 = 0, ///< usocket 0
USOCKIPC_ID_1 = 1, ///< usocket 1
USOCKIPC_ID_2 = 2, ///< usocket 2
USOCKIPC_ID_3 = 3, ///< usocket 3
USOCKIPC_ID_4 = 4, ///< usocket 4
USOCKIPC_MAX_NUM, ///< Number of usocket
ENUM_DUMMY4WORD(USOCKIPC_ID)
} USOCKIPC_ID;
typedef struct {
UINT32 sharedMemAddr; // shared memory address
UINT32 sharedMemSize; // shared memory size
} USOCKIPC_OPEN;
#if (!USE_IPC)
#ifdef __ECOS //use thirdParty include file
#include <cyg/usocket/usocket.h>
#else //use tmp usocket.h file for compile
#include "usocket.h"
#endif
#else
/**
Usocket receive prototype.
User can register receive callback in UsockIpc_Init().
It would be a callback function so it would use usocket task.
@param[out] addr receive buffer address.
@param[out] size receive data size.
@return user can return result back.
*/
typedef int usocket_recv(char *addr, int size);
/**
Usocket notify prototype.
User can register notify callback in UsockIpc_Init().
@param[out] status client connet status.
@param[out] parm connet parameter.
@return void.
*/
typedef void usocket_notify(int status, int parm);
/**
Usocket install structure.
*/
typedef struct {
usocket_notify *notify; ///< notify connect status.
usocket_recv *recv; ///< socket receive data callback.
int portNum; ///< socket port number.
int threadPriority; ///< socket thread priority.
int sockbufSize; ///< socket buffer size.
int client_socket; ///< client socket identity.
} usocket_install_obj;
/**
@name Usocket notify status.
*/
//@{
#define CYG_USOCKET_STATUS_CLIENT_CONNECT 0 // client connect.
#define CYG_USOCKET_STATUS_CLIENT_REQUEST 1 // client has request comimg in
#define CYG_USOCKET_STATUS_CLIENT_DISCONNECT 2 // client disconnect.
#define CYG_USOCKET_UDP_STATUS_CLIENT_REQUEST 3 // udp client has request comimg in
//@}
#endif
/**
Install UsockIpc flag and semaphore id.
@return void.
*/
extern void UsockIpc_InstallID(void) _SECTION(".kercfg_text");
/**
Open user socket IPC task.
This API would open IPC of user socket.
It would run before UsockIpc_Init();
@param[in] id usocket id
@param[in] pOpen user should assign none-cacha buffer for IPC
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpcMulti_Open(USOCKIPC_ID id,USOCKIPC_OPEN *pOpen);
/**
Close user socket IPC task.
This API would close IPC of user socket.
It should run after UsockIpc_Uninit();
@param[in] id usocket id
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpcMulti_Close(USOCKIPC_ID id);
/**
UsockIpc Init.
This is user socket initialization function.
@param[in] id usocket id
@param[out] pObj init socket parameter.
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpcMulti_Init(USOCKIPC_ID id,usocket_install_obj *pObj);
/**
User socket send data.
@param[in] id usocket id
@param[out] addr Send buffer address.
Buffer address must be 16 bytes alignment.
Buffer size also need 16 byte alignment;even data is not alignment.
@param[in,out] size Send data size,and would return real send data size.
Size address must be 16 bytes alignment.
@return
- @b (0) send success.
- @b (-1) send fail.
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpcMulti_Send(USOCKIPC_ID id,char *addr, int *size);
/**
User socket Uninit.
This API would close user socket.
@param[in] id usocket id
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpcMulti_Uninit(USOCKIPC_ID id);
/**
UsockIpc UDP Init.
This is user UDP socket initialization function.
@param[out] pObj init UDP socket parameter.
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpc_Udp_Init(usocket_install_obj *pObj);
/**
User socket send UDP data back to UDP client which ever send to UDP server.
@param[out] addr Send buffer address.
@param[in,out] size Send data size,and would return real send data size.
@return
- @b (0) send success.
- @b (-1) send fail.
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpc_Udp_Send(char *addr, int *size);
/**
User socket UDP sendto.
@param[in] dest_ip destination IP addr.
@param[in] dest_port destination port.
@param[out] buf Send buffer address.
@param[in,out] size Send data size,and would return real send data size.
@return
- @b (0) send success.
- @b (-1) send fail.
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpc_Udp_Sendto(char *dest_ip, int dest_port, char *buf, int *size);
/**
User UDP socket Uninit.
This API would close user socket.
@return
- @b E_OK if success, others fail
*/
extern ER UsockIpc_Udp_Uninit(void);
#define UsockIpc_Open(pOpen) UsockIpcMulti_Open(USOCKIPC_ID_0,pOpen)
#define UsockIpc_Close() UsockIpcMulti_Close(USOCKIPC_ID_0)
#define UsockIpc_Init(pObj) UsockIpcMulti_Init(USOCKIPC_ID_0,pObj)
#define UsockIpc_Send(addr,size) UsockIpcMulti_Send(USOCKIPC_ID_0,addr,size)
#define UsockIpc_Uninit() UsockIpcMulti_Uninit(USOCKIPC_ID_0)
#endif /* _USOCKIPCAPI_H */