Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Revision:
24:29ec42daa82e
Parent:
23:c3f25b511448
Child:
25:7b808fb9e025
--- a/xbee.cpp	Mon Oct 02 16:59:26 2017 +0000
+++ b/xbee.cpp	Mon Oct 02 17:35:34 2017 +0000
@@ -305,18 +305,17 @@
 
 bool receive(frame_t* out_frame, int max_length)
 {
-    
-    //NVIC_DisableIRQ(UART1_IRQn);
-    /*
-    static int curr_length = 0;    
-    static frame_recv_state_t recv_state = wait_delimiter;    
+    static int curr_length = 0;
+
+    static frame_recv_state_t recv_state = wait_delimiter;
     static char checksum = 0xFF;
 
     bool finished_frame = false;
 
-    while(rx_out != rx_in && !finished_frame)
+    xbee_receive_led = !xbee_receive_led;
+    while(xbee.readable() && curr_length < max_length && !finished_frame)
     {
-        char current = ReceiveBuffer[rx_out];
+        char current = xbee.getc();
         switch(recv_state)
         {
             case wait_delimiter:
@@ -337,15 +336,13 @@
             }
             case read_length_lsb:
             {                 
-                out_frame->length |= current;
-                //pc.printf("\n\rFrame length = %u", out_frame->length);  
+                out_frame->length |= current;  
                 checksum = 0xFF;
                 recv_state = read_frame_specific;
                 break;
             }
             case read_frame_specific:
-            {
-                //pc.printf(":: read_frame_specific x%x", current);   
+            {   
                 out_frame->buffer[curr_length++] = current;                
                 checksum -= current;
                 if (curr_length >= out_frame->length)
@@ -364,73 +361,6 @@
                 }
                 break;
             }
-        }    
-        rx_out = (rx_out + 1) % BUFFER_SIZE; 
-    }
-    
-    NVIC_EnableIRQ(UART1_IRQn);
-    
-    return finished_frame;   */
-    static int curr_length = 0;
-
-    frame_recv_state_t recv_state = wait_delimiter;
-    frame_t* frame = out_frame;
-    static char checksum = 0xFF;
-
-    bool finished_frame = false;
-
-    xbee_receive_led = !xbee_receive_led;
-    while(curr_length < max_length && !finished_frame)
-    {
-        char current = xbee.getc();
-        switch(recv_state)
-        {
-            case wait_delimiter:
-            {
-                //pc.printf(":: delimiter x%x", current);
-                if (current == ZIGBEE_DELIMITER)
-                {
-                    curr_length = 0;
-                    recv_state = read_length_msb;
-                    frame->length = 0;
-                }                
-                break;
-            }
-            case read_length_msb:  
-            {
-                frame->length = (current << 8);
-                recv_state = read_length_lsb;
-                break;
-            }
-            case read_length_lsb:
-            {                 
-                frame->length |= current;
-                //pc.printf("\n\rFrame length = %u", frame->length);  
-                checksum = 0xFF;
-                recv_state = read_frame_specific;
-                break;
-            }
-            case read_frame_specific:
-            {
-                //pc.printf(":: read_frame_specific x%x", current);   
-                frame->buffer[curr_length++] = current;                
-                checksum -= current;
-                if (curr_length >= frame->length)
-                {
-                    recv_state = read_checksum;
-                }
-                break;
-            }
-            case read_checksum:
-            {
-               // pc.printf(":: read_checksum x%x", current);   
-                recv_state = wait_delimiter;
-                if (checksum == current)
-                {
-                    finished_frame = true;
-                }
-                break;
-            }
         }     
     }
     return finished_frame;