WIZwiki-REST-io ver.2 Add POST Method

Dependencies:   MbedJSONValue_copy WIZnetInterface mbed

Fork of WIZwiki-REST_mc by Lawrence Lee

main.cpp

Committer:
joon874
Date:
2016-05-31
Revision:
4:0b5a199e91f3
Parent:
2:ca36ecca24c2

File content as of revision 4:0b5a199e91f3:

#include "mbed.h"
#include "HTTPServer.h"
#include "RequestHandler.h"
#include "EthernetInterface.h"
#include "MbedJSONValue.h"

#define SERVER_PORT 80

#define DHCP

//#define DEBUG

EthernetInterface eth;
HTTPServer WIZwikiWebSvr;
MbedJSONValue WIZwikiREST;

// Enter a MAC address for your controller below.
uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0xFE};
char mac_str[20];
char ip_addr[]      = "192.168.100.100";
char subnet_mask[]  = "255.255.255.0";
char gateway_addr[] = "192.168.100.1";

GetRequestHandler myGetReq;
PostRequestHandler myPostReq;

DigitalOut LED_1(PA_1);
DigitalOut LED_2(PA_2);

DigitalInOut GP05(P5);
DigitalInOut GP06(P6);
DigitalInOut GP07(P7);
DigitalInOut GP08(P8);
DigitalInOut GP09(P9);
DigitalInOut GP10(P10);
DigitalInOut GP11(P11);
DigitalInOut GP12(P12);
DigitalInOut GP13(P13);
DigitalInOut GP14(P14);
DigitalInOut GP15(P15);
DigitalInOut GP16(P16);
DigitalInOut GP17(P17);
DigitalInOut GP18(P18);
DigitalInOut GP19(P19);
DigitalInOut GP20(P20);
DigitalInOut GP21(P21);
DigitalInOut GP22(P22);
DigitalInOut GP23(P23);
DigitalInOut GP24(P24);
DigitalInOut GP25(P25);
DigitalInOut GP26(P26);
DigitalInOut GP27(P27);
DigitalInOut GP28(P28);
DigitalInOut GP29(P29);
DigitalInOut GP30(P30);
DigitalInOut GP31(P31);
DigitalInOut GP32(P32);


bool gpio_all(void* param)
{
    if(!param) return false;
    GP05.write(*(int*)param);
    GP06.write(*(int*)param);
    GP07.write(*(int*)param);
    GP08.write(*(int*)param);
    GP09.write(*(int*)param);
    GP10.write(*(int*)param);                    
    GP11.write(*(int*)param);
    GP12.write(*(int*)param);
    GP13.write(*(int*)param);
    GP14.write(*(int*)param);
    GP15.write(*(int*)param);
    GP16.write(*(int*)param);                    
    GP17.write(*(int*)param);
    GP18.write(*(int*)param);
    GP19.write(*(int*)param);
    GP20.write(*(int*)param);                    
    GP21.write(*(int*)param);
    GP22.write(*(int*)param);
    GP23.write(*(int*)param);
    GP24.write(*(int*)param);
    GP25.write(*(int*)param);
    GP26.write(*(int*)param);                    
    GP27.write(*(int*)param);
    GP28.write(*(int*)param);
    GP29.write(*(int*)param);
    return true;
}


