tes
Dependencies: ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib
main.cpp@3:28cd6502dafd, 2014-01-30 (annotated)
- Committer:
- ammanvedi
- Date:
- Thu Jan 30 16:58:07 2014 +0000
- Revision:
- 3:28cd6502dafd
- Parent:
- 2:1c8d8d728b93
- Child:
- 4:84abfe990493
v1.2
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 <string.h> |
ammanvedi | 0:d73af3f5c81d | 5 | #include "Websocket.h" |
ammanvedi | 0:d73af3f5c81d | 6 | #include "Updateable.h" |
ammanvedi | 0:d73af3f5c81d | 7 | #include "ASyncTicker.h" |
ammanvedi | 1:6c1df6c9be4d | 8 | #include "xbee.h" |
ammanvedi | 1:6c1df6c9be4d | 9 | #include "xbeeFrame.h" |
ammanvedi | 3:28cd6502dafd | 10 | #include <ctype.h> |
ammanvedi | 0:d73af3f5c81d | 11 | #define PORT 80 |
ammanvedi | 0:d73af3f5c81d | 12 | |
ammanvedi | 3:28cd6502dafd | 13 | //status leds |
ammanvedi | 3:28cd6502dafd | 14 | |
ammanvedi | 3:28cd6502dafd | 15 | //led 1 |
ammanvedi | 3:28cd6502dafd | 16 | // lit - successful ethernet connection |
ammanvedi | 3:28cd6502dafd | 17 | DigitalOut led_ethernet(LED1); |
ammanvedi | 3:28cd6502dafd | 18 | //led 2 |
ammanvedi | 3:28cd6502dafd | 19 | // lit - successful socket connection |
ammanvedi | 3:28cd6502dafd | 20 | DigitalOut led_socket(LED2); |
ammanvedi | 3:28cd6502dafd | 21 | |
ammanvedi | 3:28cd6502dafd | 22 | |
ammanvedi | 0:d73af3f5c81d | 23 | |
ammanvedi | 0:d73af3f5c81d | 24 | EthernetInterface ethernet; |
ammanvedi | 0:d73af3f5c81d | 25 | Websocket ws("ws://192.168.0.4:8080/"); |
ammanvedi | 1:6c1df6c9be4d | 26 | xbeeFrame xbee(p9,p10,p11); |
ammanvedi | 1:6c1df6c9be4d | 27 | const char dest_address[8] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0x9B, 0x6D, 0xB0}; |
ammanvedi | 1:6c1df6c9be4d | 28 | char send_data[50] = "xbee string"; |
ammanvedi | 0:d73af3f5c81d | 29 | |
ammanvedi | 2:1c8d8d728b93 | 30 | void pull_requests(){ |
ammanvedi | 0:d73af3f5c81d | 31 | |
ammanvedi | 2:1c8d8d728b93 | 32 | } |
ammanvedi | 0:d73af3f5c81d | 33 | |
ammanvedi | 0:d73af3f5c81d | 34 | void pull_updates(){ |
ammanvedi | 1:6c1df6c9be4d | 35 | char str[100]; |
ammanvedi | 1:6c1df6c9be4d | 36 | char id[30]; |
ammanvedi | 1:6c1df6c9be4d | 37 | char new_msg[50]; |
ammanvedi | 1:6c1df6c9be4d | 38 | // string with a message |
ammanvedi | 1:6c1df6c9be4d | 39 | sprintf(str, "PU"); |
ammanvedi | 1:6c1df6c9be4d | 40 | ws.send(str); |
ammanvedi | 1:6c1df6c9be4d | 41 | |
ammanvedi | 1:6c1df6c9be4d | 42 | // clear the buffer and wait a sec... |
ammanvedi | 1:6c1df6c9be4d | 43 | |
ammanvedi | 1:6c1df6c9be4d | 44 | |
ammanvedi | 1:6c1df6c9be4d | 45 | memset(str, 0, 100); |
ammanvedi | 1:6c1df6c9be4d | 46 | wait(0.5f); |
ammanvedi | 1:6c1df6c9be4d | 47 | |
ammanvedi | 1:6c1df6c9be4d | 48 | // websocket server should echo whatever we sent it |
ammanvedi | 1:6c1df6c9be4d | 49 | if (ws.read(str)) { |
ammanvedi | 1:6c1df6c9be4d | 50 | memset(id,0,30); |
ammanvedi | 1:6c1df6c9be4d | 51 | memset(new_msg, 0, 50); |
ammanvedi | 3:28cd6502dafd | 52 | printf("msg form svr: %s\n\r", str); |
ammanvedi | 3:28cd6502dafd | 53 | sscanf((char *)str, "%s %[^\t]", id, new_msg); |
ammanvedi | 3:28cd6502dafd | 54 | |
ammanvedi | 3:28cd6502dafd | 55 | printf("the id : %s will update to : %s\n\r", id, new_msg); |
ammanvedi | 3:28cd6502dafd | 56 | |
ammanvedi | 1:6c1df6c9be4d | 57 | |
ammanvedi | 1:6c1df6c9be4d | 58 | //send string to xbee HERE |
ammanvedi | 2:1c8d8d728b93 | 59 | if(strlen(new_msg) == 0) |
ammanvedi | 2:1c8d8d728b93 | 60 | { |
ammanvedi | 2:1c8d8d728b93 | 61 | printf("nothing to update, better luck next time! (svr response: %s)\n\r", id); |
ammanvedi | 2:1c8d8d728b93 | 62 | return; |
ammanvedi | 2:1c8d8d728b93 | 63 | }else{ |
ammanvedi | 2:1c8d8d728b93 | 64 | //data was revieved |
ammanvedi | 2:1c8d8d728b93 | 65 | printf("id : %s string: %s (original: %s) \n\r", id, new_msg, str); |
ammanvedi | 2:1c8d8d728b93 | 66 | } |
ammanvedi | 1:6c1df6c9be4d | 67 | |
ammanvedi | 1:6c1df6c9be4d | 68 | char to_send[100]; |
ammanvedi | 1:6c1df6c9be4d | 69 | char* p = to_send; |
ammanvedi | 1:6c1df6c9be4d | 70 | char* r = send_data; |
ammanvedi | 1:6c1df6c9be4d | 71 | while(*r) |
ammanvedi | 1:6c1df6c9be4d | 72 | *p++ = *r++; |
ammanvedi | 1:6c1df6c9be4d | 73 | *p++ = ' '; |
ammanvedi | 1:6c1df6c9be4d | 74 | r = new_msg; |
ammanvedi | 1:6c1df6c9be4d | 75 | while(*r) |
ammanvedi | 1:6c1df6c9be4d | 76 | *p++ = *r++; |
ammanvedi | 3:28cd6502dafd | 77 | *p++ = '\r'; |
ammanvedi | 1:6c1df6c9be4d | 78 | *p = '\0'; |
ammanvedi | 1:6c1df6c9be4d | 79 | |
ammanvedi | 2:1c8d8d728b93 | 80 | char data_buf[50]; |
ammanvedi | 1:6c1df6c9be4d | 81 | xbee.InitFrame(); |
ammanvedi | 1:6c1df6c9be4d | 82 | xbee.SetDestination((unsigned char *)dest_address); |
ammanvedi | 1:6c1df6c9be4d | 83 | xbee.SetPayload(to_send); |
ammanvedi | 3:28cd6502dafd | 84 | printf("sending payload: %s\n\r", to_send); |
ammanvedi | 1:6c1df6c9be4d | 85 | xbee.AssembleFrame(); |
ammanvedi | 1:6c1df6c9be4d | 86 | xbee.SendFrame(); |
ammanvedi | 1:6c1df6c9be4d | 87 | |
ammanvedi | 1:6c1df6c9be4d | 88 | |
ammanvedi | 1:6c1df6c9be4d | 89 | for(int i = 0; i<2; i++) |
ammanvedi | 1:6c1df6c9be4d | 90 | { |
ammanvedi | 1:6c1df6c9be4d | 91 | xbee.ReceiveFrame(data_buf, 500); |
ammanvedi | 1:6c1df6c9be4d | 92 | if(xbee.frameReceived) |
ammanvedi | 1:6c1df6c9be4d | 93 | { |
ammanvedi | 1:6c1df6c9be4d | 94 | xbee.frameReceived = 0; |
ammanvedi | 1:6c1df6c9be4d | 95 | if(xbee.GetType() == TX_STATUS) |
ammanvedi | 1:6c1df6c9be4d | 96 | { |
ammanvedi | 1:6c1df6c9be4d | 97 | if(xbee.GetStatus() == 0) |
ammanvedi | 1:6c1df6c9be4d | 98 | printf("Send success!\n\r"); |
ammanvedi | 1:6c1df6c9be4d | 99 | else |
ammanvedi | 1:6c1df6c9be4d | 100 | printf("Send failed :(\n\r"); |
ammanvedi | 1:6c1df6c9be4d | 101 | } |
ammanvedi | 1:6c1df6c9be4d | 102 | else if (xbee.GetType() == RX_PACKET_64) |
ammanvedi | 1:6c1df6c9be4d | 103 | printf("Received data: %s\n\r", data_buf); |
ammanvedi | 1:6c1df6c9be4d | 104 | } |
ammanvedi | 1:6c1df6c9be4d | 105 | } |
ammanvedi | 3:28cd6502dafd | 106 | |
ammanvedi | 1:6c1df6c9be4d | 107 | } |
ammanvedi | 1:6c1df6c9be4d | 108 | |
ammanvedi | 1:6c1df6c9be4d | 109 | |
ammanvedi | 1:6c1df6c9be4d | 110 | |
ammanvedi | 0:d73af3f5c81d | 111 | |
ammanvedi | 0:d73af3f5c81d | 112 | } |
ammanvedi | 0:d73af3f5c81d | 113 | |
ammanvedi | 1:6c1df6c9be4d | 114 | |
ammanvedi | 1:6c1df6c9be4d | 115 | |
ammanvedi | 0:d73af3f5c81d | 116 | int main () |
ammanvedi | 0:d73af3f5c81d | 117 | { |
ammanvedi | 3:28cd6502dafd | 118 | led_ethernet = 0; |
ammanvedi | 3:28cd6502dafd | 119 | led_socket = 0; |
ammanvedi | 0:d73af3f5c81d | 120 | |
ammanvedi | 0:d73af3f5c81d | 121 | ethernet.init(); // connect with DHCP |
ammanvedi | 0:d73af3f5c81d | 122 | int ret_val = ethernet.connect(); |
ammanvedi | 0:d73af3f5c81d | 123 | |
ammanvedi | 0:d73af3f5c81d | 124 | if (0 == ret_val) { |
ammanvedi | 3:28cd6502dafd | 125 | printf("\n\rIP Address: %s\n\r", ethernet.getIPAddress()); |
ammanvedi | 3:28cd6502dafd | 126 | led_ethernet = 1; |
ammanvedi | 0:d73af3f5c81d | 127 | } else { |
ammanvedi | 0:d73af3f5c81d | 128 | error("ethernet failed to connect: %d.\n\r", ret_val); |
ammanvedi | 0:d73af3f5c81d | 129 | } |
ammanvedi | 0:d73af3f5c81d | 130 | |
ammanvedi | 2:1c8d8d728b93 | 131 | int interval = 5; |
ammanvedi | 0:d73af3f5c81d | 132 | |
ammanvedi | 3:28cd6502dafd | 133 | if(ws.connect()) |
ammanvedi | 3:28cd6502dafd | 134 | { |
ammanvedi | 3:28cd6502dafd | 135 | led_socket = 1; |
ammanvedi | 3:28cd6502dafd | 136 | } |
ammanvedi | 0:d73af3f5c81d | 137 | |
ammanvedi | 1:6c1df6c9be4d | 138 | Timer timer; |
ammanvedi | 1:6c1df6c9be4d | 139 | timer.start(); |
ammanvedi | 2:1c8d8d728b93 | 140 | |
ammanvedi | 2:1c8d8d728b93 | 141 | //every <interval> seconds call to the server to pull updates |
ammanvedi | 0:d73af3f5c81d | 142 | |
ammanvedi | 1:6c1df6c9be4d | 143 | while(true){ |
ammanvedi | 2:1c8d8d728b93 | 144 | if(timer.read() >= interval){ |
ammanvedi | 1:6c1df6c9be4d | 145 | //perform checks |
ammanvedi | 1:6c1df6c9be4d | 146 | pull_updates(); |
ammanvedi | 1:6c1df6c9be4d | 147 | timer.reset(); |
ammanvedi | 1:6c1df6c9be4d | 148 | timer.start(); |
ammanvedi | 0:d73af3f5c81d | 149 | } |
ammanvedi | 1:6c1df6c9be4d | 150 | } |
ammanvedi | 1:6c1df6c9be4d | 151 | |
ammanvedi | 1:6c1df6c9be4d | 152 | //pull_updates(); |
ammanvedi | 0:d73af3f5c81d | 153 | ws.close(); |
ammanvedi | 0:d73af3f5c81d | 154 | |
ammanvedi | 0:d73af3f5c81d | 155 | } |