mini code pour xbee

Dependencies:   mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos

Fork of app4Coordo by APP Team

Committer:
passelin
Date:
Tue Feb 25 04:35:11 2014 +0000
Revision:
5:bf1d3d99cfe9
Parent:
4:7d7d6e4b6810
Child:
6:2ab1318e2b02
ca marche

Who changed what in which revision?

UserRevisionLine numberNew 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 5:bf1d3d99cfe9 17 char url_s[BUFSIZ];
passelin 5:bf1d3d99cfe9 18 char dataBuf[20];
passelin 5:bf1d3d99cfe9 19 int dataBuf_i;
passelin 2:5942af2ffe8b 20 bool trame_ready;
passelin 2:5942af2ffe8b 21
passelin 4:7d7d6e4b6810 22 // Ethernet interface
passelin 4:7d7d6e4b6810 23 EthernetInterface eth;
passelin 4:7d7d6e4b6810 24
passelin 4:7d7d6e4b6810 25 // Configuration file
passelin 3:85025db3fbd1 26 LocalFileSystem local("local");
passelin 3:85025db3fbd1 27 ConfigFile cfg;
passelin 3:85025db3fbd1 28
passelin 4:7d7d6e4b6810 29 // State machine ENUM
passelin 2:5942af2ffe8b 30 enum {STEP_START, STEP_LENGTH, STEP_TYPE, STEP_MAC, STEP_NET, STEP_OPT, STEP_DATA, STEP_CHECK};
passelin 2:5942af2ffe8b 31
passelin 3:85025db3fbd1 32 void configInit()
passelin 3:85025db3fbd1 33 {
passelin 3:85025db3fbd1 34 char *key1 = "PANID";
passelin 3:85025db3fbd1 35 char *key2 = "URL";
passelin 3:85025db3fbd1 36 char value[BUFSIZ];
passelin 3:85025db3fbd1 37
passelin 3:85025db3fbd1 38 // Read a configuration file from a mbed.
passelin 3:85025db3fbd1 39 if (!cfg.read("/local/initconf.cfg"))
passelin 3:85025db3fbd1 40 {
passelin 5:bf1d3d99cfe9 41 error("Failure to read a configuration file.\n\r");
passelin 3:85025db3fbd1 42 }
passelin 3:85025db3fbd1 43
passelin 3:85025db3fbd1 44 /*
passelin 3:85025db3fbd1 45 * Get a configuration value.
passelin 3:85025db3fbd1 46 */
passelin 3:85025db3fbd1 47 if (cfg.getValue(key1, &value[0], sizeof(value)))
passelin 3:85025db3fbd1 48 {
passelin 5:bf1d3d99cfe9 49 pc.printf("'%s'='%s'\n\r", key1, value);
passelin 3:85025db3fbd1 50 }
passelin 3:85025db3fbd1 51
passelin 3:85025db3fbd1 52 if (cfg.getValue(key2, &value[0], sizeof(value)))
passelin 3:85025db3fbd1 53 {
passelin 5:bf1d3d99cfe9 54 memcpy(url_s,value,BUFSIZ);
passelin 3:85025db3fbd1 55 }
passelin 3:85025db3fbd1 56 }
passelin 3:85025db3fbd1 57
passelin 5:bf1d3d99cfe9 58 void eth_ws_init(Websocket* ws)
passelin 4:7d7d6e4b6810 59 {
passelin 4:7d7d6e4b6810 60 eth.init();
passelin 4:7d7d6e4b6810 61 eth.connect();
passelin 4:7d7d6e4b6810 62
passelin 5:bf1d3d99cfe9 63 pc.printf("IP Address is %s\n\r", eth.getIPAddress());
passelin 4:7d7d6e4b6810 64
passelin 4:7d7d6e4b6810 65 wait(2);
passelin 4:7d7d6e4b6810 66
passelin 5:bf1d3d99cfe9 67 if(!ws->connect())
passelin 4:7d7d6e4b6810 68 {
passelin 5:bf1d3d99cfe9 69 error("Failure establish connection to the WebSocket.\n\r");
passelin 4:7d7d6e4b6810 70 }
passelin 4:7d7d6e4b6810 71 }
passelin 4:7d7d6e4b6810 72
passelin 2:5942af2ffe8b 73 void xbee_init()
passelin 0:ed0e18b7fa30 74 {
passelin 0:ed0e18b7fa30 75 reset = 0;
passelin 1:568707763458 76 wait_ms(400);
passelin 1:568707763458 77 reset = 1;
passelin 2:5942af2ffe8b 78 }
passelin 2:5942af2ffe8b 79
passelin 2:5942af2ffe8b 80 void xbee_receive()
passelin 2:5942af2ffe8b 81 {
passelin 2:5942af2ffe8b 82 static int state = STEP_START;
passelin 2:5942af2ffe8b 83
passelin 2:5942af2ffe8b 84 char data = xbee.getc();
passelin 2:5942af2ffe8b 85
passelin 2:5942af2ffe8b 86 static int length_i;
passelin 5:bf1d3d99cfe9 87 static int length;
passelin 5:bf1d3d99cfe9 88 static int mac_i;
passelin 2:5942af2ffe8b 89 static int net_i;
passelin 2:5942af2ffe8b 90
passelin 2:5942af2ffe8b 91 switch(state)
passelin 2:5942af2ffe8b 92 {
passelin 2:5942af2ffe8b 93 case STEP_START: if(data == 0x7E)
passelin 2:5942af2ffe8b 94 {
passelin 2:5942af2ffe8b 95 state = STEP_LENGTH;
passelin 2:5942af2ffe8b 96 length_i = 0;
passelin 2:5942af2ffe8b 97 length = 0;
passelin 5:bf1d3d99cfe9 98 dataBuf_i = 0;
passelin 2:5942af2ffe8b 99 }
passelin 2:5942af2ffe8b 100 break;
passelin 2:5942af2ffe8b 101
passelin 2:5942af2ffe8b 102 case STEP_LENGTH: length += data;
passelin 2:5942af2ffe8b 103 length_i++;
passelin 2:5942af2ffe8b 104 if(length_i == 2)
passelin 2:5942af2ffe8b 105 {
passelin 2:5942af2ffe8b 106 state = STEP_TYPE;
passelin 2:5942af2ffe8b 107 length -= 12;
passelin 2:5942af2ffe8b 108 }
passelin 2:5942af2ffe8b 109 break;
passelin 2:5942af2ffe8b 110
passelin 2:5942af2ffe8b 111 case STEP_TYPE: if(data == 0x90) //Receive packet
passelin 2:5942af2ffe8b 112 {
passelin 2:5942af2ffe8b 113 state = STEP_MAC;
passelin 2:5942af2ffe8b 114 mac_i = 0;
passelin 2:5942af2ffe8b 115 }
passelin 2:5942af2ffe8b 116 else
passelin 2:5942af2ffe8b 117 {
passelin 2:5942af2ffe8b 118 state = STEP_START;
passelin 2:5942af2ffe8b 119 }
passelin 2:5942af2ffe8b 120 break;
passelin 2:5942af2ffe8b 121
passelin 2:5942af2ffe8b 122 case STEP_MAC: mac_i++;
passelin 2:5942af2ffe8b 123 if(mac_i == 8)
passelin 2:5942af2ffe8b 124 {
passelin 2:5942af2ffe8b 125 state = STEP_NET;
passelin 2:5942af2ffe8b 126 net_i = 0;
passelin 2:5942af2ffe8b 127 }
passelin 2:5942af2ffe8b 128 break;
passelin 2:5942af2ffe8b 129
passelin 2:5942af2ffe8b 130 case STEP_NET: net_i++;
passelin 2:5942af2ffe8b 131 if(net_i == 2)
passelin 2:5942af2ffe8b 132 {
passelin 2:5942af2ffe8b 133 state = STEP_OPT;
passelin 2:5942af2ffe8b 134 }
passelin 2:5942af2ffe8b 135 break;
passelin 2:5942af2ffe8b 136
passelin 2:5942af2ffe8b 137 case STEP_OPT: if(data == 0x01)
passelin 2:5942af2ffe8b 138 {
passelin 2:5942af2ffe8b 139 state = STEP_DATA;
passelin 2:5942af2ffe8b 140 }
passelin 2:5942af2ffe8b 141 else
passelin 2:5942af2ffe8b 142 {
passelin 2:5942af2ffe8b 143 state = STEP_START;
passelin 2:5942af2ffe8b 144 }
passelin 2:5942af2ffe8b 145 break;
passelin 2:5942af2ffe8b 146
passelin 2:5942af2ffe8b 147 case STEP_DATA: length--;
passelin 5:bf1d3d99cfe9 148 dataBuf[dataBuf_i] = data;
passelin 5:bf1d3d99cfe9 149 dataBuf_i++;
passelin 2:5942af2ffe8b 150 if(length == 0)
passelin 2:5942af2ffe8b 151 {
passelin 5:bf1d3d99cfe9 152 dataBuf[dataBuf_i] = '\0';
passelin 2:5942af2ffe8b 153 state = STEP_CHECK;
passelin 2:5942af2ffe8b 154 trame_ready = true;
passelin 2:5942af2ffe8b 155 }
passelin 2:5942af2ffe8b 156 break;
passelin 2:5942af2ffe8b 157
passelin 2:5942af2ffe8b 158 case STEP_CHECK: //check CS
passelin 2:5942af2ffe8b 159 state = STEP_START;
passelin 4:7d7d6e4b6810 160 break;
passelin 2:5942af2ffe8b 161 }
passelin 2:5942af2ffe8b 162
passelin 2:5942af2ffe8b 163 }
passelin 2:5942af2ffe8b 164
passelin 2:5942af2ffe8b 165 int main()
passelin 2:5942af2ffe8b 166 {
passelin 3:85025db3fbd1 167
passelin 3:85025db3fbd1 168 configInit();
passelin 5:bf1d3d99cfe9 169
passelin 5:bf1d3d99cfe9 170 Websocket ws(url_s);
passelin 5:bf1d3d99cfe9 171 eth_ws_init(&ws);
passelin 5:bf1d3d99cfe9 172
passelin 2:5942af2ffe8b 173 xbee_init();
passelin 2:5942af2ffe8b 174
passelin 2:5942af2ffe8b 175
passelin 2:5942af2ffe8b 176 myled = 1;
passelin 2:5942af2ffe8b 177 myled2 = 1;
passelin 2:5942af2ffe8b 178
passelin 2:5942af2ffe8b 179 trame_ready = false;
passelin 2:5942af2ffe8b 180
passelin 0:ed0e18b7fa30 181 while(1)
passelin 0:ed0e18b7fa30 182 {
passelin 0:ed0e18b7fa30 183 if(xbee.readable())
passelin 0:ed0e18b7fa30 184 {
passelin 2:5942af2ffe8b 185 xbee_receive();
passelin 1:568707763458 186 myled2 = ! myled2;
passelin 0:ed0e18b7fa30 187 }
passelin 5:bf1d3d99cfe9 188
passelin 2:5942af2ffe8b 189 if(trame_ready == true)
passelin 5:bf1d3d99cfe9 190 {
passelin 5:bf1d3d99cfe9 191 ws.send(dataBuf);
passelin 4:7d7d6e4b6810 192
passelin 5:bf1d3d99cfe9 193 //pc.printf(dataBuf);
passelin 5:bf1d3d99cfe9 194 //pc.printf("\n\r");
passelin 2:5942af2ffe8b 195 trame_ready = false;
passelin 2:5942af2ffe8b 196 }
passelin 0:ed0e18b7fa30 197 }
passelin 4:7d7d6e4b6810 198
passelin 4:7d7d6e4b6810 199 //ws.close();
passelin 4:7d7d6e4b6810 200 // eth.disconnect();
passelin 0:ed0e18b7fa30 201 }