liaison bluetooth entre gros robot -> panneau ou gros robot -> petit robot

Fork of liaison_Bluetooth by j d

Revision:
0:f39d89bfe442
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Liaison_Bluetooth_panneau_grosRob.cpp	Wed Apr 11 12:29:00 2018 +0000
@@ -0,0 +1,92 @@
+#include "liaison_Bluetooth_panneau-grosRob/Liaison_Bluetooth_panneau_grosRob.h"
+
+LiaisonBluetooth::LiaisonBluetooth(Serial bluetooth, DigitalIn state) : m_bluetooth(bluetooth), m_state(state) {
+}
+
+bool LiaisonBluetooth::paquet_en_attente() {
+    while (m_bluetooth.readable() && m_state) {
+        if (m_bluetooth.getc() == MARQUEUR_DEBUT_TRAME) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+PaquetDomotique *LiaisonBluetooth::lire() {
+    char identifiant = 0;
+    if (m_bluetooth.readable() && m_state) {
+        identifiant = m_bluetooth.getc();
+    } else return NULL;
+    
+    char buffer_longueur_paquet[8];
+    for (int i = 0 ; i < 8 ; i++) {
+        if (m_bluetooth.readable() && m_state) {
+            buffer_longueur_paquet[i] = m_bluetooth.getc();
+        } else return NULL;
+    }
+    int longueur_paquet = convertir_4char_en_int(buffer_longueur_paquet);
+    
+    char buffer_data[longueur_paquet];
+    int index = 0;
+    while (index < longueur_paquet-1) {
+        if (m_bluetooth.readable() && m_state) {
+            char c = m_bluetooth.getc();
+            
+            if (c == MARQUEUR_FIN_TRAME)
+                return NULL;
+            
+            buffer_data[index++] = c;
+        } else return NULL;
+    }
+    
+    return creer_paquetdomotique(identifiant, buffer_data);
+}
+
+void LiaisonBluetooth::envoyer(char idenfitiant, int longueur_data, char *data) {
+    if (m_state && m_bluetooth.writeable()) {
+        m_bluetooth.putc(idenfitiant);        
+    }
+    
+    char *longueur_buffer = convertir_int_en_4char(longueur_data);
+    for (int i = 0 ; i < 4 ; i++) {
+        if (m_state && m_bluetooth.writeable()) {
+            m_bluetooth.putc(longueur_buffer[i]);  
+        }
+    }
+    
+    for (int i = 0 ; i < longueur_data ; i++) {
+        if (m_state && m_bluetooth.writeable()) {
+            m_bluetooth.putc(data[i]);  
+        }
+    }
+}
+
+
+PaquetDomotique *creer_paquetdomotique(int identifiant, char *data) {
+    PaquetDomotique *paquet = (PaquetDomotique*)malloc(sizeof(PaquetDomotique));
+    paquet->identifiant = identifiant;
+    
+    paquet->data = (char*)malloc(sizeof(char)*strlen(data));
+    strcpy(paquet->data, data);
+    
+    return paquet;
+}
+void detruire_paquetdomotique(PaquetDomotique *paquet) {
+    free(paquet->data);
+    free(paquet);
+}
+
+char *convertir_int_en_4char(int integer) {
+    char data[4];
+    
+    data[3] = (integer>>24) & 0xFF;
+    data[2] = (integer>>16) & 0xFF;
+    data[1] = (integer>>8) & 0xFF;
+    data[0] = integer & 0xFF;
+    
+    return data;
+}
+int convertir_4char_en_int(char data[4]) {
+    return (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
+}
\ No newline at end of file