tes
Dependencies: ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib
Diff: main.cpp
- Revision:
- 4:84abfe990493
- Parent:
- 3:28cd6502dafd
- Child:
- 5:80a7d03c94f5
--- a/main.cpp Thu Jan 30 16:58:07 2014 +0000 +++ b/main.cpp Sat Feb 01 01:37:50 2014 +0000 @@ -1,3 +1,4 @@ + #include "mbed.h" #include "EthernetInterface.h" #include <stdio.h> @@ -7,149 +8,200 @@ #include "ASyncTicker.h" #include "xbee.h" #include "xbeeFrame.h" +#include "MbedJSONValue.h" #include <ctype.h> -#define PORT 80 +#include <string> -//status leds +#define PORT 80 -//led 1 - // lit - successful ethernet connection +// status leds +// led 1 +// lit - successful ethernet connection DigitalOut led_ethernet(LED1); -//led 2 - // lit - successful socket connection + +// led 2 +// lit - successful socket connection DigitalOut led_socket(LED2); +EthernetInterface ethernet; +Websocket ws("ws://192.168.0.4:8080/"); +xbeeFrame xbee(p9, + p10, + p11); -EthernetInterface ethernet; -Websocket ws("ws://192.168.0.4:8080/"); -xbeeFrame xbee(p9,p10,p11); -const char dest_address[8] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0x9B, 0x6D, 0xB0}; -char send_data[50] = "xbee string"; +const char dest_address[8] = +{ + 0x00, 0x13, 0xA2, 0x00, 0x40, 0x9B, 0x6D, 0xB0 +}; +char send_data[50] = "xbee string"; -void pull_requests(){ - +void pull_requests() +{ } -void pull_updates(){ - char str[100]; - char id[30]; - char new_msg[50]; +void pull_updates() +{ + // build json request string + MbedJSONValue request; + + std::string s; + + // fill the object + request["TYPE"] = "UPDATE"; + request["ORIGIN"] = "HUB"; + request["ID"] = "N/A"; + request["DATA"] = "N/A"; + request["STATUS"] = "N/A"; + + // serialize it into a JSON string + s = request.serialize(); + + // printf("json: %s\r\n", s.c_str()); + + char str[100]; + char id[30]; + char new_msg[50]; + // string with a message - sprintf(str, "PU"); - ws.send(str); - - // clear the buffer and wait a sec... - - - memset(str, 0, 100); - wait(0.5f); - - // websocket server should echo whatever we sent it - if (ws.read(str)) { - memset(id,0,30); - memset(new_msg, 0, 50); - printf("msg form svr: %s\n\r", str); - sscanf((char *)str, "%s %[^\t]", id, new_msg); + // sprintf(str, "PU"); + ws.send((char *) s.c_str()); + + // clear the buffer and wait a sec... + memset(str, 0, 100); + wait(0.5f); - printf("the id : %s will update to : %s\n\r", id, new_msg); - - - //send string to xbee HERE - if(strlen(new_msg) == 0) + // websocket server should echo whatever we sent it + if (ws.read(str)) + { + memset(id, 0, 30); + memset(new_msg, 0, 50); + + // response from server is JSON + // parse back to a traversable object + MbedJSONValue updt_res; + + parse(updt_res, str); + printf("msg form svr: %s\n\r", updt_res); + sscanf((char *) updt_res["DATA"].get<std::string>().c_str(), "%s %[^\t]", id, new_msg); + + // printf("the id : %s will update to : %s\n\r", id, new_msg); + // send string to xbee HERE + if (strlen(new_msg) == 0) { printf("nothing to update, better luck next time! (svr response: %s)\n\r", id); + return; - }else{ - //data was revieved + } + else + { + // data was revieved printf("id : %s string: %s (original: %s) \n\r", id, new_msg, str); } - - char to_send[100]; - char* p = to_send; - char* r = send_data; - while(*r) + + char to_send[100]; + char * p = to_send; + char * r = send_data; + + while (*r) + { *p++ = *r++; + } + *p++ = ' '; - r = new_msg; - while(*r) + r = new_msg; + + while (*r) + { *p++ = *r++; + } + *p++ = '\r'; - *p = '\0'; - - char data_buf[50]; + *p = '\0'; + + char data_buf[50]; + xbee.InitFrame(); - xbee.SetDestination((unsigned char *)dest_address); + xbee.SetDestination((unsigned char *) dest_address); xbee.SetPayload(to_send); printf("sending payload: %s\n\r", to_send); xbee.AssembleFrame(); xbee.SendFrame(); - - - for(int i = 0; i<2; i++) + + for (int i = 0; i < 2; i++) { xbee.ReceiveFrame(data_buf, 500); - if(xbee.frameReceived) + + if (xbee.frameReceived) { xbee.frameReceived = 0; - if(xbee.GetType() == TX_STATUS) + + if (xbee.GetType() == TX_STATUS) { - if(xbee.GetStatus() == 0) + if (xbee.GetStatus() == 0) + { printf("Send success!\n\r"); + } else + { printf("Send failed :(\n\r"); + } } else if (xbee.GetType() == RX_PACKET_64) + { printf("Received data: %s\n\r", data_buf); + } } - } - } - - - - + } } - - -int main () +int main() { led_ethernet = 0; - led_socket = 0; + led_socket = 0; ethernet.init(); // connect with DHCP + int ret_val = ethernet.connect(); - - if (0 == ret_val) { + + if (0 == ret_val) + { printf("\n\rIP Address: %s\n\r", ethernet.getIPAddress()); + led_ethernet = 1; - } else { + } + else + { error("ethernet failed to connect: %d.\n\r", ret_val); } - + int interval = 5; - - if(ws.connect()) + + if (ws.connect()) { led_socket = 1; } - + Timer timer; + timer.start(); - //every <interval> seconds call to the server to pull updates - - while(true){ - if(timer.read() >= interval){ - //perform checks + // every <interval> seconds call to the server to pull updates + while (true) + { + if (timer.read() >= interval) + { + // perform checks pull_updates(); timer.reset(); timer.start(); } } - - //pull_updates(); - ws.close(); + // pull_updates(); + ws.close(); } + + +//~ Formatted by Jindent --- http://www.jindent.com