Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
uIP device driver functions

These functions are used by a network device driver for interacting with uIP.

Data Structures

union  uip_buf_t
 The uIP packet buffer. More...
 

Macros

#define uip_buf   (uip_aligned_buf.u8)
 
#define uip_input()
 Process an incoming packet. More...
 

Functions

void uip_reass_over (void)
 Periodic processing for a connection identified by its number. More...
 

Variables

CCIF uip_buf_t uip_aligned_buf
 Packet buffer for incoming and outgoing packets. More...
 

#define uip_input ( )

Process an incoming packet.

This function should be called when the device driver has received a packet from the network. The packet from the device driver must be present in the uip_buf buffer, and the length of the packet should be placed in the uip_len variable.

When the function returns, there may be an outbound packet placed in the uip_buf packet buffer. If so, the uip_len variable is set to the length of the packet. If no packet is to be sent out, the uip_len variable is set to 0.

The usual way of calling the function is presented by the source code below.

uip_len = devicedriver_poll();
if(uip_len > 0) {
if(uip_len > 0) {
devicedriver_send();
}
}
Note
If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uIP ARP code before calling this function:
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
uip_len = ethernet_devicedrver_poll();
if(uip_len > 0) {
if(BUF->type == UIP_HTONS(UIP_ETHTYPE_IP)) {
if(uip_len > 0) {
ethernet_devicedriver_send();
}
} else if(BUF->type == UIP_HTONS(UIP_ETHTYPE_ARP)) {
if(uip_len > 0) {
ethernet_devicedriver_send();
}
}

Referenced by packet_input().

void uip_reass_over ( void  )

Periodic processing for a connection identified by its number.

This function does the necessary periodic processing (timers, polling) for a uIP TCP conneciton, and should be called when the periodic uIP timer goes off. It should be called for every connection, regardless of whether they are open of closed.

When the function returns, it may have an outbound packet waiting for service in the uIP packet buffer, and if so the uip_len variable is set to a value larger than zero. The device driver should be called to send out the packet.

The usual way of calling the function is through a for() loop like this:

for(i = 0; i < UIP_CONNS; ++i) {
uip_periodic(i);
if(uip_len > 0) {
devicedriver_send();
}
}
Note
If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uip_arp_out() function before calling the device driver:
for(i = 0; i < UIP_CONNS; ++i) {
uip_periodic(i);
if(uip_len > 0) {
ethernet_devicedriver_send();
}
}
Parameters
connThe number of the connection which is to be periodically polled.Abandon the reassembly of the current packet

Referenced by eventhandler().

CCIF uip_buf_t uip_aligned_buf

Packet buffer for incoming and outgoing packets.