tes

Dependencies:   ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib

Committer:
ammanvedi
Date:
Sat Feb 01 17:30:02 2014 +0000
Revision:
5:80a7d03c94f5
Parent:
4:84abfe990493
Child:
6:c1bd3fadce09
COMMIT PRIOR TO REMOVAL OF DEPRECIATED CODE

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 4:84abfe990493 11 #define PORT 80
ammanvedi 3:28cd6502dafd 12
ammanvedi 4:84abfe990493 13 // status leds
ammanvedi 4:84abfe990493 14 // led 1
ammanvedi 4:84abfe990493 15 // lit - successful ethernet connection
ammanvedi 3:28cd6502dafd 16 DigitalOut led_ethernet(LED1);
ammanvedi 4:84abfe990493 17
ammanvedi 4:84abfe990493 18 // led 2
ammanvedi 4:84abfe990493 19 // lit - successful socket connection
ammanvedi 3:28cd6502dafd 20 DigitalOut led_socket(LED2);
ammanvedi 3:28cd6502dafd 21
ammanvedi 4:84abfe990493 22 EthernetInterface ethernet;
ammanvedi 4:84abfe990493 23 Websocket ws("ws://192.168.0.4:8080/");
ammanvedi 3:28cd6502dafd 24
ammanvedi 5:80a7d03c94f5 25
ammanvedi 5:80a7d03c94f5 26 btNode b(30);
ammanvedi 5:80a7d03c94f5 27
ammanvedi 5:80a7d03c94f5 28 /* v1 depreciated
ammanvedi 5:80a7d03c94f5 29
ammanvedi 4:84abfe990493 30 xbeeFrame xbee(p9,
ammanvedi 4:84abfe990493 31 p10,
ammanvedi 4:84abfe990493 32 p11);
ammanvedi 0:d73af3f5c81d 33
ammanvedi 5:80a7d03c94f5 34
ammanvedi 5:80a7d03c94f5 35
ammanvedi 5:80a7d03c94f5 36 char dest_address[8] =
ammanvedi 4:84abfe990493 37 {
ammanvedi 4:84abfe990493 38 0x00, 0x13, 0xA2, 0x00, 0x40, 0x9B, 0x6D, 0xB0
ammanvedi 4:84abfe990493 39 };
ammanvedi 4:84abfe990493 40 char send_data[50] = "xbee string";
ammanvedi 0:d73af3f5c81d 41
ammanvedi 5:80a7d03c94f5 42 */
ammanvedi 5:80a7d03c94f5 43
ammanvedi 4:84abfe990493 44 void pull_requests()
ammanvedi 4:84abfe990493 45 {
ammanvedi 2:1c8d8d728b93 46 }
ammanvedi 0:d73af3f5c81d 47
ammanvedi 5:80a7d03c94f5 48
ammanvedi 5:80a7d03c94f5 49
ammanvedi 4:84abfe990493 50 void pull_updates()
ammanvedi 4:84abfe990493 51 {
ammanvedi 4:84abfe990493 52 // build json request string
ammanvedi 4:84abfe990493 53 MbedJSONValue request;
ammanvedi 4:84abfe990493 54
ammanvedi 4:84abfe990493 55 std::string s;
ammanvedi 4:84abfe990493 56
ammanvedi 4:84abfe990493 57 // fill the object
ammanvedi 4:84abfe990493 58 request["TYPE"] = "UPDATE";
ammanvedi 4:84abfe990493 59 request["ORIGIN"] = "HUB";
ammanvedi 4:84abfe990493 60 request["ID"] = "N/A";
ammanvedi 4:84abfe990493 61 request["DATA"] = "N/A";
ammanvedi 4:84abfe990493 62 request["STATUS"] = "N/A";
ammanvedi 4:84abfe990493 63
ammanvedi 4:84abfe990493 64 // serialize it into a JSON string
ammanvedi 4:84abfe990493 65 s = request.serialize();
ammanvedi 4:84abfe990493 66
ammanvedi 4:84abfe990493 67 // printf("json: %s\r\n", s.c_str());
ammanvedi 4:84abfe990493 68
ammanvedi 4:84abfe990493 69 char str[100];
ammanvedi 4:84abfe990493 70 char id[30];
ammanvedi 4:84abfe990493 71 char new_msg[50];
ammanvedi 4:84abfe990493 72
ammanvedi 1:6c1df6c9be4d 73 // string with a message
ammanvedi 4:84abfe990493 74 // sprintf(str, "PU");
ammanvedi 4:84abfe990493 75 ws.send((char *) s.c_str());
ammanvedi 4:84abfe990493 76
ammanvedi 4:84abfe990493 77 // clear the buffer and wait a sec...
ammanvedi 4:84abfe990493 78 memset(str, 0, 100);
ammanvedi 4:84abfe990493 79 wait(0.5f);
ammanvedi 3:28cd6502dafd 80
ammanvedi 4:84abfe990493 81 // websocket server should echo whatever we sent it
ammanvedi 4:84abfe990493 82 if (ws.read(str))
ammanvedi 4:84abfe990493 83 {
ammanvedi 4:84abfe990493 84 memset(id, 0, 30);
ammanvedi 4:84abfe990493 85 memset(new_msg, 0, 50);
ammanvedi 4:84abfe990493 86
ammanvedi 4:84abfe990493 87 // response from server is JSON
ammanvedi 4:84abfe990493 88 // parse back to a traversable object
ammanvedi 4:84abfe990493 89 MbedJSONValue updt_res;
ammanvedi 4:84abfe990493 90
ammanvedi 4:84abfe990493 91 parse(updt_res, str);
ammanvedi 4:84abfe990493 92 printf("msg form svr: %s\n\r", updt_res);
ammanvedi 4:84abfe990493 93 sscanf((char *) updt_res["DATA"].get<std::string>().c_str(), "%s %[^\t]", id, new_msg);
ammanvedi 4:84abfe990493 94
ammanvedi 4:84abfe990493 95 // printf("the id : %s will update to : %s\n\r", id, new_msg);
ammanvedi 4:84abfe990493 96 // send string to xbee HERE
ammanvedi 4:84abfe990493 97 if (strlen(new_msg) == 0)
ammanvedi 2:1c8d8d728b93 98 {
ammanvedi 2:1c8d8d728b93 99 printf("nothing to update, better luck next time! (svr response: %s)\n\r", id);
ammanvedi 4:84abfe990493 100
ammanvedi 2:1c8d8d728b93 101 return;
ammanvedi 4:84abfe990493 102 }
ammanvedi 4:84abfe990493 103 else
ammanvedi 4:84abfe990493 104 {
ammanvedi 4:84abfe990493 105 // data was revieved
ammanvedi 2:1c8d8d728b93 106 printf("id : %s string: %s (original: %s) \n\r", id, new_msg, str);
ammanvedi 2:1c8d8d728b93 107 }
ammanvedi 5:80a7d03c94f5 108
ammanvedi 5:80a7d03c94f5 109 std::string real_msg(new_msg);
ammanvedi 5:80a7d03c94f5 110
ammanvedi 5:80a7d03c94f5 111 std::string result = b.SendMessage(real_msg);
ammanvedi 5:80a7d03c94f5 112
ammanvedi 5:80a7d03c94f5 113 printf("xbee response : %s\n\r\n\r", result);
ammanvedi 5:80a7d03c94f5 114
ammanvedi 5:80a7d03c94f5 115
ammanvedi 5:80a7d03c94f5 116 /* V1 DEPRECIATED
ammanvedi 4:84abfe990493 117 char to_send[100];
ammanvedi 4:84abfe990493 118 char * p = to_send;
ammanvedi 4:84abfe990493 119 char * r = send_data;
ammanvedi 4:84abfe990493 120
ammanvedi 4:84abfe990493 121 while (*r)
ammanvedi 4:84abfe990493 122 {
ammanvedi 1:6c1df6c9be4d 123 *p++ = *r++;
ammanvedi 4:84abfe990493 124 }
ammanvedi 4:84abfe990493 125
ammanvedi 1:6c1df6c9be4d 126 *p++ = ' ';
ammanvedi 4:84abfe990493 127 r = new_msg;
ammanvedi 4:84abfe990493 128
ammanvedi 4:84abfe990493 129 while (*r)
ammanvedi 4:84abfe990493 130 {
ammanvedi 1:6c1df6c9be4d 131 *p++ = *r++;
ammanvedi 4:84abfe990493 132 }
ammanvedi 4:84abfe990493 133
ammanvedi 3:28cd6502dafd 134 *p++ = '\r';
ammanvedi 4:84abfe990493 135 *p = '\0';
ammanvedi 4:84abfe990493 136
ammanvedi 4:84abfe990493 137 char data_buf[50];
ammanvedi 4:84abfe990493 138
ammanvedi 1:6c1df6c9be4d 139 xbee.InitFrame();
ammanvedi 4:84abfe990493 140 xbee.SetDestination((unsigned char *) dest_address);
ammanvedi 1:6c1df6c9be4d 141 xbee.SetPayload(to_send);
ammanvedi 3:28cd6502dafd 142 printf("sending payload: %s\n\r", to_send);
ammanvedi 1:6c1df6c9be4d 143 xbee.AssembleFrame();
ammanvedi 1:6c1df6c9be4d 144 xbee.SendFrame();
ammanvedi 4:84abfe990493 145
ammanvedi 4:84abfe990493 146 for (int i = 0; i < 2; i++)
ammanvedi 1:6c1df6c9be4d 147 {
ammanvedi 1:6c1df6c9be4d 148 xbee.ReceiveFrame(data_buf, 500);
ammanvedi 4:84abfe990493 149
ammanvedi 4:84abfe990493 150 if (xbee.frameReceived)
ammanvedi 1:6c1df6c9be4d 151 {
ammanvedi 1:6c1df6c9be4d 152 xbee.frameReceived = 0;
ammanvedi 4:84abfe990493 153
ammanvedi 4:84abfe990493 154 if (xbee.GetType() == TX_STATUS)
ammanvedi 1:6c1df6c9be4d 155 {
ammanvedi 4:84abfe990493 156 if (xbee.GetStatus() == 0)
ammanvedi 4:84abfe990493 157 {
ammanvedi 1:6c1df6c9be4d 158 printf("Send success!\n\r");
ammanvedi 4:84abfe990493 159 }
ammanvedi 1:6c1df6c9be4d 160 else
ammanvedi 4:84abfe990493 161 {
ammanvedi 1:6c1df6c9be4d 162 printf("Send failed :(\n\r");
ammanvedi 4:84abfe990493 163 }
ammanvedi 1:6c1df6c9be4d 164 }
ammanvedi 1:6c1df6c9be4d 165 else if (xbee.GetType() == RX_PACKET_64)
ammanvedi 4:84abfe990493 166 {
ammanvedi 1:6c1df6c9be4d 167 printf("Received data: %s\n\r", data_buf);
ammanvedi 4:84abfe990493 168 }
ammanvedi 1:6c1df6c9be4d 169 }
ammanvedi 1:6c1df6c9be4d 170 }
ammanvedi 5:80a7d03c94f5 171 }
ammanvedi 5:80a7d03c94f5 172 */
ammanvedi 5:80a7d03c94f5 173 }
ammanvedi 0:d73af3f5c81d 174 }
ammanvedi 0:d73af3f5c81d 175
ammanvedi 4:84abfe990493 176 int main()
ammanvedi 0:d73af3f5c81d 177 {
ammanvedi 5:80a7d03c94f5 178
ammanvedi 5:80a7d03c94f5 179
ammanvedi 5:80a7d03c94f5 180
ammanvedi 5:80a7d03c94f5 181
ammanvedi 3:28cd6502dafd 182 led_ethernet = 0;
ammanvedi 4:84abfe990493 183 led_socket = 0;
ammanvedi 0:d73af3f5c81d 184
ammanvedi 0:d73af3f5c81d 185 ethernet.init(); // connect with DHCP
ammanvedi 4:84abfe990493 186
ammanvedi 0:d73af3f5c81d 187 int ret_val = ethernet.connect();
ammanvedi 4:84abfe990493 188
ammanvedi 4:84abfe990493 189 if (0 == ret_val)
ammanvedi 4:84abfe990493 190 {
ammanvedi 3:28cd6502dafd 191 printf("\n\rIP Address: %s\n\r", ethernet.getIPAddress());
ammanvedi 4:84abfe990493 192
ammanvedi 3:28cd6502dafd 193 led_ethernet = 1;
ammanvedi 4:84abfe990493 194 }
ammanvedi 4:84abfe990493 195 else
ammanvedi 4:84abfe990493 196 {
ammanvedi 0:d73af3f5c81d 197 error("ethernet failed to connect: %d.\n\r", ret_val);
ammanvedi 0:d73af3f5c81d 198 }
ammanvedi 4:84abfe990493 199
ammanvedi 2:1c8d8d728b93 200 int interval = 5;
ammanvedi 4:84abfe990493 201
ammanvedi 4:84abfe990493 202 if (ws.connect())
ammanvedi 3:28cd6502dafd 203 {
ammanvedi 3:28cd6502dafd 204 led_socket = 1;
ammanvedi 3:28cd6502dafd 205 }
ammanvedi 4:84abfe990493 206
ammanvedi 1:6c1df6c9be4d 207 Timer timer;
ammanvedi 4:84abfe990493 208
ammanvedi 1:6c1df6c9be4d 209 timer.start();
ammanvedi 2:1c8d8d728b93 210
ammanvedi 4:84abfe990493 211 // every <interval> seconds call to the server to pull updates
ammanvedi 4:84abfe990493 212 while (true)
ammanvedi 4:84abfe990493 213 {
ammanvedi 4:84abfe990493 214 if (timer.read() >= interval)
ammanvedi 4:84abfe990493 215 {
ammanvedi 4:84abfe990493 216 // perform checks
ammanvedi 1:6c1df6c9be4d 217 pull_updates();
ammanvedi 1:6c1df6c9be4d 218 timer.reset();
ammanvedi 1:6c1df6c9be4d 219 timer.start();
ammanvedi 0:d73af3f5c81d 220 }
ammanvedi 1:6c1df6c9be4d 221 }
ammanvedi 0:d73af3f5c81d 222
ammanvedi 4:84abfe990493 223 // pull_updates();
ammanvedi 4:84abfe990493 224 ws.close();
ammanvedi 0:d73af3f5c81d 225 }
ammanvedi 4:84abfe990493 226
ammanvedi 4:84abfe990493 227
ammanvedi 4:84abfe990493 228 //~ Formatted by Jindent --- http://www.jindent.com