Lawrence Lee / Mbed 2 deprecated WIZwiki-REST-io

Dependencies:   MbedJSONValue_copy WIZnetInterface mbed

Fork of WIZwiki-REST_mc by Lawrence Lee

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