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 21:47:53 2017 +0000
Parent:
26:cbf539141bfe
Child:
29:56b6c15904e6
Commit message:
Added comments to the main

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
xbee.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Oct 02 19:29:21 2017 +0000
+++ b/main.cpp	Mon Oct 02 21:47:53 2017 +0000
@@ -1,45 +1,59 @@
+
+#define IS_COORDINATOR 0
+
 #include "mbed.h"
 
 #include "rtos.h"
-
-#include "EthernetInterface.h"
-#include "Websocket.h"
-
+// Communication avec les Zigbee
 #include "xbee.h"
+// Lecture de fichier de config
 #include "parser.h"
-#include "sensors.h"
+    
+#if IS_COORDINATOR
+    // Pour la connection ethernet du coordinateur
+    #include "EthernetInterface.h"
+    #include "Websocket.h"
+#else
+    // Les capteurs des routeurs
+    #include "sensors.h"
+#endif
 
-#define IS_COORDINATOR 1
-
-#define PAN_ID 0xC0FFEE
-
-#define BUFFER_SIZE 64
-
-char recv_buff[BUFFER_SIZE] = {0};
+// Loop led qui permet de verifier l'opération correcte du module
 DigitalOut loop_led(LED4);
 
-Ticker flipper;
+// Pour les fonctionnalites de synchro
+Ticker ticker;
+
+// A la reception d'un message de transmission non reussie, on demarre un ticker qui ferme
+// la DEL3 apres une seconde, pour permettre d'indiquer la presence d'erreur
 Ticker error_ticker;
-void display_error();
 DigitalOut error_led(LED3);
+void error_display();
 
+// Thread du coordinateur qui permet l'envoi au serveur distant a l'aide de websocket
 Thread ws_send;
 void send_to_ws();
+// Structure servant de message pour la mailbox
 typedef struct {
     char buffer[64];
 } ws_message_t;
 Mail<ws_message_t, 32> messages_box;
 
+// Envoie un remote AT command vers le noeud a l'addresse fournie
 void set_remote_xbee_dio4(bool set, zigbee_addr_64_t addr);
 
+// Set le pan ID du reseau pour le noeud courant a l'aide de AT Command
 void set_pan_id(long pan_id);
 
+// Liste de noeuds decouvert a la reception de messages
 zigbee_addr_64_t addr_64[255];
+// Index actuel dans la liste de devices
 volatile int last_addr_64_index = 0;
-
+// Analyse un frame de data
 int process_frame(frame_t* frame);
-
+// Envois a tout les devices connus dans la liste d'addresse
 void send_del_to_all();
+// Prends les valeurs des capteurs et les envois au coordinateur
 void get_all_sensors();
 
 #if IS_COORDINATOR   