bool p5_set(void* param)
{
     if(!param) return false;
    GP05.write(*(int*)param);
    return true;
}
bool p6_set(void* param)
{
    if(!param) return false;
    GP06.write(*(int*)param);
    return true;
}
bool p7_set(void* param)
{
    if(!param) return false;
    GP07.write(*(int*)param);
    return true;
}
bool p8_set(void* param)
{
    if(!param) return false;
    GP08.write(*(int*)param);
    return true;
}
bool p9_set(void* param)
{
    if(!param) return false;
    GP09.write(*(int*)param);
    return true;
}
bool p10_set(void* param)
{
    if(!param) return false;
    GP10.write(*(int*)param);
    return true;
}
bool p11_set(void* param)
{
    if(!param) return false;
    GP11.write(*(int*)param);
    return true;
}
bool p12_set(void* param)
{
    if(!param) return false;
    GP12.write(*(int*)param);
    return true;
}
bool p13_set(void* param)
{
    if(!param) return false;
    GP13.write(*(int*)param);
    return true;
}
bool p14_set(void* param)
{
    if(!param) return false;
    GP14.write(*(int*)param);
    return true;
}
bool p15_set(void* param)
{
    if(!param) return false;
    GP15.write(*(int*)param);
    return true;
}
bool p16_set(void* param)
{
    if(!param) return false;
    GP16.write(*(int*)param);
    return true;
}
bool p17_set(void* param)
{
    if(!param) return false;
    GP17.write(*(int*)param);
    return true;
}
bool p18_set(void* param)
{
    if(!param) return false;
    GP18.write(*(int*)param);
    return true;
}
bool p19_set(void* param)
{
    if(!param) return false;
    GP19.write(*(int*)param);
    return true;
}
bool p20_set(void* param)
{
    if(!param) return false;
    GP20.write(*(int*)param);
    return true;
}
bool p21_set(void* param)
{
    if(!param) return false;
    GP21.write(*(int*)param);
    return true;
}
bool p22_set(void* param)
{
    if(!param) return false;
    GP22.write(*(int*)param);
    return true;
}
bool p23_set(void* param)
{
    if(!param) return false;
    GP23.write(*(int*)param);
    return true;
}
bool p24_set(void* param)
{
    if(!param) return false;
    GP24.write(*(int*)param);
    return true;
}
bool p25_set(void* param)
{
    if(!param) return false;
    GP25.write(*(int*)param);
    return true;
}
bool p26_set(void* param)
{
    if(!param) return false;
    GP26.write(*(int*)param);
    return true;
}
bool p27_set(void* param)
{
    if(!param) return false;
    GP27.write(*(int*)param);
    return true;
}
bool p28_set(void* param)
{
    if(!param) return false;
    GP28.write(*(int*)param);
    return true;
}
bool p29_set(void* param)
{
    if(!param) return false;
    GP29.write(*(int*)param);
    return true;
}
bool p30_set(void* param)
{
    if(!param) return false;
    GP30.write(*(int*)param);
    return true;
}
bool p31_set(void* param)
{
    if(!param) return false;
    GP31.write(*(int*)param);
    return true;
}
bool p32_set(void* param)
{
    if(!param) return false;
    GP32.write(*(int*)param);
    return true;
}

void debug_info()
{
    printf("SP:0x%X\r\n",__current_sp());
    __heapstats((__heapprt)fprintf,stderr);
#ifdef DEBUG
    __heapvalid((__heapprt)fprintf,stderr, 1);
#endif
    printf("\r\n");
}    

void WIZwiki_REST_init();

int main(void)
{
#ifdef DEBUG
    debug_info();
#endif
    sprintf(mac_str, "%02X:%02X:%02X:%02X:%02X:%02X",mac_addr[0],mac_addr[1],mac_addr[2],mac_addr[3],mac_addr[4],mac_addr[5]);
    
    //GPIO Set
    GP05.output();
    GP05.write(1);
    GP06.output();
    GP06.write(1);
    GP07.output();
    GP07.write(1);
    GP08.output();
    GP08.write(1);
    GP09.output();
    GP09.write(1);
    GP10.output();
    GP10.write(1);
    GP11.output();
    GP11.write(1);
    GP12.output();
    GP12.write(1);
    GP13.output();
    GP13.write(1);
    GP14.output();
    GP14.write(1);
    GP15.output();
    GP15.write(1);
    GP16.output();
    GP16.write(1);
    GP17.output();
    GP17.write(1);
    GP18.output();
    GP18.write(1);
    GP19.output();
    GP19.write(1);
    GP20.output();
    GP20.write(1);
    GP21.output();
    GP21.write(1);
    GP22.output();
    GP22.write(1);
    GP23.output();
    GP23.write(1);
    GP24.output();
    GP24.write(1);
    GP25.output();
    GP25.write(1);
    GP26.output();
    GP26.write(1);
    GP27.output();
    GP27.write(1);
    GP28.output();
    GP28.write(1);
    GP29.output();
    GP29.write(1);

    //LED Setbit
    //LED_1.write(0); // LED On
    //LED_2.write(1); // LED Off
    printf("START \r\n");    
    printf("sizeof(MbedJSONValue)=%d\r\n",sizeof(MbedJSONValue));
    printf("sizeof(vector)=%d\r\n",sizeof(std::vector<string*>));
    printf("sizeof(string)=%d\r\n",sizeof(std::string));
#ifdef DEBUG
    debug_info();
#endif

    WIZwiki_REST_init();

#ifdef DEBUG
    debug_info();
#endif
                    
    // Serialize it into a JSON string
    printf("-------------------------WIZwikiREST--------------------------- \r\n");
    printf("\r\n%s\r\n", WIZwikiREST.serialize().c_str());
    printf("--------------------------------------------------------------- \r\n");

    WIZwikiWebSvr.add_request_handler("GET", &myGetReq);
    WIZwikiWebSvr.add_request_handler("POST", &myPostReq);
    //WIZwikiWebSvr.add_request_handler("DELETE", new PostRequestHandler());
    //WIZwikiWebSvr.add_request_handler("PUT", new PutRequestHandler());
    
    #ifdef DHCP
        eth.init(mac_addr); //Use DHCP
    #else
        eth.init(mac_addr, ip_addr, subnet_mask, gateway_addr); //Not Use DHCP
    #endif
    
    
    printf("Check Ethernet Link\r\n");
    
    do{
        printf("   Link - Wait... \r\n");
        wait(1);
    }while(!eth.ethernet_link());
    printf("-- Ethetnet PHY Link - Done -- \r\n");
        
    if (eth.connect() < 0 )
        printf("-- EThernet Connect - Fail -- \r\n");
    else
    {
        printf("-- Assigned Network Information -- \r\n");
        printf("   IP   : %s\r\n\r\n", eth.getIPAddress()); 
        printf("   MASK : %s\r\n\r\n", eth.getNetworkMask());
        printf("   GW   : %s\r\n\r\n", eth.getGateway());
    }
    
    printf("Link up\r\n");
    printf("IP Address is %s\r\n", eth.getIPAddress());
#ifdef DEBUG
    debug_info();
#endif

    if(!WIZwikiWebSvr.init(SERVER_PORT))
    {
        eth.disconnect();
        return -1;
    }

    while(1)
    {
        WIZwikiWebSvr.run();
    }
}

