tes

Dependencies:   ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib

Committer:
ammanvedi
Date:
Sat Feb 01 01:37:50 2014 +0000
Revision:
4:84abfe990493
Parent:
3:28cd6502dafd
Child:
5:80a7d03c94f5
json sockets implemented

Who changed what in which revision?

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