@@ -62,18 +76,23 @@
 #if IS_COORDINATOR
 void coordinator()
 {    
+    // Lecture de la configuration du coordinateur
     coordinator_config_t config = read_coordinator_config();
     
+    // On set le pan ID du device adequatement dans le fichier de configuration
     set_pan_id(config.pan_id);
-
+    
+    // Demarrage du thread qui s'occupe d'envoyer au web server
+    ws_send.start(callback(send_to_ws));
+    // Ticker qui envoi a tout les noeuds une commande de clignotement
+    ticker.attach(&send_del_to_all, 1.0); 
+    
     frame_t current_frame;
-    
-    ws_send.start(callback(send_to_ws));
-    flipper.attach(&send_del_to_all, 1.0); 
     while(1)
     {
-        bool finished_packet = receive(&current_frame, BUFFER_SIZE);
-        
+        // Reception
+        bool finished_packet = receive(&current_frame);
+        // Si un packet complet est recu, on le traite
         if (finished_packet)
         {            
             process_frame(&current_frame);
@@ -84,28 +103,35 @@
 #else
 void routeur()
 {    
+    // Lecture de la configuration du routeur
     router_config_t config = read_router_config();
     
+    // On set le pan ID du device adequatement dans le fichier de configuration
     set_pan_id(config.pan_id);
     
+    // Init les capteurs qui seront captures par le noeud
     initialize_sensors();
 
-    flipper.attach(&get_all_sensors, config.refresh_freq);
+    // Appel de la fonction de mesure des donnes de capteurs a tout les 
+    // temps donnes par config.refresh_freq
+    ticker.attach(&get_all_sensors, config.refresh_freq);
     
-    frame_t current_frame;
+    frame_t current_frame;    
     while(1)
     {        
-        bool finished_packet = receive(&current_frame, BUFFER_SIZE);
-        
+        // Reception
+        bool finished_packet = receive(&current_frame);
+        // Si un packet complet est recu, on le traite
         if (finished_packet)
         {            
             process_frame(&current_frame);                       
         }   
-        wait_ms(1);
+        wait_ms(10);
     }
 }
 #endif
 
+// Cree un pan id a l'aide du long en parametre, et envoi la commande at de configuration du PAN ID
 void set_pan_id(long pan_id)
 {
     char pan_id_buffer[8] = {0};
@@ -116,6 +142,7 @@
     at_command_set('I', 'D', pan_id_buffer, 8);
 }
 
+// Analyse du frame recu, et prise de decisions
 int process_frame(frame_t* frame)
 {
     Serial pc(USBTX, USBRX); // tx, rx
@@ -129,7 +156,7 @@
         if(frame->buffer[5] != 0x00)
         {
             error_led = 1;
-            error_ticker.attach(&display_error, 1.0);    
+            error_ticker.attach(&error_display, 1.0);    
         }
         return 2;
     }
@@ -180,15 +207,18 @@
     return 0;
 }
 
-
+#if IS_COORDINATOR
+// Fonction du thread d'envoi au web server par websocket
 void send_to_ws()
 {
     coordinator_config_t config = read_coordinator_config();
     
+    // Interface Ethernet 
     EthernetInterface eth;
-    eth.init("192.168.3.3", "255.255.255.0", "192.168.3.2"); //Use DHCP
+    eth.init(/*"192.168.3.3", "255.255.255.0", "192.168.3.2"*/); //Use DHCP
     eth.connect();
     
+    // Creation du WebSocket
     Websocket ws(config.server_url);
     ws.connect();
     osEvent evt;
@@ -202,7 +232,7 @@
         evt = messages_box.get();
         if (evt.status == osEventMail) {
             ws_message_t* mail = (ws_message_t*)evt.value.p;
-            //ws.send(mail->buffer);
+            ws.send(mail->buffer);
             Thread::wait(500);
             messages_box.free(mail);
         }
@@ -212,7 +242,9 @@
         }
     }
 }
+#endif
 
+// Envoi a tout les noeuds la commande at remote pour changer l'etat de la DEL
 void send_del_to_all()
 {
     loop_led = !loop_led;
@@ -224,6 +256,7 @@
     }
 }
 
+// Envoi la commande remote at pour setter la sortie de DIO4
 void set_remote_xbee_dio4(bool set, zigbee_addr_64_t addr)
 {
     if (set)
@@ -238,6 +271,9 @@
     }
 }
 
+#if !IS_COORDINATOR
+// Effecture une mesure sur tout les capteurs connus dans le tableau de fct puis
+// envoi les resultats au coordinateur
 void get_all_sensors()
 {
     loop_led = !loop_led;
@@ -261,8 +297,10 @@
         }
     }     
 }
+#endif
 
-void display_error()
+// Ferme la DEL d'erreur et detach le ticker
+void error_display()
 {
     error_led = 0;
     error_ticker.detach();
--- a/xbee.cpp	Mon Oct 02 19:29:21 2017 +0000
+++ b/xbee.cpp	Mon Oct 02 21:47:53 2017 +0000
@@ -301,7 +301,7 @@
     xbee_transmit_led = !xbee_transmit_led;
 }
 
-bool receive(frame_t* out_frame, int max_length)
+bool receive(frame_t* out_frame)
 {
     static int curr_length = 0;
 
@@ -311,7 +311,7 @@
     bool finished_frame = false;
 
     xbee_receive_led = !xbee_receive_led;
-    while(xbee.readable() && curr_length < max_length && !finished_frame)
+    while(xbee.readable() && curr_length < MAX_FRAME_SIZE && !finished_frame)
     {
         char current = xbee.getc();
         switch(recv_state)
--- a/xbee.h	Mon Oct 02 19:29:21 2017 +0000
+++ b/xbee.h	Mon Oct 02 21:47:53 2017 +0000
@@ -51,9 +51,11 @@
     char addr_lsb;
 } zigbee_addr_16_t;
 
+#define MAX_FRAME_SIZE 64
+
 typedef struct {
     int length;
-    char buffer[2048];
+    char buffer[MAX_FRAME_SIZE];
 } frame_t;
 
 typedef enum {
@@ -161,5 +163,5 @@
 void remote_at_command_set(char msb, char lsb, char parameter, char options, zigbee_addr_64_t destination);
 
 void transmit(int packet_length);
-bool receive(frame_t* buffer, int max_length);
+bool receive(frame_t* buffer);