mini code pour xbee
Dependencies: mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos
Fork of app4Coordo by
main.cpp@3:85025db3fbd1, 2014-02-24 (annotated)
- Committer:
- passelin
- Date:
- Mon Feb 24 18:57:38 2014 +0000
- Revision:
- 3:85025db3fbd1
- Parent:
- 2:5942af2ffe8b
- Child:
- 4:7d7d6e4b6810
config file fonctionnel
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 | 0:ed0e18b7fa30 | 4 | |
passelin | 0:ed0e18b7fa30 | 5 | DigitalOut myled(LED1); |
passelin | 1:568707763458 | 6 | DigitalOut myled2(LED2); |
passelin | 0:ed0e18b7fa30 | 7 | DigitalOut reset(p8); |
passelin | 0:ed0e18b7fa30 | 8 | Serial pc(USBTX, USBRX); |
passelin | 0:ed0e18b7fa30 | 9 | Serial xbee(p13, p14); |
passelin | 0:ed0e18b7fa30 | 10 | |
passelin | 2:5942af2ffe8b | 11 | string test; |
passelin | 2:5942af2ffe8b | 12 | bool trame_ready; |
passelin | 2:5942af2ffe8b | 13 | |
passelin | 3:85025db3fbd1 | 14 | LocalFileSystem local("local"); |
passelin | 3:85025db3fbd1 | 15 | ConfigFile cfg; |
passelin | 3:85025db3fbd1 | 16 | |
passelin | 2:5942af2ffe8b | 17 | enum {STEP_START, STEP_LENGTH, STEP_TYPE, STEP_MAC, STEP_NET, STEP_OPT, STEP_DATA, STEP_CHECK}; |
passelin | 2:5942af2ffe8b | 18 | |
passelin | 3:85025db3fbd1 | 19 | void configInit() |
passelin | 3:85025db3fbd1 | 20 | { |
passelin | 3:85025db3fbd1 | 21 | char *key1 = "PANID"; |
passelin | 3:85025db3fbd1 | 22 | char *key2 = "URL"; |
passelin | 3:85025db3fbd1 | 23 | char value[BUFSIZ]; |
passelin | 3:85025db3fbd1 | 24 | |
passelin | 3:85025db3fbd1 | 25 | // Read a configuration file from a mbed. |
passelin | 3:85025db3fbd1 | 26 | if (!cfg.read("/local/initconf.cfg")) |
passelin | 3:85025db3fbd1 | 27 | { |
passelin | 3:85025db3fbd1 | 28 | error("Failure to read a configuration file.\n"); |
passelin | 3:85025db3fbd1 | 29 | } |
passelin | 3:85025db3fbd1 | 30 | |
passelin | 3:85025db3fbd1 | 31 | /* |
passelin | 3:85025db3fbd1 | 32 | * Get a configuration value. |
passelin | 3:85025db3fbd1 | 33 | */ |
passelin | 3:85025db3fbd1 | 34 | if (cfg.getValue(key1, &value[0], sizeof(value))) |
passelin | 3:85025db3fbd1 | 35 | { |
passelin | 3:85025db3fbd1 | 36 | printf("'%s'='%s'\n", key1, value); |
passelin | 3:85025db3fbd1 | 37 | } |
passelin | 3:85025db3fbd1 | 38 | |
passelin | 3:85025db3fbd1 | 39 | if (cfg.getValue(key2, &value[0], sizeof(value))) |
passelin | 3:85025db3fbd1 | 40 | { |
passelin | 3:85025db3fbd1 | 41 | printf("'%s'='%s'\n", key2, value); |
passelin | 3:85025db3fbd1 | 42 | } |
passelin | 3:85025db3fbd1 | 43 | } |
passelin | 3:85025db3fbd1 | 44 | |
passelin | 2:5942af2ffe8b | 45 | void xbee_init() |
passelin | 0:ed0e18b7fa30 | 46 | { |
passelin | 0:ed0e18b7fa30 | 47 | reset = 0; |
passelin | 1:568707763458 | 48 | wait_ms(400); |
passelin | 1:568707763458 | 49 | reset = 1; |
passelin | 2:5942af2ffe8b | 50 | } |
passelin | 2:5942af2ffe8b | 51 | |
passelin | 2:5942af2ffe8b | 52 | void xbee_receive() |
passelin | 2:5942af2ffe8b | 53 | { |
passelin | 2:5942af2ffe8b | 54 | // TODO: analyze trame before sending to PC (or WebSocket) |
passelin | 2:5942af2ffe8b | 55 | static int state = STEP_START; |
passelin | 2:5942af2ffe8b | 56 | |
passelin | 2:5942af2ffe8b | 57 | char data = xbee.getc(); |
passelin | 2:5942af2ffe8b | 58 | |
passelin | 2:5942af2ffe8b | 59 | static int length_i; |
passelin | 2:5942af2ffe8b | 60 | static int length; |
passelin | 2:5942af2ffe8b | 61 | |
passelin | 2:5942af2ffe8b | 62 | static int mac_i; |
passelin | 2:5942af2ffe8b | 63 | |
passelin | 2:5942af2ffe8b | 64 | static int net_i; |
passelin | 2:5942af2ffe8b | 65 | |
passelin | 2:5942af2ffe8b | 66 | static string msg; |
passelin | 2:5942af2ffe8b | 67 | |
passelin | 2:5942af2ffe8b | 68 | switch(state) |
passelin | 2:5942af2ffe8b | 69 | { |
passelin | 2:5942af2ffe8b | 70 | case STEP_START: if(data == 0x7E) |
passelin | 2:5942af2ffe8b | 71 | { |
passelin | 2:5942af2ffe8b | 72 | state = STEP_LENGTH; |
passelin | 2:5942af2ffe8b | 73 | length_i = 0; |
passelin | 2:5942af2ffe8b | 74 | length = 0; |
passelin | 2:5942af2ffe8b | 75 | msg = "xx"; |
passelin | 2:5942af2ffe8b | 76 | } |
passelin | 2:5942af2ffe8b | 77 | break; |
passelin | 2:5942af2ffe8b | 78 | |
passelin | 2:5942af2ffe8b | 79 | case STEP_LENGTH: length += data; |
passelin | 2:5942af2ffe8b | 80 | length_i++; |
passelin | 2:5942af2ffe8b | 81 | if(length_i == 2) |
passelin | 2:5942af2ffe8b | 82 | { |
passelin | 2:5942af2ffe8b | 83 | state = STEP_TYPE; |
passelin | 2:5942af2ffe8b | 84 | length -= 12; |
passelin | 2:5942af2ffe8b | 85 | } |
passelin | 2:5942af2ffe8b | 86 | break; |
passelin | 2:5942af2ffe8b | 87 | |
passelin | 2:5942af2ffe8b | 88 | case STEP_TYPE: if(data == 0x90) //Receive packet |
passelin | 2:5942af2ffe8b | 89 | { |
passelin | 2:5942af2ffe8b | 90 | state = STEP_MAC; |
passelin | 2:5942af2ffe8b | 91 | mac_i = 0; |
passelin | 2:5942af2ffe8b | 92 | } |
passelin | 2:5942af2ffe8b | 93 | else |
passelin | 2:5942af2ffe8b | 94 | { |
passelin | 2:5942af2ffe8b | 95 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 96 | } |
passelin | 2:5942af2ffe8b | 97 | break; |
passelin | 2:5942af2ffe8b | 98 | |
passelin | 2:5942af2ffe8b | 99 | case STEP_MAC: mac_i++; |
passelin | 2:5942af2ffe8b | 100 | if(mac_i == 8) |
passelin | 2:5942af2ffe8b | 101 | { |
passelin | 2:5942af2ffe8b | 102 | state = STEP_NET; |
passelin | 2:5942af2ffe8b | 103 | net_i = 0; |
passelin | 2:5942af2ffe8b | 104 | } |
passelin | 2:5942af2ffe8b | 105 | break; |
passelin | 2:5942af2ffe8b | 106 | |
passelin | 2:5942af2ffe8b | 107 | case STEP_NET: net_i++; |
passelin | 2:5942af2ffe8b | 108 | if(net_i == 2) |
passelin | 2:5942af2ffe8b | 109 | { |
passelin | 2:5942af2ffe8b | 110 | state = STEP_OPT; |
passelin | 2:5942af2ffe8b | 111 | } |
passelin | 2:5942af2ffe8b | 112 | break; |
passelin | 2:5942af2ffe8b | 113 | |
passelin | 2:5942af2ffe8b | 114 | case STEP_OPT: if(data == 0x01) |
passelin | 2:5942af2ffe8b | 115 | { |
passelin | 2:5942af2ffe8b | 116 | state = STEP_DATA; |
passelin | 2:5942af2ffe8b | 117 | } |
passelin | 2:5942af2ffe8b | 118 | else |
passelin | 2:5942af2ffe8b | 119 | { |
passelin | 2:5942af2ffe8b | 120 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 121 | } |
passelin | 2:5942af2ffe8b | 122 | break; |
passelin | 2:5942af2ffe8b | 123 | |
passelin | 2:5942af2ffe8b | 124 | case STEP_DATA: length--; |
passelin | 2:5942af2ffe8b | 125 | msg += data; |
passelin | 2:5942af2ffe8b | 126 | if(length == 0) |
passelin | 2:5942af2ffe8b | 127 | { |
passelin | 2:5942af2ffe8b | 128 | state = STEP_CHECK; |
passelin | 2:5942af2ffe8b | 129 | //pc.printf(msg.c_str()); |
passelin | 2:5942af2ffe8b | 130 | test = msg.substr(2); |
passelin | 2:5942af2ffe8b | 131 | trame_ready = true; |
passelin | 2:5942af2ffe8b | 132 | } |
passelin | 2:5942af2ffe8b | 133 | break; |
passelin | 2:5942af2ffe8b | 134 | |
passelin | 2:5942af2ffe8b | 135 | case STEP_CHECK: //check CS |
passelin | 2:5942af2ffe8b | 136 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 137 | break; |
passelin | 2:5942af2ffe8b | 138 | |
passelin | 2:5942af2ffe8b | 139 | |
passelin | 2:5942af2ffe8b | 140 | } |
passelin | 2:5942af2ffe8b | 141 | |
passelin | 2:5942af2ffe8b | 142 | } |
passelin | 2:5942af2ffe8b | 143 | |
passelin | 2:5942af2ffe8b | 144 | int main() |
passelin | 2:5942af2ffe8b | 145 | { |
passelin | 3:85025db3fbd1 | 146 | |
passelin | 3:85025db3fbd1 | 147 | configInit(); |
passelin | 2:5942af2ffe8b | 148 | xbee_init(); |
passelin | 2:5942af2ffe8b | 149 | |
passelin | 2:5942af2ffe8b | 150 | |
passelin | 2:5942af2ffe8b | 151 | myled = 1; |
passelin | 2:5942af2ffe8b | 152 | myled2 = 1; |
passelin | 2:5942af2ffe8b | 153 | |
passelin | 2:5942af2ffe8b | 154 | trame_ready = false; |
passelin | 2:5942af2ffe8b | 155 | |
passelin | 0:ed0e18b7fa30 | 156 | while(1) |
passelin | 0:ed0e18b7fa30 | 157 | { |
passelin | 0:ed0e18b7fa30 | 158 | if(xbee.readable()) |
passelin | 0:ed0e18b7fa30 | 159 | { |
passelin | 2:5942af2ffe8b | 160 | xbee_receive(); |
passelin | 2:5942af2ffe8b | 161 | |
passelin | 2:5942af2ffe8b | 162 | //pc.printf("%x ", xbee.getc()); |
passelin | 2:5942af2ffe8b | 163 | //pc.putc(xbee.getc()); |
passelin | 1:568707763458 | 164 | myled2 = ! myled2; |
passelin | 0:ed0e18b7fa30 | 165 | } |
passelin | 2:5942af2ffe8b | 166 | |
passelin | 0:ed0e18b7fa30 | 167 | if(pc.readable()) |
passelin | 0:ed0e18b7fa30 | 168 | { |
passelin | 1:568707763458 | 169 | xbee.putc(pc.getc()); |
passelin | 1:568707763458 | 170 | myled = ! myled; |
passelin | 0:ed0e18b7fa30 | 171 | } |
passelin | 2:5942af2ffe8b | 172 | |
passelin | 2:5942af2ffe8b | 173 | if(trame_ready == true) |
passelin | 2:5942af2ffe8b | 174 | { |
passelin | 2:5942af2ffe8b | 175 | pc.printf(test.c_str()); |
passelin | 2:5942af2ffe8b | 176 | trame_ready = false; |
passelin | 2:5942af2ffe8b | 177 | } |
passelin | 0:ed0e18b7fa30 | 178 | } |
passelin | 0:ed0e18b7fa30 | 179 | } |