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:

Formatter.cpp

Committer:
feb11
Date:
2013-07-17
Revision:
6:d03e189ebbfe
Parent:
4:624527ebc0fa
Child:
9:a9bf63017854

File content as of revision 6:d03e189ebbfe:

#include "Formatter.h"
#include "mbed.h"
#include "RPCObjectManager.h"
#include "EthernetInterface.h"

const char *SIMPLE_HTML_CODE = "\
<!DOCTYPE html>\
<html>\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
<title>TCP Server</title>\
</head>\
 <body>";


const char* INTERACTIVE_HTML_CODE_1 = "\
<!DOCTYPE html> \
<html>\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
<title>TCP Server</title>\
<script type=\"text/javascript\">\
var ip = \"%s\";\
function submitCreateForm()\
{\
var list = document.getElementById(\"type\");\
var type = list.options[list.selectedIndex].value;\
var name = document.getElementById(\"name\").value;\
var arg = document.getElementById(\"arg\").value;\
var url;\
if(arg === \"\") url = \"http://\" + ip + type + \"new?name=\" + name;\
else url = \"http://\" + ip + type + \"new?arg=\" + arg + \"&name=\" + name;\
location.href= url;\
}\
function submitCallFuncForm()\
{\
var command = document.getElementById(\"command\").value;\
var tmp = command.split(\' \');\
var url = tmp[0];\
if(tmp.length > 1)\
url += \"?\";\
for(var i = 1; i < tmp.length; ++i)\
{\
url += \"arg\" + i + \"=\" + tmp[i];\
if(i+1 < tmp.length)\
url += \"&\";\
}\
location.href = url;\
}\
</script>\
</head> \
<body>";
    
const char* INTERACTIVE_HTML_CODE_2 = "<h3>Create Object :</h3>\
<form id=\"create\" method=\"get\">\
Type: <select id=\"type\">\
<option value=\"/DigitalOut/\">DigitalOut</option>\
<option value=\"/DigitalIn/\">DigitalIn</option>\
<option value=\"/DigitalInOut/\">DigitalInOut</option>\
<option value=\"/PwmOut/\">PwmOut</option>\
<option value=\"/Timer/\">Timer</option>\
</select><br>\
name: <input type=\"text\" id=\"name\"><br>\
arg(optional): <input type=\"text\" id=\"arg\">\
<p><input type=\"button\" value=\"Create\" onclick=\"javascript:submitCreateForm();\"></p>\
</form> \
 \
<h3>Call a function :</h3>\
<p>Enter an RPC command.</p>\
<form method=\"get\">\
Command: <input type= \"text\" id=\"command\"><br>\
<input type=\"button\" value=\"Send\" onclick=\"javascript:submitCallFuncForm();\"><br>\
</form>\
</body> \
</html>";

static char chunk[1024];
        
Formatter::Formatter(int nb):
currentChunk(0),
nbChunk(nb)
{
}    

char* Formatter::get_page(char *reply)
{
    chunk[0] = '\0';

    if(currentChunk < nbChunk)
    {
        get_chunk(currentChunk, reply);
        currentChunk++;
    }
    else
        currentChunk = 0;
    
    return chunk;
}    

void Formatter::get_chunk(const int c, char *reply)
{
    strcat(chunk, reply);
}

SimpleHTMLFormatter::SimpleHTMLFormatter():
Formatter()
{
}

void SimpleHTMLFormatter::get_chunk(const int c, char* reply)
{
    strcat(chunk, SIMPLE_HTML_CODE);
    
    if(reply != NULL && strlen(reply) != 0)
    {
        strcat(chunk, "RPC reply : ");
        strcat(chunk, reply);
    }
        
    if(!RPCObjectManager::instance().is_empty())
    {
        strcat(chunk, "<ul>");
        for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
            itor != RPCObjectManager::instance().end();
            ++itor)
        {
            strcat(chunk, "<li>");
            strcat(chunk, *itor);
            strcat(chunk, "</li>");
        }
        strcat(chunk, "</ul>");
    }
    
    strcat(chunk, "</body></html>");
}

InteractiveHTMLFormatter::InteractiveHTMLFormatter():
Formatter(3)
{
}

void InteractiveHTMLFormatter::get_chunk(const int c, char *reply)
{
    if(c == 0)
        sprintf(chunk, INTERACTIVE_HTML_CODE_1, EthernetInterface::getIPAddress());

    else if(c == 1)
    {
        if(reply != NULL && strlen(reply) != 0)
        {
            strcat(chunk, "RPC reply : ");
            strcat(chunk, reply);
        }
        if(!RPCObjectManager::instance().is_empty())
        {
            strcat(chunk, "<p>Objects created :</p>");

            strcat(chunk, "<ul>");
            for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
                itor != RPCObjectManager::instance().end();
                ++itor)
            {
                strcat(chunk, "<li>");
                strcat(chunk, *itor);
                strcat(chunk, " (<a href=\"http://");
                strcat(chunk, EthernetInterface::getIPAddress());
                strcat(chunk, "/");
                strcat(chunk, *itor);
                strcat(chunk, "/delete\">delete</a>)");
                strcat(chunk, "</li>");
            }
            strcat(chunk, "</ul>");
        }
        strcat(chunk, " ");
    }
    else if(c == 2)
        strcat(chunk, INTERACTIVE_HTML_CODE_2);
}