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:
Sat Sep 30 21:09:13 2017 +0000
Parent:
10:edcf07f33583
Child:
12:1286b80c68f7
Commit message:
Added working receive function

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	Sat Sep 30 20:29:47 2017 +0000
+++ b/main.cpp	Sat Sep 30 21:09:13 2017 +0000
@@ -4,7 +4,7 @@
 #include "parser.h"
 #include "sensors.h"
 
-#define IS_COORDINATOR 0
+#define IS_COORDINATOR 1
 
 #define PAN_ID 0xC0FFEE
 
@@ -22,7 +22,7 @@
 
     char hello_world[12] = "Hello world";
 
-    frame_t* current_frame;
+    frame_t current_frame;
 
 #if IS_COORDINATOR
 
@@ -34,24 +34,18 @@
 #endif
 
     while(1) {
-        /*if (pc.readable())
-        {     
-            c = pc.getc();
-            xbee.putc(c);      
-            //pc.putc(c);         
-        }*/
-
-        bool finished_packet = receive(current_frame, 2048);
+        bool finished_packet = receive(&current_frame, 2048);
 
         if (finished_packet)
         {
-            pc.printf("DATA RECEIVED : Data count = %u", current_frame->length);
-            for (int i = 0; i < current_frame->length; i++)
+            pc.printf("Data count = %u\r\n", current_frame.length);
+            pc.printf("data start::: ");
+            for (int i = 0; i < current_frame.length && i < 2048; i++)
             {
-                pc.putc(current_frame->buffer[i]);            
+                pc.putc(current_frame.buffer[i]);            
             }
-            pc.printf("\n\r");
+            pc.printf(" :::end\n\r");
         }
-        
+        //wait_ms(1);
     }
 }
--- a/xbee.cpp	Sat Sep 30 20:29:47 2017 +0000
+++ b/xbee.cpp	Sat Sep 30 21:09:13 2017 +0000
@@ -24,7 +24,7 @@
     
     wait_ms(5000);    
     
-    xbee_receive_led = 1;    
+    //xbee_receive_led = 1;    
 }
 
 
@@ -195,41 +195,45 @@
     static int curr_length = 0;
 
     static frame_recv_state_t recv_state = wait_delimiter;
-    static frame_t frame;
+    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)
     {
+        char current = xbee.getc();
         switch(recv_state)
         {
             case wait_delimiter:
             {
-                if (xbee.getc() == ZIGBEE_DELIMITER)
+                if (current == ZIGBEE_DELIMITER)
                 {
+                    curr_length = 0;
                     recv_state = read_length_msb;
+                    frame->length = 0;
                 }                
                 break;
             }
             case read_length_msb:  
             {
-                frame.length = (xbee.getc() << 8);
+                frame->length = (current << 8);
                 recv_state = read_length_lsb;
                 break;
             }
             case read_length_lsb:
-            {
-                frame.length |= xbee.getc();
+            {                      
+                frame->length |= current;
                 checksum = 0xFF;
                 recv_state = read_frame_specific;
                 break;
             }
             case read_frame_specific:
             {
-                frame.buffer[curr_length] = xbee.getc();
-                checksum -= frame.buffer[curr_length++];
-                if (curr_length >= frame.length)
+                frame->buffer[curr_length++] = current;                
+                checksum -= current;
+                if (curr_length >= frame->length)
                 {
                     recv_state = read_checksum;
                 }
@@ -238,10 +242,8 @@
             case read_checksum:
             {
                 recv_state = wait_delimiter;
-                xbee_receive_led = !xbee_receive_led;
-                if (checksum == xbee.getc())
+                if (checksum == current)
                 {
-                    out_frame = &frame;
                     finished_frame = true;
                 }
                 break;