NerfUS / NerfUSXbee

Dependents:   NerfUS-Coord NerfUSTarget

Fork of APP3_xbee by Team APP

Revision:
3:37ea92feece2
Parent:
0:8f5379c94a69
Child:
4:e97cfe6cc18c
diff -r 5d437f1b1548 -r 37ea92feece2 xbee.cpp
--- a/xbee.cpp	Sat Feb 11 20:55:08 2017 +0000
+++ b/xbee.cpp	Sun Feb 12 20:31:46 2017 +0000
@@ -77,14 +77,34 @@
     }
 }
 
-vector<char> parse_receive_packet(vector<char> transmitted_request)
+vector<char> parse_receive_packet(const vector<char>& frame)
 {    
-    vector<char>::const_iterator first = transmitted_request.begin() + RECEIVE_PACKET_MESSAGE_START_INDEX;
-    vector<char>::const_iterator last = transmitted_request.end() - 1;
+    vector<char>::const_iterator first = frame.begin() + RECEIVE_PACKET_MESSAGE_START_INDEX;
+    vector<char>::const_iterator last = frame.end() - 1;
     vector<char> message(first, last);
     return message;
 }
 
+vector<char> parse_transmit_status(const vector<char>& frame)
+{    
+    vector<char> relevant_content;
+
+    const char delivery_status = frame.at(8);    
+    relevant_content.push_back(delivery_status);
+    
+    return relevant_content;
+}
+
+vector<char> parse_at_command_response(const vector<char>& frame)
+{    
+    vector<char> relevant_content;
+
+    const char command_status = frame.at(7);    
+    relevant_content.push_back(command_status);
+    
+    return relevant_content;
+}
+
 void handle_message()
 {
     while(true)
@@ -103,4 +123,41 @@
             received_messages.free(message);
         }
     }
-}
\ No newline at end of file
+}
+
+vector<char> parse_frame(const vector<char>& frame)
+{   
+    vector<char> parsed_frame;
+    
+    const char frame_type = frame.at(3);
+    parsed_frame.push_back(frame_type);
+  
+    vector<char> parsed_frame_relevant_content;
+  
+    switch(frame_type)
+    {
+        case FRAME_TYPE_RECEIVE_PACKET: 
+        {
+            parsed_frame_relevant_content = parse_receive_packet(frame);
+            break;
+        }
+        case FRAME_TYPE_TRANSMIT_STATUS: 
+        {
+            parsed_frame_relevant_content = parse_transmit_status(frame);
+            break;
+        }
+        case FRAME_TYPE_AT_COMMAND_RESPONSE:
+        {
+            parsed_frame_relevant_content = parse_at_command_response(frame);
+            break;
+        }
+        default: assert(false && "Unsupported frame type");
+    }
+    
+    for(vector<char>::iterator it = parsed_frame_relevant_content.begin(); it < parsed_frame_relevant_content.end(); it++)
+    {
+        parsed_frame.push_back(*it);
+    }
+    
+    return parsed_frame;
+}