Sensor with Web Server

Dependencies:   EthernetInterface mbed-rpc mbed-rtos mbed

Committer:
afilipem
Date:
Tue Apr 08 12:13:32 2014 +0000
Revision:
0:c385e589a779
1 version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
afilipem 0:c385e589a779 1 #include "Formatter.h"
afilipem 0:c385e589a779 2 #include "mbed.h"
afilipem 0:c385e589a779 3 #include "RPCObjectManager.h"
afilipem 0:c385e589a779 4 #include "EthernetInterface.h"
afilipem 0:c385e589a779 5
afilipem 0:c385e589a779 6 //***new addings
afilipem 0:c385e589a779 7 #include "DS18S20.h"
afilipem 0:c385e589a779 8 #include "DS18B20.h"
afilipem 0:c385e589a779 9 #include "OneWireDefs.h"
afilipem 0:c385e589a779 10 #include "DebugTrace.h"
afilipem 0:c385e589a779 11
afilipem 0:c385e589a779 12
afilipem 0:c385e589a779 13
afilipem 0:c385e589a779 14 const char *SIMPLE_HTML_CODE = "\
afilipem 0:c385e589a779 15 <!DOCTYPE html>\
afilipem 0:c385e589a779 16 <html>\
afilipem 0:c385e589a779 17 <head>\
afilipem 0:c385e589a779 18 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
afilipem 0:c385e589a779 19 <title>TCP Server</title>\
afilipem 0:c385e589a779 20 </head>\
afilipem 0:c385e589a779 21 <body>";
afilipem 0:c385e589a779 22
afilipem 0:c385e589a779 23
afilipem 0:c385e589a779 24 const char* INTERACTIVE_HTML_CODE_1 = "\
afilipem 0:c385e589a779 25 <!DOCTYPE html> \
afilipem 0:c385e589a779 26 <html>\
afilipem 0:c385e589a779 27 <head>\
afilipem 0:c385e589a779 28 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
afilipem 0:c385e589a779 29 <title>TCP Server</title>\
afilipem 0:c385e589a779 30 <script type=\"text/javascript\">\
afilipem 0:c385e589a779 31 var ip = \"%s\";\
afilipem 0:c385e589a779 32 function submitCreateForm()\
afilipem 0:c385e589a779 33 {\
afilipem 0:c385e589a779 34 var list = document.getElementById(\"type\");\
afilipem 0:c385e589a779 35 var type = list.options[list.selectedIndex].value;\
afilipem 0:c385e589a779 36 var name = document.getElementById(\"name\").value;\
afilipem 0:c385e589a779 37 if(name === \"\") \
afilipem 0:c385e589a779 38 return;\
afilipem 0:c385e589a779 39 var arg = document.getElementById(\"arg\").value;\
afilipem 0:c385e589a779 40 var url;\
afilipem 0:c385e589a779 41 if(arg === \"\") url = \"http://\" + ip + type + \"new?name=\" + name;\
afilipem 0:c385e589a779 42 else url = \"http://\" + ip + type + \"new?arg=\" + arg + \"&name=\" + name;\
afilipem 0:c385e589a779 43 location.href= url;\
afilipem 0:c385e589a779 44 }\
afilipem 0:c385e589a779 45 function submitCallFuncForm()\
afilipem 0:c385e589a779 46 {\
afilipem 0:c385e589a779 47 var command = document.getElementById(\"command\").value;\
afilipem 0:c385e589a779 48 if(command === \"\") \
afilipem 0:c385e589a779 49 return; \
afilipem 0:c385e589a779 50 var tmp = command.split(\' \');\
afilipem 0:c385e589a779 51 var url = tmp[0];\
afilipem 0:c385e589a779 52 if(tmp.length > 1)\
afilipem 0:c385e589a779 53 url += \"?\";\
afilipem 0:c385e589a779 54 for(var i = 1; i < tmp.length; ++i)\
afilipem 0:c385e589a779 55 {\
afilipem 0:c385e589a779 56 url += \"arg\" + i + \"=\" + tmp[i];\
afilipem 0:c385e589a779 57 if(i+1 < tmp.length)\
afilipem 0:c385e589a779 58 url += \"&\";\
afilipem 0:c385e589a779 59 }\
afilipem 0:c385e589a779 60 location.href = url;\
afilipem 0:c385e589a779 61 }\
afilipem 0:c385e589a779 62 </script>\
afilipem 0:c385e589a779 63 </head> \
afilipem 0:c385e589a779 64 <body>";
afilipem 0:c385e589a779 65
afilipem 0:c385e589a779 66 const char* INTERACTIVE_HTML_CODE_2 = "<h3>Create Object :</h3>\
afilipem 0:c385e589a779 67 <form>\
afilipem 0:c385e589a779 68 Type: <select id=\"type\">\
afilipem 0:c385e589a779 69 <option value=\"/DigitalOut/\">DigitalOut</option>\
afilipem 0:c385e589a779 70 <option value=\"/DigitalIn/\">DigitalIn</option>\
afilipem 0:c385e589a779 71 <option value=\"/DigitalInOut/\">DigitalInOut</option>\
afilipem 0:c385e589a779 72 <option value=\"/PwmOut/\">PwmOut</option>\
afilipem 0:c385e589a779 73 <option value=\"/Timer/\">Timer</option>\
afilipem 0:c385e589a779 74 </select><br>\
afilipem 0:c385e589a779 75 name: <input type=\"text\" id=\"name\"><br>\
afilipem 0:c385e589a779 76 arg(optional): <input type=\"text\" id=\"arg\">\
afilipem 0:c385e589a779 77 <p><input type=\"button\" value=\"Create\" onclick=\"javascript:submitCreateForm();\"></p>\
afilipem 0:c385e589a779 78 </form> \
afilipem 0:c385e589a779 79 \
afilipem 0:c385e589a779 80 <h3>Call a function :</h3>\
afilipem 0:c385e589a779 81 <p>Enter an RPC command.</p>\
afilipem 0:c385e589a779 82 <form>\
afilipem 0:c385e589a779 83 Command: <input type= \"text\" id=\"command\" maxlength=127><br>\
afilipem 0:c385e589a779 84 <p><input type=\"button\" value=\"Send\" onclick=\"javascript:submitCallFuncForm();\"></p><br>\
afilipem 0:c385e589a779 85 <h3>Temperature :</h3>\
afilipem 0:c385e589a779 86 <p>Temperature in degres</p>\
afilipem 0:c385e589a779 87 </form>\
afilipem 0:c385e589a779 88 </body> \
afilipem 0:c385e589a779 89 </html>";
afilipem 0:c385e589a779 90
afilipem 0:c385e589a779 91 static char chunk[1024];
afilipem 0:c385e589a779 92
afilipem 0:c385e589a779 93 Formatter::Formatter(int nb):
afilipem 0:c385e589a779 94 currentChunk(0),
afilipem 0:c385e589a779 95 nbChunk(nb)
afilipem 0:c385e589a779 96 {
afilipem 0:c385e589a779 97 }
afilipem 0:c385e589a779 98
afilipem 0:c385e589a779 99 char* Formatter::get_page(char *reply)
afilipem 0:c385e589a779 100 {
afilipem 0:c385e589a779 101 chunk[0] = '\0';
afilipem 0:c385e589a779 102
afilipem 0:c385e589a779 103 if(currentChunk < nbChunk)
afilipem 0:c385e589a779 104 {
afilipem 0:c385e589a779 105 get_chunk(currentChunk, reply);
afilipem 0:c385e589a779 106 currentChunk++;
afilipem 0:c385e589a779 107 }
afilipem 0:c385e589a779 108 else
afilipem 0:c385e589a779 109 currentChunk = 0;
afilipem 0:c385e589a779 110
afilipem 0:c385e589a779 111 return chunk;
afilipem 0:c385e589a779 112 }
afilipem 0:c385e589a779 113
afilipem 0:c385e589a779 114 void Formatter::get_chunk(const int c, char *reply)
afilipem 0:c385e589a779 115 {
afilipem 0:c385e589a779 116 strcat(chunk, reply);
afilipem 0:c385e589a779 117 }
afilipem 0:c385e589a779 118
afilipem 0:c385e589a779 119 SimpleHTMLFormatter::SimpleHTMLFormatter():
afilipem 0:c385e589a779 120 Formatter()
afilipem 0:c385e589a779 121 {
afilipem 0:c385e589a779 122 }
afilipem 0:c385e589a779 123
afilipem 0:c385e589a779 124 void SimpleHTMLFormatter::get_chunk(const int c, char* reply)
afilipem 0:c385e589a779 125 {
afilipem 0:c385e589a779 126 strcat(chunk, SIMPLE_HTML_CODE);
afilipem 0:c385e589a779 127
afilipem 0:c385e589a779 128 if(reply != NULL && strlen(reply) != 0)
afilipem 0:c385e589a779 129 {
afilipem 0:c385e589a779 130 strcat(chunk, "RPC reply : ");
afilipem 0:c385e589a779 131 strcat(chunk, reply);
afilipem 0:c385e589a779 132 }
afilipem 0:c385e589a779 133
afilipem 0:c385e589a779 134 if(!RPCObjectManager::instance().is_empty())
afilipem 0:c385e589a779 135 {
afilipem 0:c385e589a779 136 strcat(chunk, "<ul>");
afilipem 0:c385e589a779 137 for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
afilipem 0:c385e589a779 138 itor != RPCObjectManager::instance().end();
afilipem 0:c385e589a779 139 ++itor)
afilipem 0:c385e589a779 140 {
afilipem 0:c385e589a779 141 strcat(chunk, "<li>");
afilipem 0:c385e589a779 142 strcat(chunk, *itor);
afilipem 0:c385e589a779 143 strcat(chunk, "</li>");
afilipem 0:c385e589a779 144 }
afilipem 0:c385e589a779 145 strcat(chunk, "</ul>");
afilipem 0:c385e589a779 146 }
afilipem 0:c385e589a779 147
afilipem 0:c385e589a779 148 strcat(chunk, "</body></html>");
afilipem 0:c385e589a779 149 }
afilipem 0:c385e589a779 150
afilipem 0:c385e589a779 151 InteractiveHTMLFormatter::InteractiveHTMLFormatter():
afilipem 0:c385e589a779 152 Formatter(3)
afilipem 0:c385e589a779 153 {
afilipem 0:c385e589a779 154 }
afilipem 0:c385e589a779 155
afilipem 0:c385e589a779 156 void InteractiveHTMLFormatter::get_chunk(const int c, char *reply)
afilipem 0:c385e589a779 157 {
afilipem 0:c385e589a779 158 if(c == 0)
afilipem 0:c385e589a779 159 sprintf(chunk, INTERACTIVE_HTML_CODE_1, EthernetInterface::getIPAddress());
afilipem 0:c385e589a779 160
afilipem 0:c385e589a779 161 else if(c == 1)
afilipem 0:c385e589a779 162 {
afilipem 0:c385e589a779 163 if(reply != NULL && strlen(reply) != 0)
afilipem 0:c385e589a779 164 {
afilipem 0:c385e589a779 165 strcat(chunk, "RPC reply : ");
afilipem 0:c385e589a779 166 strcat(chunk, reply);
afilipem 0:c385e589a779 167 }
afilipem 0:c385e589a779 168 if(!RPCObjectManager::instance().is_empty())
afilipem 0:c385e589a779 169 {
afilipem 0:c385e589a779 170 strcat(chunk, "<p>Objects created :</p>");
afilipem 0:c385e589a779 171
afilipem 0:c385e589a779 172 strcat(chunk, "<ul>");
afilipem 0:c385e589a779 173 for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
afilipem 0:c385e589a779 174 itor != RPCObjectManager::instance().end();
afilipem 0:c385e589a779 175 ++itor)
afilipem 0:c385e589a779 176 {
afilipem 0:c385e589a779 177 strcat(chunk, "<li>");
afilipem 0:c385e589a779 178 strcat(chunk, *itor);
afilipem 0:c385e589a779 179 strcat(chunk, " (<a href=\"http://");
afilipem 0:c385e589a779 180 strcat(chunk, EthernetInterface::getIPAddress());
afilipem 0:c385e589a779 181 strcat(chunk, "/");
afilipem 0:c385e589a779 182 strcat(chunk, *itor);
afilipem 0:c385e589a779 183 strcat(chunk, "/delete\">delete</a>)");
afilipem 0:c385e589a779 184 strcat(chunk, "</li>");
afilipem 0:c385e589a779 185 }
afilipem 0:c385e589a779 186 strcat(chunk, "</ul>");
afilipem 0:c385e589a779 187 }
afilipem 0:c385e589a779 188 strcat(chunk, " ");
afilipem 0:c385e589a779 189 }
afilipem 0:c385e589a779 190 else if(c == 2)
afilipem 0:c385e589a779 191 strcat(chunk, INTERACTIVE_HTML_CODE_2);
afilipem 0:c385e589a779 192 }
afilipem 0:c385e589a779 193
afilipem 0:c385e589a779 194