NerfUS / NerfUSXbee

Dependents:   NerfUS-Coord NerfUSTarget

Fork of APP3_xbee by Team APP

Revision:
8:b9c096965c00
Parent:
7:c65c4c98d237
Child:
9:04063c29ab43
Child:
10:612739c6d27d
--- a/xbee.cpp	Tue Feb 14 01:13:18 2017 +0000
+++ b/xbee.cpp	Tue Feb 14 02:38:18 2017 +0000
@@ -1,8 +1,10 @@
 #include "xbee.h"
 #include <cassert>
 
+
+
 DigitalOut led_1(LED1);
-Mail<vector<char>, 30> parsed_frames;
+Mail<ingoing_value_t, 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};
@@ -160,25 +162,57 @@
         osEvent event = parsed_frames.get();
         assert(event.status == osEventMail);
         
-        vector<char> *message = (vector<char>*)event.value.p;
+        ingoing_value_t *parsed_frame = (ingoing_value_t*)event.value.p;
         
-        const char parsed_frame_type = message->at(0);
+        const char parsed_frame_type = parsed_frame->content[0];
+        switch(parsed_frame_type)
+        {
+            case FRAME_TYPE_RECEIVE_PACKET:
+                char parsed_frame_string[40];
+                parsed_frame_to_string(ingoing_value_to_vector(*parsed_frame), parsed_frame_string);
+                
+                printf("Handling receive packet: %s\r\n", parsed_frame_string);
+                break;
+                
+            default:
+                break;
+        }
+        
+        /*
         printf("Handling parsed frame. Type: %d\r\n", parsed_frame_type);
         
         printf("Relevant content: ");
-        for(int i=1; i<message->size(); i++)
+        for(int i=1; i<value->size; i++)
         {
-            printf("%d\r\n", message->at(i));
+            printf("%d\r\n", value->content[i]);
         }
+        */
+        
+        parsed_frames.free(parsed_frame);
+    }
+}
 
-        parsed_frames.free(message);
+vector<char> ingoing_value_to_vector(const ingoing_value_t& value)
+{
+    vector<char> result;
+    for(int i=0; i<value.size; i++)
+    {
+        result.push_back(value.content[i]);
     }
+    return result;
 }
 
 void handle_frame(const vector<char>& frame)
 {
-    vector<char> *parsed_frame = parsed_frames.alloc();
-    *parsed_frame = parse_frame(frame);
+    ingoing_value_t *parsed_frame = parsed_frames.alloc();
+    
+    const vector<char> parsed_frame_vector = parse_frame(frame);
+    for(int i=0; i<parsed_frame_vector.size(); i++)
+    {
+        parsed_frame->content[i] = parsed_frame_vector.at(i);
+    }
+    parsed_frame->size = parsed_frame_vector.size();
+    
     parsed_frames.put(parsed_frame);
 }
 
@@ -243,11 +277,11 @@
     const char button_state = parsed_frame[2];
     switch(button_state)
     {
-        case 0x00:
+        case BUTTON_RELEASED:
             strcpy(readable_string_output, "Button state: released");
             break;
             
-        case 0x01:
+        case BUTTON_PRESSED:
             strcpy(readable_string_output, "Button state: pressed");
             break;