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:
Sun Oct 01 20:01:37 2017 +0000
Parent:
14:cd488eba8bba
Child:
16:0a5f3c449c95
Commit message:
Working reception + new analusis of packets;

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	Sun Oct 01 18:53:18 2017 +0000
+++ b/main.cpp	Sun Oct 01 20:01:37 2017 +0000
@@ -5,12 +5,12 @@
 #include "sensors.h"
 
 #define IS_COORDINATOR 0
-
 #define PAN_ID 0xC0FFEE
 
-#define BUFFER_SIZE 2048
+#define BUFFER_SIZE 64
 
 char recv_buff[BUFFER_SIZE] = {0};
+DigitalOut loop_led(LED4);
 
 void set_remote_xbee_dio4(bool set);
 
@@ -63,7 +63,6 @@
         
         if (finished_packet)
         {
-            pc.printf("Data count = %u\r\n", current_frame.length);
             pc.printf("data start::: ");
             for (int i = 0; i < current_frame.length && i < BUFFER_SIZE; i++)
             {
@@ -75,13 +74,13 @@
         set_remote_xbee_dio4(toggle_led);
         toggle_led = !toggle_led;
 
+        loop_led = !loop_led;
         wait(1);
     }
 }
 #else
 void routeur()
 {    
-    Serial pc(USBTX, USBRX); // tx, rx
     router_config_t config = read_router_config();
     set_pan_id(config.pan_id);
     char sensor_buffer[64] = {};
@@ -97,6 +96,7 @@
 
         transmit_request(sensor_buffer, 15, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST);
         
+        loop_led = !loop_led;
         wait(config.refresh_freq);
     }
 }
@@ -104,7 +104,6 @@
 
 void set_pan_id(long pan_id)
 {
-    //Serial pc(USBTX, USBRX); // tx, rx
     char pan_id_buffer[8] = {0};
 
     for (int i = 0; i < 8; i++)
--- 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