void WIZwiki_REST_init(void)
{
    //Fill the object
    WIZwikiREST["Name"] = "WIZwiki-RESTful-01";
    WIZwikiREST["Name"].accessible = false;
#ifdef DEBUG
    debug_info();
#endif
    
    //Network
    WIZwikiREST["Network"]["MAC"] = mac_str;
    WIZwikiREST["Network"]["IP"] = ip_addr; 
    WIZwikiREST["Network"]["IP"].accessible = true; 
    WIZwikiREST["Network"]["SN"] = subnet_mask;  
    WIZwikiREST["Network"]["SN"].accessible = true;  
    WIZwikiREST["Network"]["GW"] = gateway_addr;
    WIZwikiREST["Network"]["GW"].accessible = true;

    //LEDs
    //WIZwikiREST["LED1"] = (LED_1.read() ? "Off" : "On");
    //WIZwikiREST["LED1"].accessible = true;
    //WIZwikiREST["LED2"] = (LED_2.read() ? "Off" : "On");
    //WIZwikiREST["LED2"].accessible = true;
    
    // GPIOs
    WIZwikiREST["GPIOs"]["all"].accessible = true;
    WIZwikiREST["GPIOs"]["all"].cb_action = gpio_all; 
    WIZwikiREST["GPIOs"]["P05"] = GP05.read();
    WIZwikiREST["GPIOs"]["P05"].accessible = true;
    WIZwikiREST["GPIOs"]["P05"].cb_action = p5_set;
    WIZwikiREST["GPIOs"]["P06"] = GP06.read();
    WIZwikiREST["GPIOs"]["P06"].accessible = true;
    WIZwikiREST["GPIOs"]["P06"].cb_action = p6_set;
    WIZwikiREST["GPIOs"]["P07"] = GP07.read();
    WIZwikiREST["GPIOs"]["P07"].accessible = true;
    WIZwikiREST["GPIOs"]["P07"].cb_action = p7_set;
    WIZwikiREST["GPIOs"]["P08"] = GP08.read();
    WIZwikiREST["GPIOs"]["P08"].accessible = true;
    WIZwikiREST["GPIOs"]["P08"].cb_action = p8_set;
    WIZwikiREST["GPIOs"]["P09"] = GP09.read();
    WIZwikiREST["GPIOs"]["P09"].accessible = true;
    WIZwikiREST["GPIOs"]["P09"].cb_action = p9_set;
    WIZwikiREST["GPIOs"]["P10"] = GP10.read();
    WIZwikiREST["GPIOs"]["P10"].accessible = true;
    WIZwikiREST["GPIOs"]["P10"].cb_action = p10_set;
    WIZwikiREST["GPIOs"]["P11"] = GP11.read();
    WIZwikiREST["GPIOs"]["P11"].accessible = true;
    WIZwikiREST["GPIOs"]["P11"].cb_action = p11_set;
    WIZwikiREST["GPIOs"]["P12"] = GP12.read();
    WIZwikiREST["GPIOs"]["P12"].accessible = true;
    WIZwikiREST["GPIOs"]["P12"].cb_action = p12_set;
    WIZwikiREST["GPIOs"]["P13"] = GP13.read();
    WIZwikiREST["GPIOs"]["P13"].accessible = true;
    WIZwikiREST["GPIOs"]["P13"].cb_action = p13_set;
    WIZwikiREST["GPIOs"]["P14"] = GP14.read();
    WIZwikiREST["GPIOs"]["P14"].accessible = true;
    WIZwikiREST["GPIOs"]["P14"].cb_action = p14_set;
    WIZwikiREST["GPIOs"]["P15"] = GP15.read();
    WIZwikiREST["GPIOs"]["P15"].accessible = true;
    WIZwikiREST["GPIOs"]["P15"].cb_action = p15_set;
    WIZwikiREST["GPIOs"]["P16"] = GP16.read();
    WIZwikiREST["GPIOs"]["P16"].accessible = true;
    WIZwikiREST["GPIOs"]["P16"].cb_action = p16_set;
    WIZwikiREST["GPIOs"]["P17"] = GP17.read();
    WIZwikiREST["GPIOs"]["P17"].accessible = true;
    WIZwikiREST["GPIOs"]["P17"].cb_action = p17_set;
    WIZwikiREST["GPIOs"]["P18"] = GP18.read();
    WIZwikiREST["GPIOs"]["P18"].accessible = true;
    WIZwikiREST["GPIOs"]["P18"].cb_action = p18_set;
    WIZwikiREST["GPIOs"]["P19"] = GP19.read();
    WIZwikiREST["GPIOs"]["P19"].accessible = true;
    WIZwikiREST["GPIOs"]["P19"].cb_action = p19_set;
    WIZwikiREST["GPIOs"]["P20"] = GP20.read();
    WIZwikiREST["GPIOs"]["P20"].accessible = true;
    WIZwikiREST["GPIOs"]["P20"].cb_action = p20_set;
    WIZwikiREST["GPIOs"]["P21"] = GP21.read();
    WIZwikiREST["GPIOs"]["P21"].accessible = true;
    WIZwikiREST["GPIOs"]["P21"].cb_action = p21_set;
    WIZwikiREST["GPIOs"]["P22"] = GP22.read();
    WIZwikiREST["GPIOs"]["P22"].accessible = true;
    WIZwikiREST["GPIOs"]["P22"].cb_action = p22_set;
    WIZwikiREST["GPIOs"]["P23"] = GP23.read();
    WIZwikiREST["GPIOs"]["P23"].accessible = true;
    WIZwikiREST["GPIOs"]["P23"].cb_action = p23_set;
    WIZwikiREST["GPIOs"]["P24"] = GP24.read();
    WIZwikiREST["GPIOs"]["P24"].accessible = true;
    WIZwikiREST["GPIOs"]["P24"].cb_action = p24_set;
    WIZwikiREST["GPIOs"]["P25"] = GP25.read();
    WIZwikiREST["GPIOs"]["P25"].accessible = true;
    WIZwikiREST["GPIOs"]["P25"].cb_action = p25_set;
    WIZwikiREST["GPIOs"]["P26"] = GP26.read();
    WIZwikiREST["GPIOs"]["P26"].accessible = true;
    WIZwikiREST["GPIOs"]["P26"].cb_action = p26_set;
    WIZwikiREST["GPIOs"]["P27"] = GP27.read();
    WIZwikiREST["GPIOs"]["P27"].accessible = true;
    WIZwikiREST["GPIOs"]["P27"].cb_action = p27_set;
    WIZwikiREST["GPIOs"]["P28"] = GP28.read();
    WIZwikiREST["GPIOs"]["P28"].accessible = true;
    WIZwikiREST["GPIOs"]["P28"].cb_action = p28_set;
    WIZwikiREST["GPIOs"]["P29"] = GP29.read();
    WIZwikiREST["GPIOs"]["P29"].accessible = true;
    WIZwikiREST["GPIOs"]["P29"].cb_action = p29_set;

#ifdef DEBUG
    debug_info();
#endif
}