mini code pour xbee
Dependencies: mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos
Fork of app4Coordo by
main.cpp@4:7d7d6e4b6810, 2014-02-24 (annotated)
- Committer:
- passelin
- Date:
- Mon Feb 24 23:25:17 2014 +0000
- Revision:
- 4:7d7d6e4b6810
- Parent:
- 3:85025db3fbd1
- Child:
- 5:bf1d3d99cfe9
update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
passelin | 0:ed0e18b7fa30 | 1 | #include "mbed.h" |
passelin | 2:5942af2ffe8b | 2 | #include <string> |
passelin | 3:85025db3fbd1 | 3 | #include "ConfigFile.h" |
passelin | 4:7d7d6e4b6810 | 4 | #include "EthernetInterface.h" |
passelin | 4:7d7d6e4b6810 | 5 | #include "Websocket.h" |
passelin | 0:ed0e18b7fa30 | 6 | |
passelin | 4:7d7d6e4b6810 | 7 | // Pins |
passelin | 0:ed0e18b7fa30 | 8 | DigitalOut myled(LED1); |
passelin | 1:568707763458 | 9 | DigitalOut myled2(LED2); |
passelin | 0:ed0e18b7fa30 | 10 | DigitalOut reset(p8); |
passelin | 4:7d7d6e4b6810 | 11 | |
passelin | 4:7d7d6e4b6810 | 12 | // Serial COMs |
passelin | 0:ed0e18b7fa30 | 13 | Serial pc(USBTX, USBRX); |
passelin | 0:ed0e18b7fa30 | 14 | Serial xbee(p13, p14); |
passelin | 0:ed0e18b7fa30 | 15 | |
passelin | 4:7d7d6e4b6810 | 16 | // Variables |
passelin | 2:5942af2ffe8b | 17 | string test; |
passelin | 2:5942af2ffe8b | 18 | bool trame_ready; |
passelin | 2:5942af2ffe8b | 19 | |
passelin | 4:7d7d6e4b6810 | 20 | // Ethernet interface |
passelin | 4:7d7d6e4b6810 | 21 | EthernetInterface eth; |
passelin | 4:7d7d6e4b6810 | 22 | |
passelin | 4:7d7d6e4b6810 | 23 | // view @ http://sockets.mbed.org/demo/viewer |
passelin | 4:7d7d6e4b6810 | 24 | Websocket ws("ws://89.16.167.192:443/ws/trixrabbit/wo"); |
passelin | 4:7d7d6e4b6810 | 25 | |
passelin | 4:7d7d6e4b6810 | 26 | // Configuration file |
passelin | 3:85025db3fbd1 | 27 | LocalFileSystem local("local"); |
passelin | 3:85025db3fbd1 | 28 | ConfigFile cfg; |
passelin | 3:85025db3fbd1 | 29 | |
passelin | 4:7d7d6e4b6810 | 30 | // State machine ENUM |
passelin | 2:5942af2ffe8b | 31 | enum {STEP_START, STEP_LENGTH, STEP_TYPE, STEP_MAC, STEP_NET, STEP_OPT, STEP_DATA, STEP_CHECK}; |
passelin | 2:5942af2ffe8b | 32 | |
passelin | 4:7d7d6e4b6810 | 33 | |
passelin | 3:85025db3fbd1 | 34 | void configInit() |
passelin | 3:85025db3fbd1 | 35 | { |
passelin | 3:85025db3fbd1 | 36 | char *key1 = "PANID"; |
passelin | 3:85025db3fbd1 | 37 | char *key2 = "URL"; |
passelin | 3:85025db3fbd1 | 38 | char value[BUFSIZ]; |
passelin | 3:85025db3fbd1 | 39 | |
passelin | 3:85025db3fbd1 | 40 | // Read a configuration file from a mbed. |
passelin | 3:85025db3fbd1 | 41 | if (!cfg.read("/local/initconf.cfg")) |
passelin | 3:85025db3fbd1 | 42 | { |
passelin | 3:85025db3fbd1 | 43 | error("Failure to read a configuration file.\n"); |
passelin | 3:85025db3fbd1 | 44 | } |
passelin | 3:85025db3fbd1 | 45 | |
passelin | 3:85025db3fbd1 | 46 | /* |
passelin | 3:85025db3fbd1 | 47 | * Get a configuration value. |
passelin | 3:85025db3fbd1 | 48 | */ |
passelin | 3:85025db3fbd1 | 49 | if (cfg.getValue(key1, &value[0], sizeof(value))) |
passelin | 3:85025db3fbd1 | 50 | { |
passelin | 4:7d7d6e4b6810 | 51 | pc.printf("'%s'='%s'\n", key1, value); |
passelin | 3:85025db3fbd1 | 52 | } |
passelin | 3:85025db3fbd1 | 53 | |
passelin | 3:85025db3fbd1 | 54 | if (cfg.getValue(key2, &value[0], sizeof(value))) |
passelin | 3:85025db3fbd1 | 55 | { |
passelin | 4:7d7d6e4b6810 | 56 | pc.printf("'%s'='%s'\n", key2, value); |
passelin | 3:85025db3fbd1 | 57 | } |
passelin | 3:85025db3fbd1 | 58 | } |
passelin | 3:85025db3fbd1 | 59 | |
passelin | 4:7d7d6e4b6810 | 60 | void eth_init() |
passelin | 4:7d7d6e4b6810 | 61 | { |
passelin | 4:7d7d6e4b6810 | 62 | eth.init(); |
passelin | 4:7d7d6e4b6810 | 63 | eth.connect(); |
passelin | 4:7d7d6e4b6810 | 64 | |
passelin | 4:7d7d6e4b6810 | 65 | pc.printf("IP Address is %s\n", eth.getIPAddress()); |
passelin | 4:7d7d6e4b6810 | 66 | |
passelin | 4:7d7d6e4b6810 | 67 | wait(2); |
passelin | 4:7d7d6e4b6810 | 68 | |
passelin | 4:7d7d6e4b6810 | 69 | if(!ws.connect()) |
passelin | 4:7d7d6e4b6810 | 70 | { |
passelin | 4:7d7d6e4b6810 | 71 | error("Failure establish connection to the WebSocket.\n"); |
passelin | 4:7d7d6e4b6810 | 72 | } |
passelin | 4:7d7d6e4b6810 | 73 | |
passelin | 4:7d7d6e4b6810 | 74 | /*while(1) { |
passelin | 4:7d7d6e4b6810 | 75 | ws.send("CAFE CAFE CFAE"); |
passelin | 4:7d7d6e4b6810 | 76 | wait(1.0); |
passelin | 4:7d7d6e4b6810 | 77 | }*/ |
passelin | 4:7d7d6e4b6810 | 78 | |
passelin | 4:7d7d6e4b6810 | 79 | |
passelin | 4:7d7d6e4b6810 | 80 | } |
passelin | 4:7d7d6e4b6810 | 81 | |
passelin | 2:5942af2ffe8b | 82 | void xbee_init() |
passelin | 0:ed0e18b7fa30 | 83 | { |
passelin | 0:ed0e18b7fa30 | 84 | reset = 0; |
passelin | 1:568707763458 | 85 | wait_ms(400); |
passelin | 1:568707763458 | 86 | reset = 1; |
passelin | 2:5942af2ffe8b | 87 | } |
passelin | 2:5942af2ffe8b | 88 | |
passelin | 2:5942af2ffe8b | 89 | void xbee_receive() |
passelin | 2:5942af2ffe8b | 90 | { |
passelin | 2:5942af2ffe8b | 91 | static int state = STEP_START; |
passelin | 2:5942af2ffe8b | 92 | |
passelin | 2:5942af2ffe8b | 93 | char data = xbee.getc(); |
passelin | 2:5942af2ffe8b | 94 | |
passelin | 2:5942af2ffe8b | 95 | static int length_i; |
passelin | 2:5942af2ffe8b | 96 | static int length; |
passelin | 2:5942af2ffe8b | 97 | |
passelin | 2:5942af2ffe8b | 98 | static int mac_i; |
passelin | 2:5942af2ffe8b | 99 | |
passelin | 2:5942af2ffe8b | 100 | static int net_i; |
passelin | 2:5942af2ffe8b | 101 | |
passelin | 2:5942af2ffe8b | 102 | static string msg; |
passelin | 2:5942af2ffe8b | 103 | |
passelin | 2:5942af2ffe8b | 104 | switch(state) |
passelin | 2:5942af2ffe8b | 105 | { |
passelin | 2:5942af2ffe8b | 106 | case STEP_START: if(data == 0x7E) |
passelin | 2:5942af2ffe8b | 107 | { |
passelin | 2:5942af2ffe8b | 108 | state = STEP_LENGTH; |
passelin | 2:5942af2ffe8b | 109 | length_i = 0; |
passelin | 2:5942af2ffe8b | 110 | length = 0; |
passelin | 2:5942af2ffe8b | 111 | msg = "xx"; |
passelin | 2:5942af2ffe8b | 112 | } |
passelin | 2:5942af2ffe8b | 113 | break; |
passelin | 2:5942af2ffe8b | 114 | |
passelin | 2:5942af2ffe8b | 115 | case STEP_LENGTH: length += data; |
passelin | 2:5942af2ffe8b | 116 | length_i++; |
passelin | 2:5942af2ffe8b | 117 | if(length_i == 2) |
passelin | 2:5942af2ffe8b | 118 | { |
passelin | 2:5942af2ffe8b | 119 | state = STEP_TYPE; |
passelin | 2:5942af2ffe8b | 120 | length -= 12; |
passelin | 2:5942af2ffe8b | 121 | } |
passelin | 2:5942af2ffe8b | 122 | break; |
passelin | 2:5942af2ffe8b | 123 | |
passelin | 2:5942af2ffe8b | 124 | case STEP_TYPE: if(data == 0x90) //Receive packet |
passelin | 2:5942af2ffe8b | 125 | { |
passelin | 2:5942af2ffe8b | 126 | state = STEP_MAC; |
passelin | 2:5942af2ffe8b | 127 | mac_i = 0; |
passelin | 2:5942af2ffe8b | 128 | } |
passelin | 2:5942af2ffe8b | 129 | else |
passelin | 2:5942af2ffe8b | 130 | { |
passelin | 2:5942af2ffe8b | 131 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 132 | } |
passelin | 2:5942af2ffe8b | 133 | break; |
passelin | 2:5942af2ffe8b | 134 | |
passelin | 2:5942af2ffe8b | 135 | case STEP_MAC: mac_i++; |
passelin | 2:5942af2ffe8b | 136 | if(mac_i == 8) |
passelin | 2:5942af2ffe8b | 137 | { |
passelin | 2:5942af2ffe8b | 138 | state = STEP_NET; |
passelin | 2:5942af2ffe8b | 139 | net_i = 0; |
passelin | 2:5942af2ffe8b | 140 | } |
passelin | 2:5942af2ffe8b | 141 | break; |
passelin | 2:5942af2ffe8b | 142 | |
passelin | 2:5942af2ffe8b | 143 | case STEP_NET: net_i++; |
passelin | 2:5942af2ffe8b | 144 | if(net_i == 2) |
passelin | 2:5942af2ffe8b | 145 | { |
passelin | 2:5942af2ffe8b | 146 | state = STEP_OPT; |
passelin | 2:5942af2ffe8b | 147 | } |
passelin | 2:5942af2ffe8b | 148 | break; |
passelin | 2:5942af2ffe8b | 149 | |
passelin | 2:5942af2ffe8b | 150 | case STEP_OPT: if(data == 0x01) |
passelin | 2:5942af2ffe8b | 151 | { |
passelin | 2:5942af2ffe8b | 152 | state = STEP_DATA; |
passelin | 2:5942af2ffe8b | 153 | } |
passelin | 2:5942af2ffe8b | 154 | else |
passelin | 2:5942af2ffe8b | 155 | { |
passelin | 2:5942af2ffe8b | 156 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 157 | } |
passelin | 2:5942af2ffe8b | 158 | break; |
passelin | 2:5942af2ffe8b | 159 | |
passelin | 2:5942af2ffe8b | 160 | case STEP_DATA: length--; |
passelin | 2:5942af2ffe8b | 161 | msg += data; |
passelin | 2:5942af2ffe8b | 162 | if(length == 0) |
passelin | 2:5942af2ffe8b | 163 | { |
passelin | 2:5942af2ffe8b | 164 | state = STEP_CHECK; |
passelin | 2:5942af2ffe8b | 165 | //pc.printf(msg.c_str()); |
passelin | 2:5942af2ffe8b | 166 | test = msg.substr(2); |
passelin | 2:5942af2ffe8b | 167 | trame_ready = true; |
passelin | 2:5942af2ffe8b | 168 | } |
passelin | 2:5942af2ffe8b | 169 | break; |
passelin | 2:5942af2ffe8b | 170 | |
passelin | 2:5942af2ffe8b | 171 | case STEP_CHECK: //check CS |
passelin | 2:5942af2ffe8b | 172 | state = STEP_START; |
passelin | 4:7d7d6e4b6810 | 173 | break; |
passelin | 2:5942af2ffe8b | 174 | } |
passelin | 2:5942af2ffe8b | 175 | |
passelin | 2:5942af2ffe8b | 176 | } |
passelin | 2:5942af2ffe8b | 177 | |
passelin | 2:5942af2ffe8b | 178 | int main() |
passelin | 2:5942af2ffe8b | 179 | { |
passelin | 3:85025db3fbd1 | 180 | |
passelin | 3:85025db3fbd1 | 181 | configInit(); |
passelin | 4:7d7d6e4b6810 | 182 | eth_init(); |
passelin | 2:5942af2ffe8b | 183 | xbee_init(); |
passelin | 2:5942af2ffe8b | 184 | |
passelin | 2:5942af2ffe8b | 185 | |
passelin | 2:5942af2ffe8b | 186 | myled = 1; |
passelin | 2:5942af2ffe8b | 187 | myled2 = 1; |
passelin | 2:5942af2ffe8b | 188 | |
passelin | 2:5942af2ffe8b | 189 | trame_ready = false; |
passelin | 2:5942af2ffe8b | 190 | |
passelin | 0:ed0e18b7fa30 | 191 | while(1) |
passelin | 0:ed0e18b7fa30 | 192 | { |
passelin | 0:ed0e18b7fa30 | 193 | if(xbee.readable()) |
passelin | 0:ed0e18b7fa30 | 194 | { |
passelin | 2:5942af2ffe8b | 195 | xbee_receive(); |
passelin | 1:568707763458 | 196 | myled2 = ! myled2; |
passelin | 0:ed0e18b7fa30 | 197 | } |
passelin | 2:5942af2ffe8b | 198 | |
passelin | 0:ed0e18b7fa30 | 199 | if(pc.readable()) |
passelin | 0:ed0e18b7fa30 | 200 | { |
passelin | 1:568707763458 | 201 | xbee.putc(pc.getc()); |
passelin | 1:568707763458 | 202 | myled = ! myled; |
passelin | 0:ed0e18b7fa30 | 203 | } |
passelin | 2:5942af2ffe8b | 204 | |
passelin | 2:5942af2ffe8b | 205 | if(trame_ready == true) |
passelin | 2:5942af2ffe8b | 206 | { |
passelin | 4:7d7d6e4b6810 | 207 | //test = "TESTESTESTESTEST"; |
passelin | 2:5942af2ffe8b | 208 | pc.printf(test.c_str()); |
passelin | 4:7d7d6e4b6810 | 209 | |
passelin | 4:7d7d6e4b6810 | 210 | char *buffer =new char[test.size()+1]; |
passelin | 4:7d7d6e4b6810 | 211 | buffer[test.size()]=0; |
passelin | 4:7d7d6e4b6810 | 212 | memcpy(buffer,test.c_str(),test.size()); |
passelin | 4:7d7d6e4b6810 | 213 | |
passelin | 4:7d7d6e4b6810 | 214 | ws.send(buffer); |
passelin | 4:7d7d6e4b6810 | 215 | |
passelin | 2:5942af2ffe8b | 216 | trame_ready = false; |
passelin | 2:5942af2ffe8b | 217 | } |
passelin | 0:ed0e18b7fa30 | 218 | } |
passelin | 4:7d7d6e4b6810 | 219 | |
passelin | 4:7d7d6e4b6810 | 220 | //ws.close(); |
passelin | 4:7d7d6e4b6810 | 221 | // eth.disconnect(); |
passelin | 0:ed0e18b7fa30 | 222 | } |