Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Revision:
23:c3f25b511448
Parent:
22:7edae38d0758
Parent:
21:04fae6a95131
Child:
24:29ec42daa82e
--- a/xbee.cpp	Mon Oct 02 16:02:27 2017 +0000
+++ b/xbee.cpp	Mon Oct 02 16:59:26 2017 +0000
@@ -371,71 +371,67 @@
     NVIC_EnableIRQ(UART1_IRQn);
     
     return finished_frame;   */
-     if (xbee.readable())
+    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)
     {
-        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)
         {
-            char current = xbee.getc();
-            switch(recv_state)
+            case wait_delimiter:
             {
-                case wait_delimiter:
+                //pc.printf(":: delimiter x%x", current);
+                if (current == ZIGBEE_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:  
+                    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)
                 {
-                    frame->length = (current << 8);
-                    recv_state = read_length_lsb;
-                    break;
+                    recv_state = read_checksum;
                 }
-                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:
+                break;
+            }
+            case read_checksum:
+            {
+               // pc.printf(":: read_checksum x%x", current);   
+                recv_state = wait_delimiter;
+                if (checksum == current)
                 {
-                    //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;
+                    finished_frame = true;
                 }
-                case read_checksum:
-                {
-                   // pc.printf(":: read_checksum x%x", current);   
-                    recv_state = wait_delimiter;
-                    if (checksum == current)
-                    {
-                        finished_frame = true;
-                    }
-                    break;
-                }
-            }     
-        }
-        return finished_frame;    
+                break;
+            }
+        }     
     }
-    return false;
+    return finished_frame;    
 }