Upper Version Add PUT method Delete POST method

Dependencies:   Adafruit_GFX MbedJSONValue_v102 WIZnetInterface mbed

Fork of WIZwiki-REST-io_v102 by Lawrence Lee

main.cpp

Committer:
joon874
Date:
2016-05-03
Revision:
2:ca36ecca24c2
Parent:
1:728e5b5c8dae
Child:
4:0b5a199e91f3

File content as of revision 2:ca36ecca24c2:

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

#define SERVER_PORT 80

#define DHCP

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";

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 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);
    printf("\r\n");
}    
void WIZwiki_REST_init();

int main(void)
{

    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));
    debug_info();

    WIZwiki_REST_init();

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

    WIZwikiWebSvr.add_request_handler("GET", new GetRequestHandler());
    //WIZwikiWebSvr.add_request_handler("DELETE", new DeleteRequestHandler());
    //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");
    //Add
    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());
    }
        
    //while(1) //Wait link up
    //{
    //    if(eth.link() == true) 
    //    break;
    //}
    
    printf("Link up\r\n");
    printf("IP Address is %s\r\n", eth.getIPAddress());

    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;
    debug_info();
    
    //Network

    WIZwikiREST["Network"]["MAC"] = mac_str;
    debug_info();
    WIZwikiREST["Network"]["IP"] = ip_addr; 
    WIZwikiREST["Network"]["IP"].accessible = true; 
    debug_info();
    WIZwikiREST["Network"]["SN"] = subnet_mask;  
    WIZwikiREST["Network"]["SN"].accessible = true;  
    debug_info();
    WIZwikiREST["Network"]["GW"] = gateway_addr;
    WIZwikiREST["Network"]["GW"].accessible = true;
    debug_info();

    //LEDs
    WIZwikiREST["LED1"] = (LED_1.read() ? "Off" : "On");
    WIZwikiREST["LED1"].accessible = true;
    debug_info();    
    WIZwikiREST["LED2"] = (LED_2.read() ? "Off" : "On");
    WIZwikiREST["LED2"].accessible = true;
    debug_info();
    // GPIOs
    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;
/*    
    WIZwikiREST["GPIOs"]["P30"] = GP30.read();
    WIZwikiREST["GPIOs"]["P30"].accessible = true;
    WIZwikiREST["GPIOs"]["P30"].cb_action = p30_set;
    WIZwikiREST["GPIOs"]["P31"] = GP31.read();
    WIZwikiREST["GPIOs"]["P31"].accessible = true;
    WIZwikiREST["GPIOs"]["P31"].cb_action = p31_set;
    WIZwikiREST["GPIOs"]["P32"] = GP32.read();
    WIZwikiREST["GPIOs"]["P32"].accessible = true;
    WIZwikiREST["GPIOs"]["P32"].cb_action = p32_set;
*/
    debug_info();
}