Dependencies:   mbed lwip

Committer:
loopsva
Date:
Wed Dec 09 18:52:41 2009 +0000
Revision:
0:f7f626c40ef8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:f7f626c40ef8 1 #include "mbed.h"
loopsva 0:f7f626c40ef8 2 #include "HTTPServer.h"
loopsva 0:f7f626c40ef8 3 #include "HTTPRPC.h"
loopsva 0:f7f626c40ef8 4 #include "HTTPFS.h"
loopsva 0:f7f626c40ef8 5
loopsva 0:f7f626c40ef8 6 #include "TextLCD.h" //kb
loopsva 0:f7f626c40ef8 7 #include "myrpc.h"
loopsva 0:f7f626c40ef8 8
loopsva 0:f7f626c40ef8 9
loopsva 0:f7f626c40ef8 10 HTTPServer http;
loopsva 0:f7f626c40ef8 11
loopsva 0:f7f626c40ef8 12 DigitalOut led1(LED1, "led1");
loopsva 0:f7f626c40ef8 13 DigitalOut led2(LED2, "led2");
loopsva 0:f7f626c40ef8 14 DigitalOut led3(LED3, "led3");
loopsva 0:f7f626c40ef8 15 DigitalOut led4(LED4, "led4");
loopsva 0:f7f626c40ef8 16
loopsva 0:f7f626c40ef8 17 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3
loopsva 0:f7f626c40ef8 18
loopsva 0:f7f626c40ef8 19 myrpc myrpc1(LED1, "myrpc1");
loopsva 0:f7f626c40ef8 20 myrpc myrpc2(LED2, "myrpc2");
loopsva 0:f7f626c40ef8 21 myrpc myrpc3(LED3, "myrpc3");
loopsva 0:f7f626c40ef8 22 myrpc myrpc4(LED4, "myrpc4");
loopsva 0:f7f626c40ef8 23
loopsva 0:f7f626c40ef8 24 LocalFileSystem local("local");
loopsva 0:f7f626c40ef8 25 Ethernet eth2;
loopsva 0:f7f626c40ef8 26
loopsva 0:f7f626c40ef8 27 float const DISP_SLOW(2.0);
loopsva 0:f7f626c40ef8 28 float const DISP_FAST(0.5);
loopsva 0:f7f626c40ef8 29
loopsva 0:f7f626c40ef8 30 // Once running, try this web page -> http://192.168.1.102/rpc/led3/write+1
loopsva 0:f7f626c40ef8 31
loopsva 0:f7f626c40ef8 32 /* Display the MAC address on the Text LCD */
loopsva 0:f7f626c40ef8 33 void disp_mac() {
loopsva 0:f7f626c40ef8 34 lcd.cls();
loopsva 0:f7f626c40ef8 35 lcd.printf("MAC: ");
loopsva 0:f7f626c40ef8 36 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 37 char dispchar, mac_addr[6], i;
loopsva 0:f7f626c40ef8 38 eth2.address(mac_addr);
loopsva 0:f7f626c40ef8 39 for(i = 0; i < 3; i++) {
loopsva 0:f7f626c40ef8 40 dispchar = mac_addr[i];
loopsva 0:f7f626c40ef8 41 if(dispchar < 16) { lcd.printf("0", dispchar);
loopsva 0:f7f626c40ef8 42 }
loopsva 0:f7f626c40ef8 43 lcd.printf("%x", dispchar);
loopsva 0:f7f626c40ef8 44 }
loopsva 0:f7f626c40ef8 45 for(i = i; i < 6; i++) {
loopsva 0:f7f626c40ef8 46 dispchar = mac_addr[i];
loopsva 0:f7f626c40ef8 47 lcd.printf(":", dispchar);
loopsva 0:f7f626c40ef8 48 if(dispchar < 16) { lcd.printf("0", dispchar);
loopsva 0:f7f626c40ef8 49 }
loopsva 0:f7f626c40ef8 50 lcd.printf("%x", dispchar);
loopsva 0:f7f626c40ef8 51 }
loopsva 0:f7f626c40ef8 52 /* Display done */
loopsva 0:f7f626c40ef8 53 }
loopsva 0:f7f626c40ef8 54
loopsva 0:f7f626c40ef8 55 /* Display Waiting for Link */
loopsva 0:f7f626c40ef8 56 void disp_linkStat() {
loopsva 0:f7f626c40ef8 57 lcd.cls();
loopsva 0:f7f626c40ef8 58 while(eth2.link() == 0) {
loopsva 0:f7f626c40ef8 59 led2 = !led2;
loopsva 0:f7f626c40ef8 60 wait(DISP_FAST);
loopsva 0:f7f626c40ef8 61 lcd.cls();
loopsva 0:f7f626c40ef8 62 lcd.printf("Link DOWN");
loopsva 0:f7f626c40ef8 63 }
loopsva 0:f7f626c40ef8 64 led2 = 0;
loopsva 0:f7f626c40ef8 65 lcd.cls();
loopsva 0:f7f626c40ef8 66 lcd.printf("Link UP");
loopsva 0:f7f626c40ef8 67 /* Display done */
loopsva 0:f7f626c40ef8 68 }
loopsva 0:f7f626c40ef8 69
loopsva 0:f7f626c40ef8 70 /* Display the IP Address on the Text LCD */
loopsva 0:f7f626c40ef8 71 void disp_ipAddr() {
loopsva 0:f7f626c40ef8 72 NetServer *net = NetServer::get();
loopsva 0:f7f626c40ef8 73 struct ip_addr ip = net->getIPAddr();
loopsva 0:f7f626c40ef8 74 lcd.cls();
loopsva 0:f7f626c40ef8 75 lcd.printf("IP:");
loopsva 0:f7f626c40ef8 76 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 77 lcd.printf("%hhu.%hhu.%hhu.%hhu\n", (ip.addr)&0xFF, (ip.addr>>8)&0xFF, (ip.addr>>16)&0xFF, (ip.addr>>24)&0xFF);
loopsva 0:f7f626c40ef8 78 /* Display done */
loopsva 0:f7f626c40ef8 79 }
loopsva 0:f7f626c40ef8 80
loopsva 0:f7f626c40ef8 81 /* Display the IP Address Mask on the Text LCD */
loopsva 0:f7f626c40ef8 82 void disp_ipMask() {
loopsva 0:f7f626c40ef8 83 NetServer *net = NetServer::get();
loopsva 0:f7f626c40ef8 84 struct ip_addr nm = net->getNetmask();
loopsva 0:f7f626c40ef8 85 lcd.cls();
loopsva 0:f7f626c40ef8 86 lcd.printf("Mask:");
loopsva 0:f7f626c40ef8 87 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 88 lcd.printf("%hhu.%hhu.%hhu.%hhu\n", (nm.addr)&0xFF, (nm.addr>>8)&0xFF, (nm.addr>>16)&0xFF, (nm.addr>>24)&0xFF);
loopsva 0:f7f626c40ef8 89 /* Display done */
loopsva 0:f7f626c40ef8 90 }
loopsva 0:f7f626c40ef8 91
loopsva 0:f7f626c40ef8 92 /* Display the IP Gateway Address on the Text LCD */
loopsva 0:f7f626c40ef8 93 void disp_ipGateway() {
loopsva 0:f7f626c40ef8 94 NetServer *net = NetServer::get();
loopsva 0:f7f626c40ef8 95 struct ip_addr gw = net->getGateway();
loopsva 0:f7f626c40ef8 96 lcd.cls();
loopsva 0:f7f626c40ef8 97 lcd.printf("GW:");
loopsva 0:f7f626c40ef8 98 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 99 lcd.printf("%hhu.%hhu.%hhu.%hhu\n", (gw.addr)&0xFF, (gw.addr>>8)&0xFF, (gw.addr>>16)&0xFF, (gw.addr>>24)&0xFF);
loopsva 0:f7f626c40ef8 100 /* Display done */
loopsva 0:f7f626c40ef8 101 }
loopsva 0:f7f626c40ef8 102
loopsva 0:f7f626c40ef8 103 /* Display the DNS IP Address on the Text LCD */
loopsva 0:f7f626c40ef8 104 void disp_ipDNS() {
loopsva 0:f7f626c40ef8 105 NetServer *net = NetServer::get();
loopsva 0:f7f626c40ef8 106 struct ip_addr dns = net->getDNS1();
loopsva 0:f7f626c40ef8 107 lcd.cls();
loopsva 0:f7f626c40ef8 108 lcd.printf("DNS:");
loopsva 0:f7f626c40ef8 109 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 110 lcd.printf("%hhu.%hhu.%hhu.%hhu\n", (dns.addr)&0xFF, (dns.addr>>8)&0xFF, (dns.addr>>16)&0xFF, (dns.addr>>24)&0xFF);
loopsva 0:f7f626c40ef8 111 /* Display done */
loopsva 0:f7f626c40ef8 112 }
loopsva 0:f7f626c40ef8 113
loopsva 0:f7f626c40ef8 114
loopsva 0:f7f626c40ef8 115 int main(void) {
loopsva 0:f7f626c40ef8 116
loopsva 0:f7f626c40ef8 117 /* Init the LCD */
loopsva 0:f7f626c40ef8 118 lcd.cls();
loopsva 0:f7f626c40ef8 119 lcd.locate(0,0); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 120 lcd.printf("Init HTTP Serv 9");
loopsva 0:f7f626c40ef8 121 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 122 lcd.printf("K Braun");
loopsva 0:f7f626c40ef8 123 wait(DISP_SLOW);
loopsva 0:f7f626c40ef8 124 /* Display done */
loopsva 0:f7f626c40ef8 125
loopsva 0:f7f626c40ef8 126 char time_buff[32];
loopsva 0:f7f626c40ef8 127 lcd.cls();
loopsva 0:f7f626c40ef8 128 time_t seconds = time(NULL);
loopsva 0:f7f626c40ef8 129 strftime(time_buff, 32, "%a %m/%d/%y\n" /*%I:%M:%S %p\n"*/, localtime(&seconds));
loopsva 0:f7f626c40ef8 130 lcd.printf("%s", time_buff);
loopsva 0:f7f626c40ef8 131 strftime(time_buff, 32, /*"%a %m/%d/%y\n"*/ "%I:%M:%S %p\n", localtime(&seconds));
loopsva 0:f7f626c40ef8 132 lcd.printf("%s", time_buff);
loopsva 0:f7f626c40ef8 133 wait(DISP_SLOW);
loopsva 0:f7f626c40ef8 134
loopsva 0:f7f626c40ef8 135 Base::add_rpc_class<AnalogIn>();
loopsva 0:f7f626c40ef8 136 Base::add_rpc_class<AnalogOut>();
loopsva 0:f7f626c40ef8 137 Base::add_rpc_class<BusIn>();
loopsva 0:f7f626c40ef8 138 Base::add_rpc_class<BusInOut>();
loopsva 0:f7f626c40ef8 139 Base::add_rpc_class<BusOut>();
loopsva 0:f7f626c40ef8 140 // Base::add_rpc_class<CAN>();
loopsva 0:f7f626c40ef8 141 Base::add_rpc_class<DigitalIn>();
loopsva 0:f7f626c40ef8 142 Base::add_rpc_class<DigitalInOut>();
loopsva 0:f7f626c40ef8 143 Base::add_rpc_class<DigitalOut>();
loopsva 0:f7f626c40ef8 144 // Base::add_rpc_class<Ethernet>();
loopsva 0:f7f626c40ef8 145 // Base::add_rpc_class<I2C>();
loopsva 0:f7f626c40ef8 146 // Base::add_rpc_class<InterruptIn>();
loopsva 0:f7f626c40ef8 147 // Base::add_rpc_class<LocalFileSystem>();
loopsva 0:f7f626c40ef8 148 Base::add_rpc_class<PwmOut>();
loopsva 0:f7f626c40ef8 149 Base::add_rpc_class<SPI>();
loopsva 0:f7f626c40ef8 150 Base::add_rpc_class<Serial>();
loopsva 0:f7f626c40ef8 151 // Base::add_rpc_class<Ticker>();
loopsva 0:f7f626c40ef8 152 // Base::add_rpc_class<Timeout>();
loopsva 0:f7f626c40ef8 153 Base::add_rpc_class<Timer>();
loopsva 0:f7f626c40ef8 154 // Base::add_rpc_class<error>();
loopsva 0:f7f626c40ef8 155 // Base::add_rpc_class<rtc_time>();
loopsva 0:f7f626c40ef8 156
loopsva 0:f7f626c40ef8 157 Base::add_rpc_class<myrpc>();
loopsva 0:f7f626c40ef8 158
loopsva 0:f7f626c40ef8 159 disp_mac(); //put MAC address on LCD
loopsva 0:f7f626c40ef8 160 wait (DISP_SLOW);
loopsva 0:f7f626c40ef8 161 disp_linkStat(); //show link status on LCD, wait for valid link
loopsva 0:f7f626c40ef8 162 wait (DISP_FAST);
loopsva 0:f7f626c40ef8 163 lcd.cls();
loopsva 0:f7f626c40ef8 164 lcd.printf("Looking for...\n");
loopsva 0:f7f626c40ef8 165 lcd.printf("DHCP Server");
loopsva 0:f7f626c40ef8 166 http.addHandler(new HTTPRPC());
loopsva 0:f7f626c40ef8 167 http.addHandler(new HTTPFileSystemHandler("/", "/local/"));
loopsva 0:f7f626c40ef8 168 http.bind();
loopsva 0:f7f626c40ef8 169
loopsva 0:f7f626c40ef8 170 // server.addHandler(new HTTPFS("/", "/local/"));
loopsva 0:f7f626c40ef8 171 // server.bind();
loopsva 0:f7f626c40ef8 172 // NetServer *net = NULL;
loopsva 0:f7f626c40ef8 173 NetServer *net = NetServer::get();
loopsva 0:f7f626c40ef8 174 // struct ip_addr ip = net->getIPAddr();
loopsva 0:f7f626c40ef8 175 // struct ip_addr gw = net->getGateway();
loopsva 0:f7f626c40ef8 176 // struct ip_addr nm = net->getNetmask();
loopsva 0:f7f626c40ef8 177 // struct ip_addr dns = net->getDNS1();
loopsva 0:f7f626c40ef8 178 // struct ip_addr hn = net->getHostname();
loopsva 0:f7f626c40ef8 179 // ...
loopsva 0:f7f626c40ef8 180
loopsva 0:f7f626c40ef8 181 /* Display the Host Name on the Text LCD */
loopsva 0:f7f626c40ef8 182 lcd.cls();
loopsva 0:f7f626c40ef8 183 lcd.printf("Host:");
loopsva 0:f7f626c40ef8 184 lcd.locate(0,1); //column(0-15), row(0-1)
loopsva 0:f7f626c40ef8 185 // hn((char *)net->getHostname);
loopsva 0:f7f626c40ef8 186 lcd.printf("mbed-c3p0"); //<<until I can find out "how-to", force feed "mbed-c3p0"
loopsva 0:f7f626c40ef8 187 // lcd.printf("%s", (const char)net->getHostname));
loopsva 0:f7f626c40ef8 188 wait(DISP_FAST);
loopsva 0:f7f626c40ef8 189 /* Display done */
loopsva 0:f7f626c40ef8 190
loopsva 0:f7f626c40ef8 191 disp_ipAddr(); //put IP address on LCD
loopsva 0:f7f626c40ef8 192 wait (DISP_FAST);
loopsva 0:f7f626c40ef8 193 disp_ipMask(); //put IP Mask on LCD
loopsva 0:f7f626c40ef8 194 wait (DISP_FAST);
loopsva 0:f7f626c40ef8 195 disp_ipGateway(); //put Gateway address on LCD
loopsva 0:f7f626c40ef8 196 wait (DISP_FAST);
loopsva 0:f7f626c40ef8 197 disp_ipDNS(); //put DNS address on LCD
loopsva 0:f7f626c40ef8 198 wait (DISP_FAST);
loopsva 0:f7f626c40ef8 199 disp_ipAddr(); //put IP address on LCD...again
loopsva 0:f7f626c40ef8 200 lcd.printf("mbed-c3p0"); //<<until I can find out "how-to", force feed "mbed-c3p0"
loopsva 0:f7f626c40ef8 201
loopsva 0:f7f626c40ef8 202 while(1) {
loopsva 0:f7f626c40ef8 203 http.poll();
loopsva 0:f7f626c40ef8 204 disp_ipAddr(); //put IP address on LCD...again
loopsva 0:f7f626c40ef8 205 lcd.printf("mbed-c3p0"); //<<until I can find out "how-to", force feed "mbed-c3p0"
loopsva 0:f7f626c40ef8 206 time_t seconds = time(NULL);
loopsva 0:f7f626c40ef8 207 strftime(time_buff, 32, /*"%a %m/%d/%y\n"*/ " %H:%M\n", localtime(&seconds));
loopsva 0:f7f626c40ef8 208 lcd.printf("%s", time_buff);
loopsva 0:f7f626c40ef8 209 wait(0.01);
loopsva 0:f7f626c40ef8 210 }
loopsva 0:f7f626c40ef8 211 }
loopsva 0:f7f626c40ef8 212