#ifndef _USER_UDP_H_
#define _USER_UDP_H_

#include "lwip/err.h"
#include "lwip/udp.h"
#include "lwip/init.h"
#include "lwipopts.h"
#include "lwip/err.h"
#include "lwipopts.h"
#include "netif/xadapter.h"
#include "xil_printf.h"

typedef struct usdp
{
	uint32_t ipAddr;
	uint16_t port;
	uint16_t len;
	uint8_t dataBuf[1472];
} UserDefinePacket, USDP;

extern struct netif *netif, server_netif;
extern ip_addr_t ipaddr, netmask, gw;
extern struct udp_pcb *pcb;
extern unsigned char mac_ethernet_address[]; // MAC
extern unsigned local_port;
extern unsigned remote_port;

int UdpInit(void);

void UdpSendData(uint8_t *send_buff, int data_num);

void UdpRecvCallback(void *arg, struct udp_pcb *tpcb, struct pbuf *p, ip_addr_t *addr, u16_t port);

uint8_t RawUdpSend(uint8_t *send_buff, int data_num);

u8_t RawUdpRecvCallback(void *arg, struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *addr);

u8_t RawTcpRecvCallback(void *arg, struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *addr);

#endif
