#include "uip.h"
#include "rtl8019dev.h"

/*****************************************************************************
*  Module Name:       Realtek 8019AS Driver Interface for uIP-AVR Port
*  
*  Created By:        Louis Beaudoin (www.embedded-creations.com)
*
*  Original Release:  September 21, 2002 
*
*  Module Description:  
*  Provides three functions to interface with the Realtek 8019AS driver
*  These functions can be called directly from the main uIP control loop
*  to send packets from uip_buf and uip_appbuf, and store incoming packets to
*  uip_buf
*
*  September 30, 2002 - Louis Beaudoin
*    Modifications required to handle the packet receive function changes in
*      rtl8019.c.  There is no longer a need to poll for an empty buffer or
*      an overflow.
*    Added support for the Imagecraft Compiler
*
*****************************************************************************/


#define IP_TCP_HEADER_LENGTH 40
#define TOTAL_HEADER_LENGTH (IP_TCP_HEADER_LENGTH+ETHERNET_HEADER_LENGTH)



void RTL8019dev_init(void)
{
	initRTL8019();
}


void RTL8019dev_send(void)
{
  RTL8019beginPacketSend(uip_len);
  
  // send packet, using data in uip_appdata if over the IP+TCP header size
  if( uip_len <= TOTAL_HEADER_LENGTH ) {
    RTL8019sendPacketData(uip_buf, uip_len);
  } else {
    uip_len -= TOTAL_HEADER_LENGTH;
    RTL8019sendPacketData(uip_buf, TOTAL_HEADER_LENGTH);
    RTL8019sendPacketData((unsigned char *)uip_appdata, uip_len);
  }
  
  RTL8019endPacketSend();
}



unsigned int RTL8019dev_poll(void)
{
	unsigned int packetLength;
	
	packetLength = RTL8019beginPacketRetreive();

	// if there's no packet or an error - exit without ending the operation
	if( !packetLength )
	  return 0;

	// drop anything too big for the buffer
	if( packetLength > UIP_BUFSIZE )
	{
	  RTL8019endPacketRetreive();
      return 0;
	}
	
	// copy the packet data into the uIP packet buffer
	RTL8019retreivePacketData( uip_buf, packetLength );
	RTL8019endPacketRetreive();
		
	return packetLength;
}
