Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Files at this revision

API Documentation at this revision

Comitter:
Cheroukee
Date:
Mon Oct 02 17:35:34 2017 +0000
Parent:
23:c3f25b511448
Child:
25:7b808fb9e025
Commit message:
Functional receive

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
xbee.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Oct 02 16:59:26 2017 +0000
+++ b/main.cpp	Mon Oct 02 17:35:34 2017 +0000
@@ -71,17 +71,15 @@
         bool finished_packet = receive(&current_frame, BUFFER_SIZE);
         
         if (finished_packet)
-        {
-            
-            process_frame(&current_frame);            
-            //remote_at_command_query('N', 'D', 0x02);
+        {            
+            process_frame(&current_frame);                       
         }
         
         //set_remote_xbee_dio4(toggle_led);
         toggle_led = !toggle_led;
 
         loop_led = !loop_led;
-        wait_ms(10);
+        wait_ms(100);
     }
 }
 #else
--- 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;