mruby mbed

Dependencies:   EthernetInterface SDFileSystem mbed-rtos mbed-src mruby-mbed

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?

UserRevisionLine numberNew 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 }