void stack_init(void) { uip_ipaddr_t ipaddr; struct uip_eth_addr mac; mac.addr[0] = mac_addr[0]; mac.addr[1] = mac_addr[1]; mac.addr[2] = mac_addr[2]; mac.addr[3] = mac_addr[3]; mac.addr[4] = mac_addr[4]; mac.addr[5] = mac_addr[5]; timer_set(&periodic_timer, CLOCK_SECOND / 2); timer_set(&arp_timer, CLOCK_SECOND * 10); timer_set(&self_arp_timer, CLOCK_SECOND * 30); uip_init(); uip_setethaddr(mac); udpapp_init(); tcp_app_init(); uip_ipaddr(ipaddr, local_ip[0], local_ip[1], local_ip[2], local_ip[3]); uip_sethostaddr(ipaddr); uip_ipaddr(ipaddr, gateway_ip[0],gateway_ip[1],gateway_ip[2],gateway_ip[3]); uip_setdraddr(ipaddr); uip_ipaddr(ipaddr, subnet_mask[0],subnet_mask[1],subnet_mask[2],subnet_mask[3]); uip_setnetmask(ipaddr); }
int main(void) { uint32_t lastperiodic = 0; uint32_t lastarp = 0; uint8_t i; sysclk_init(); clock_init(); /* Interrupts aktivieren. */ IE |= (1 << _EA); io_init(); emif_init(); uart_init(); cp2200_init(); uip_init(); uip_arp_init(); memcpy(uip_ethaddr.addr, mac_addr, sizeof(uip_ethaddr.addr)); tcp_app_init(); udp_app_init(); while(1 > 0) { uip_len = cp2200_receive(uip_buf, UIP_CONF_BUFFER_SIZE); if(uip_len > 0) { if(UIP_BUFFER->type == HTONS(UIP_ETHTYPE_IP)) { uip_arp_ipin(); uip_input(); if(uip_len > 0) { uip_arp_out(); cp2200_transmit(uip_buf, uip_len); } } else if(UIP_BUFFER->type == HTONS(UIP_ETHTYPE_ARP)) { uip_arp_arpin(); if(uip_len > 0) { cp2200_transmit(uip_buf, uip_len); } } } else if((get_clock() - lastperiodic) > CLOCK_TICKS_PER_SECOND / 2) { lastperiodic = get_clock(); for(i = 0; i < UIP_CONNS; i++) { uip_periodic(i); if(uip_len > 0) { uip_arp_out(); cp2200_transmit(uip_buf, uip_len); } } for(i = 0; i < UIP_UDP_CONNS; i++) { uip_udp_periodic(i); if(uip_len > 0) { uip_arp_out(); cp2200_transmit(uip_buf, uip_len); } } } if((get_clock() - lastarp) > CLOCK_TICKS_PER_SECOND * 10) { lastarp = get_clock(); uip_arp_timer(); } } return 0; }
int main(void) { uint32_t lastperiodic = 0; uint32_t lastarp = 0; uint32_t lastupdate = 0; uint8_t i; // , x; // char buffer[32]; uart_init(); clock_init(); sei(); while(get_clock() < CLOCK_TICKS_PER_SECOND * 3); serconn_init(); lastupdate = get_clock(); memcpy_P(uip_ethaddr.addr, mac_addr, sizeof(uip_ethaddr.addr)); enc28j60_init(uip_ethaddr.addr); uip_init(); uip_arp_init(); /* Seed fuer den Zufallsgenerator setzen. */ srandom(get_seed()); tcp_app_init(); udp_app_init(); while(1 > 0) { uip_len = enc28j60_receive(uip_buf, UIP_CONF_BUFFER_SIZE); if(uip_len > 0) { if(UIP_BUFFER->type == HTONS(UIP_ETHTYPE_IP)) { uip_arp_ipin(); uip_input(); if(uip_len > 0) { uip_arp_out(); enc28j60_transmit(uip_buf, uip_len); } } else if(UIP_BUFFER->type == HTONS(UIP_ETHTYPE_ARP)) { uip_arp_arpin(); if(uip_len > 0) enc28j60_transmit(uip_buf, uip_len); } } else if((get_clock() - lastperiodic) > CLOCK_TICKS_PER_SECOND / 2) { lastperiodic = get_clock(); for(i = 0; i < UIP_CONNS; i++) { uip_periodic(i); if(uip_len > 0) { uip_arp_out(); enc28j60_transmit(uip_buf, uip_len); } } for(i = 0; i < UIP_UDP_CONNS; i++) { uip_udp_periodic(i); if(uip_len > 0) { uip_arp_out(); enc28j60_transmit(uip_buf, uip_len); } } } if((get_clock() - lastarp) > CLOCK_TICKS_PER_SECOND * 10) { lastarp = get_clock(); uip_arp_timer(); /* x = 0; for(i = 0; i < UIP_CONNS; i++) { if(uip_conn_active(i)) x++; } sprintf(buffer, "Active connections: %d\n", x); uart_puts(buffer); */ } if((get_clock() - lastupdate) > CLOCK_TICKS_PER_SECOND / 2){ serconn_update(); lastupdate = get_clock(); } } }