CROTUS / CROTUS_XBee

Dependents:   ProjetCasque

Fork of CROTUS_XBee by Valentin Libioulle

Committer:
libv2001
Date:
Mon Apr 03 20:52:25 2017 +0000
Revision:
5:b65dc52c463e
Parent:
4:6ba5b06193d1
Child:
6:1ea0d334c9de
YOLO!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
libv2001 0:2a59dd59ee5e 1 #include "mbed.h"
libv2001 0:2a59dd59ee5e 2 #include "rtos.h"
libv2001 0:2a59dd59ee5e 3 #include "xbee.h"
libv2001 0:2a59dd59ee5e 4
libv2001 1:13c7d6237a53 5 /*******************************************************/
libv2001 1:13c7d6237a53 6 /*****************PRIVATE FUNCTIONS*********************/
libv2001 1:13c7d6237a53 7 /*******************************************************/
libv2001 1:13c7d6237a53 8 namespace {
libv2001 1:13c7d6237a53 9 DigitalOut _xbeeConnection(LED4);
libv2001 0:2a59dd59ee5e 10
libv2001 1:13c7d6237a53 11 Serial _xbee(p9, p10);
libv2001 1:13c7d6237a53 12 DigitalOut _xbeeRst(p8);
libv2001 1:13c7d6237a53 13
libv2001 1:13c7d6237a53 14 char _destination64bit[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
libv2001 1:13c7d6237a53 15 char _destination16bit[2] = {0xff, 0xfe};
libv2001 0:2a59dd59ee5e 16
libv2001 0:2a59dd59ee5e 17 const int HARDWARE_RESET_SIGNAL = 0x10;
libv2001 0:2a59dd59ee5e 18 const int CONNECTED_SIGNAL = 0x20;
libv2001 0:2a59dd59ee5e 19 const int TICKER_SIGNAL = 0x40;
libv2001 0:2a59dd59ee5e 20 const int RESPONSE_SIGNAL = 0x80;
libv2001 0:2a59dd59ee5e 21
libv2001 1:13c7d6237a53 22 int _responseStatus;
libv2001 0:2a59dd59ee5e 23
libv2001 1:13c7d6237a53 24 int _panID = 0xB00B;
libv2001 1:13c7d6237a53 25 char _frameID = 0;
libv2001 0:2a59dd59ee5e 26
libv2001 0:2a59dd59ee5e 27 Thread _xbeeReceiver;
libv2001 0:2a59dd59ee5e 28 Thread * _xbeeTransmitter;
libv2001 0:2a59dd59ee5e 29
libv2001 1:13c7d6237a53 30 void(*_packetReceivedCallback)(char*, int) = 0;
libv2001 1:13c7d6237a53 31
libv2001 1:13c7d6237a53 32 /*******************************************************/
libv2001 1:13c7d6237a53 33 /*******************XBEE UTILITIES**********************/
libv2001 1:13c7d6237a53 34 /*******************************************************/
libv2001 1:13c7d6237a53 35 inline char _GetFrameID(){
libv2001 1:13c7d6237a53 36 ++_frameID;
libv2001 1:13c7d6237a53 37 if (_frameID == 0){
libv2001 1:13c7d6237a53 38 _frameID = 1;
libv2001 0:2a59dd59ee5e 39 }
libv2001 1:13c7d6237a53 40 return _frameID;
libv2001 0:2a59dd59ee5e 41 }
libv2001 0:2a59dd59ee5e 42
libv2001 1:13c7d6237a53 43 inline uint16_t _GetFrameLength(char * buffer){
libv2001 0:2a59dd59ee5e 44 return (((uint16_t)buffer[LENGTH_MSB_IDX]) << 8) + buffer[LENGTH_LSB_IDX];
libv2001 0:2a59dd59ee5e 45 }
libv2001 0:2a59dd59ee5e 46
libv2001 1:13c7d6237a53 47 bool _ValidateCheckSum(char * buffer){
libv2001 1:13c7d6237a53 48 uint16_t length = _GetFrameLength(buffer);
libv2001 0:2a59dd59ee5e 49
libv2001 0:2a59dd59ee5e 50 char sum = 0;
libv2001 0:2a59dd59ee5e 51 for (int i = 0; i <= length; ++i){
libv2001 0:2a59dd59ee5e 52 sum += buffer[i + API_ID_IDX];
libv2001 0:2a59dd59ee5e 53 }
libv2001 0:2a59dd59ee5e 54
libv2001 0:2a59dd59ee5e 55 return sum == 0xff;
libv2001 0:2a59dd59ee5e 56 }
libv2001 0:2a59dd59ee5e 57
libv2001 1:13c7d6237a53 58 inline uint16_t _GetAtParamLength(char * buffer){
libv2001 1:13c7d6237a53 59 return _GetFrameLength(buffer) - AT_MIN_SIZE;
libv2001 0:2a59dd59ee5e 60 }
libv2001 0:2a59dd59ee5e 61
libv2001 1:13c7d6237a53 62 inline uint16_t _GetAtQueueParamLength(char * buffer){
libv2001 1:13c7d6237a53 63 return _GetFrameLength(buffer) - AT_QUEUE_MIN_SIZE;
libv2001 0:2a59dd59ee5e 64 }
libv2001 0:2a59dd59ee5e 65
libv2001 1:13c7d6237a53 66 inline uint16_t _GetTransmitDataLength(char * buffer){
libv2001 1:13c7d6237a53 67 return _GetFrameLength(buffer) - TRANSMIT_MIN_SIZE;
libv2001 0:2a59dd59ee5e 68 }
libv2001 0:2a59dd59ee5e 69
libv2001 1:13c7d6237a53 70 inline uint16_t _GetAtResponseParamLength(char * buffer){
libv2001 1:13c7d6237a53 71 return _GetFrameLength(buffer) - AT_CMD_RSP_MIN_SIZE;
libv2001 0:2a59dd59ee5e 72 }
libv2001 0:2a59dd59ee5e 73
libv2001 1:13c7d6237a53 74 inline uint16_t _GetReceivedPacketDataLength(char * buffer){
libv2001 1:13c7d6237a53 75 return _GetFrameLength(buffer) - RECEIVED_PACKET_MIN_SIZE;
libv2001 0:2a59dd59ee5e 76 }
libv2001 0:2a59dd59ee5e 77
libv2001 1:13c7d6237a53 78 void _SetCheckSum(char * buffer){
libv2001 1:13c7d6237a53 79 uint16_t length = _GetFrameLength(buffer);
libv2001 0:2a59dd59ee5e 80
libv2001 0:2a59dd59ee5e 81 char sum = 0;
libv2001 0:2a59dd59ee5e 82
libv2001 0:2a59dd59ee5e 83 int max = length + 3;
libv2001 0:2a59dd59ee5e 84
libv2001 0:2a59dd59ee5e 85 for(int i = 3; i < max; ++i){
libv2001 0:2a59dd59ee5e 86 sum += buffer[i];
libv2001 0:2a59dd59ee5e 87 }
libv2001 0:2a59dd59ee5e 88
libv2001 0:2a59dd59ee5e 89 buffer[max] = 0xff - sum;
libv2001 0:2a59dd59ee5e 90 }
libv2001 0:2a59dd59ee5e 91
libv2001 1:13c7d6237a53 92 /*******************************************************/
libv2001 1:13c7d6237a53 93 /**********************XBEE SEND************************/
libv2001 1:13c7d6237a53 94 /*******************************************************/
libv2001 1:13c7d6237a53 95 void _XbeeSend(char * buffer, int count){
libv2001 0:2a59dd59ee5e 96 for ( int i = 0; i < count; ++i ){
libv2001 0:2a59dd59ee5e 97 _xbee.putc(buffer[i]);
libv2001 0:2a59dd59ee5e 98 wait_us(25);
libv2001 0:2a59dd59ee5e 99 }
libv2001 0:2a59dd59ee5e 100 }
libv2001 0:2a59dd59ee5e 101
libv2001 1:13c7d6237a53 102 void _XbeeSendATCommand(bool queue, char * type, char * data, int dataLength){
libv2001 0:2a59dd59ee5e 103 char buffer[64];
libv2001 2:406da750f115 104 buffer[START_IDX] = START_BYTE;
libv2001 0:2a59dd59ee5e 105 buffer[LENGTH_MSB_IDX] = (dataLength + AT_MIN_SIZE) >> 8;
libv2001 0:2a59dd59ee5e 106 buffer[LENGTH_LSB_IDX] = (dataLength + AT_MIN_SIZE) & 0xff;
libv2001 0:2a59dd59ee5e 107 buffer[API_ID_IDX] = queue ? API_ID_AT_CMD_QUEUE : API_ID_AT_CMD;
libv2001 1:13c7d6237a53 108 buffer[FRAME_ID_IDX] = _GetFrameID();
libv2001 0:2a59dd59ee5e 109 memcpy(&buffer[AT_CMD_ID_IDX], type, AT_CMD_ID_SIZE);
libv2001 0:2a59dd59ee5e 110 memcpy(&buffer[AT_PARAM_IDX], data, dataLength);
libv2001 0:2a59dd59ee5e 111
libv2001 1:13c7d6237a53 112 _SetCheckSum(buffer);
libv2001 0:2a59dd59ee5e 113
libv2001 0:2a59dd59ee5e 114 while(true){
libv2001 1:13c7d6237a53 115 _XbeeSend(buffer, dataLength + AT_MIN_SIZE + FRAME_MIN_SIZE);
libv2001 0:2a59dd59ee5e 116
libv2001 0:2a59dd59ee5e 117 Thread::signal_wait(RESPONSE_SIGNAL);
libv2001 0:2a59dd59ee5e 118
libv2001 1:13c7d6237a53 119 switch (_responseStatus){
libv2001 0:2a59dd59ee5e 120 case AT_CMD_RSP_STATUS_OK:
libv2001 0:2a59dd59ee5e 121 return;
libv2001 0:2a59dd59ee5e 122 case AT_CMD_RSP_STATUS_ERROR:
libv2001 0:2a59dd59ee5e 123 case AT_CMD_RSP_STATUS_INVALID_CMD:
libv2001 0:2a59dd59ee5e 124 case AT_CMD_RSP_STATUS_INVALID_PARAM:
libv2001 0:2a59dd59ee5e 125 case AT_CMD_RSP_STATUS_TX_FAILURE:
libv2001 0:2a59dd59ee5e 126 default:
libv2001 0:2a59dd59ee5e 127 _xbeeConnection = 0;
libv2001 5:b65dc52c463e 128 printf("Bad AT CMD RSP\r\n");
libv2001 0:2a59dd59ee5e 129 break;
libv2001 0:2a59dd59ee5e 130 }
libv2001 0:2a59dd59ee5e 131 }
libv2001 0:2a59dd59ee5e 132 }
libv2001 0:2a59dd59ee5e 133
libv2001 1:13c7d6237a53 134 inline void _XbeeSendATID(){
libv2001 0:2a59dd59ee5e 135 char idBuf[8];
libv2001 0:2a59dd59ee5e 136 for (int i = 0; i < 8; ++i){
libv2001 1:13c7d6237a53 137 idBuf[i] = (_panID >> (56 - 8 * i)) & 0xff;
libv2001 0:2a59dd59ee5e 138 }
libv2001 1:13c7d6237a53 139 _XbeeSendATCommand(true, "ID", idBuf, 8);
libv2001 0:2a59dd59ee5e 140 }
libv2001 0:2a59dd59ee5e 141
libv2001 1:13c7d6237a53 142 inline void _XbeeSendATWR(){
libv2001 1:13c7d6237a53 143 _XbeeSendATCommand(true, "WR", 0, 0);
libv2001 0:2a59dd59ee5e 144 }
libv2001 0:2a59dd59ee5e 145
libv2001 1:13c7d6237a53 146 inline void _XbeeSendATAC(){
libv2001 1:13c7d6237a53 147 _XbeeSendATCommand(true, "AC", 0, 0);
libv2001 0:2a59dd59ee5e 148 }
libv2001 0:2a59dd59ee5e 149
libv2001 1:13c7d6237a53 150 /*******************************************************/
libv2001 1:13c7d6237a53 151 /********************XBEE RECEIVE***********************/
libv2001 1:13c7d6237a53 152 /*******************************************************/
libv2001 1:13c7d6237a53 153 inline char _XbeeReadChar(){
libv2001 0:2a59dd59ee5e 154 while(!_xbee.readable()){
libv2001 0:2a59dd59ee5e 155 }
libv2001 0:2a59dd59ee5e 156 return _xbee.getc();
libv2001 0:2a59dd59ee5e 157 }
libv2001 0:2a59dd59ee5e 158
libv2001 1:13c7d6237a53 159 void _HandleXbeeReceivedPacket(char * cmd){
libv2001 1:13c7d6237a53 160 _packetReceivedCallback(&cmd[RECEIVED_PACKET_DATA_IDX], _GetReceivedPacketDataLength(cmd));
libv2001 0:2a59dd59ee5e 161 }
libv2001 0:2a59dd59ee5e 162
libv2001 1:13c7d6237a53 163 void _HandleXbeeModemStatus(char * cmd){
libv2001 0:2a59dd59ee5e 164 switch(cmd[MODEM_STATUS_STATUS_IDX]){
libv2001 0:2a59dd59ee5e 165 case MODEM_STATUS_HARDWARE_RST:
libv2001 0:2a59dd59ee5e 166 _xbeeTransmitter->signal_set(HARDWARE_RESET_SIGNAL);
libv2001 0:2a59dd59ee5e 167 break;
libv2001 0:2a59dd59ee5e 168 case MODEM_STATUS_COORDINATOR_STARTED: // For the coordinator
libv2001 2:406da750f115 169 case MODEM_STATUS_JOINED_NETWORK: // For the router
libv2001 0:2a59dd59ee5e 170 _xbeeTransmitter->signal_set(CONNECTED_SIGNAL);
libv2001 0:2a59dd59ee5e 171 break;
libv2001 0:2a59dd59ee5e 172 default:
libv2001 0:2a59dd59ee5e 173 _xbeeConnection = 0;
libv2001 5:b65dc52c463e 174 printf("Bad MODEM STATUS\r\n");
libv2001 0:2a59dd59ee5e 175 break;
libv2001 0:2a59dd59ee5e 176 }
libv2001 0:2a59dd59ee5e 177 }
libv2001 0:2a59dd59ee5e 178
libv2001 1:13c7d6237a53 179 void _HandleXbeeATCommandResponse(char * cmd){
libv2001 1:13c7d6237a53 180 _responseStatus = cmd[AT_CMD_RSP_STATUS_IDX];
libv2001 0:2a59dd59ee5e 181 _xbeeTransmitter->signal_set(RESPONSE_SIGNAL);
libv2001 0:2a59dd59ee5e 182 }
libv2001 0:2a59dd59ee5e 183
libv2001 1:13c7d6237a53 184 void _HandleXbeeTransmitStatus(char * cmd){
libv2001 0:2a59dd59ee5e 185 switch(cmd[TRANSMIT_STATUS_DELIVERY_STATUS_IDX]){
libv2001 0:2a59dd59ee5e 186 case TRANSMIT_STATUS_OK:
libv2001 1:13c7d6237a53 187 _responseStatus = cmd[TRANSMIT_STATUS_DELIVERY_STATUS_IDX];
libv2001 0:2a59dd59ee5e 188 _xbeeTransmitter->signal_set(RESPONSE_SIGNAL);
libv2001 0:2a59dd59ee5e 189 break;
libv2001 0:2a59dd59ee5e 190 default:
libv2001 0:2a59dd59ee5e 191 _xbeeConnection = 0;
libv2001 5:b65dc52c463e 192 printf("Bad TRANSMIT RSP \r\n");
libv2001 5:b65dc52c463e 193 break;
libv2001 0:2a59dd59ee5e 194 }
libv2001 0:2a59dd59ee5e 195 }
libv2001 0:2a59dd59ee5e 196
libv2001 1:13c7d6237a53 197 void _HandleXbeeReceivedCommand(char * cmd){
libv2001 0:2a59dd59ee5e 198 switch(cmd[API_ID_IDX]){
libv2001 0:2a59dd59ee5e 199 case API_ID_AT_CMD_RSP:
libv2001 1:13c7d6237a53 200 _HandleXbeeATCommandResponse(cmd);
libv2001 0:2a59dd59ee5e 201 break;
libv2001 0:2a59dd59ee5e 202 case API_ID_MODEM_STATUS:
libv2001 1:13c7d6237a53 203 _HandleXbeeModemStatus(cmd);
libv2001 0:2a59dd59ee5e 204 break;
libv2001 0:2a59dd59ee5e 205 case API_ID_RECEIVED_PACKET:
libv2001 1:13c7d6237a53 206 _HandleXbeeReceivedPacket(cmd);
libv2001 0:2a59dd59ee5e 207 break;
libv2001 0:2a59dd59ee5e 208 case API_ID_TRANSMIT_STATUS:
libv2001 1:13c7d6237a53 209 _HandleXbeeTransmitStatus(cmd);
libv2001 0:2a59dd59ee5e 210 break;
libv2001 0:2a59dd59ee5e 211 default:
libv2001 0:2a59dd59ee5e 212 _xbeeConnection = 0;
libv2001 5:b65dc52c463e 213 printf("Bad COMMAND\r\n");
libv2001 0:2a59dd59ee5e 214 break;
libv2001 0:2a59dd59ee5e 215 }
libv2001 0:2a59dd59ee5e 216 }
libv2001 0:2a59dd59ee5e 217
libv2001 1:13c7d6237a53 218 /*******************************************************/
libv2001 1:13c7d6237a53 219 /*********************THREAD MAIN***********************/
libv2001 1:13c7d6237a53 220 /*******************************************************/
libv2001 0:2a59dd59ee5e 221 void _XbeeReceiver(){
libv2001 0:2a59dd59ee5e 222 char buffer[64];
libv2001 0:2a59dd59ee5e 223 while(true){
libv2001 1:13c7d6237a53 224 buffer[START_IDX] = _XbeeReadChar();
libv2001 2:406da750f115 225 if (buffer[START_IDX] != START_BYTE){
libv2001 0:2a59dd59ee5e 226 _xbeeConnection = 0;
libv2001 5:b65dc52c463e 227 printf("Bad START BYTE\r\n");
libv2001 0:2a59dd59ee5e 228 continue;
libv2001 0:2a59dd59ee5e 229 }
libv2001 1:13c7d6237a53 230 buffer[LENGTH_MSB_IDX] = _XbeeReadChar();
libv2001 1:13c7d6237a53 231 buffer[LENGTH_LSB_IDX] = _XbeeReadChar();
libv2001 1:13c7d6237a53 232 int length = _GetFrameLength(buffer);
libv2001 0:2a59dd59ee5e 233
libv2001 0:2a59dd59ee5e 234 for (int i = 0; i <= length; ++i){
libv2001 1:13c7d6237a53 235 buffer[i + API_ID_IDX] = _XbeeReadChar();
libv2001 0:2a59dd59ee5e 236 }
libv2001 1:13c7d6237a53 237 if (!_ValidateCheckSum(buffer)){
libv2001 0:2a59dd59ee5e 238 _xbeeConnection = 0;
libv2001 5:b65dc52c463e 239 printf("Bad CHK SUM\r\n");
libv2001 0:2a59dd59ee5e 240 continue;
libv2001 0:2a59dd59ee5e 241 }
libv2001 0:2a59dd59ee5e 242
libv2001 1:13c7d6237a53 243 _HandleXbeeReceivedCommand(buffer);
libv2001 0:2a59dd59ee5e 244 }
libv2001 0:2a59dd59ee5e 245 }
libv2001 0:2a59dd59ee5e 246
libv2001 0:2a59dd59ee5e 247 };
libv2001 0:2a59dd59ee5e 248
libv2001 0:2a59dd59ee5e 249 /*******************************************************/
libv2001 1:13c7d6237a53 250 /******************PUBLIC FUNCTIONS*********************/
libv2001 0:2a59dd59ee5e 251 /*******************************************************/
libv2001 1:13c7d6237a53 252 void XbeeSendData(char * data, int dataLength){
libv2001 0:2a59dd59ee5e 253 char buffer[64];
libv2001 2:406da750f115 254 buffer[START_IDX] = START_BYTE;
libv2001 0:2a59dd59ee5e 255 buffer[LENGTH_MSB_IDX] = (dataLength + TRANSMIT_MIN_SIZE) >> 8;
libv2001 0:2a59dd59ee5e 256 buffer[LENGTH_LSB_IDX] = (dataLength + TRANSMIT_MIN_SIZE) & 0xff;
libv2001 0:2a59dd59ee5e 257 buffer[API_ID_IDX] = API_ID_TRANSMIT;
libv2001 1:13c7d6237a53 258 buffer[FRAME_ID_IDX] = _GetFrameID();
libv2001 1:13c7d6237a53 259 memcpy(&buffer[TRANSMIT_64BIT_MSB_IDX], _destination64bit, ADDR_64BIT_SIZE);
libv2001 1:13c7d6237a53 260 memcpy(&buffer[TRANSMIT_16BIT_MSB_IDX], _destination16bit, ADDR_16BIT_SIZE);
libv2001 0:2a59dd59ee5e 261 buffer[TRANSMIT_BROADCAST_IDX] = TRANSMIT_DEFAULT_BROADCAST;
libv2001 0:2a59dd59ee5e 262 buffer[TRANSMIT_OPT_IDX] = TRANSMIT_DEFAULT_OPT;
libv2001 0:2a59dd59ee5e 263 memcpy(&buffer[TRANSMIT_DATA_IDX], data, dataLength);
libv2001 0:2a59dd59ee5e 264
libv2001 1:13c7d6237a53 265 _SetCheckSum(buffer);
libv2001 0:2a59dd59ee5e 266
libv2001 3:cc699ba7a827 267 _XbeeSend(buffer, dataLength + TRANSMIT_MIN_SIZE + FRAME_MIN_SIZE);
libv2001 4:6ba5b06193d1 268
libv2001 4:6ba5b06193d1 269 _xbeeConnection = 1;
libv2001 3:cc699ba7a827 270
libv2001 4:6ba5b06193d1 271 /*Thread::signal_wait(RESPONSE_SIGNAL);
libv2001 0:2a59dd59ee5e 272
libv2001 3:cc699ba7a827 273 switch (_responseStatus){
libv2001 3:cc699ba7a827 274 case TRANSMIT_STATUS_OK:
libv2001 3:cc699ba7a827 275 _xbeeConnection = 1;
libv2001 3:cc699ba7a827 276 break;
libv2001 3:cc699ba7a827 277 default:
libv2001 3:cc699ba7a827 278 _xbeeConnection = 0;
libv2001 3:cc699ba7a827 279 break;
libv2001 4:6ba5b06193d1 280 }*/
libv2001 0:2a59dd59ee5e 281 }
libv2001 0:2a59dd59ee5e 282
libv2001 1:13c7d6237a53 283 bool InitXbee(bool coordinator, void(*packetReceivedCallback)(char*, int), Thread * xbeeTransmitter){
libv2001 1:13c7d6237a53 284 _packetReceivedCallback = packetReceivedCallback;
libv2001 0:2a59dd59ee5e 285 _xbeeTransmitter = xbeeTransmitter;
libv2001 0:2a59dd59ee5e 286
libv2001 0:2a59dd59ee5e 287 if (coordinator)
libv2001 0:2a59dd59ee5e 288 {
libv2001 0:2a59dd59ee5e 289 uint8_t temp[8] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0x33, 0x19, 0x8D};
libv2001 1:13c7d6237a53 290 memcpy(_destination64bit, temp, 8);
libv2001 0:2a59dd59ee5e 291 }
libv2001 0:2a59dd59ee5e 292
libv2001 0:2a59dd59ee5e 293 _xbeeReceiver.start(callback(_XbeeReceiver));
libv2001 0:2a59dd59ee5e 294
libv2001 0:2a59dd59ee5e 295 _xbeeRst.write(0);
libv2001 0:2a59dd59ee5e 296 wait(0.4);
libv2001 0:2a59dd59ee5e 297 _xbeeRst.write(1);
libv2001 0:2a59dd59ee5e 298
libv2001 0:2a59dd59ee5e 299 Thread::signal_wait(HARDWARE_RESET_SIGNAL);
libv2001 0:2a59dd59ee5e 300
libv2001 1:13c7d6237a53 301 _XbeeSendATID();
libv2001 1:13c7d6237a53 302 _XbeeSendATWR();
libv2001 1:13c7d6237a53 303 _XbeeSendATAC();
libv2001 0:2a59dd59ee5e 304
libv2001 0:2a59dd59ee5e 305 Thread::signal_wait(CONNECTED_SIGNAL);
libv2001 0:2a59dd59ee5e 306
libv2001 0:2a59dd59ee5e 307 _xbeeConnection = 1;
libv2001 0:2a59dd59ee5e 308
libv2001 0:2a59dd59ee5e 309 return true;
libv2001 0:2a59dd59ee5e 310 }