test code for our MBED board

Dependencies:   mbed lwip

Committer:
lolpcc
Date:
Wed May 04 08:30:52 2011 +0000
Revision:
1:6877bb99aa17

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lolpcc 1:6877bb99aa17 1 //#include "TCPCallbackConnection.h"
lolpcc 1:6877bb99aa17 2 //#include "NetServer.h"
lolpcc 1:6877bb99aa17 3 #include "mbed.h"
lolpcc 1:6877bb99aa17 4 #include "led.h"
lolpcc 1:6877bb99aa17 5 #include "can.h"
lolpcc 1:6877bb99aa17 6 #include "cmd.h"
lolpcc 1:6877bb99aa17 7 #include "help_data.h"
lolpcc 1:6877bb99aa17 8 #include "SNTPClient.h"
lolpcc 1:6877bb99aa17 9 #include "breakup.h"
lolpcc 1:6877bb99aa17 10 #include "ticker.h"
lolpcc 1:6877bb99aa17 11 #include "useful.h"
lolpcc 1:6877bb99aa17 12
lolpcc 1:6877bb99aa17 13 #include "lwip/opt.h"
lolpcc 1:6877bb99aa17 14 #include "lwip/stats.h"
lolpcc 1:6877bb99aa17 15 #include "lwip/sys.h"
lolpcc 1:6877bb99aa17 16 #include "lwip/pbuf.h"
lolpcc 1:6877bb99aa17 17 #include "lwip/udp.h"
lolpcc 1:6877bb99aa17 18 #include "lwip/tcp.h"
lolpcc 1:6877bb99aa17 19 #include "lwip/dns.h"
lolpcc 1:6877bb99aa17 20 #include "lwip/dhcp.h"
lolpcc 1:6877bb99aa17 21 #include "lwip/init.h"
lolpcc 1:6877bb99aa17 22 #include "lwip/netif.h"
lolpcc 1:6877bb99aa17 23 #include "netif/etharp.h"
lolpcc 1:6877bb99aa17 24 #include "netif/loopif.h"
lolpcc 1:6877bb99aa17 25 #include "device.h"
lolpcc 1:6877bb99aa17 26
lolpcc 1:6877bb99aa17 27 Ethernet ethernet;
lolpcc 1:6877bb99aa17 28 extern int net_state;
lolpcc 1:6877bb99aa17 29 extern char station_id;
lolpcc 1:6877bb99aa17 30 volatile char stage = 0;
lolpcc 1:6877bb99aa17 31
lolpcc 1:6877bb99aa17 32 struct netif netif_data;
lolpcc 1:6877bb99aa17 33
lolpcc 1:6877bb99aa17 34 char *header = "HTTP/1.1 200 OK\r\n"
lolpcc 1:6877bb99aa17 35 "Content-Type: text/html\r\n"
lolpcc 1:6877bb99aa17 36 "Connection: Close\r\n\r\n"
lolpcc 1:6877bb99aa17 37 "<html>\r\n"
lolpcc 1:6877bb99aa17 38 "<head>\r\n"
lolpcc 1:6877bb99aa17 39 "<title>%s</title>\r\n"
lolpcc 1:6877bb99aa17 40 "<style type='text/css'>\r\n"
lolpcc 1:6877bb99aa17 41 "body{font-family:'Arial, sans-serif', sans-serif;font-size:.8em;background-color:#fff;}\r\n"
lolpcc 1:6877bb99aa17 42 "</style>\r\n"
lolpcc 1:6877bb99aa17 43 "</head>\r\n";
lolpcc 1:6877bb99aa17 44
lolpcc 1:6877bb99aa17 45 char network_write_packet(struct tcp_pcb *pcb, char *buf)
lolpcc 1:6877bb99aa17 46 {
lolpcc 1:6877bb99aa17 47 if (tcp_write(pcb, (void *)buf, strlen(buf), 1) == ERR_OK) {
lolpcc 1:6877bb99aa17 48 tcp_output(pcb);
lolpcc 1:6877bb99aa17 49 lprintf("Wrote packet String (Size %d bytes)OK...\n",strlen(buf));
lolpcc 1:6877bb99aa17 50 return(1);
lolpcc 1:6877bb99aa17 51 } else {
lolpcc 1:6877bb99aa17 52 lprintf("Transission Problem (Size %d bytes), Closing connection...\n",strlen(buf));
lolpcc 1:6877bb99aa17 53 tcp_close(pcb);
lolpcc 1:6877bb99aa17 54 return(0);
lolpcc 1:6877bb99aa17 55 }
lolpcc 1:6877bb99aa17 56 }
lolpcc 1:6877bb99aa17 57 void network_send_page(struct tcp_pcb *pcb,char *head, char *body, char *tail)
lolpcc 1:6877bb99aa17 58 {
lolpcc 1:6877bb99aa17 59 if(network_write_packet(pcb, head)){
lolpcc 1:6877bb99aa17 60 if(network_write_packet(pcb, body)){
lolpcc 1:6877bb99aa17 61 if(network_write_packet(pcb, tail)){
lolpcc 1:6877bb99aa17 62 tcp_close(pcb);
lolpcc 1:6877bb99aa17 63 } else {
lolpcc 1:6877bb99aa17 64 tcp_close(pcb);
lolpcc 1:6877bb99aa17 65 }
lolpcc 1:6877bb99aa17 66 } else {
lolpcc 1:6877bb99aa17 67 tcp_close(pcb);
lolpcc 1:6877bb99aa17 68 }
lolpcc 1:6877bb99aa17 69 } else {
lolpcc 1:6877bb99aa17 70 tcp_close(pcb);
lolpcc 1:6877bb99aa17 71 }
lolpcc 1:6877bb99aa17 72 }
lolpcc 1:6877bb99aa17 73 int network_text_packet(struct tcp_pcb *pcb, char *buf)
lolpcc 1:6877bb99aa17 74 {
lolpcc 1:6877bb99aa17 75 char str[0x1200]; /* So we can take a 1024 byte string max */
lolpcc 1:6877bb99aa17 76 char c;
lolpcc 1:6877bb99aa17 77 int a = 0; /* Input pointer */
lolpcc 1:6877bb99aa17 78 int b = 0; /* output pointer */
lolpcc 1:6877bb99aa17 79
lolpcc 1:6877bb99aa17 80 str[b]='<';
lolpcc 1:6877bb99aa17 81 b++;
lolpcc 1:6877bb99aa17 82 str[b]='p';
lolpcc 1:6877bb99aa17 83 b++;
lolpcc 1:6877bb99aa17 84 str[b]='r';
lolpcc 1:6877bb99aa17 85 b++;
lolpcc 1:6877bb99aa17 86 str[b]='e';
lolpcc 1:6877bb99aa17 87 b++;
lolpcc 1:6877bb99aa17 88 str[b]='>';
lolpcc 1:6877bb99aa17 89 b++;
lolpcc 1:6877bb99aa17 90
lolpcc 1:6877bb99aa17 91 while(a != strlen(buf)){
lolpcc 1:6877bb99aa17 92 c = buf[a];
lolpcc 1:6877bb99aa17 93 if(c=='\n'){
lolpcc 1:6877bb99aa17 94 str[b]='<';
lolpcc 1:6877bb99aa17 95 b++;
lolpcc 1:6877bb99aa17 96 str[b]='b';
lolpcc 1:6877bb99aa17 97 b++;
lolpcc 1:6877bb99aa17 98 str[b]='r';
lolpcc 1:6877bb99aa17 99 b++;
lolpcc 1:6877bb99aa17 100 str[b]='>';
lolpcc 1:6877bb99aa17 101 b++;
lolpcc 1:6877bb99aa17 102 str[b]='\n';
lolpcc 1:6877bb99aa17 103 b++;
lolpcc 1:6877bb99aa17 104 a++;
lolpcc 1:6877bb99aa17 105 } else if(c=='<') {
lolpcc 1:6877bb99aa17 106 a++;
lolpcc 1:6877bb99aa17 107 } else if(c=='>') {
lolpcc 1:6877bb99aa17 108 a++;
lolpcc 1:6877bb99aa17 109 } else {
lolpcc 1:6877bb99aa17 110 str[b] = c;
lolpcc 1:6877bb99aa17 111 a++;
lolpcc 1:6877bb99aa17 112 b++;
lolpcc 1:6877bb99aa17 113 }
lolpcc 1:6877bb99aa17 114 }
lolpcc 1:6877bb99aa17 115 str[b]='<';
lolpcc 1:6877bb99aa17 116 b++;
lolpcc 1:6877bb99aa17 117 str[b]='/';
lolpcc 1:6877bb99aa17 118 b++;
lolpcc 1:6877bb99aa17 119 str[b]='p';
lolpcc 1:6877bb99aa17 120 b++;
lolpcc 1:6877bb99aa17 121 str[b]='r';
lolpcc 1:6877bb99aa17 122 b++;
lolpcc 1:6877bb99aa17 123 str[b]='e';
lolpcc 1:6877bb99aa17 124 b++;
lolpcc 1:6877bb99aa17 125 str[b]='>';
lolpcc 1:6877bb99aa17 126 b++;
lolpcc 1:6877bb99aa17 127 str[b]='\0';
lolpcc 1:6877bb99aa17 128 if(!network_write_packet(pcb, str)){
lolpcc 1:6877bb99aa17 129 lprintf("Problem Packet is:\n%s",str);
lolpcc 1:6877bb99aa17 130 tcp_close(pcb);
lolpcc 1:6877bb99aa17 131 return(1);
lolpcc 1:6877bb99aa17 132 }
lolpcc 1:6877bb99aa17 133 return(0);
lolpcc 1:6877bb99aa17 134 }
lolpcc 1:6877bb99aa17 135 err_t recv_callback(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
lolpcc 1:6877bb99aa17 136 {
lolpcc 1:6877bb99aa17 137 struct netif *netif = &netif_data;
lolpcc 1:6877bb99aa17 138 char *p1[100]; /* Used for the broke apart GET request */
lolpcc 1:6877bb99aa17 139 char *p2[3]; /* Diagnostics call */
lolpcc 1:6877bb99aa17 140 char *p3[10]; /* Diagnostics data */
lolpcc 1:6877bb99aa17 141 char head[1024],body[1024],tail[200];
lolpcc 1:6877bb99aa17 142 int ret;
lolpcc 1:6877bb99aa17 143
lolpcc 1:6877bb99aa17 144 lprintf("TCP callback from %d.%d.%d.%d\n", ip4_addr1(&(pcb->remote_ip)),ip4_addr2(&(pcb->remote_ip)),ip4_addr3(&(pcb->remote_ip)),ip4_addr4(&(pcb->remote_ip)));
lolpcc 1:6877bb99aa17 145 char *data;
lolpcc 1:6877bb99aa17 146 /* Check if status is ok and data is arrived. */
lolpcc 1:6877bb99aa17 147 if (err == ERR_OK && p != NULL) {
lolpcc 1:6877bb99aa17 148 /* Inform TCP that we have taken the data. */
lolpcc 1:6877bb99aa17 149 tcp_recved(pcb, p->tot_len);
lolpcc 1:6877bb99aa17 150 data = static_cast<char *>(p->payload);
lolpcc 1:6877bb99aa17 151 /* If the data is a GET request we can handle it. */
lolpcc 1:6877bb99aa17 152 if (strncmp(data, "GET ", 4) == 0) {
lolpcc 1:6877bb99aa17 153 lprintf("Handling GET request...\r\n");
lolpcc 1:6877bb99aa17 154 lprintf("Request:\r\n%s\r\n", data);
lolpcc 1:6877bb99aa17 155 breakup(data,p1,'/');
lolpcc 1:6877bb99aa17 156 time_t seconds = time(NULL);
lolpcc 1:6877bb99aa17 157 sprintf(tail,"<br><small><A href=\"mailto:pcc@cs.york.ac.uk\">"
lolpcc 1:6877bb99aa17 158 "pcc@cs.york.ac.uk</a>\n\r</small>\n\r"
lolpcc 1:6877bb99aa17 159 "<small>mbed RTC time:%s</small><br/>\n\r"
lolpcc 1:6877bb99aa17 160 "<a href=0>Home</a><br><br>\n\r"
lolpcc 1:6877bb99aa17 161 "</body>\n\r</html>\n\r",ctime(&seconds));
lolpcc 1:6877bb99aa17 162 switch(p1[2][0]){
lolpcc 1:6877bb99aa17 163 case '0' : /* Home Page */
lolpcc 1:6877bb99aa17 164 sprintf(head,header,"MBED Home");
lolpcc 1:6877bb99aa17 165 sprintf(body,"<h1>Petes MBED Homepage</h1>\n\r"
lolpcc 1:6877bb99aa17 166 "<a href=1>Board Type</a><br>\n\r"
lolpcc 1:6877bb99aa17 167 "<a href=2>Networking</a><br>\n\r"
lolpcc 1:6877bb99aa17 168 "<a href=3>Commands</a><br>\n\r"
lolpcc 1:6877bb99aa17 169 "<a href=4>CAN Bus</a><br>\n\r"
lolpcc 1:6877bb99aa17 170 "<a href=5>Diags</a><br>\n\r");
lolpcc 1:6877bb99aa17 171 network_send_page(pcb,head,body,tail);
lolpcc 1:6877bb99aa17 172 break;
lolpcc 1:6877bb99aa17 173 case '1' : /* Do something for page 1 */
lolpcc 1:6877bb99aa17 174 sprintf(head,header,"Board Type");
lolpcc 1:6877bb99aa17 175 sprintf(body,"<h1>MBED Board Data</h1>\n\r"
lolpcc 1:6877bb99aa17 176 "Philips NXP <a href=http://mbed.org/nxp/lpc1768/>LPC1768</a>"
lolpcc 1:6877bb99aa17 177 " Micro Controler <br>\n\r"
lolpcc 1:6877bb99aa17 178 "512K Flash Memory, 64K SRAM<br>\n\r"
lolpcc 1:6877bb99aa17 179 "<h4>MCP Solution gives:-</h4>\n\r"
lolpcc 1:6877bb99aa17 180 "1 * RS232 channel, 1 * CAN bus channel<br>\n\r"
lolpcc 1:6877bb99aa17 181 "Audio in and out, plus 4 analog inputs<br>\n\r"
lolpcc 1:6877bb99aa17 182 "Micro SD card slot, USB + TCPIP networking<br>\n\r"
lolpcc 1:6877bb99aa17 183 "+ I2C bus and selected I/O<br><br>\n\r"
lolpcc 1:6877bb99aa17 184 "See mbed.org for data<br>\n\r");
lolpcc 1:6877bb99aa17 185 network_send_page(pcb,head,body,tail);
lolpcc 1:6877bb99aa17 186 break;
lolpcc 1:6877bb99aa17 187 case '2' : /* Networking */
lolpcc 1:6877bb99aa17 188 sprintf(head,header,"Network");
lolpcc 1:6877bb99aa17 189 sprintf(body, "<h1>MBED Networking</h1>\n\r"
lolpcc 1:6877bb99aa17 190 "<h2>mbed Network Configuration</h2>\n\r"
lolpcc 1:6877bb99aa17 191 "mbed HW address: %02x:%02x:%02x:%02x:%02x:%02x<br/>\n\r"
lolpcc 1:6877bb99aa17 192 "mbed IP Address: %s<br/>\n\r"
lolpcc 1:6877bb99aa17 193 "Station: %d<br>",
lolpcc 1:6877bb99aa17 194 (char*) netif->hwaddr[0],
lolpcc 1:6877bb99aa17 195 (char*) netif->hwaddr[1],
lolpcc 1:6877bb99aa17 196 (char*) netif->hwaddr[2],
lolpcc 1:6877bb99aa17 197 (char*) netif->hwaddr[3],
lolpcc 1:6877bb99aa17 198 (char*) netif->hwaddr[4],
lolpcc 1:6877bb99aa17 199 (char*) netif->hwaddr[5],
lolpcc 1:6877bb99aa17 200 inet_ntoa(*(struct in_addr*)&(netif->ip_addr)),
lolpcc 1:6877bb99aa17 201 station_id
lolpcc 1:6877bb99aa17 202 );
lolpcc 1:6877bb99aa17 203 network_send_page(pcb,head,body,tail);
lolpcc 1:6877bb99aa17 204 break;
lolpcc 1:6877bb99aa17 205 case '3' : /* Do something for page 3 */
lolpcc 1:6877bb99aa17 206 sprintf(head,header,"Commands");
lolpcc 1:6877bb99aa17 207 network_write_packet(pcb,head);
lolpcc 1:6877bb99aa17 208 sprintf(body,"<h1>MBED Commands</h1>\n\r");
lolpcc 1:6877bb99aa17 209 network_write_packet(pcb,body);
lolpcc 1:6877bb99aa17 210 network_text_packet(pcb,HELP_STRING);
lolpcc 1:6877bb99aa17 211 network_text_packet(pcb,HELP_STRING2);
lolpcc 1:6877bb99aa17 212 network_text_packet(pcb,HELP_STRING3);
lolpcc 1:6877bb99aa17 213 network_write_packet(pcb,tail);
lolpcc 1:6877bb99aa17 214 tcp_close(pcb);
lolpcc 1:6877bb99aa17 215 break;
lolpcc 1:6877bb99aa17 216 case '4' : /* Do something for page 4 */
lolpcc 1:6877bb99aa17 217 sprintf(head,header,"CAN Bus<br>");
lolpcc 1:6877bb99aa17 218 network_send_page(pcb,head,body,tail);
lolpcc 1:6877bb99aa17 219 break;
lolpcc 1:6877bb99aa17 220 case '5' : /* Diagnostics page */
lolpcc 1:6877bb99aa17 221 sprintf(head,header,"Board Diags");
lolpcc 1:6877bb99aa17 222 network_write_packet(pcb,head);
lolpcc 1:6877bb99aa17 223 /* Command handler */
lolpcc 1:6877bb99aa17 224 if(breakup(p1[2],p2,'?')>1){
lolpcc 1:6877bb99aa17 225 ret = breakup(p2[1],p3,'&');
lolpcc 1:6877bb99aa17 226 if((strcmp(p3[0],"ticker"))==0)
lolpcc 1:6877bb99aa17 227 setup_ticker();
lolpcc 1:6877bb99aa17 228 else if((strcmp(p3[0],"lcd"))==0)
lolpcc 1:6877bb99aa17 229 lcd_test(ret,p3);
lolpcc 1:6877bb99aa17 230 else
lolpcc 1:6877bb99aa17 231 lprintf("Command not found, Looking for %s\n",p3[0]);
lolpcc 1:6877bb99aa17 232 }
lolpcc 1:6877bb99aa17 233 network_write_packet(pcb,"<a href=5?ticker&1>Ticker Start</a><br>\n\r");
lolpcc 1:6877bb99aa17 234 network_write_packet(pcb,"<a href=5?lcd&1>String to LCD 1</a><br>\n\r");
lolpcc 1:6877bb99aa17 235 network_write_packet(pcb,"<a href=5?lcd&2>String to LCD 2</a><br>\n\r");
lolpcc 1:6877bb99aa17 236 network_write_packet(pcb,"<a href=5?sseg>Seven Segment driver test</a><br>\n\r");
lolpcc 1:6877bb99aa17 237 network_write_packet(pcb,tail);
lolpcc 1:6877bb99aa17 238 tcp_close(pcb);
lolpcc 1:6877bb99aa17 239
lolpcc 1:6877bb99aa17 240 break;
lolpcc 1:6877bb99aa17 241 default :
lolpcc 1:6877bb99aa17 242 sprintf(head,header,"MBED Board");
lolpcc 1:6877bb99aa17 243 sprintf(body,"<h1>404 Error</h1>\n\r");
lolpcc 1:6877bb99aa17 244 network_send_page(pcb,head,body,tail);
lolpcc 1:6877bb99aa17 245 break;
lolpcc 1:6877bb99aa17 246 }
lolpcc 1:6877bb99aa17 247
lolpcc 1:6877bb99aa17 248
lolpcc 1:6877bb99aa17 249
lolpcc 1:6877bb99aa17 250 } else {
lolpcc 1:6877bb99aa17 251 lprintf("Non GET request...\r\nRequest:\r\n%s\r\n", data);
lolpcc 1:6877bb99aa17 252 }
lolpcc 1:6877bb99aa17 253
lolpcc 1:6877bb99aa17 254 pbuf_free(p);
lolpcc 1:6877bb99aa17 255 }
lolpcc 1:6877bb99aa17 256
lolpcc 1:6877bb99aa17 257 else {
lolpcc 1:6877bb99aa17 258 /* No data arrived */
lolpcc 1:6877bb99aa17 259 /* That means the client closes the connection and sent us a packet with FIN flag set to 1. */
lolpcc 1:6877bb99aa17 260 /* We have to cleanup and destroy out TCPConnection. */
lolpcc 1:6877bb99aa17 261 lprintf("Connection closed by client.\r\n");
lolpcc 1:6877bb99aa17 262 pbuf_free(p);
lolpcc 1:6877bb99aa17 263 }
lolpcc 1:6877bb99aa17 264 /* Don't panic! Everything is fine. */
lolpcc 1:6877bb99aa17 265 return ERR_OK;
lolpcc 1:6877bb99aa17 266 }
lolpcc 1:6877bb99aa17 267 /* Accept an incomming call on the registered port */
lolpcc 1:6877bb99aa17 268 err_t accept_callback(void *arg, struct tcp_pcb *npcb, err_t err) {
lolpcc 1:6877bb99aa17 269 LWIP_UNUSED_ARG(arg);
lolpcc 1:6877bb99aa17 270 /* Subscribe a receive callback function */
lolpcc 1:6877bb99aa17 271 tcp_recv(npcb, &recv_callback);
lolpcc 1:6877bb99aa17 272 /* Don't panic! Everything is fine. */
lolpcc 1:6877bb99aa17 273 return ERR_OK;
lolpcc 1:6877bb99aa17 274 }
lolpcc 1:6877bb99aa17 275
lolpcc 1:6877bb99aa17 276 void network_init(void)
lolpcc 1:6877bb99aa17 277 {
lolpcc 1:6877bb99aa17 278 lprintf("l\r\nNetwork Starting Up...\r\n");
lolpcc 1:6877bb99aa17 279 stage = 0;
lolpcc 1:6877bb99aa17 280 struct netif *netif = &netif_data;
lolpcc 1:6877bb99aa17 281 struct ip_addr ipaddr;
lolpcc 1:6877bb99aa17 282 struct ip_addr netmask;
lolpcc 1:6877bb99aa17 283 struct ip_addr gateway;
lolpcc 1:6877bb99aa17 284 Ticker tickFast, tickSlow, tickARP, eth_tick, dns_tick, dhcp_coarse, dhcp_fine;
lolpcc 1:6877bb99aa17 285 // stage_blinker.attach_us(&stageblinker, 1000*500);
lolpcc 1:6877bb99aa17 286
lolpcc 1:6877bb99aa17 287 char *hostname = "my-mbed";
lolpcc 1:6877bb99aa17 288
lolpcc 1:6877bb99aa17 289 lprintf("Configuring device for DHCP...\r\n");
lolpcc 1:6877bb99aa17 290 /* Start Network with DHCP */
lolpcc 1:6877bb99aa17 291 IP4_ADDR(&netmask, 255,255,255,255);
lolpcc 1:6877bb99aa17 292 IP4_ADDR(&gateway, 0,0,0,0);
lolpcc 1:6877bb99aa17 293 IP4_ADDR(&ipaddr, 0,0,0,0);
lolpcc 1:6877bb99aa17 294 /* Initialise after configuration */
lolpcc 1:6877bb99aa17 295 lwip_init();
lolpcc 1:6877bb99aa17 296 netif->hwaddr_len = ETHARP_HWADDR_LEN;
lolpcc 1:6877bb99aa17 297 device_address((char *)netif->hwaddr);
lolpcc 1:6877bb99aa17 298 netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, device_init, ip_input);
lolpcc 1:6877bb99aa17 299 netif->hostname = hostname;
lolpcc 1:6877bb99aa17 300 netif_set_default(netif);
lolpcc 1:6877bb99aa17 301 dhcp_start(netif); // <-- Use DHCP
lolpcc 1:6877bb99aa17 302
lolpcc 1:6877bb99aa17 303 /* Initialise all needed timers */
lolpcc 1:6877bb99aa17 304 tickARP.attach_us( &etharp_tmr, ARP_TMR_INTERVAL * 1000);
lolpcc 1:6877bb99aa17 305 tickFast.attach_us(&tcp_fasttmr, TCP_FAST_INTERVAL * 1000);
lolpcc 1:6877bb99aa17 306 tickSlow.attach_us(&tcp_slowtmr, TCP_SLOW_INTERVAL * 1000);
lolpcc 1:6877bb99aa17 307 dns_tick.attach_us(&dns_tmr, DNS_TMR_INTERVAL * 1000);
lolpcc 1:6877bb99aa17 308 dhcp_coarse.attach_us(&dhcp_coarse_tmr, DHCP_COARSE_TIMER_MSECS * 1000);
lolpcc 1:6877bb99aa17 309 dhcp_fine.attach_us(&dhcp_fine_tmr, DHCP_FINE_TIMER_MSECS * 1000);
lolpcc 1:6877bb99aa17 310 stage = 1;
lolpcc 1:6877bb99aa17 311 while (!netif_is_up(netif)) {
lolpcc 1:6877bb99aa17 312 device_poll();
lolpcc 1:6877bb99aa17 313 }
lolpcc 1:6877bb99aa17 314
lolpcc 1:6877bb99aa17 315 /*
lolpcc 1:6877bb99aa17 316 while (!(netif->dhcp->state == DHCP_BOUND || netif->dhcp->state == DHCP_PERMANENT))
lolpcc 1:6877bb99aa17 317 {
lolpcc 1:6877bb99aa17 318 ledLink = ethernet.link();
lolpcc 1:6877bb99aa17 319 device_poll();
lolpcc 1:6877bb99aa17 320 //printf("Waiting for DHCP response, state = %d\r\n", netif->dhcp->state);
lolpcc 1:6877bb99aa17 321 //wait_ms(100);
lolpcc 1:6877bb99aa17 322 }
lolpcc 1:6877bb99aa17 323 */
lolpcc 1:6877bb99aa17 324 stage = 2;
lolpcc 1:6877bb99aa17 325 lprintf("Interface %02x.%02x.%02x.%02x.%02x.%02x is up, local IP is %s\r\n",
lolpcc 1:6877bb99aa17 326 (char*) netif->hwaddr[0],
lolpcc 1:6877bb99aa17 327 (char*) netif->hwaddr[1],
lolpcc 1:6877bb99aa17 328 (char*) netif->hwaddr[2],
lolpcc 1:6877bb99aa17 329 (char*) netif->hwaddr[3],
lolpcc 1:6877bb99aa17 330 (char*) netif->hwaddr[4],
lolpcc 1:6877bb99aa17 331 (char*) netif->hwaddr[5],
lolpcc 1:6877bb99aa17 332 inet_ntoa(*(struct in_addr*)&(netif->ip_addr)));
lolpcc 1:6877bb99aa17 333
lolpcc 1:6877bb99aa17 334 lprintf("Starting Web Server...\r\n");
lolpcc 1:6877bb99aa17 335
lolpcc 1:6877bb99aa17 336 /* Bind a function to a tcp port */
lolpcc 1:6877bb99aa17 337 struct tcp_pcb *pcb = tcp_new();
lolpcc 1:6877bb99aa17 338 if (tcp_bind(pcb, IP_ADDR_ANY, 80) == ERR_OK) {
lolpcc 1:6877bb99aa17 339 pcb = tcp_listen(pcb);
lolpcc 1:6877bb99aa17 340 tcp_accept(pcb, &accept_callback);
lolpcc 1:6877bb99aa17 341 }
lolpcc 1:6877bb99aa17 342 net_state = 1;
lolpcc 1:6877bb99aa17 343
lolpcc 1:6877bb99aa17 344 lprintf("Waiting for connection...\n");
lolpcc 1:6877bb99aa17 345 }
lolpcc 1:6877bb99aa17 346
lolpcc 1:6877bb99aa17 347 void network_test(void)
lolpcc 1:6877bb99aa17 348 {
lolpcc 1:6877bb99aa17 349 led_on(2);
lolpcc 1:6877bb99aa17 350 device_poll();
lolpcc 1:6877bb99aa17 351 ethernet.link();
lolpcc 1:6877bb99aa17 352 led_off(2);
lolpcc 1:6877bb99aa17 353 }