Kevin Braun
/
HTTPserver-1
main.cpp@0:f7f626c40ef8, 2009-12-09 (annotated)
- Committer:
- loopsva
- Date:
- Wed Dec 09 18:52:41 2009 +0000
- Revision:
- 0:f7f626c40ef8
Who changed what in which revision?
User | Revision | Line number | New 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 |