00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _NIP_UDP_H
00032 #define _NIP_UDP_H
00033
00034 #include "nip_init.h"
00035 #include "mem.h"
00036
00037 #ifndef NIP_UDP_MAX_SOCKETS
00038
00039 #define NIP_UDP_MAX_SOCKETS 255
00040 #endif
00041
00042 #ifndef NIP_UDP_FIXED_SOCKETS
00043
00044 #define NIP_UDP_FIXED_SOCKETS 4
00045 #endif
00046
00047 #ifndef NIP_UDP_USE_FIXED_SOCKETS
00048
00049
00050
00051 #define NIP_UDP_USE_FIXED_SOCKETS 1
00052 #endif
00053
00054 #ifndef NIP_UDP_SOCKET_CHECK_INTVL
00055
00056
00057 #define NIP_UDP_SOCKET_CHECK_INTVL 1
00058 #endif
00059
00060 #ifndef NIP_UDP_PACKET_QUEUE_SIZE
00061
00062 #define NIP_UDP_PACKET_QUEUE_SIZE 4
00063 #endif
00064
00065 #if ( NIP_UDP_MAX_SOCKETS < 0xFF )
00066 typedef uint8_t nip_udp_sock_id_t;
00067 typedef uint8_t nip_udp_sock_cnt_t;
00068 #define NIP_UDP_NO_SOCKET 0xFF
00069 #elif ( NIP_UDP_MAX_SOCKETS < 0xFFFF )
00070 typedef uint16_t nip_udp_sock_id_t;
00071 typedef uint16_t nip_udp_sock_cnt_t;
00072 #define NIP_UDP_NO_SOCKET 0xFFFF
00073 #else
00074 typedef uint32_t nip_udp_sock_id_t;
00075 typedef uint32_t nip_udp_sock_cnt_t;
00076 #define NIP_UDP_NO_SOCKET 0xFFFFFFFF
00077 #endif
00078
00079
00080 #define NIP_UDP_EOQ NIP_UDP_PACKET_QUEUE_SIZE
00081
00082 #if ( NIP_UDP_PACKET_QUEUE_SIZE < 255 )
00083 typedef uint8_t nip_udp_queue_id_t;
00084 typedef uint8_t nip_udp_queue_cnt_t;
00085 #elif ( NIP_UDP_PACKET_QUEUE_SIZE < 65535 )
00086 typedef uint16_t nip_udp_queue_id_t;
00087 typedef uint16_t nip_udp_queue_cnt_t;
00088 #else
00089 typedef uint32_t nip_udp_queue_id_t;
00090 typedef uint32_t nip_udp_queue_cnt_t;
00091 #endif
00092
00093 #define NIP_UDP_SOCK_FLG_USED 0x01
00094 #define NIP_UDP_SOCK_FLG_NON_BLOCK 0x02
00095 #define NIP_UDP_SOCK_FLG_LISTENING 0x04
00096
00097 typedef enum
00098 {
00099 NIP_UDP_RX_BUF,
00100 NIP_UDP_TX_BUF
00101 }
00102 #ifndef DOXYGEN
00103 __attribute__((packed))
00104 #endif
00105 nip_udp_buf_type_t;
00106
00107 struct nip_udp_sock_addr
00108 {
00109 uint16_t port;
00110 uint8_t ip[4];
00111 }
00112 #ifndef DOXYGEN
00113 __attribute__((packed))
00114 #endif
00115 ;
00116
00117
00118
00119 struct nip_udp_buffer
00120 {
00121 nip_udp_sock_id_t sockid;
00122 nip_mem_size_t size;
00123 nip_mem_handle_t buf;
00124 nip_udp_queue_id_t next;
00125 struct nip_udp_sock_addr addr;
00126 }
00127 #ifndef DOXYGEN
00128 __attribute__((packed))
00129 #endif
00130 ;
00131
00132 struct nip_udp_sock
00133 {
00134 nip_udp_sock_id_t sockid;
00135 uint8_t flags;
00136 struct nip_udp_sock_addr addr;
00137 nip_mem_handle_t tx_packet;
00138
00139 nip_udp_queue_id_t rx_packet;
00140
00141 }
00142 #ifndef DOXYGEN
00143 __attribute__((packed))
00144 #endif
00145 ;
00146
00147 struct nip_udp_header{
00148 uint16_t src_port;
00149 uint16_t dst_port;
00150 uint16_t length;
00151 uint16_t checksum;
00152 }
00153 #ifndef DOXYGEN
00154 __attribute__((packed))
00155 #endif
00156 ;
00157
00158 nip_udp_sock_id_t nip_udp_socket( struct nip_udp_sock_addr *addr, uint8_t flags );
00159 void nip_udp_close( nip_udp_sock_id_t sockid );
00160
00161 void nip_udp_disp_send( void );
00162 void nip_udp_disp_receive( void );
00163
00164 nip_error_t nip_udp_init_send( nip_udp_sock_id_t sockid, nip_mem_size_t size );
00165 nip_error_t nip_udp_write( nip_udp_sock_id_t sockid, uint8_t *buf, nip_mem_size_t size);
00166 nip_error_t nip_udp_transmit( nip_udp_sock_id_t sockid, struct nip_udp_sock_addr *dest_addr, nip_net_if_id_t if_id );
00167 nip_mem_size_t nip_udp_recvfrom( nip_udp_sock_id_t sockid, uint8_t *buf, nip_mem_size_t size, struct nip_udp_sock_addr *from_addr );
00168
00169 void nip_udp_forward( nip_udp_sock_id_t sockid );
00170 void nip_udp_cancel_send( nip_udp_sock_id_t sockid );
00171 void nip_udp_cancel_recv( nip_udp_sock_id_t sockid );
00172
00173 nip_mem_handle_t nip_udp_buf_handle( nip_udp_sock_id_t sockid, nip_udp_buf_type_t buftype );
00174 void *nip_udp_data_ptr( nip_udp_sock_id_t sockid, nip_udp_buf_type_t buftype );
00175 void nip_udp_data_mem_ptr( nip_udp_sock_id_t sockid, nip_udp_buf_type_t buftype, nip_mem_ptr_t *res );
00176 void nip_udp_ptr_release( nip_udp_sock_id_t sockid, nip_udp_buf_type_t buftype );
00177
00178 #endif // _NIP_UDP_H