HTTP Server with WebSocket Server for GSwifiInterface library Please see: https://mbed.org/users/gsfan/notebook/gswifiinterface_httpd/
Dependencies: GSwifiInterface SDFileSystem mbed
main.cpp@0:93f689e0a0d9, 2014-01-30 (annotated)
- Committer:
- gsfan
- Date:
- Thu Jan 30 15:13:18 2014 +0000
- Revision:
- 0:93f689e0a0d9
1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gsfan | 0:93f689e0a0d9 | 1 | /* |
gsfan | 0:93f689e0a0d9 | 2 | * Please modify "GSwifi_conf.h" |
gsfan | 0:93f689e0a0d9 | 3 | * ---------- |
gsfan | 0:93f689e0a0d9 | 4 | * //#define CFG_ENABLE_RTOS |
gsfan | 0:93f689e0a0d9 | 5 | * #define CFG_ENABLE_HTTPD |
gsfan | 0:93f689e0a0d9 | 6 | * #define CFG_ENABLE_WEBSOCKET |
gsfan | 0:93f689e0a0d9 | 7 | * //#define CFG_ENABLE_SMTP |
gsfan | 0:93f689e0a0d9 | 8 | * ---------- |
gsfan | 0:93f689e0a0d9 | 9 | */ |
gsfan | 0:93f689e0a0d9 | 10 | |
gsfan | 0:93f689e0a0d9 | 11 | #include "mbed.h" |
gsfan | 0:93f689e0a0d9 | 12 | #include "SDFileSystem.h" |
gsfan | 0:93f689e0a0d9 | 13 | #include "GSwifi.h" |
gsfan | 0:93f689e0a0d9 | 14 | |
gsfan | 0:93f689e0a0d9 | 15 | #define SEC GSwifi::SEC_WPA_PSK |
gsfan | 0:93f689e0a0d9 | 16 | #define SSID "SSPD" |
gsfan | 0:93f689e0a0d9 | 17 | #define PASS "PASSPHRASE" |
gsfan | 0:93f689e0a0d9 | 18 | |
gsfan | 0:93f689e0a0d9 | 19 | Serial pc(USBTX, USBRX); |
gsfan | 0:93f689e0a0d9 | 20 | DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); |
gsfan | 0:93f689e0a0d9 | 21 | LocalFileSystem local("local"); |
gsfan | 0:93f689e0a0d9 | 22 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
gsfan | 0:93f689e0a0d9 | 23 | |
gsfan | 0:93f689e0a0d9 | 24 | GSwifi gs(p13, p14, p12, P0_22, p20, NC, 115200); // mbed LPC1768 |
gsfan | 0:93f689e0a0d9 | 25 | //GSwifi gs(PTD3, PTD2, NC, PTD5, PTA13); // FRDM KL25Z |
gsfan | 0:93f689e0a0d9 | 26 | |
gsfan | 0:93f689e0a0d9 | 27 | |
gsfan | 0:93f689e0a0d9 | 28 | void cgi (int cid) { |
gsfan | 0:93f689e0a0d9 | 29 | int i; |
gsfan | 0:93f689e0a0d9 | 30 | char buf[100]; |
gsfan | 0:93f689e0a0d9 | 31 | |
gsfan | 0:93f689e0a0d9 | 32 | led2 = 1; |
gsfan | 0:93f689e0a0d9 | 33 | i = gs.recv(cid, buf, sizeof(buf)); |
gsfan | 0:93f689e0a0d9 | 34 | if (i < 0) return; |
gsfan | 0:93f689e0a0d9 | 35 | buf[i] = 0; |
gsfan | 0:93f689e0a0d9 | 36 | // pc.printf("CGI %d: %s ? %s '%s' %d\r\n", cid, gs.httpdGetFilename(cid), gs.httpdGetQuerystring(cid), buf, i); |
gsfan | 0:93f689e0a0d9 | 37 | |
gsfan | 0:93f689e0a0d9 | 38 | gs.send(cid, "HTTP/1.1 200 OK\r\n", 17); |
gsfan | 0:93f689e0a0d9 | 39 | gs.send(cid, "Content-type: text/plain\r\n", 26); |
gsfan | 0:93f689e0a0d9 | 40 | gs.send(cid, "\r\n", 2); |
gsfan | 0:93f689e0a0d9 | 41 | |
gsfan | 0:93f689e0a0d9 | 42 | gs.send(cid, "BODY: ", 6); |
gsfan | 0:93f689e0a0d9 | 43 | gs.send(cid, buf, strlen(buf)); |
gsfan | 0:93f689e0a0d9 | 44 | gs.send(cid, "\r\n", 2); |
gsfan | 0:93f689e0a0d9 | 45 | gs.close(cid); |
gsfan | 0:93f689e0a0d9 | 46 | } |
gsfan | 0:93f689e0a0d9 | 47 | |
gsfan | 0:93f689e0a0d9 | 48 | void ws_server (int cid) { |
gsfan | 0:93f689e0a0d9 | 49 | int i; |
gsfan | 0:93f689e0a0d9 | 50 | char buf[100]; |
gsfan | 0:93f689e0a0d9 | 51 | |
gsfan | 0:93f689e0a0d9 | 52 | led2 = 1; |
gsfan | 0:93f689e0a0d9 | 53 | i = gs.recv(cid, buf, sizeof(buf)); |
gsfan | 0:93f689e0a0d9 | 54 | if (i < 0) return; |
gsfan | 0:93f689e0a0d9 | 55 | buf[i] = 0; |
gsfan | 0:93f689e0a0d9 | 56 | pc.printf("WS %d: '%s' %d\r\n", cid, buf, i); |
gsfan | 0:93f689e0a0d9 | 57 | |
gsfan | 0:93f689e0a0d9 | 58 | gs.wsSend(cid, buf, i); |
gsfan | 0:93f689e0a0d9 | 59 | } |
gsfan | 0:93f689e0a0d9 | 60 | |
gsfan | 0:93f689e0a0d9 | 61 | int main () { |
gsfan | 0:93f689e0a0d9 | 62 | char ip[16], netmask[16], gateway[16]; |
gsfan | 0:93f689e0a0d9 | 63 | |
gsfan | 0:93f689e0a0d9 | 64 | pc.baud(115200); |
gsfan | 0:93f689e0a0d9 | 65 | // pc.baud(921600); |
gsfan | 0:93f689e0a0d9 | 66 | printf("HTTP Server...\r\n"); |
gsfan | 0:93f689e0a0d9 | 67 | led1 = 1; |
gsfan | 0:93f689e0a0d9 | 68 | gs.setAddress(); //Use DHCP |
gsfan | 0:93f689e0a0d9 | 69 | // gs.setAddress("192.168.1.50", "255.255.255.0", "192.168.1.1", "192.168.1.1"); |
gsfan | 0:93f689e0a0d9 | 70 | gs.setSsid(SEC, SSID, PASS); |
gsfan | 0:93f689e0a0d9 | 71 | if (gs.join()) return -1; // join the network |
gsfan | 0:93f689e0a0d9 | 72 | // if (gs.limitedap()) return -1; // access point |
gsfan | 0:93f689e0a0d9 | 73 | gs.getAddress(ip, netmask, gateway); |
gsfan | 0:93f689e0a0d9 | 74 | printf("IP Address is %s\r\n", ip); |
gsfan | 0:93f689e0a0d9 | 75 | |
gsfan | 0:93f689e0a0d9 | 76 | printf("ready\r\n"); |
gsfan | 0:93f689e0a0d9 | 77 | gs.httpd(); |
gsfan | 0:93f689e0a0d9 | 78 | gs.httpdAttach("/cgi-bin/", &cgi); |
gsfan | 0:93f689e0a0d9 | 79 | gs.httpdAttach("/ws/", &ws_server, 1); |
gsfan | 0:93f689e0a0d9 | 80 | gs.httpdAttach("/test/", "/sd/www/"); |
gsfan | 0:93f689e0a0d9 | 81 | gs.httpdAttach("/", "/local/"); |
gsfan | 0:93f689e0a0d9 | 82 | |
gsfan | 0:93f689e0a0d9 | 83 | for (;;) { |
gsfan | 0:93f689e0a0d9 | 84 | gs.poll(); |
gsfan | 0:93f689e0a0d9 | 85 | if (pc.readable()) { |
gsfan | 0:93f689e0a0d9 | 86 | if (pc.getc() == 'q') break; |
gsfan | 0:93f689e0a0d9 | 87 | } |
gsfan | 0:93f689e0a0d9 | 88 | |
gsfan | 0:93f689e0a0d9 | 89 | wait_ms(50); |
gsfan | 0:93f689e0a0d9 | 90 | led1 = !led1; |
gsfan | 0:93f689e0a0d9 | 91 | led2 = 0; |
gsfan | 0:93f689e0a0d9 | 92 | } |
gsfan | 0:93f689e0a0d9 | 93 | gs.dissociate(); |
gsfan | 0:93f689e0a0d9 | 94 | return 0; |
gsfan | 0:93f689e0a0d9 | 95 | } |