Lawrence Lee / Mbed 2 deprecated WIZwiki-REST_mc

Dependencies:   MbedJSONValue1 WIZnetInterface mbed

Fork of WIZwiki-REST_mc by Midnight Cow

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "HTTPServer.h"
00003 #include "RequestHandler.h"
00004 #include "EthernetInterface.h"
00005 #include "MbedJSONValue.h"
00006 
00007 #define SERVER_PORT 80
00008 
00009 #define DHCP
00010 
00011 EthernetInterface eth;
00012 HTTPServer WIZwikiWebSvr;
00013 MbedJSONValue WIZwikiREST;
00014 
00015 // Enter a MAC address for your controller below.
00016 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0xFE};
00017 char mac_str[20];
00018 char ip_addr[] = "192.168.100.100";
00019 char subnet_mask[] = "255.255.255.0";
00020 char gateway_addr[] = "192.168.100.1";
00021 
00022 DigitalOut LED_1(PA_1);
00023 DigitalOut LED_2(PA_2);
00024 
00025 DigitalInOut GP05(P5);
00026 DigitalInOut GP06(P6);
00027 DigitalInOut GP07(P7);
00028 DigitalInOut GP08(P8);
00029 DigitalInOut GP09(P9);
00030 DigitalInOut GP10(P10);
00031 DigitalInOut GP11(P11);
00032 DigitalInOut GP12(P12);
00033 DigitalInOut GP13(P13);
00034 DigitalInOut GP14(P14);
00035 DigitalInOut GP15(P15);
00036 DigitalInOut GP16(P16);
00037 DigitalInOut GP17(P17);
00038 DigitalInOut GP18(P18);
00039 DigitalInOut GP19(P19);
00040 DigitalInOut GP20(P20);
00041 DigitalInOut GP21(P21);
00042 DigitalInOut GP22(P22);
00043 DigitalInOut GP23(P23);
00044 DigitalInOut GP24(P24);
00045 DigitalInOut GP25(P25);
00046 DigitalInOut GP26(P26);
00047 DigitalInOut GP27(P27);
00048 DigitalInOut GP28(P28);
00049 DigitalInOut GP29(P29);
00050 DigitalInOut GP30(P30);
00051 DigitalInOut GP31(P31);
00052 DigitalInOut GP32(P32);
00053 
00054 bool p5_set(void* param)
00055 {
00056     if(!param) return false;
00057     GP05.write(*(int*)param);
00058     return true;
00059 }
00060 bool p6_set(void* param)
00061 {
00062     if(!param) return false;
00063     GP06.write(*(int*)param);
00064     return true;
00065 }
00066 bool p7_set(void* param)
00067 {
00068     if(!param) return false;
00069     GP07.write(*(int*)param);
00070     return true;
00071 }
00072 bool p8_set(void* param)
00073 {
00074     if(!param) return false;
00075     GP08.write(*(int*)param);
00076     return true;
00077 }
00078 bool p9_set(void* param)
00079 {
00080     if(!param) return false;
00081     GP09.write(*(int*)param);
00082     return true;
00083 }
00084 bool p10_set(void* param)
00085 {
00086     if(!param) return false;
00087     GP10.write(*(int*)param);
00088     return true;
00089 }
00090 bool p11_set(void* param)
00091 {
00092     if(!param) return false;
00093     GP11.write(*(int*)param);
00094     return true;
00095 }
00096 bool p12_set(void* param)
00097 {
00098     if(!param) return false;
00099     GP12.write(*(int*)param);
00100     return true;
00101 }
00102 bool p13_set(void* param)
00103 {
00104     if(!param) return false;
00105     GP13.write(*(int*)param);
00106     return true;
00107 }
00108 bool p14_set(void* param)
00109 {
00110     if(!param) return false;
00111     GP14.write(*(int*)param);
00112     return true;
00113 }
00114 bool p15_set(void* param)
00115 {
00116     if(!param) return false;
00117     GP15.write(*(int*)param);
00118     return true;
00119 }
00120 bool p16_set(void* param)
00121 {
00122     if(!param) return false;
00123     GP16.write(*(int*)param);
00124     return true;
00125 }
00126 bool p17_set(void* param)
00127 {
00128     if(!param) return false;
00129     GP17.write(*(int*)param);
00130     return true;
00131 }
00132 bool p18_set(void* param)
00133 {
00134     if(!param) return false;
00135     GP18.write(*(int*)param);
00136     return true;
00137 }
00138 bool p19_set(void* param)
00139 {
00140     if(!param) return false;
00141     GP19.write(*(int*)param);
00142     return true;
00143 }
00144 bool p20_set(void* param)
00145 {
00146     if(!param) return false;
00147     GP20.write(*(int*)param);
00148     return true;
00149 }
00150 bool p21_set(void* param)
00151 {
00152     if(!param) return false;
00153     GP21.write(*(int*)param);
00154     return true;
00155 }
00156 bool p22_set(void* param)
00157 {
00158     if(!param) return false;
00159     GP22.write(*(int*)param);
00160     return true;
00161 }
00162 bool p23_set(void* param)
00163 {
00164     if(!param) return false;
00165     GP23.write(*(int*)param);
00166     return true;
00167 }
00168 bool p24_set(void* param)
00169 {
00170     if(!param) return false;
00171     GP24.write(*(int*)param);
00172     return true;
00173 }
00174 bool p25_set(void* param)
00175 {
00176     if(!param) return false;
00177     GP25.write(*(int*)param);
00178     return true;
00179 }
00180 bool p26_set(void* param)
00181 {
00182     if(!param) return false;
00183     GP26.write(*(int*)param);
00184     return true;
00185 }
00186 bool p27_set(void* param)
00187 {
00188     if(!param) return false;
00189     GP27.write(*(int*)param);
00190     return true;
00191 }
00192 bool p28_set(void* param)
00193 {
00194     if(!param) return false;
00195     GP28.write(*(int*)param);
00196     return true;
00197 }
00198 bool p29_set(void* param)
00199 {
00200     if(!param) return false;
00201     GP29.write(*(int*)param);
00202     return true;
00203 }
00204 bool p30_set(void* param)
00205 {
00206     if(!param) return false;
00207     GP30.write(*(int*)param);
00208     return true;
00209 }
00210 bool p31_set(void* param)
00211 {
00212     if(!param) return false;
00213     GP31.write(*(int*)param);
00214     return true;
00215 }
00216 bool p32_set(void* param)
00217 {
00218     if(!param) return false;
00219     GP32.write(*(int*)param);
00220     return true;
00221 }
00222 
00223 void debug_info()
00224 {
00225     printf("SP:0x%X\r\n",__current_sp());
00226     __heapstats((__heapprt)fprintf,stderr);
00227     printf("\r\n");
00228 }    
00229 void WIZwiki_REST_init();
00230 
00231 int main(void)
00232 {
00233 
00234     sprintf(mac_str, "%02X:%02X:%02X:%02X:%02X:%02X",mac_addr[0],mac_addr[1],
00235                                                      mac_addr[2],mac_addr[3], 
00236                                                      mac_addr[4],mac_addr[5]);
00237     //GPIO Set
00238     GP05.output();
00239     GP05.write(1);
00240     GP06.output();
00241     GP06.write(1);
00242     GP07.output();
00243     GP07.write(1);
00244     GP08.output();
00245     GP08.write(1);
00246     GP09.output();
00247     GP09.write(1);
00248     GP10.output();
00249     GP10.write(1);
00250     GP11.output();
00251     GP11.write(1);
00252     GP12.output();
00253     GP12.write(1);
00254     GP13.output();
00255     GP13.write(1);
00256     GP14.output();
00257     GP14.write(1);
00258     GP15.output();
00259     GP15.write(1);
00260     GP16.output();
00261     GP16.write(1);
00262     GP17.output();
00263     GP17.write(1);
00264     GP18.output();
00265     GP18.write(1);
00266     GP19.output();
00267     GP19.write(1);
00268     GP20.output();
00269     GP20.write(1);
00270     GP21.output();
00271     GP21.write(1);
00272     GP22.output();
00273     GP22.write(1);
00274     GP23.output();
00275     GP23.write(1);
00276     GP24.output();
00277     GP24.write(1);
00278     GP25.output();
00279     GP25.write(1);
00280     GP26.output();
00281     GP26.write(1);
00282     GP27.output();
00283     GP27.write(1);
00284     GP28.output();
00285     GP28.write(1);
00286     GP29.output();
00287     GP29.write(1);
00288 
00289 
00290     //LED Setbit
00291     LED_1.write(0); // LED On
00292     LED_2.write(1); // LED Off
00293     printf("START \r\n");    
00294     printf("sizeof(MbedJSONValue)=%d\r\n",sizeof(MbedJSONValue));
00295     printf("sizeof(vector)=%d\r\n",sizeof(std::vector<string*>));
00296     printf("sizeof(string)=%d\r\n",sizeof(std::string));
00297     debug_info();
00298 
00299     WIZwiki_REST_init();
00300 
00301     debug_info();
00302                     
00303     // Serialize it into a JSON string
00304     printf("\r\n");
00305     printf("-------------------------WIZwikiREST--------------------------- \r\n");
00306     printf("%s\r\n", WIZwikiREST.serialize().c_str());
00307     printf("--------------------------------------------------------------- \r\n");
00308 
00309     WIZwikiWebSvr.add_request_handler("GET", new GetRequestHandler());
00310     //WIZwikiWebSvr.add_request_handler("DELETE", new DeleteRequestHandler());
00311     //WIZwikiWebSvr.add_request_handler("PUT", new PutRequestHandler());
00312     
00313     #ifdef DHCP
00314         eth.init(mac_addr); //Use DHCP
00315     #else
00316         eth.init(mac_addr, ip_addr, subnet_mask, gateway_addr); //Not Use DHCP
00317     #endif
00318     
00319     
00320     printf("Check Ethernet Link\r\n");
00321     //Add
00322     do{
00323         printf("   Link - Wait... \r\n");
00324         wait(1);
00325     }while(!eth.ethernet_link());
00326     printf("-- Ethetnet PHY Link - Done -- \r\n");
00327         
00328     if (eth.connect() < 0 )
00329         printf("-- EThernet Connect - Fail -- \r\n");
00330     else
00331     {
00332         printf("-- Assigned Network Information -- \r\n");
00333         printf("   IP   : %s\r\n\r\n", eth.getIPAddress()); 
00334         printf("   MASK : %s\r\n\r\n", eth.getNetworkMask());
00335         printf("   GW   : %s\r\n\r\n", eth.getGateway());
00336     }
00337         
00338     //while(1) //Wait link up
00339     //{
00340     //    if(eth.link() == true) 
00341     //    break;
00342     //}
00343     
00344     printf("Link up\r\n");
00345     printf("IP Address is %s\r\n", eth.getIPAddress());
00346 
00347     if(!WIZwikiWebSvr.init(SERVER_PORT))
00348     {
00349         eth.disconnect();
00350         return -1;
00351     }
00352 
00353     while(1)
00354     {
00355         WIZwikiWebSvr.run();
00356     }
00357 }
00358 
00359 void WIZwiki_REST_init(void)
00360 {
00361     //Fill the object
00362     WIZwikiREST["Name"] = "WIZwiki-RESTful-01";
00363     WIZwikiREST["Name"].accessible = false;
00364     debug_info();
00365     
00366     //Network
00367 
00368     WIZwikiREST["Network"]["MAC"] = mac_str;
00369     debug_info();
00370     WIZwikiREST["Network"]["IP"] = ip_addr; 
00371     WIZwikiREST["Network"]["IP"].accessible = true; 
00372     debug_info();
00373     WIZwikiREST["Network"]["SN"] = subnet_mask;  
00374     WIZwikiREST["Network"]["SN"].accessible = true;  
00375     debug_info();
00376     WIZwikiREST["Network"]["GW"] = gateway_addr;
00377     WIZwikiREST["Network"]["GW"].accessible = true;
00378     debug_info();
00379 
00380     //LEDs
00381     WIZwikiREST["LED1"] = (LED_1.read() ? "Off" : "On");
00382     WIZwikiREST["LED1"].accessible = true;
00383     debug_info();    
00384     WIZwikiREST["LED2"] = (LED_2.read() ? "Off" : "On");
00385     WIZwikiREST["LED2"].accessible = true;
00386     debug_info();
00387     // GPIOs
00388     WIZwikiREST["GPIOs"]["P05"] = GP05.read();
00389     WIZwikiREST["GPIOs"]["P05"].accessible = true;
00390     WIZwikiREST["GPIOs"]["P05"].cb_action = p5_set;
00391     WIZwikiREST["GPIOs"]["P06"] = GP06.read();
00392     WIZwikiREST["GPIOs"]["P06"].accessible = true;
00393     WIZwikiREST["GPIOs"]["P06"].cb_action = p6_set;
00394     WIZwikiREST["GPIOs"]["P07"] = GP07.read();
00395     WIZwikiREST["GPIOs"]["P07"].accessible = true;
00396     WIZwikiREST["GPIOs"]["P07"].cb_action = p7_set;
00397     WIZwikiREST["GPIOs"]["P08"] = GP08.read();
00398     WIZwikiREST["GPIOs"]["P08"].accessible = true;
00399     WIZwikiREST["GPIOs"]["P08"].cb_action = p8_set;
00400     WIZwikiREST["GPIOs"]["P09"] = GP09.read();
00401     WIZwikiREST["GPIOs"]["P09"].accessible = true;
00402     WIZwikiREST["GPIOs"]["P09"].cb_action = p9_set;
00403     WIZwikiREST["GPIOs"]["P10"] = GP10.read();
00404     WIZwikiREST["GPIOs"]["P10"].accessible = true;
00405     WIZwikiREST["GPIOs"]["P10"].cb_action = p10_set;
00406     WIZwikiREST["GPIOs"]["P11"] = GP11.read();
00407     WIZwikiREST["GPIOs"]["P11"].accessible = true;
00408     WIZwikiREST["GPIOs"]["P11"].cb_action = p11_set;
00409     WIZwikiREST["GPIOs"]["P12"] = GP12.read();
00410     WIZwikiREST["GPIOs"]["P12"].accessible = true;
00411     WIZwikiREST["GPIOs"]["P12"].cb_action = p12_set;
00412     WIZwikiREST["GPIOs"]["P13"] = GP13.read();
00413     WIZwikiREST["GPIOs"]["P13"].accessible = true;
00414     WIZwikiREST["GPIOs"]["P13"].cb_action = p13_set;
00415     WIZwikiREST["GPIOs"]["P14"] = GP14.read();
00416     WIZwikiREST["GPIOs"]["P14"].accessible = true;
00417     WIZwikiREST["GPIOs"]["P14"].cb_action = p14_set;
00418     WIZwikiREST["GPIOs"]["P15"] = GP15.read();
00419     WIZwikiREST["GPIOs"]["P15"].accessible = true;
00420     WIZwikiREST["GPIOs"]["P15"].cb_action = p15_set;
00421     WIZwikiREST["GPIOs"]["P16"] = GP16.read();
00422     WIZwikiREST["GPIOs"]["P16"].accessible = true;
00423     WIZwikiREST["GPIOs"]["P16"].cb_action = p16_set;
00424     WIZwikiREST["GPIOs"]["P17"] = GP17.read();
00425     WIZwikiREST["GPIOs"]["P17"].accessible = true;
00426     WIZwikiREST["GPIOs"]["P17"].cb_action = p17_set;
00427     WIZwikiREST["GPIOs"]["P18"] = GP18.read();
00428     WIZwikiREST["GPIOs"]["P18"].accessible = true;
00429     WIZwikiREST["GPIOs"]["P18"].cb_action = p18_set;
00430     WIZwikiREST["GPIOs"]["P19"] = GP19.read();
00431     WIZwikiREST["GPIOs"]["P19"].accessible = true;
00432     WIZwikiREST["GPIOs"]["P19"].cb_action = p19_set;
00433     WIZwikiREST["GPIOs"]["P20"] = GP20.read();
00434     WIZwikiREST["GPIOs"]["P20"].accessible = true;
00435     WIZwikiREST["GPIOs"]["P20"].cb_action = p20_set;
00436     WIZwikiREST["GPIOs"]["P21"] = GP21.read();
00437     WIZwikiREST["GPIOs"]["P21"].accessible = true;
00438     WIZwikiREST["GPIOs"]["P21"].cb_action = p21_set;
00439     WIZwikiREST["GPIOs"]["P22"] = GP22.read();
00440     WIZwikiREST["GPIOs"]["P22"].accessible = true;
00441     WIZwikiREST["GPIOs"]["P22"].cb_action = p22_set;
00442     
00443     WIZwikiREST["GPIOs"]["P23"] = GP23.read();
00444     WIZwikiREST["GPIOs"]["P23"].accessible = true;
00445     WIZwikiREST["GPIOs"]["P23"].cb_action = p23_set;
00446     WIZwikiREST["GPIOs"]["P24"] = GP24.read();
00447     WIZwikiREST["GPIOs"]["P24"].accessible = true;
00448     WIZwikiREST["GPIOs"]["P24"].cb_action = p24_set;
00449     WIZwikiREST["GPIOs"]["P25"] = GP25.read();
00450     WIZwikiREST["GPIOs"]["P25"].accessible = true;
00451     WIZwikiREST["GPIOs"]["P25"].cb_action = p25_set;
00452     WIZwikiREST["GPIOs"]["P26"] = GP26.read();
00453     WIZwikiREST["GPIOs"]["P26"].accessible = true;
00454     WIZwikiREST["GPIOs"]["P26"].cb_action = p26_set;
00455     WIZwikiREST["GPIOs"]["P27"] = GP27.read();
00456     WIZwikiREST["GPIOs"]["P27"].accessible = true;
00457     WIZwikiREST["GPIOs"]["P27"].cb_action = p27_set;
00458     WIZwikiREST["GPIOs"]["P28"] = GP28.read();
00459     WIZwikiREST["GPIOs"]["P28"].accessible = true;
00460     WIZwikiREST["GPIOs"]["P28"].cb_action = p28_set;
00461     WIZwikiREST["GPIOs"]["P29"] = GP29.read();
00462     WIZwikiREST["GPIOs"]["P29"].accessible = true;
00463     WIZwikiREST["GPIOs"]["P29"].cb_action = p29_set;
00464 /*    
00465     WIZwikiREST["GPIOs"]["P30"] = GP30.read();
00466     WIZwikiREST["GPIOs"]["P30"].accessible = true;
00467     WIZwikiREST["GPIOs"]["P30"].cb_action = p30_set;
00468     WIZwikiREST["GPIOs"]["P31"] = GP31.read();
00469     WIZwikiREST["GPIOs"]["P31"].accessible = true;
00470     WIZwikiREST["GPIOs"]["P31"].cb_action = p31_set;
00471     WIZwikiREST["GPIOs"]["P32"] = GP32.read();
00472     WIZwikiREST["GPIOs"]["P32"].accessible = true;
00473     WIZwikiREST["GPIOs"]["P32"].cb_action = p32_set;
00474 */
00475     debug_info();
00476 }