Description
Source
Call Graph
Start Line: 206
int main(void)
{
uip_ipaddr_t ipaddr;
struct timer periodic_timer, arp_timer;
unsigned int i;
// System devices initialize
tapdev_init();
clock_init();
timer_set(&periodic_timer, CLOCK_SECOND / 2);
timer_set(&arp_timer, CLOCK_SECOND * 10);
// Init uIP
uip_init();
#ifndef __DHCPC_H__
// Set the IP address of this host
uip_ipaddr(ipaddr, HostIpAddress[0], HostIpAddress[1],
HostIpAddress[2], HostIpAddress[3]);
uip_sethostaddr(ipaddr);
uip_ipaddr(ipaddr, RoutIpAddress[0], RoutIpAddress[1],
RoutIpAddress[2], RoutIpAddress[3]);
uip_setdraddr(ipaddr);
uip_ipaddr(ipaddr, NetMask[0], NetMask[1], NetMask[2], NetMask[3]);
uip_setnetmask(ipaddr);
#else
printf("P: DHCP Supported\n\r");
uip_ipaddr(ipaddr, 0, 0, 0, 0);
uip_sethostaddr(ipaddr);
uip_ipaddr(ipaddr, 0, 0, 0, 0);
uip_setdraddr(ipaddr);
uip_ipaddr(ipaddr, 0, 0, 0, 0);
uip_setnetmask(ipaddr);
#endif
uip_setethaddr(MacAddress);
app_init();
while(1) {
uip_len = tapdev_read();
if(uip_len > 0) {
if(BUF->type == htons(UIP_ETHTYPE_IP)) {
uip_arp_ipin();
uip_input();
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0) {
uip_arp_out();
tapdev_send();
}
} else if(BUF->type == htons(UIP_ETHTYPE_ARP)) {
uip_arp_arpin();
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0) {
tapdev_send();
}
}
} else if(timer_expired(&periodic_timer)) {
timer_reset(&periodic_timer);
for(i = 0; i < UIP_CONNS; i++) {
uip_periodic(i);
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0) {
uip_arp_out();
tapdev_send();
}
}
#if UIP_UDP
for(i = 0; i < UIP_UDP_CONNS; i++) {
uip_udp_periodic(i);
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0) {
uip_arp_out();
tapdev_send();
}
}
#endif /* UIP_UDP */
/* Call the ARP timer function every 10 seconds. */
if(timer_expired(&arp_timer)) {
timer_reset(&arp_timer);
uip_arp_timer();
}
}
// Display Statistics
if ( USART_IsDataAvailable((AT91S_USART *)AT91C_BASE_DBGU) ) {
EmacStats stats;
DBGU_GetChar();
EMAC_GetStatistics(&stats, 1);
printf("=== EMAC Statistics ===\n\r");
printf(" .tx_packets = %d\n\r", stats.tx_packets);
printf(" .tx_comp = %d\n\r", stats.tx_comp);
printf(" .tx_errors = %d\n\r", stats.tx_errors);
printf(" .collisions = %d\n\r", stats.collisions);
printf(" .tx_exausts = %d\n\r", stats.tx_exausts);
printf(" .tx_underruns = %d\n\r", stats.tx_underruns);
printf(" .rx_packets = %d\n\r", stats.rx_packets);
printf(" .rx_eof = %d\n\r", stats.rx_eof);
printf(" .rx_ovrs = %d\n\r", stats.rx_ovrs);
printf(" .rx_bnas = %d\n\r", stats.rx_bnas);
}
}
return 0;
}