uIP 1.0 based webserver for LPC1114 + ENC28J60

Dependencies:   mbed TMP102

main.cpp

Committer:
ban4jp
Date:
2014-06-14
Revision:
0:685224d2f66d
Child:
2:4da9ed411bdc

File content as of revision 0:685224d2f66d:

#include "mbed.h"

extern "C" {
    #include "uip.h"
    #include "uip_arp.h"
}
#include "tapdev.h"

#define BUF ((struct uip_eth_hdr *)&uip_buf[0])

#ifndef NULL
#define NULL (void *)0
#endif /* NULL */

DigitalOut myled(LED1);

/* Ethernet Pin configuration
    => /dev-enc28j60/tapdev.cpp
*/

int main() {
  int i;
  uip_ipaddr_t ipaddr;
  Timer periodic_timer, arp_timer;

  periodic_timer.start();
  arp_timer.start();
  
  /* Initialize the device driver. */ 
  printf("tapdev_init()\n");
  tapdev_init();

  /* Initialize the uIP TCP/IP stack. */
  printf("uip_init()\n");
  uip_init();

  struct uip_eth_addr mac = {UIP_ETHADDR0, UIP_ETHADDR1, UIP_ETHADDR2, UIP_ETHADDR3, UIP_ETHADDR4, UIP_ETHADDR5};
  uip_setethaddr(mac);

  uip_ipaddr(ipaddr, 192,168,0,12);
  uip_sethostaddr(ipaddr);
  uip_ipaddr(ipaddr, 192,168,0,1);
  uip_setdraddr(ipaddr);
  uip_ipaddr(ipaddr, 255,255,255,0);
  uip_setnetmask(ipaddr);

  printf("httpd_init()\n");
  httpd_init();
  
  /*  telnetd_init();*/
  
  /*  hello_world_init();*/

  /*  {
      u8_t mac[6] = {1,2,3,4,5,6};
      dhcpc_init(&mac, 6);
      }*/
  
  /*uip_ipaddr(ipaddr, 127,0,0,1);
  smtp_configure("localhost", ipaddr);
  SMTP_SEND("adam@sics.se", NULL, "uip-testing@example.com",
        "Testing SMTP from uIP",
        "Test message sent by uIP\r\n");*/

  /*
    webclient_init();
    resolv_init();
    uip_ipaddr(ipaddr, 195,54,122,204);
    resolv_conf(ipaddr);
    resolv_query("www.sics.se");*/


  printf("uIP Start.\n");

  while(1) {
    uip_len = tapdev_read();
    if(uip_len > 0) {
      //printf("recv = %d\n", uip_len);
      
      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(periodic_timer.read_ms() >= 500) {
      periodic_timer.reset();
      //printf("periodic_timer tick\n");
      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(arp_timer.read_ms() >= 10000) {
        arp_timer.reset();
        //printf("arp_timer tick\n");
        uip_arp_timer();
      }
    }
  }
  //return 0;
}
/*---------------------------------------------------------------------------*/
void
uip_log(char *m)
{
  printf("uIP log message: %s\n", m);
}
/*---------------------------------------------------------------------------*/