NerfUS / NerfUSXbee

Dependents:   NerfUS-Coord NerfUSTarget

Fork of APP3_xbee by Team APP

Revision:
7:c65c4c98d237
Parent:
6:b70f32a80d51
Child:
8:b9c096965c00
diff -r b70f32a80d51 -r c65c4c98d237 xbee.cpp
--- a/xbee.cpp	Mon Feb 13 19:13:50 2017 +0000
+++ b/xbee.cpp	Tue Feb 14 01:13:18 2017 +0000
@@ -4,6 +4,7 @@
 DigitalOut led_1(LED1);
 Mail<vector<char>, 30> parsed_frames;
 RawSerial xbee(p13, p14);
+Mutex mutex;
 const int FRAME_SPECIFIC_DATA_BEGIN[14] = {0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00};
 const int AT_COMMAND_LED_FRAME_SPECIFIC_DATA_BEGIN[15] = {0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x02, 0x50, 0x32};
 const char LED_COMMAND_POWER_ON = 0x05;
@@ -12,14 +13,31 @@
 
 const char START_DELIMITER = 0x7E;
 
+bool is_character_that_needs_escape(const char character)
+{
+    //printf("%X\r\n", character);
+    switch(character)
+    {
+        case 0x7E: return true;
+        case 0x7D: return true;
+        case 0x11: return true;
+        case 0x13: return true;
+        default: return false;
+    }
+}
+
 void send_message_via_xbee(const char* message, const int length)
 {
+    //printf("send_message_via_xbee\r\n");
     const vector<char> transmit_request = generate_transmit_request(message, length);
     
+    mutex.lock();
     for(int i=0; i<transmit_request.size(); i++)
     {
+        assert( i==0 || !is_character_that_needs_escape(transmit_request[i]));
         xbee.putc(transmit_request[i]);
     }
+    mutex.unlock();
 }
 
 vector<char> generate_transmit_request(const char* message, const int length)