Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Revision:
15:c4d17caf0709
Parent:
14:cd488eba8bba
Child:
17:8abdbfa6019c
--- a/xbee.cpp	Sun Oct 01 18:53:18 2017 +0000
+++ b/xbee.cpp	Sun Oct 01 20:01:37 2017 +0000
@@ -255,10 +255,8 @@
 
 void transmit(int packet_length)
 {
-    //Serial pc(USBTX, USBRX); // tx, rx
     for (int i = 0; i < packet_length + 4; i++)
     {
-        //pc.printf(" 0x%x", TransmitBuffer[i]);
         xbee.putc(TransmitBuffer[i]);
     }
     xbee_transmit_led = !xbee_transmit_led;
@@ -266,76 +264,72 @@
 
 bool receive(frame_t* out_frame, int max_length)
 {
-    static int curr_length = 0;
-
-    static 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(xbee.readable() && curr_length < max_length && !finished_frame)
+    if (xbee.readable())
     {
-        char current = xbee.getc();
-        switch(recv_state)
+        //Serial pc(USBTX, USBRX); // tx, rx
+        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)
         {
-            case wait_delimiter:
-            {
-                if (current == ZIGBEE_DELIMITER)
-                {
-                    curr_length = 0;
-                    recv_state = read_length_msb;
-                    frame->length = 0;
-                }                
-                break;
-            }
-            case read_length_msb:  
+            char current = xbee.getc();
+            switch(recv_state)
             {
-                frame->length = (current << 8);
-                recv_state = read_length_lsb;
-                break;
-            }
-            case read_length_lsb:
-            {                      
-                frame->length |= current;
-                checksum = 0xFF;
-                recv_state = read_frame_specific;
-                break;
-            }
-            case read_frame_specific:
-            {
-                frame->buffer[curr_length++] = current;                
-                checksum -= current;
-                if (curr_length >= frame->length)
+                case wait_delimiter:
                 {
-                    recv_state = read_checksum;
+                    //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;
                 }
-                break;
-            }
-            case read_checksum:
-            {
-                recv_state = wait_delimiter;
-                if (checksum == current)
+                case read_frame_specific:
                 {
-                    finished_frame = true;
+                    //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;
                 }
-                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;    
     }
-    
-    return finished_frame;    
+    return false;
 }
-
-/**
- * 
- *   // Calculate checksum
-    char checksum = 0xFF;
-    for (int i = 3; i < FRAME_CHEKSUM_POS; i++)
-    {
-        checksum -= TransmitBuffer[i];
-    }
-    
-    // Insert checksum into buffer
-    TransmitBuffer[FRAME_CHEKSUM_POS] = checksum;*/
\ No newline at end of file