NNN40 change mode from AP to STA by HTTP server

Dependencies:   WIFI_API_32kRAM mbed

How to use Demo code

  • Step1: Prepare a router, and set the SSID and Password as follow
  1. SSID: "SSID"
  2. Password: "0123456789"
  • Step2: Burn demo code to NNN40 module.

You can drag and drop the sample code to NNN40 module.

  • Step3: Login module from Http server (192.168.2.1) by PC.

You can set SSID and password by browser. After clicking "confirm" button, the module will change mode from AP to STA, get IP from router

  • DEMO video:
Committer:
feb11
Date:
Wed Jul 17 10:15:05 2013 +0000
Revision:
0:9e4bcb10b3e3
Child:
4:624527ebc0fa
Initial import

Who changed what in which revision?

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