RPC over HTTP server for GSwifi see: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Dependencies:   GSwifi (old) mbed

Committer:
gsfan
Date:
Thu Nov 08 02:05:36 2012 +0000
Revision:
0:2476b5d0de0b
Child:
1:a08908d19f06
1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsfan 0:2476b5d0de0b 1 /*
gsfan 0:2476b5d0de0b 2 * RPC over HTTP server for GSwifi
gsfan 0:2476b5d0de0b 3 *
gsfan 0:2476b5d0de0b 4 * RPC
gsfan 0:2476b5d0de0b 5 * http://IP address/rpc/DigitalOut/new LED4 myled
gsfan 0:2476b5d0de0b 6 * http://IP address/rpc/myled/write 1
gsfan 0:2476b5d0de0b 7 *
gsfan 0:2476b5d0de0b 8 * http://IP address/rpc/AnalogIn/new p20 myadc
gsfan 0:2476b5d0de0b 9 * http://IP address/rpc/myadc/read
gsfan 0:2476b5d0de0b 10 */
gsfan 0:2476b5d0de0b 11
gsfan 0:2476b5d0de0b 12 #include "mbed.h"
gsfan 0:2476b5d0de0b 13 #include "rpc.h"
gsfan 0:2476b5d0de0b 14 #include "GSwifi.h"
gsfan 0:2476b5d0de0b 15
gsfan 0:2476b5d0de0b 16 #define PORT 80
gsfan 0:2476b5d0de0b 17
gsfan 0:2476b5d0de0b 18 #define SECURE GSSEC_WPA2_PSK
gsfan 0:2476b5d0de0b 19 #define SSID "ROBOBA"
gsfan 0:2476b5d0de0b 20 #define PASS "roboba1234567"
gsfan 0:2476b5d0de0b 21
gsfan 0:2476b5d0de0b 22 // GSwifi gs(p13, p14); // TX, RX (no flow control)
gsfan 0:2476b5d0de0b 23 GSwifi gs(p13, p14, p12, P0_22); // TX, RX, CTS, RTS
gsfan 0:2476b5d0de0b 24 DigitalOut gs_reset(p9);
gsfan 0:2476b5d0de0b 25
gsfan 0:2476b5d0de0b 26 LocalFileSystem local("local");
gsfan 0:2476b5d0de0b 27
gsfan 0:2476b5d0de0b 28 Serial pc(USBTX, USBRX);
gsfan 0:2476b5d0de0b 29 DigitalOut led1(LED1), led2(LED2);
gsfan 0:2476b5d0de0b 30
gsfan 0:2476b5d0de0b 31 void rpc (int cid, GS_httpd *gshttpd) {
gsfan 0:2476b5d0de0b 32 int i;
gsfan 0:2476b5d0de0b 33 char buf[40], outbuf[40];
gsfan 0:2476b5d0de0b 34
gsfan 0:2476b5d0de0b 35 buf[0] = '/';
gsfan 0:2476b5d0de0b 36 gs.urldecode(gshttpd->file, &buf[1], sizeof(buf) - 2);
gsfan 0:2476b5d0de0b 37 rpc(buf, outbuf); // RPC call
gsfan 0:2476b5d0de0b 38 pc.printf("RPC %d: %s '%s'\r\n", cid, buf, outbuf);
gsfan 0:2476b5d0de0b 39
gsfan 0:2476b5d0de0b 40 gs.send(cid, "HTTP/1.1 200 OK\r\n", 17);
gsfan 0:2476b5d0de0b 41 gs.send(cid, "Content-type: text/plain\r\n", 26);
gsfan 0:2476b5d0de0b 42 gs.send(cid, "\r\n", 2);
gsfan 0:2476b5d0de0b 43 gs.send(cid, outbuf, strlen(outbuf));
gsfan 0:2476b5d0de0b 44 }
gsfan 0:2476b5d0de0b 45
gsfan 0:2476b5d0de0b 46 int main () {
gsfan 0:2476b5d0de0b 47 IpAddr ipaddr, netmask, gateway, nameserver;
gsfan 0:2476b5d0de0b 48 Host host;
gsfan 0:2476b5d0de0b 49
gsfan 0:2476b5d0de0b 50 gs_reset = 0;
gsfan 0:2476b5d0de0b 51 wait_ms(100);
gsfan 0:2476b5d0de0b 52 gs_reset = 1;
gsfan 0:2476b5d0de0b 53 wait_ms(500);
gsfan 0:2476b5d0de0b 54
gsfan 0:2476b5d0de0b 55 led1 = 1;
gsfan 0:2476b5d0de0b 56 pc.baud(115200);
gsfan 0:2476b5d0de0b 57
gsfan 0:2476b5d0de0b 58 pc.printf("connecting...\r\n");
gsfan 0:2476b5d0de0b 59 if (gs.connect(SECURE, SSID, PASS)) {
gsfan 0:2476b5d0de0b 60 return -1;
gsfan 0:2476b5d0de0b 61 }
gsfan 0:2476b5d0de0b 62 gs.getAddress(ipaddr, netmask, gateway, nameserver);
gsfan 0:2476b5d0de0b 63 pc.printf("ip %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
gsfan 0:2476b5d0de0b 64
gsfan 0:2476b5d0de0b 65 Base::add_rpc_class<DigitalIn>();
gsfan 0:2476b5d0de0b 66 Base::add_rpc_class<DigitalOut>();
gsfan 0:2476b5d0de0b 67 Base::add_rpc_class<AnalogIn>();
gsfan 0:2476b5d0de0b 68
gsfan 0:2476b5d0de0b 69 led2 = 1;
gsfan 0:2476b5d0de0b 70 pc.printf("httpd\r\n");
gsfan 0:2476b5d0de0b 71 gs.httpd(PORT);
gsfan 0:2476b5d0de0b 72 gs.attach_httpd("/rpc/", &rpc);
gsfan 0:2476b5d0de0b 73 gs.attach_httpd("/", "/local/");
gsfan 0:2476b5d0de0b 74
gsfan 0:2476b5d0de0b 75 for (;;) {
gsfan 0:2476b5d0de0b 76 gs.poll();
gsfan 0:2476b5d0de0b 77
gsfan 0:2476b5d0de0b 78 wait_ms(50);
gsfan 0:2476b5d0de0b 79 led1 = !led1;
gsfan 0:2476b5d0de0b 80 led2 = 0;
gsfan 0:2476b5d0de0b 81 }
gsfan 0:2476b5d0de0b 82 }