mini code pour xbee

Dependencies:   mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos

Fork of app4Coordo by APP Team

Committer:
passelin
Date:
Sat Feb 22 23:45:52 2014 +0000
Revision:
2:5942af2ffe8b
Parent:
1:568707763458
Child:
3:85025db3fbd1
xbee 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 0:ed0e18b7fa30 3
passelin 0:ed0e18b7fa30 4 DigitalOut myled(LED1);
passelin 1:568707763458 5 DigitalOut myled2(LED2);
passelin 0:ed0e18b7fa30 6 DigitalOut reset(p8);
passelin 0:ed0e18b7fa30 7 Serial pc(USBTX, USBRX);
passelin 0:ed0e18b7fa30 8 Serial xbee(p13, p14);
passelin 0:ed0e18b7fa30 9
passelin 2:5942af2ffe8b 10 string test;
passelin 2:5942af2ffe8b 11 bool trame_ready;
passelin 2:5942af2ffe8b 12
passelin 2:5942af2ffe8b 13 enum {STEP_START, STEP_LENGTH, STEP_TYPE, STEP_MAC, STEP_NET, STEP_OPT, STEP_DATA, STEP_CHECK};
passelin 2:5942af2ffe8b 14
passelin 2:5942af2ffe8b 15 void xbee_init()
passelin 0:ed0e18b7fa30 16 {
passelin 0:ed0e18b7fa30 17 reset = 0;
passelin 1:568707763458 18 wait_ms(400);
passelin 1:568707763458 19 reset = 1;
passelin 2:5942af2ffe8b 20 }
passelin 2:5942af2ffe8b 21
passelin 2:5942af2ffe8b 22 void xbee_receive()
passelin 2:5942af2ffe8b 23 {
passelin 2:5942af2ffe8b 24 // TODO: analyze trame before sending to PC (or WebSocket)
passelin 2:5942af2ffe8b 25 static int state = STEP_START;
passelin 2:5942af2ffe8b 26
passelin 2:5942af2ffe8b 27 char data = xbee.getc();
passelin 2:5942af2ffe8b 28
passelin 2:5942af2ffe8b 29 static int length_i;
passelin 2:5942af2ffe8b 30 static int length;
passelin 2:5942af2ffe8b 31
passelin 2:5942af2ffe8b 32 static int mac_i;
passelin 2:5942af2ffe8b 33
passelin 2:5942af2ffe8b 34 static int net_i;
passelin 2:5942af2ffe8b 35
passelin 2:5942af2ffe8b 36 static string msg;
passelin 2:5942af2ffe8b 37
passelin 2:5942af2ffe8b 38 switch(state)
passelin 2:5942af2ffe8b 39 {
passelin 2:5942af2ffe8b 40 case STEP_START: if(data == 0x7E)
passelin 2:5942af2ffe8b 41 {
passelin 2:5942af2ffe8b 42 state = STEP_LENGTH;
passelin 2:5942af2ffe8b 43 length_i = 0;
passelin 2:5942af2ffe8b 44 length = 0;
passelin 2:5942af2ffe8b 45 msg = "xx";
passelin 2:5942af2ffe8b 46 }
passelin 2:5942af2ffe8b 47 break;
passelin 2:5942af2ffe8b 48
passelin 2:5942af2ffe8b 49 case STEP_LENGTH: length += data;
passelin 2:5942af2ffe8b 50 length_i++;
passelin 2:5942af2ffe8b 51 if(length_i == 2)
passelin 2:5942af2ffe8b 52 {
passelin 2:5942af2ffe8b 53 state = STEP_TYPE;
passelin 2:5942af2ffe8b 54 length -= 12;
passelin 2:5942af2ffe8b 55 }
passelin 2:5942af2ffe8b 56 break;
passelin 2:5942af2ffe8b 57
passelin 2:5942af2ffe8b 58 case STEP_TYPE: if(data == 0x90) //Receive packet
passelin 2:5942af2ffe8b 59 {
passelin 2:5942af2ffe8b 60 state = STEP_MAC;
passelin 2:5942af2ffe8b 61 mac_i = 0;
passelin 2:5942af2ffe8b 62 }
passelin 2:5942af2ffe8b 63 else
passelin 2:5942af2ffe8b 64 {
passelin 2:5942af2ffe8b 65 state = STEP_START;
passelin 2:5942af2ffe8b 66 }
passelin 2:5942af2ffe8b 67 break;
passelin 2:5942af2ffe8b 68
passelin 2:5942af2ffe8b 69 case STEP_MAC: mac_i++;
passelin 2:5942af2ffe8b 70 if(mac_i == 8)
passelin 2:5942af2ffe8b 71 {
passelin 2:5942af2ffe8b 72 state = STEP_NET;
passelin 2:5942af2ffe8b 73 net_i = 0;
passelin 2:5942af2ffe8b 74 }
passelin 2:5942af2ffe8b 75 break;
passelin 2:5942af2ffe8b 76
passelin 2:5942af2ffe8b 77 case STEP_NET: net_i++;
passelin 2:5942af2ffe8b 78 if(net_i == 2)
passelin 2:5942af2ffe8b 79 {
passelin 2:5942af2ffe8b 80 state = STEP_OPT;
passelin 2:5942af2ffe8b 81 }
passelin 2:5942af2ffe8b 82 break;
passelin 2:5942af2ffe8b 83
passelin 2:5942af2ffe8b 84 case STEP_OPT: if(data == 0x01)
passelin 2:5942af2ffe8b 85 {
passelin 2:5942af2ffe8b 86 state = STEP_DATA;
passelin 2:5942af2ffe8b 87 }
passelin 2:5942af2ffe8b 88 else
passelin 2:5942af2ffe8b 89 {
passelin 2:5942af2ffe8b 90 state = STEP_START;
passelin 2:5942af2ffe8b 91 }
passelin 2:5942af2ffe8b 92 break;
passelin 2:5942af2ffe8b 93
passelin 2:5942af2ffe8b 94 case STEP_DATA: length--;
passelin 2:5942af2ffe8b 95 msg += data;
passelin 2:5942af2ffe8b 96 if(length == 0)
passelin 2:5942af2ffe8b 97 {
passelin 2:5942af2ffe8b 98 state = STEP_CHECK;
passelin 2:5942af2ffe8b 99 //pc.printf(msg.c_str());
passelin 2:5942af2ffe8b 100 test = msg.substr(2);
passelin 2:5942af2ffe8b 101 trame_ready = true;
passelin 2:5942af2ffe8b 102 }
passelin 2:5942af2ffe8b 103 break;
passelin 2:5942af2ffe8b 104
passelin 2:5942af2ffe8b 105 case STEP_CHECK: //check CS
passelin 2:5942af2ffe8b 106 state = STEP_START;
passelin 2:5942af2ffe8b 107 break;
passelin 2:5942af2ffe8b 108
passelin 2:5942af2ffe8b 109
passelin 2:5942af2ffe8b 110 }
passelin 2:5942af2ffe8b 111
passelin 2:5942af2ffe8b 112 }
passelin 2:5942af2ffe8b 113
passelin 2:5942af2ffe8b 114 int main()
passelin 2:5942af2ffe8b 115 {
passelin 2:5942af2ffe8b 116 xbee_init();
passelin 2:5942af2ffe8b 117
passelin 2:5942af2ffe8b 118
passelin 2:5942af2ffe8b 119 myled = 1;
passelin 2:5942af2ffe8b 120 myled2 = 1;
passelin 2:5942af2ffe8b 121
passelin 2:5942af2ffe8b 122 trame_ready = false;
passelin 2:5942af2ffe8b 123
passelin 0:ed0e18b7fa30 124 while(1)
passelin 0:ed0e18b7fa30 125 {
passelin 0:ed0e18b7fa30 126 if(xbee.readable())
passelin 0:ed0e18b7fa30 127 {
passelin 2:5942af2ffe8b 128 xbee_receive();
passelin 2:5942af2ffe8b 129
passelin 2:5942af2ffe8b 130 //pc.printf("%x ", xbee.getc());
passelin 2:5942af2ffe8b 131 //pc.putc(xbee.getc());
passelin 1:568707763458 132 myled2 = ! myled2;
passelin 0:ed0e18b7fa30 133 }
passelin 2:5942af2ffe8b 134
passelin 0:ed0e18b7fa30 135 if(pc.readable())
passelin 0:ed0e18b7fa30 136 {
passelin 1:568707763458 137 xbee.putc(pc.getc());
passelin 1:568707763458 138 myled = ! myled;
passelin 0:ed0e18b7fa30 139 }
passelin 2:5942af2ffe8b 140
passelin 2:5942af2ffe8b 141 if(trame_ready == true)
passelin 2:5942af2ffe8b 142 {
passelin 2:5942af2ffe8b 143 pc.printf(test.c_str());
passelin 2:5942af2ffe8b 144 trame_ready = false;
passelin 2:5942af2ffe8b 145 }
passelin 0:ed0e18b7fa30 146 }
passelin 0:ed0e18b7fa30 147 }