tes
Dependencies: ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib
main.cpp@5:80a7d03c94f5, 2014-02-01 (annotated)
- 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?
User | Revision | Line number | New 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 |