Dependencies:   mbed lwip

Files at this revision

API Documentation at this revision

Comitter:
mitesh2patel
Date:
Mon Dec 13 07:03:57 2010 +0000
Commit message:

Changed in this revision

lwip.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r e1c5c3c4f93c lwip.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lwip.lib	Mon Dec 13 07:03:57 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_unsupported/code/lwip/
\ No newline at end of file
diff -r 000000000000 -r e1c5c3c4f93c main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Dec 13 07:03:57 2010 +0000
@@ -0,0 +1,318 @@
+#include "mbed.h"
+#include "lwip/opt.h"
+#include "lwip/stats.h"
+#include "lwip/sys.h"
+#include "lwip/pbuf.h"
+#include "lwip/udp.h"
+#include "lwip/tcp.h"
+#include "lwip/dns.h"
+#include "lwip/dhcp.h"
+#include "lwip/init.h"
+#include "lwip/netif.h"
+#include "netif/etharp.h"
+#include "netif/loopif.h"
+#include "device.h"
+ #include "rpc.h"
+ Serial pc(USBTX, USBRX);
+ 
+ LocalFileSystem fs("fs");
+
+Ethernet ethernet;
+DigitalOut ledLink(p30);
+DigitalOut ledActivity(p29);
+DigitalOut ledStage0 (LED1);
+DigitalOut ledStage1 (LED2);
+DigitalOut ledStage2 (LED3);
+DigitalOut ledTCP80  (LED4);
+
+volatile char stage = 0;
+
+Ticker stage_blinker;
+
+struct netif    netif_data;
+
+const char testPage[] = "HTTP/1.1 200 OK\r\n"
+                        "Content-Type: text/html\r\n"
+                        "Connection: Close\r\n\r\n"
+                        "<html>"
+                        "<head>"
+                        "<title>mbed test page</title>"
+                        "<style type='text/css'>"
+                        "body{font-family:'Arial, sans-serif', sans-serif;font-size:.8em;background-color:#fff;}"
+                        "</style>"
+                        "</head>"
+                        "<body>%s"
+                        "<br><br>"
+                          
+                        "<button> LED1</button>"
+                       "<A HREF='test1.html'> test1</A>"
+                       "<a href='http://mbed.html/'>mbed</a>"
+                      "<A HREF='http://www.google.com'> google</A>"
+                      "<A HREF='PIC1234.html'> PIC1234</A>"
+                      "<A HREF='http://192.168.1.3/PIC1234.html'> PIC1</A>"
+                      "<A HREF='http://192.168.1.2'>refresh</A>"
+                      
+                     "<div id='my_area' align='center'>"
+                     "<IMG SRC='JPPV0000.jpg'>"
+                      "<div id='my_area' align='center'>"
+                     "<IMG SRC='JPPV0000.BMP'>"
+                    " <div id='my_area' align='center'>"
+                    "<IMG SRC='JPPV0000.GIF'>" 
+                    " <div id='my_area' align='center'>"
+                    "<IMG SRC='fs/JPPV0000.GIF'>" 
+                     " <div id='my_area' align='center'>"
+                    "<IMG SRC='fs/JPPV0000.GIF'>"
+                    
+                    "<META HTTP-EQUIV='Refresh'CONTENT='60; URL=192.168.1.2'>"
+                        "</body></html>\r\n\r\n";
+                        
+                        
+ /* const char testPage[]= "HTTP/1.1 200 OK\r\n"
+                        "Content-Type: text/html\r\n"
+                        "Connection: Close\r\n\r\n"
+                            "<html><head>"
+                                "<script src='mbedRPC.js' language='javascript'></script>"
+                                "<script type='text/javascript'>"
+                                    "mbed = new HTTPRPC();"
+                                    "led1 = new DigitalOut(mbed, LED1);"
+                                    "ain = new AnalogIn(mbed, p20);"    
+                                    "led2 = new PwmOut(mbed, LED3);"
+                                      "function print(str){document.getElementById('t').innerHTML = str;}"
+                                "</script></head><body>%s"                                                        
+                                "<p>"
+                                "<a href='http://mbed.org/cookbook/Interfacing-using-JavaScript'> for more information goto the cookbook </a>"
+                                "<br>"
+                                "</p><div id='t'><br/></div>"
+                                
+                                
+                                "<script language='javascript'>"
+                                    "var i = 1;"
+                                    "var x = 0;"
+                                    "function tick(){"
+                                         "ledStage0=~ledStage0"
+                                        "led1.write(i);"
+                                        "if(i == 0){i = 1;"
+                                        "}else{i = 0;}"
+                                        "led2.write(x);"
+                                        "x = x + 0.1;"
+                                        "if(x >= 1) x = 0;"
+                                        "f = ain.read();"
+                                        "print(f);"
+                                    "}"
+                                    "setInterval('tick()',1000);"            
+                                "</script>"
+                            "</body>"
+                        "</html>\r\n\r\n";  */                  
+               
+                        
+
+char buffer[1024];
+char temp[1024];
+err_t recv_callback(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) {
+    struct netif   *netif = &netif_data;
+    //ledTCP80 = true;
+    printf("TCP callback from %d.%d.%d.%d\r\n", ip4_addr1(&(pcb->remote_ip)),ip4_addr2(&(pcb->remote_ip)),ip4_addr3(&(pcb->remote_ip)),ip4_addr4(&(pcb->remote_ip)));
+    char *data;
+    /* Check if status is ok and data is arrived. */
+    if (err == ERR_OK && p != NULL) {
+        /* Inform TCP that we have taken the data. */
+        tcp_recved(pcb, p->tot_len);
+        data = static_cast<char *>(p->payload);
+        /* If the data is a GET request we can handle it. */
+        if (strncmp(data, "GET ", 4) == 0) {
+        printf("Handling GET request...\r\n");
+        printf("Request:\r\n%s\r\n", data);
+        
+        //generate the test page
+        time_t seconds = time(NULL);
+        sprintf(temp,     "<h1>Congratulations!</h1>If you can see this page, your mbed is working properly."
+                          "<h2>mbed Configuration</h2>"
+                          "mbed RTC time:%s<br/>"
+                          "mbed HW address: %02x:%02x:%02x:%02x:%02x:%02x<br/>"
+                          "mbed IP Address: %s<br/>" 
+                          "image1: <div id='my_area' align='center'><IMG SRC='fs\JPPV0000.GIF'><br/>" 
+                          "image2: <div id='my_area' align='center'><IMG SRC='JPPV0000.GIF'>"
+                          "image2: <div id='my_area' align='center'><IMG SRC='JPPV0000.BMP'>" ,
+                        
+                        
+         ctime(&seconds),
+        (char*) netif->hwaddr[0],
+        (char*) netif->hwaddr[1],
+        (char*) netif->hwaddr[2],
+        (char*) netif->hwaddr[3],
+        (char*) netif->hwaddr[4],
+        (char*) netif->hwaddr[5],
+        inet_ntoa(*(struct in_addr*)&(netif->ip_addr))
+        );
+
+        sprintf(buffer, testPage, temp);
+            if (tcp_write(pcb, (void *)buffer, strlen(buffer), 1) == ERR_OK) {
+            tcp_output(pcb);
+            printf("Closing connection...\r\n");
+            tcp_close(pcb);
+            }
+        }
+        else
+        {
+            printf("Non GET request...\r\nRequest:\r\n%s\r\n", data);
+        }
+        
+        pbuf_free(p);
+    }
+    
+     else {
+            /* No data arrived */
+            /* That means the client closes the connection and sent us a packet with FIN flag set to 1. */
+            /* We have to cleanup and destroy out TCPConnection. */
+             printf("Connection closed by client.\r\n");
+            pbuf_free(p);
+        }
+    /* Don't panic! Everything is fine. */
+   // ledTCP80 = false;
+    return ERR_OK;
+}
+/* Accept an incomming call on the registered port */
+err_t accept_callback(void *arg, struct tcp_pcb *npcb, err_t err) {
+    LWIP_UNUSED_ARG(arg);
+    /* Subscribe a receive callback function */
+    tcp_recv(npcb, &recv_callback);
+    /* Don't panic! Everything is fine. */
+    return ERR_OK;
+}
+
+void stageblinker()
+{
+    switch (stage)
+    {
+        case 0:
+        //ledStage0 = !ledStage0;
+        ledStage1 = false;
+        //ledStage2 = false;
+        break;
+        case 1:
+       // ledStage0 = true;
+        ledStage1 = !ledStage1;
+        
+        //ledStage2 = false;
+        break;
+        case 2:
+      //  ledStage0 = true;
+        ledStage1 = true;
+       //ledStage2 = true;
+        stage_blinker.detach();
+        break;
+    }
+}
+
+int main() {
+    printf("mBed Ethernet Tester 1.0\r\nStarting Up...\r\n");
+    stage = 0;
+    struct netif   *netif = &netif_data;
+    struct ip_addr  ipaddr;
+    struct ip_addr  netmask;
+    struct ip_addr  gateway;
+    Ticker tickFast, tickSlow, tickARP, eth_tick, dns_tick, dhcp_coarse, dhcp_fine;
+    stage_blinker.attach_us(&stageblinker, 1000*500);
+    
+    char *hostname = "my-mbed";
+    
+    
+      Base::add_rpc_class<AnalogIn>();
+     Base::add_rpc_class<AnalogOut>();
+     Base::add_rpc_class<DigitalIn>();
+    Base::add_rpc_class<DigitalOut>();
+     Base::add_rpc_class<DigitalInOut>();
+     Base::add_rpc_class<PwmOut>();
+     Base::add_rpc_class<Timer>();
+     Base::add_rpc_class<SPI>();
+     Base::add_rpc_class<BusOut>();
+     Base::add_rpc_class<BusIn>();
+     Base::add_rpc_class<BusInOut>();
+     Base::add_rpc_class<Serial>();
+     // receive commands, and send back the responses
+     char buf[256], outbuf[256];
+    
+    printf("Configuring device for DHCP...\r\n");
+    /* Start Network with DHCP */
+    IP4_ADDR(&netmask, 255,255,255,0);
+    IP4_ADDR(&gateway, 192,168,1,3);
+    IP4_ADDR(&ipaddr, 192,168,1,3);
+    /* Initialise after configuration */
+    lwip_init();
+    netif->hwaddr_len = ETHARP_HWADDR_LEN;
+    device_address((char *)netif->hwaddr);
+    netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, device_init, ip_input);
+    netif->hostname = hostname;
+    netif_set_default(netif);
+    dhcp_start(netif); // <-- Use DHCP
+    
+        /* Initialise all needed timers */
+    tickARP.attach_us( &etharp_tmr,  ARP_TMR_INTERVAL  * 1000);
+    tickFast.attach_us(&tcp_fasttmr, TCP_FAST_INTERVAL * 1000);
+    tickSlow.attach_us(&tcp_slowtmr, TCP_SLOW_INTERVAL * 1000);
+    dns_tick.attach_us(&dns_tmr, DNS_TMR_INTERVAL * 1000);
+    dhcp_coarse.attach_us(&dhcp_coarse_tmr, DHCP_COARSE_TIMER_MSECS * 1000);
+    dhcp_fine.attach_us(&dhcp_fine_tmr, DHCP_FINE_TIMER_MSECS * 1000);
+    stage = 1;
+         while (!netif_is_up(netif)) { 
+         ledLink = ethernet.link();
+         device_poll(); 
+     } 
+
+/*
+    while (!(netif->dhcp->state == DHCP_BOUND || netif->dhcp->state == DHCP_PERMANENT))
+    {
+        ledLink = ethernet.link();
+        device_poll();    
+        //printf("Waiting for DHCP response, state = %d\r\n", netif->dhcp->state);
+        //wait_ms(100);
+        }
+    */
+    stage = 2;
+            printf("Interface is up, local IP is %s\r\n", 
+inet_ntoa(*(struct in_addr*)&(netif->ip_addr))); 
+
+    printf("Starting Web Server...\r\n");
+
+        /* Bind a function to a tcp port */
+    struct tcp_pcb *pcb = tcp_new();
+    if (tcp_bind(pcb, IP_ADDR_ANY, 80) == ERR_OK) {
+        pcb = tcp_listen(pcb);
+        tcp_accept(pcb, &accept_callback);
+    }
+    
+    printf("Waiting for connection...\r\n");
+    /* while (netif_is_up(netif)) { 
+         ledLink = ethernet.link();
+         device_poll();
+         }*/
+   /* while(1) {
+        device_poll();
+        ledLink = ethernet.link();
+    }*/
+    
+
+      FILE *fp = fopen("/fs/pic1234.htm","w");  // Open local filename
+    // it ignores path and date defaults 1/1/2008 becausse RTC not set
+    // if I call ithe localfilesystem www rather than 'local' it writes and is seen when drive is refreshed
+    fprintf(fp, "<title> cam test page </title>\n");
+    fprintf(fp,"<h1>pic of the day from camera</h1>");
+    //fprintf(fp, "volts %f V at %s \r\n",Voltmeter.read(), ctime(&ctTime));  
+        fprintf(fp,"<div id='my_area' align='center'>");
+       fprintf(fp, "<IMG SRC='JPPV0000.jpg'>");  
+       fprintf(fp,"<div id='my_area' align='center'>");
+       fprintf(fp, "<IMG SRC='JPPV0000.gif'>");
+      fprintf(fp, "</a>");
+       fclose(fp);
+       
+      while(1) {
+          device_poll();
+        ledLink = ethernet.link();
+       //  pc.gets(buf, 256);
+       // rpc(buf, outbuf); 
+      // pc.printf("%s\n", outbuf);
+
+     }
+    
+   
+}
diff -r 000000000000 -r e1c5c3c4f93c mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Dec 13 07:03:57 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0