Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Revision:
26:cbf539141bfe
Parent:
25:7b808fb9e025
Child:
27:3baf4701a047
--- a/main.cpp	Mon Oct 02 18:46:45 2017 +0000
+++ b/main.cpp	Mon Oct 02 19:29:21 2017 +0000
@@ -23,6 +23,13 @@
 void display_error();
 DigitalOut error_led(LED3);
 
+Thread ws_send;
+void send_to_ws();
+typedef struct {
+    char buffer[64];
+} ws_message_t;
+Mail<ws_message_t, 32> messages_box;
+
 void set_remote_xbee_dio4(bool set, zigbee_addr_64_t addr);
 
 void set_pan_id(long pan_id);
@@ -57,28 +64,21 @@
 {    
     coordinator_config_t config = read_coordinator_config();
     
-    EthernetInterface eth;
-    eth.init("192.168.3.3", "255.255.255.0", "192.168.3.2"); //Use DHCP
-    eth.connect();
-    
-    Websocket ws(config.server_url);
-    ws.connect();
-        
     set_pan_id(config.pan_id);
 
     frame_t current_frame;
     
+    ws_send.start(callback(send_to_ws));
     flipper.attach(&send_del_to_all, 1.0); 
     while(1)
     {
-        ws.send("Allo");
         bool finished_packet = receive(&current_frame, BUFFER_SIZE);
         
         if (finished_packet)
         {            
-            process_frame(&current_frame);                       
+            process_frame(&current_frame);
         }
-        wait_ms(1);
+        wait_ms(10);
     }
 }
 #else
@@ -123,10 +123,7 @@
     {
         return -1;
     }
-    /*for (int i = 0; i < frame->length; i++)
-    {
-        char current = frame->buffer[i];        
-    }    */
+    
     if (frame->buffer[0] == 0x8B)
     {
         if(frame->buffer[5] != 0x00)
@@ -134,6 +131,7 @@
             error_led = 1;
             error_ticker.attach(&display_error, 1.0);    
         }
+        return 2;
     }
     else if (frame->buffer[0] == 0x90)
     {
@@ -167,15 +165,54 @@
             addr_64[last_addr_64_index] = temp_addr_64;
         }
           
+        ws_message_t* message = messages_box.alloc();
+          
         //Data starts at 12
         for (int i = 12; i <  frame->length; i++)
         {
+            message->buffer[i - 12] = frame->buffer[i];
             pc.putc(frame->buffer[i]);   
-        }        
+        }     
+        message->buffer[frame->length - 12] = '\0';
+        messages_box.put(message);
+        return 1;   
     }    
     return 0;
 }
 
+
+void send_to_ws()
+{
+    coordinator_config_t config = read_coordinator_config();
+    
+    EthernetInterface eth;
+    eth.init("192.168.3.3", "255.255.255.0", "192.168.3.2"); //Use DHCP
+    eth.connect();
+    
+    Websocket ws(config.server_url);
+    ws.connect();
+    osEvent evt;
+    while(1)
+    {
+        if (!ws.is_connected())
+        {
+            ws.connect();    
+        }
+        
+        evt = messages_box.get();
+        if (evt.status == osEventMail) {
+            ws_message_t* mail = (ws_message_t*)evt.value.p;
+            //ws.send(mail->buffer);
+            Thread::wait(500);
+            messages_box.free(mail);
+        }
+        else
+        {
+            Thread::wait(100);    
+        }
+    }
+}
+
 void send_del_to_all()
 {
     loop_led = !loop_led;