tes

Dependencies:   ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib

Committer:
ammanvedi
Date:
Wed Jun 18 17:45:56 2014 +0000
Revision:
8:0d7ab8af0e59
Parent:
7:7039646b7083
x;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ammanvedi 0:d73af3f5c81d 1 #include "mbed.h"
ammanvedi 0:d73af3f5c81d 2 #include "EthernetInterface.h"
ammanvedi 0:d73af3f5c81d 3 #include <stdio.h>
ammanvedi 0:d73af3f5c81d 4 #include "Websocket.h"
ammanvedi 1:6c1df6c9be4d 5 #include "xbee.h"
ammanvedi 1:6c1df6c9be4d 6 #include "xbeeFrame.h"
ammanvedi 4:84abfe990493 7 #include "MbedJSONValue.h"
ammanvedi 3:28cd6502dafd 8 #include <ctype.h>
ammanvedi 4:84abfe990493 9 #include <string>
ammanvedi 5:80a7d03c94f5 10 #include "btNode.h"
ammanvedi 6:c1bd3fadce09 11 #include <map>
ammanvedi 7:7039646b7083 12 #include <utility>
ammanvedi 4:84abfe990493 13 #define PORT 80
ammanvedi 7:7039646b7083 14 const std::string HUBID = "1";
ammanvedi 3:28cd6502dafd 15
ammanvedi 4:84abfe990493 16 // status leds
ammanvedi 4:84abfe990493 17 // led 1
ammanvedi 4:84abfe990493 18 // lit - successful ethernet connection
ammanvedi 3:28cd6502dafd 19 DigitalOut led_ethernet(LED1);
ammanvedi 4:84abfe990493 20
ammanvedi 4:84abfe990493 21 // led 2
ammanvedi 4:84abfe990493 22 // lit - successful socket connection
ammanvedi 3:28cd6502dafd 23 DigitalOut led_socket(LED2);
ammanvedi 3:28cd6502dafd 24
ammanvedi 6:c1bd3fadce09 25 map<int, btNode> BTnodes;
ammanvedi 6:c1bd3fadce09 26
ammanvedi 4:84abfe990493 27 EthernetInterface ethernet;
ammanvedi 4:84abfe990493 28 Websocket ws("ws://192.168.0.4:8080/");
ammanvedi 3:28cd6502dafd 29
ammanvedi 7:7039646b7083 30 bool sync_devices()
ammanvedi 7:7039646b7083 31 {
ammanvedi 7:7039646b7083 32 MbedJSONValue sync_data;
ammanvedi 5:80a7d03c94f5 33
ammanvedi 7:7039646b7083 34 std::string sync_string;
ammanvedi 7:7039646b7083 35
ammanvedi 7:7039646b7083 36 // fill the object
ammanvedi 7:7039646b7083 37 sync_data["TYPE"] = "SYNC";
ammanvedi 7:7039646b7083 38 sync_data["ORIGIN"] = "HUB";
ammanvedi 7:7039646b7083 39 sync_data["ID"] = "N/A";
ammanvedi 7:7039646b7083 40
ammanvedi 7:7039646b7083 41 //sync_data["DATA"] = "N/A";
ammanvedi 7:7039646b7083 42 //iterate over local nodes and send node list to svr over socket
ammanvedi 7:7039646b7083 43
ammanvedi 7:7039646b7083 44 // map<char, int>::iterator p;
ammanvedi 7:7039646b7083 45
ammanvedi 7:7039646b7083 46 int index = 0;
ammanvedi 7:7039646b7083 47
ammanvedi 7:7039646b7083 48 for (std::map<int, btNode>::iterator it = BTnodes.begin(); it != BTnodes.end(); ++it)
ammanvedi 7:7039646b7083 49 {
ammanvedi 7:7039646b7083 50 MbedJSONValue device = it->second.GetAsJSON();
ammanvedi 7:7039646b7083 51 printf("dev : %s\n\r", device.serialize());
ammanvedi 7:7039646b7083 52 sync_data["DEVICES"][index] = device.serialize();
ammanvedi 7:7039646b7083 53 index++;
ammanvedi 7:7039646b7083 54 }
ammanvedi 7:7039646b7083 55 sync_data["COUNT"] = index;
ammanvedi 7:7039646b7083 56 sync_data["STATUS"] = "0";
ammanvedi 7:7039646b7083 57
ammanvedi 7:7039646b7083 58 sync_string = sync_data.serialize();
ammanvedi 7:7039646b7083 59
ammanvedi 7:7039646b7083 60 ws.send((char *)sync_string.c_str());
ammanvedi 7:7039646b7083 61
ammanvedi 7:7039646b7083 62 // serialize it into a JSON string
ammanvedi 7:7039646b7083 63
ammanvedi 7:7039646b7083 64
ammanvedi 7:7039646b7083 65 return true;
ammanvedi 7:7039646b7083 66 }
ammanvedi 5:80a7d03c94f5 67
ammanvedi 4:84abfe990493 68 void pull_updates()
ammanvedi 4:84abfe990493 69 {
ammanvedi 4:84abfe990493 70 // build json request string
ammanvedi 4:84abfe990493 71 MbedJSONValue request;
ammanvedi 4:84abfe990493 72
ammanvedi 4:84abfe990493 73 std::string s;
ammanvedi 4:84abfe990493 74
ammanvedi 4:84abfe990493 75 // fill the object
ammanvedi 4:84abfe990493 76 request["TYPE"] = "UPDATE";
ammanvedi 4:84abfe990493 77 request["ORIGIN"] = "HUB";
ammanvedi 4:84abfe990493 78 request["ID"] = "N/A";
ammanvedi 4:84abfe990493 79 request["DATA"] = "N/A";
ammanvedi 4:84abfe990493 80 request["STATUS"] = "N/A";
ammanvedi 4:84abfe990493 81
ammanvedi 4:84abfe990493 82 // serialize it into a JSON string
ammanvedi 4:84abfe990493 83 s = request.serialize();
ammanvedi 4:84abfe990493 84
ammanvedi 4:84abfe990493 85 // printf("json: %s\r\n", s.c_str());
ammanvedi 4:84abfe990493 86
ammanvedi 4:84abfe990493 87 char str[100];
ammanvedi 4:84abfe990493 88 char id[30];
ammanvedi 4:84abfe990493 89 char new_msg[50];
ammanvedi 4:84abfe990493 90
ammanvedi 1:6c1df6c9be4d 91 // string with a message
ammanvedi 4:84abfe990493 92 // sprintf(str, "PU");
ammanvedi 4:84abfe990493 93 ws.send((char *) s.c_str());
ammanvedi 4:84abfe990493 94
ammanvedi 4:84abfe990493 95 // clear the buffer and wait a sec...
ammanvedi 4:84abfe990493 96 memset(str, 0, 100);
ammanvedi 4:84abfe990493 97 wait(0.5f);
ammanvedi 3:28cd6502dafd 98
ammanvedi 4:84abfe990493 99 // websocket server should echo whatever we sent it
ammanvedi 4:84abfe990493 100 if (ws.read(str))
ammanvedi 4:84abfe990493 101 {
ammanvedi 4:84abfe990493 102 memset(id, 0, 30);
ammanvedi 4:84abfe990493 103 memset(new_msg, 0, 50);
ammanvedi 4:84abfe990493 104
ammanvedi 4:84abfe990493 105 // response from server is JSON
ammanvedi 4:84abfe990493 106 // parse back to a traversable object
ammanvedi 4:84abfe990493 107 MbedJSONValue updt_res;
ammanvedi 4:84abfe990493 108
ammanvedi 4:84abfe990493 109 parse(updt_res, str);
ammanvedi 6:c1bd3fadce09 110 printf("> %s from svr with data %s\n\r", updt_res["TYPE"].get<std::string>().c_str(), updt_res["DATA"].get<std::string>().c_str());
ammanvedi 4:84abfe990493 111 sscanf((char *) updt_res["DATA"].get<std::string>().c_str(), "%s %[^\t]", id, new_msg);
ammanvedi 4:84abfe990493 112
ammanvedi 4:84abfe990493 113 // send string to xbee HERE
ammanvedi 4:84abfe990493 114 if (strlen(new_msg) == 0)
ammanvedi 2:1c8d8d728b93 115 {
ammanvedi 6:c1bd3fadce09 116 printf("--> Nothing to update.\n\r\n\r");
ammanvedi 2:1c8d8d728b93 117 return;
ammanvedi 6:c1bd3fadce09 118 }else{
ammanvedi 6:c1bd3fadce09 119 printf("--> id : %s string: %s \n\r", id, new_msg);
ammanvedi 2:1c8d8d728b93 120 }
ammanvedi 5:80a7d03c94f5 121
ammanvedi 5:80a7d03c94f5 122 std::string real_msg(new_msg);
ammanvedi 5:80a7d03c94f5 123
ammanvedi 6:c1bd3fadce09 124 btNode bt = BTnodes.find(atoi(id))->second;
ammanvedi 5:80a7d03c94f5 125
ammanvedi 6:c1bd3fadce09 126 printf("> Found device with ID : %d\n\r\n\r", bt.getID());
ammanvedi 5:80a7d03c94f5 127
ammanvedi 6:c1bd3fadce09 128 std::string result = bt.SendMessage(real_msg);
ammanvedi 6:c1bd3fadce09 129
ammanvedi 6:c1bd3fadce09 130 printf("--> xbee response : %s\n\r\n\r", result.c_str());
ammanvedi 6:c1bd3fadce09 131
ammanvedi 6:c1bd3fadce09 132 }
ammanvedi 0:d73af3f5c81d 133 }
ammanvedi 0:d73af3f5c81d 134
ammanvedi 4:84abfe990493 135 int main()
ammanvedi 0:d73af3f5c81d 136 {
ammanvedi 7:7039646b7083 137 //add a registered device to the device array
ammanvedi 7:7039646b7083 138 btNode a(1, "msp430-homer", HUBID);
ammanvedi 7:7039646b7083 139 btNode b(30, "mp430-adam", HUBID);
ammanvedi 7:7039646b7083 140 BTnodes.insert(pair<int, btNode>(1,a));
ammanvedi 6:c1bd3fadce09 141 BTnodes.insert(pair<int, btNode>(30,b));
ammanvedi 5:80a7d03c94f5 142
ammanvedi 3:28cd6502dafd 143 led_ethernet = 0;
ammanvedi 4:84abfe990493 144 led_socket = 0;
ammanvedi 0:d73af3f5c81d 145
ammanvedi 0:d73af3f5c81d 146 ethernet.init(); // connect with DHCP
ammanvedi 4:84abfe990493 147
ammanvedi 0:d73af3f5c81d 148 int ret_val = ethernet.connect();
ammanvedi 4:84abfe990493 149
ammanvedi 4:84abfe990493 150 if (0 == ret_val)
ammanvedi 4:84abfe990493 151 {
ammanvedi 3:28cd6502dafd 152 printf("\n\rIP Address: %s\n\r", ethernet.getIPAddress());
ammanvedi 4:84abfe990493 153
ammanvedi 3:28cd6502dafd 154 led_ethernet = 1;
ammanvedi 4:84abfe990493 155 }
ammanvedi 4:84abfe990493 156 else
ammanvedi 4:84abfe990493 157 {
ammanvedi 0:d73af3f5c81d 158 error("ethernet failed to connect: %d.\n\r", ret_val);
ammanvedi 0:d73af3f5c81d 159 }
ammanvedi 4:84abfe990493 160
ammanvedi 2:1c8d8d728b93 161 int interval = 5;
ammanvedi 4:84abfe990493 162
ammanvedi 4:84abfe990493 163 if (ws.connect())
ammanvedi 3:28cd6502dafd 164 {
ammanvedi 3:28cd6502dafd 165 led_socket = 1;
ammanvedi 3:28cd6502dafd 166 }
ammanvedi 4:84abfe990493 167
ammanvedi 1:6c1df6c9be4d 168 Timer timer;
ammanvedi 4:84abfe990493 169
ammanvedi 1:6c1df6c9be4d 170 timer.start();
ammanvedi 7:7039646b7083 171
ammanvedi 7:7039646b7083 172 sync_devices();
ammanvedi 2:1c8d8d728b93 173
ammanvedi 4:84abfe990493 174 // every <interval> seconds call to the server to pull updates
ammanvedi 4:84abfe990493 175 while (true)
ammanvedi 4:84abfe990493 176 {
ammanvedi 4:84abfe990493 177 if (timer.read() >= interval)
ammanvedi 4:84abfe990493 178 {
ammanvedi 4:84abfe990493 179 // perform checks
ammanvedi 1:6c1df6c9be4d 180 pull_updates();
ammanvedi 1:6c1df6c9be4d 181 timer.reset();
ammanvedi 1:6c1df6c9be4d 182 timer.start();
ammanvedi 0:d73af3f5c81d 183 }
ammanvedi 1:6c1df6c9be4d 184 }
ammanvedi 6:c1bd3fadce09 185 //ws.close();
ammanvedi 0:d73af3f5c81d 186 }
ammanvedi 4:84abfe990493 187
ammanvedi 4:84abfe990493 188
ammanvedi 6:c1bd3fadce09 189