HTTP and WebSocket Server with RTOS for GSwifiInterface library Please see: https://mbed.org/users/gsfan/notebook/gswifiinterface_httpd/

Dependencies:   GSwifiInterface SDFileSystem mbed-rtos mbed

Committer:
gsfan
Date:
Thu Jun 05 04:25:13 2014 +0000
Revision:
0:eb3c6b3965fa
1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsfan 0:eb3c6b3965fa 1 /*
gsfan 0:eb3c6b3965fa 2 * Please modify "GSwifi_conf.h"
gsfan 0:eb3c6b3965fa 3 * ----------
gsfan 0:eb3c6b3965fa 4 * #define CFG_ENABLE_RTOS
gsfan 0:eb3c6b3965fa 5 * #define CFG_ENABLE_HTTPD
gsfan 0:eb3c6b3965fa 6 * #define CFG_ENABLE_WEBSOCKET
gsfan 0:eb3c6b3965fa 7 * //#define CFG_ENABLE_SMTP
gsfan 0:eb3c6b3965fa 8 * ----------
gsfan 0:eb3c6b3965fa 9 */
gsfan 0:eb3c6b3965fa 10
gsfan 0:eb3c6b3965fa 11 #include "mbed.h"
gsfan 0:eb3c6b3965fa 12 #include "SDFileSystem.h"
gsfan 0:eb3c6b3965fa 13 #include "GSwifiInterface.h"
gsfan 0:eb3c6b3965fa 14
gsfan 0:eb3c6b3965fa 15 #define SEC GSwifi::SEC_WPA_PSK
gsfan 0:eb3c6b3965fa 16 #define SSID "SSPD"
gsfan 0:eb3c6b3965fa 17 #define PASS "PASSPHRASE"
gsfan 0:eb3c6b3965fa 18
gsfan 0:eb3c6b3965fa 19 Serial pc(USBTX, USBRX);
gsfan 0:eb3c6b3965fa 20 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
gsfan 0:eb3c6b3965fa 21 LocalFileSystem local("local");
gsfan 0:eb3c6b3965fa 22 SDFileSystem sd(p5, p6, p7, p8, "sd");
gsfan 0:eb3c6b3965fa 23
gsfan 0:eb3c6b3965fa 24 GSwifiInterface *gs;
gsfan 0:eb3c6b3965fa 25
gsfan 0:eb3c6b3965fa 26 void cgi (int cid) {
gsfan 0:eb3c6b3965fa 27 int i;
gsfan 0:eb3c6b3965fa 28 char buf[100];
gsfan 0:eb3c6b3965fa 29
gsfan 0:eb3c6b3965fa 30 led2 = 1;
gsfan 0:eb3c6b3965fa 31 i = gs->recv(cid, buf, sizeof(buf));
gsfan 0:eb3c6b3965fa 32 if (i < 0) return;
gsfan 0:eb3c6b3965fa 33 buf[i] = 0;
gsfan 0:eb3c6b3965fa 34 pc.printf("CGI %d: %s ? %s '%s' %d\r\n", cid, gs->httpdGetFilename(cid), gs->httpdGetQuerystring(cid), buf, i);
gsfan 0:eb3c6b3965fa 35
gsfan 0:eb3c6b3965fa 36 gs->send(cid, "HTTP/1.1 200 OK\r\n", 17);
gsfan 0:eb3c6b3965fa 37 gs->send(cid, "Content-type: text/plain\r\n", 26);
gsfan 0:eb3c6b3965fa 38 gs->send(cid, "\r\n", 2);
gsfan 0:eb3c6b3965fa 39
gsfan 0:eb3c6b3965fa 40 gs->send(cid, "BODY: ", 6);
gsfan 0:eb3c6b3965fa 41 gs->send(cid, buf, strlen(buf));
gsfan 0:eb3c6b3965fa 42 gs->send(cid, "\r\n", 2);
gsfan 0:eb3c6b3965fa 43 gs->close(cid);
gsfan 0:eb3c6b3965fa 44 }
gsfan 0:eb3c6b3965fa 45
gsfan 0:eb3c6b3965fa 46 void ws_server (int cid) {
gsfan 0:eb3c6b3965fa 47 int i;
gsfan 0:eb3c6b3965fa 48 char buf[100];
gsfan 0:eb3c6b3965fa 49
gsfan 0:eb3c6b3965fa 50 led2 = 1;
gsfan 0:eb3c6b3965fa 51 i = gs->recv(cid, buf, sizeof(buf));
gsfan 0:eb3c6b3965fa 52 if (i < 0) return;
gsfan 0:eb3c6b3965fa 53 buf[i] = 0;
gsfan 0:eb3c6b3965fa 54 pc.printf("WS %d: '%s' %d\r\n", cid, buf, i);
gsfan 0:eb3c6b3965fa 55
gsfan 0:eb3c6b3965fa 56 gs->wsSend(cid, buf, i);
gsfan 0:eb3c6b3965fa 57 }
gsfan 0:eb3c6b3965fa 58
gsfan 0:eb3c6b3965fa 59 int main () {
gsfan 0:eb3c6b3965fa 60
gsfan 0:eb3c6b3965fa 61 pc.baud(115200);
gsfan 0:eb3c6b3965fa 62 // pc.baud(921600);
gsfan 0:eb3c6b3965fa 63 printf("HTTP Server...\r\n");
gsfan 0:eb3c6b3965fa 64 led1 = 1;
gsfan 0:eb3c6b3965fa 65 gs = new GSwifiInterface(p13, p14, p12, P0_22, p21, NC, 9600);
gsfan 0:eb3c6b3965fa 66 gs->init(); //Use DHCP
gsfan 0:eb3c6b3965fa 67 if (gs->connect(SEC, SSID, PASS)) return -1; // join the network
gsfan 0:eb3c6b3965fa 68 printf("IP Address is %s\n", gs->getIPAddress());
gsfan 0:eb3c6b3965fa 69
gsfan 0:eb3c6b3965fa 70 printf("ready\r\n");
gsfan 0:eb3c6b3965fa 71 gs->httpd();
gsfan 0:eb3c6b3965fa 72 gs->httpdAttach("/cgi-bin/", &cgi);
gsfan 0:eb3c6b3965fa 73 gs->httpdAttach("/ws/", &ws_server, 1);
gsfan 0:eb3c6b3965fa 74 gs->httpdAttach("/test/", "/sd/www/");
gsfan 0:eb3c6b3965fa 75 gs->httpdAttach("/", "/local/");
gsfan 0:eb3c6b3965fa 76
gsfan 0:eb3c6b3965fa 77 for (;;) {
gsfan 0:eb3c6b3965fa 78 if (pc.readable()) {
gsfan 0:eb3c6b3965fa 79 if (pc.getc() == 'q') break;
gsfan 0:eb3c6b3965fa 80 }
gsfan 0:eb3c6b3965fa 81
gsfan 0:eb3c6b3965fa 82 wait_ms(50);
gsfan 0:eb3c6b3965fa 83 led1 = !led1;
gsfan 0:eb3c6b3965fa 84 led2 = 0;
gsfan 0:eb3c6b3965fa 85 }
gsfan 0:eb3c6b3965fa 86 gs->dissociate();
gsfan 0:eb3c6b3965fa 87 return 0;
gsfan 0:eb3c6b3965fa 88 }