mruby mbed
Dependencies: EthernetInterface SDFileSystem mbed-rtos mbed-src mruby-mbed
main.cpp@0:4bb480aaa402, 2015-03-25 (annotated)
- Committer:
- mzta
- Date:
- Wed Mar 25 18:25:34 2015 +0000
- Revision:
- 0:4bb480aaa402
mruby_mbed_web initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mzta | 0:4bb480aaa402 | 1 | #include <string> |
mzta | 0:4bb480aaa402 | 2 | |
mzta | 0:4bb480aaa402 | 3 | #include "mbed.h" |
mzta | 0:4bb480aaa402 | 4 | #include "SDFileSystem.h" |
mzta | 0:4bb480aaa402 | 5 | #include "EthernetInterface.h" |
mzta | 0:4bb480aaa402 | 6 | #include "htmlcontent.h" |
mzta | 0:4bb480aaa402 | 7 | #include "cmd.h" |
mzta | 0:4bb480aaa402 | 8 | |
mzta | 0:4bb480aaa402 | 9 | #define RBFILE "/sd/test.rb" |
mzta | 0:4bb480aaa402 | 10 | #define ENABLE_DHCP |
mzta | 0:4bb480aaa402 | 11 | |
mzta | 0:4bb480aaa402 | 12 | SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd"); |
mzta | 0:4bb480aaa402 | 13 | |
mzta | 0:4bb480aaa402 | 14 | Serial pc(USBTX, USBRX); |
mzta | 0:4bb480aaa402 | 15 | char i_buff[1024*3]; |
mzta | 0:4bb480aaa402 | 16 | char o_buff[1024*3]; |
mzta | 0:4bb480aaa402 | 17 | |
mzta | 0:4bb480aaa402 | 18 | int mruby_argc = 2; |
mzta | 0:4bb480aaa402 | 19 | char *mruby_argv[] = { |
mzta | 0:4bb480aaa402 | 20 | "mruby", |
mzta | 0:4bb480aaa402 | 21 | RBFILE |
mzta | 0:4bb480aaa402 | 22 | }; |
mzta | 0:4bb480aaa402 | 23 | |
mzta | 0:4bb480aaa402 | 24 | int getRequestBody(char *request, char *buff, int *size) |
mzta | 0:4bb480aaa402 | 25 | { |
mzta | 0:4bb480aaa402 | 26 | string req(request); |
mzta | 0:4bb480aaa402 | 27 | int sp = req.find("Content-Length", 0); |
mzta | 0:4bb480aaa402 | 28 | int ep = req.find("\r\n", sp); |
mzta | 0:4bb480aaa402 | 29 | int len = 0; |
mzta | 0:4bb480aaa402 | 30 | sscanf(req.substr(sp, ep-sp).c_str(), "Content-Length: %d", &len); |
mzta | 0:4bb480aaa402 | 31 | |
mzta | 0:4bb480aaa402 | 32 | sp = req.find("\r\n\r\n", 0) + 4; |
mzta | 0:4bb480aaa402 | 33 | string body = req.substr(sp, len); |
mzta | 0:4bb480aaa402 | 34 | *size = len; |
mzta | 0:4bb480aaa402 | 35 | sprintf(buff, body.c_str()); |
mzta | 0:4bb480aaa402 | 36 | } |
mzta | 0:4bb480aaa402 | 37 | |
mzta | 0:4bb480aaa402 | 38 | int writeScriptFile(char *buff, int size) |
mzta | 0:4bb480aaa402 | 39 | { |
mzta | 0:4bb480aaa402 | 40 | int i; |
mzta | 0:4bb480aaa402 | 41 | FILE *f = fopen(RBFILE, "w"); |
mzta | 0:4bb480aaa402 | 42 | |
mzta | 0:4bb480aaa402 | 43 | for (i=0; i < size; i++) { |
mzta | 0:4bb480aaa402 | 44 | fprintf(f, "%c", buff[i]); |
mzta | 0:4bb480aaa402 | 45 | } |
mzta | 0:4bb480aaa402 | 46 | |
mzta | 0:4bb480aaa402 | 47 | fclose(f); |
mzta | 0:4bb480aaa402 | 48 | } |
mzta | 0:4bb480aaa402 | 49 | |
mzta | 0:4bb480aaa402 | 50 | int main() { |
mzta | 0:4bb480aaa402 | 51 | EthernetInterface eth0; |
mzta | 0:4bb480aaa402 | 52 | |
mzta | 0:4bb480aaa402 | 53 | printf("Init network interface...\n"); |
mzta | 0:4bb480aaa402 | 54 | #ifdef ENABLE_DHCP |
mzta | 0:4bb480aaa402 | 55 | eth0.init(); |
mzta | 0:4bb480aaa402 | 56 | #else |
mzta | 0:4bb480aaa402 | 57 | eth0.init("192.168.1.100", "255.255.255.0", "192.168.1.1"); |
mzta | 0:4bb480aaa402 | 58 | #endif |
mzta | 0:4bb480aaa402 | 59 | eth0.connect(); |
mzta | 0:4bb480aaa402 | 60 | printf("IP Address: %s\n", eth0.getIPAddress()); |
mzta | 0:4bb480aaa402 | 61 | printf("done!\n\n"); |
mzta | 0:4bb480aaa402 | 62 | |
mzta | 0:4bb480aaa402 | 63 | TCPSocketServer server; |
mzta | 0:4bb480aaa402 | 64 | TCPSocketConnection conn; |
mzta | 0:4bb480aaa402 | 65 | server.bind(80); |
mzta | 0:4bb480aaa402 | 66 | server.listen(); |
mzta | 0:4bb480aaa402 | 67 | |
mzta | 0:4bb480aaa402 | 68 | while (true) { |
mzta | 0:4bb480aaa402 | 69 | server.accept(conn); |
mzta | 0:4bb480aaa402 | 70 | conn.receive(i_buff, sizeof(i_buff)); |
mzta | 0:4bb480aaa402 | 71 | |
mzta | 0:4bb480aaa402 | 72 | if (i_buff[0] == 'P') { |
mzta | 0:4bb480aaa402 | 73 | int size; |
mzta | 0:4bb480aaa402 | 74 | getRequestBody(i_buff, o_buff, &size); |
mzta | 0:4bb480aaa402 | 75 | writeScriptFile(o_buff, size); |
mzta | 0:4bb480aaa402 | 76 | cmd_mruby(mruby_argc, mruby_argv); |
mzta | 0:4bb480aaa402 | 77 | } else { |
mzta | 0:4bb480aaa402 | 78 | sprintf(o_buff, EDITPAGE); |
mzta | 0:4bb480aaa402 | 79 | } |
mzta | 0:4bb480aaa402 | 80 | |
mzta | 0:4bb480aaa402 | 81 | conn.send(o_buff, sizeof(EDITPAGE)); |
mzta | 0:4bb480aaa402 | 82 | conn.close(); |
mzta | 0:4bb480aaa402 | 83 | } |
mzta | 0:4bb480aaa402 | 84 | |
mzta | 0:4bb480aaa402 | 85 | server.close(); |
mzta | 0:4bb480aaa402 | 86 | eth0.disconnect(); |
mzta | 0:4bb480aaa402 | 87 | } |