tes

Dependencies:   ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib

Files at this revision

API Documentation at this revision

Comitter:
ammanvedi
Date:
Sat Feb 01 01:37:50 2014 +0000
Parent:
3:28cd6502dafd
Child:
5:80a7d03c94f5
Commit message:
json sockets implemented

Changed in this revision

MbedJSONValue.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MbedJSONValue.lib	Sat Feb 01 01:37:50 2014 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/samux/code/MbedJSONValue/#10a99cdf7846
--- 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