mini code pour xbee

Dependencies:   mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos

Fork of app4Coordo by APP Team

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?

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