NerfUS / NerfUSXbee

Dependents:   NerfUS-Coord NerfUSTarget

Fork of APP3_xbee by Team APP

Revision:
4:e97cfe6cc18c
Parent:
3:37ea92feece2
Child:
5:cd3c79853dc8
--- a/xbee.cpp	Sun Feb 12 20:31:46 2017 +0000
+++ b/xbee.cpp	Sun Feb 12 21:33:48 2017 +0000
@@ -1,7 +1,8 @@
 #include "xbee.h"
+#include <cassert>
 
 DigitalOut led_1(LED1);
-Mail<vector<char>, 30> received_messages;
+Mail<vector<char>, 30> parsed_frames;
 RawSerial xbee(p13, p14);
 const int FRAME_SPECIFIC_DATA_BEGIN[14] = {0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00};
 const int RECEIVE_PACKET_MESSAGE_START_INDEX = 15;
@@ -69,11 +70,8 @@
         {
             frame.push_back(xbee.getc());
         }
-            
-        vector<char> *parsed_frame = received_messages.alloc();
-        *parsed_frame = parse_receive_packet(frame);
-
-        received_messages.put(parsed_frame);
+        
+        handle_frame(frame);
     }
 }
 
@@ -105,26 +103,35 @@
     return relevant_content;
 }
 
-void handle_message()
+void handle_parsed_frames_from_mailbox()
 {
     while(true)
     {
-        osEvent event = received_messages.get();
-        if (event.status == osEventMail) 
+        osEvent event = parsed_frames.get();
+        assert(event.status == osEventMail);
+        
+        vector<char> *message = (vector<char>*)event.value.p;
+        
+        const char parsed_frame_type = message->at(0);
+        printf("Handling parsed frame. Type: %d\r\n", parsed_frame_type);
+        
+        printf("Relevant content: ");
+        for(int i=1; i<message->size(); i++)
         {
-            vector<char> *message = (vector<char>*)event.value.p;
-            
-            printf("Received message: ");
-            for(int i=0; i<message->size(); i++)
-            {
-                printf("%c", message->at(i));
-            }
-            printf("\r\n");
-            received_messages.free(message);
+            printf("%d\r\n", message->at(i));
         }
+
+        parsed_frames.free(message);
     }
 }
 
+void handle_frame(const vector<char>& frame)
+{
+    vector<char> *parsed_frame = parsed_frames.alloc();
+    *parsed_frame = parse_frame(frame);
+    parsed_frames.put(parsed_frame);
+}
+
 vector<char> parse_frame(const vector<char>& frame)
 {   
     vector<char> parsed_frame;