//LWIP_LIB R1.1, Added a MS_TIMER that lwip_lib maintains.

//LWIP_LIB R1.0, updated to work with Xilinx LWIP 1.0.a (i.e., LWIP 1.3.0)
//   Updates are marked by "!!!jwh" -- if there is a problem, look for
//   that first!

#ifndef LWIP_LIB_H_
#define LWIP_LIB_H_

//!!!jwh
#include <string.h>				//needed for memcpy

/* Xilinx Includes */
// Need this for XPAR_CPU_CORE_CLOCK_FREQ_HZ
#include "xparameters.h"

//!!!jwh -- using upper level timer
//// Need this for timer interrupt stuff
//#include "xtmrctr_l.h"
#include "xtmrctr.h"

//!!!jwh added interrupt controller
#include "xintc.h"

/* lwIP Includes */
#include "netif/xemacliteif.h"
#include "lwip/tcp.h"
#include "lwip/memp.h"
#include "netif/etharp.h"

//!!!jwh -- want to look at stats
#include "lwip/stats.h"

#include "xstatus.h"

typedef Xint8   int8;
typedef Xuint8  uint8;
typedef Xuint16 uint16;

// We're ignoring this value for now, in favor of a timer interrupt every 1ms
// (see start_interrupt_timer())
#define LWIP_TIMER_CYCLES (XPAR_CPU_CORE_CLOCK_FREQ_HZ / 1000 * TCP_TMR_INTERVAL )

volatile Xuint32 ms_timer;

uint8 *lwip_lib_full_startup( uint8 mac[6], 
							  uint8 ip[4], uint8 subnet[4], uint8 gateway[4], 
							  uint16 port, 
							  uint8 numSendBufs, uint16 sendBufSize, 
							  uint16 recvBufSize);


XStatus lwip_lib_init( uint8 mac[6], uint8 ip[4], uint8 subnet[4], uint8 gateway[4] );
uint8  *lwip_lib_configure_buffers( uint8 numSendBufs, uint16 sendBufSize, uint16 recvBufSize );
XStatus lwip_lib_start( uint16 tcp_port );

Xboolean lwip_lib_is_connected();
void lwip_lib_close_connection();

uint16 lwip_lib_receive_data( uint8 *application_buffer );
uint8* lwip_lib_send_data( uint8 *application_buffer, uint16 len );


#endif /*LWIP_LIB_H_*/
