mini code pour xbee

Dependencies:   mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos

Fork of app4Coordo by APP Team

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?

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 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 }