src.dualinventive.com/dinet/sec-multi-proxy/libdi/include/di/drv/hl854x/udp.h

136 lines
4.8 KiB
C

/**
* @file di/drv/hl854x/udp.h
* @{
*/
#ifndef DI_DRV_HL854X_UDP_H_
#define DI_DRV_HL854X_UDP_H_
#ifdef __cplusplus
extern "C" {
#endif
/** Local UDP session state */
enum di_drv_hl854x_udp_state {
HL854X_UDP_STATE_ERROR = -1, /**< Error (e.g received KUDP_NOTIF) */
HL854X_UDP_STATE_UNKNOWN = 0, /**< Session state unknown */
HL854X_UDP_STATE_WRITTEN = 1, /**< Session configuration written to modem */
HL854X_UDP_STATE_CONFIGURED = 2, /**< Session configured (acknowledged by the modem) */
HL854X_UDP_STATE_READY = 3, /**< Session ready for use */
};
/** KUDP_IND codes */
enum di_drv_hl854x_kudp_ind {
DI_DRV_HL854X_KUDP_IND_UNKNOWN = -1, /**< Session indicator unknown (internal number) */
DI_DRV_HL854X_KUDP_IND_READY = 1, /**< Session modem ready indicator */
};
/** KUDP_NOTIF codes */
enum di_drv_hl854x_kudp_notif {
DI_DRV_HL854X_KUDP_NOTIF_NETWORK_ERROR = 0,
DI_DRV_HL854X_KUDP_NOTIF_NO_MORE_SOCK = 1,
DI_DRV_HL854X_KUDP_NOTIF_MEMORY_PROB = 2,
DI_DRV_HL854X_KUDP_NOTIF_DNS_ERROR = 3,
DI_DRV_HL854X_KUDP_NOTIF_CONN_ERR_HOST_UNREACH = 5,
DI_DRV_HL854X_KUDP_NOTIF_GENERIC_ERROR = 6,
DI_DRV_HL854X_KUDP_NOTIF_SENDOK_MORE_OR_LESS_DATA = 8,
DI_DRV_HL854X_KUDP_NOTIF_BAD_SESSION_ID = 9,
DI_DRV_HL854X_KUDP_NOTIF_SESSION_ALREADY_RUNNING = 10,
DI_DRV_HL854X_KUDP_NOTIF_ALL_SESSIONS_USED = 11,
};
struct di_buffer;
struct di_drv_hl854x_ctx_udp;
/**
* Initialize the UDP session context
* @note May only be called once
* @param ctx Modem UDP session context
*/
void di_drv_hl854x_udp_init(struct di_drv_hl854x_ctx_udp *ctx);
/**
* Set the local port where the UDP session listens on
* @param ctx Modem driver context
* @param port Port (valid 1 to 2^16-1)
*/
void di_drv_hl854x_udp_set_local_port(struct di_drv_hl854x_ctx *ctx, const char *port);
/**
* Set the remote endpoint for the UDP session
* @param ctx Modem driver context
* @param addr Remote host address (ip address or DNS name)
* @param port Remote host port (valid 1 to 2^16-1)
*/
void di_drv_hl854x_udp_set_remote_endpoint(struct di_drv_hl854x_ctx *ctx, const char *addr, const char *port);
/**
* Get the current local state of the UDP session
* @param ctx Modem driver context
*/
enum di_drv_hl854x_udp_state di_drv_hl854x_udp_get_state(struct di_drv_hl854x_ctx *ctx);
/**
* Open/configure the UDP session as a listening server, it is safe to call it multiple times. Before calling this
* function one must make sure the modem has an carrier and an active PDP session
* (e.g calling di_drv_hl854x_is_connected).
* @note It can take some time for the modem to respond, for getting to know the actual session state
* di_drv_hl854x_udp_get_state must be used after this function is successful.
* @return DNOK when session configuration is written.
*/
di_errno_t di_drv_hl854x_udp_open(struct di_drv_hl854x_ctx *ctx);
/**
* Close the UDP session and delete the session configuration
* @param ctx Modem driver context
* @return DNOK when session is successfully closed.
*/
di_errno_t di_drv_hl854x_udp_close(struct di_drv_hl854x_ctx *ctx);
/**
* Send buffer over UDP
* @param[in] ctx Modem driver context
* @param[in] buf Buffer to send
* @param size Size in bytes of the buffer to send
* @return DNOK when send, !DNOK in case of an error
*/
di_errno_t di_drv_hl854x_udp_send(struct di_drv_hl854x_ctx *ctx, const void *buf, const size_t size);
/**
* Send di_buffer over UDP
* @param[in] ctx Modem driver context
* @param[in] buf DI buffer to send (the amount of bytes must be present in buf->used)
* @return DNOK when send, !DNOK in case of an error
*/
di_errno_t di_drv_hl854x_udp_send_buffer(struct di_drv_hl854x_ctx *ctx, const struct di_buffer *buf);
/**
* Wait until data available on the active UDP session.
* @note Upon succesfull call the UDP session ndata_available is reset to zero.
* @param ctx Modem driver context
* @param timeout_ms Timeout in milliseconds (or HL854X_TIMEOUT_INFINITE)
* @param[out] ndata_available Amount of bytes available for receive on the active UDP session
* @retval DNOK when data is available
* @retval DNE_DISCONNECTED when there is no active UDP session
* @retval DNE_TIMEOUT when there is no data available and timeout is reached
*/
di_errno_t di_drv_hl854x_udp_recv_wait_ndata_available(struct di_drv_hl854x_ctx *ctx,
uint32_t timeout_ms, size_t *ndata_available);
/**
* Receive available data from the active UDP session
* @param ctx Driver context
* @param[out] buf Destination buffer to write available data into
* @param size Size in bytes to be received
* @retval 0 when recv failed
* @retval size when recv was succesfull
*/
size_t di_drv_hl854x_udp_recv(struct di_drv_hl854x_ctx *ctx, void *buf, const size_t size);
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* DI_DRV_HL854X_UDP_H_ */