liaison bluetooth entre gros robot -> panneau ou gros robot -> petit robot
Fork of liaison_Bluetooth by
LiaisonBluetooth.cpp
- Committer:
- duperoux_j
- Date:
- 2018-04-11
- Revision:
- 4:642635655630
- Parent:
- 3:46a9b9c1e1c0
- Child:
- 5:be0c602be047
File content as of revision 4:642635655630:
#include "LiaisonBluetooth/LiaisonBluetooth.h" /* if (action_robot_2) { char *score_char_array = convertir_int_en_4char(score_total); paquet_domotique_envoyer(0x30, 4, score_char_array); delete []score_char_array; } */ 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 = new char[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]; }