Groom  1.1
BTS SNIR LaSalle Avignon 2021
CommunicationGroom.cpp
Aller à la documentation de ce fichier.
1 #include "CommunicationGroom.h"
2 #include <QDebug>
3 
18 CommunicationGroom::CommunicationGroom(QObject *parent) : QObject(parent), socketBluetooth(nullptr), peripheriqueGroomTrouve(false), discoveryAgent(nullptr)
19 {
20  qDebug() << Q_FUNC_INFO;
21 
23 }
24 
31 {
32  qDebug() << Q_FUNC_INFO;
33 
34  deconnecter();
35 }
36 
43 {
44  // vérifier la présence du Bluetooth
45  if(peripheriqueBluetooth.isValid())
46  {
47  // activer le bluetooth
48  peripheriqueBluetooth.powerOn();
49 
50  // récupérer le nom du périphérique local
52  qDebug() << Q_FUNC_INFO << nomPeripheriqueBluetooth;
53 
54  discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
55  connect(discoveryAgent, SIGNAL(finished()), this, SLOT(terminerRecherche()));
56  connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));
57  }
58  else qDebug() << Q_FUNC_INFO << "Pas de bluetooh !";
59 }
60 
67 {
68  // vérifier la présence du Bluetooth
69  if(!peripheriqueBluetooth.isValid())
70  return;
71 
72  if(discoveryAgent == nullptr)
73  return;
74 
75  qDebug() << Q_FUNC_INFO;
76 
77  // Démarrer la recherche de périphériques Bluetooth
79  discoveryAgent->start();
80 }
81 
88 {
89  if(groom.name().contains(ENTETE_NOM_PERIPHERIQUE))
91 }
92 
98 void CommunicationGroom::connecter(const QBluetoothDeviceInfo device)
99 {
100  // vérifier la présence du Bluetooth
101  if(!peripheriqueBluetooth.isValid())
102  return;
103 
104  if(socketBluetooth == nullptr)
105  {
106  socketBluetooth = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
107  connect(socketBluetooth, SIGNAL(connected()), this, SLOT(socketConnected()));
108  connect(socketBluetooth, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
109  connect(socketBluetooth, SIGNAL(readyRead()), this, SLOT(recevoir()));
110  }
111 
112  qDebug() << Q_FUNC_INFO << device.name() << device.address().toString();
113  QBluetoothAddress adresse = QBluetoothAddress(device.address());
114  QBluetoothUuid uuid = QBluetoothUuid(QBluetoothUuid::SerialPort);
115  socketBluetooth->connectToService(adresse, uuid);
116  socketBluetooth->open(QIODevice::ReadWrite);
117 }
118 
125 {
126  // vérifier la présence du Bluetooth
127  if(!peripheriqueBluetooth.isValid())
128  return;
129  if(socketBluetooth == nullptr)
130  return;
131  if(socketBluetooth->isOpen())
132  {
133  qDebug() << Q_FUNC_INFO << nomPeripheriqueGroom << adressePeripheriqueGroom;
134  socketBluetooth->close();
135  }
136 }
137 
144 {
145  // vérifier la présence du Bluetooth
146  if(!peripheriqueBluetooth.isValid())
147  return false;
148  if(socketBluetooth == nullptr)
149  return false;
150  qDebug() << Q_FUNC_INFO << socketBluetooth->isOpen();
151  return socketBluetooth->isOpen();
152 }
153 
160 {
162  adressePeripheriqueGroom = socketBluetooth->peerAddress().toString();
163  qDebug() << Q_FUNC_INFO << nomPeripheriqueGroom << adressePeripheriqueGroom;
165 }
166 
173 {
174  qDebug() << Q_FUNC_INFO << nomPeripheriqueGroom << adressePeripheriqueGroom;
176  nomPeripheriqueGroom.clear();
177  adressePeripheriqueGroom.clear();
178 }
179 
186 {
187  qDebug() << Q_FUNC_INFO;
188  emit rechercheTerminee();
189 }
190 
196 void CommunicationGroom::deviceDiscovered(const QBluetoothDeviceInfo &device)
197 {
198  qDebug() << Q_FUNC_INFO << device.name() << device.address().toString();
199  if(device.name().contains(ENTETE_NOM_PERIPHERIQUE))
200  {
201  qDebug() << Q_FUNC_INFO << "Module Groom trouvé !";
202  discoveryAgent->stop();
203  groom = device;
205  emit groomDetecte(device.name(), device.address().toString());
207  }
208 }
209 
216 {
228  QByteArray donnees;
229 
230  donnees = socketBluetooth->readAll();
231  //qDebug() << Q_FUNC_INFO << donnees;
232 
233  trameReception += QString(donnees.data());
234  //qDebug() << Q_FUNC_INFO << trameReception;
235 
236  if(trameReception.contains(ENTETE_TRAME) && trameReception.contains(FIN_TRAME))
237  {
238  QStringList trames = trameReception.split(FIN_TRAME, QString::SkipEmptyParts);
239  qDebug() << Q_FUNC_INFO << trames;
240 
241  for(int i = 0; i < trames.count(); ++i)
242  {
243  if(trames[i].contains(ENTETE_TRAME))
244  {
245  qDebug() << Q_FUNC_INFO << trames[i];
246 
247  QStringList listeDonnees = traiterTrameReception(trames[i]);
248 
249  if (listeDonnees[TYPE_TRAME] != TRAME_ETAT)
250  {
251  emit actualiserEtats(listeDonnees[Emplacements::Etat].toInt(), listeDonnees[Emplacements::Sonnette].toInt(), listeDonnees[Emplacements::Presence].toInt(), listeDonnees[Emplacements::ModeSonnette].toInt(), listeDonnees[Emplacements::ModePresence].toInt());
252  }
253  }
254  }
255 
256  trameReception.clear();
257  }
258 }
259 
265 void CommunicationGroom::envoyer(QString trame)
266 {
267  // vérifier la présence du Bluetooth
268  if(!peripheriqueBluetooth.isValid())
269  return;
270  if(!estConnecte())
271  return;
272  qDebug() << Q_FUNC_INFO << trame;
273  socketBluetooth->write(trame.toLocal8Bit());
274 }
275 
281 QString CommunicationGroom::fabriquerTrame(EtatGroom etatGroom, EtatSonnette etatSonnette, EtatPresence etatPresence)
282 {
293  QString trame = "$CMD;" + QString::number(etatGroom) + ";" + QString::number(etatSonnette) + ";" + QString::number(etatPresence) + "\r\n";
294  qDebug() << Q_FUNC_INFO << trame;
295 
296  return trame;
297 }
298 
305 {
312  QString trame = "$MSGPERSO;" + messageOccupant + "\r\n";
313  qDebug() << Q_FUNC_INFO << trame;
314 
315  return trame;
316 }
317 
324 {
325 
339  qDebug() << Q_FUNC_INFO << trame;
340  QStringList champs = trame.split(";");
341  qDebug() << Q_FUNC_INFO << champs;
342 
343  return champs;
344 }
Presence
@ Presence
Definition: CommunicationGroom.h:89
ENTETE_TRAME
#define ENTETE_TRAME
Valeur d'entête de la trame.
Definition: CommunicationGroom.h:20
CommunicationGroom::fabriquerTrame
QString fabriquerTrame(EtatGroom etatGroom, EtatSonnette etatSonnette, EtatPresence etatPresence)
Méthode de fabrication de la trame "CMD".
Definition: CommunicationGroom.cpp:281
CommunicationGroom::trameReception
QString trameReception
Chaine de caractères de la trame de reception.
Definition: CommunicationGroom.h:117
Sonnette
@ Sonnette
Definition: CommunicationGroom.h:88
CommunicationGroom::connexionGroom
void connexionGroom(QString nomPeripherique, QString adressePeripherique)
EtatSonnette
EtatSonnette
Définit les différents états du mode Sonnette.
Definition: CommunicationGroom.h:63
CommunicationGroom::nomPeripheriqueBluetooth
QString nomPeripheriqueBluetooth
Nom du périphérique local.
Definition: CommunicationGroom.h:112
CommunicationGroom::estConnecte
bool estConnecte()
Méthode pour valider la connexion ou non.
Definition: CommunicationGroom.cpp:143
CommunicationGroom::terminerRecherche
void terminerRecherche()
Slot de fin de recherche bluetooth.
Definition: CommunicationGroom.cpp:185
CommunicationGroom::adressePeripheriqueGroom
QString adressePeripheriqueGroom
Adresse MAC du périphérique distant.
Definition: CommunicationGroom.h:114
CommunicationGroom::socketConnected
void socketConnected()
Slot de connexion au socket.
Definition: CommunicationGroom.cpp:159
CommunicationGroom::groom
QBluetoothDeviceInfo groom
Le module Bluetooth GROOM.
Definition: CommunicationGroom.h:111
CommunicationGroom::deconnecter
void deconnecter()
Slot de déconnexion bluetooth.
Definition: CommunicationGroom.cpp:124
CommunicationGroom::peripheriqueGroomTrouve
bool peripheriqueGroomTrouve
Booléen si periphérique trouvé ou non.
Definition: CommunicationGroom.h:115
CommunicationGroom::rechercheTerminee
void rechercheTerminee()
CommunicationGroom::deviceDiscovered
void deviceDiscovered(const QBluetoothDeviceInfo &device)
Slot d'affichage de périphériques.
Definition: CommunicationGroom.cpp:196
TRAME_ETAT
#define TRAME_ETAT
Valeur état de la connexion bluetooth (trame alive)
Definition: CommunicationGroom.h:25
CommunicationGroom::discoveryAgent
QBluetoothDeviceDiscoveryAgent * discoveryAgent
Pointeur vers la classe QBluetoothDeviceDiscoveryAgent de détection de périphériques.
Definition: CommunicationGroom.h:116
ENTETE_NOM_PERIPHERIQUE
#define ENTETE_NOM_PERIPHERIQUE
Valeur de l'entête du nom du périphérique "groom-1".
Definition: CommunicationGroom.h:22
Etat
@ Etat
Definition: CommunicationGroom.h:87
CommunicationGroom::socketDisconnected
void socketDisconnected()
Slot de déconnexion au socket.
Definition: CommunicationGroom.cpp:172
CommunicationGroom::CommunicationGroom
CommunicationGroom(QObject *parent=nullptr)
Déclaration du constructeur.
Definition: CommunicationGroom.cpp:18
CommunicationGroom::nomPeripheriqueGroom
QString nomPeripheriqueGroom
Nom du périphérique distant.
Definition: CommunicationGroom.h:113
ModePresence
@ ModePresence
Definition: CommunicationGroom.h:91
CommunicationGroom::connecter
void connecter()
Slot de connexion bluetooth.
Definition: CommunicationGroom.cpp:87
TYPE_TRAME
#define TYPE_TRAME
Valeur du type de trame.
Definition: CommunicationGroom.h:23
EtatGroom
EtatGroom
Définit les différents états du groom.
Definition: CommunicationGroom.h:31
CommunicationGroom::recevoir
void recevoir()
Slot de reception de trame.
Definition: CommunicationGroom.cpp:215
CommunicationGroom::groomDetecte
void groomDetecte(QString nomPeripherique, QString adressePeripherique)
ModeSonnette
@ ModeSonnette
Definition: CommunicationGroom.h:90
CommunicationGroom::~CommunicationGroom
~CommunicationGroom()
Déclaration du destructeur.
Definition: CommunicationGroom.cpp:30
CommunicationGroom::traiterTrameReception
QStringList traiterTrameReception(QString trame)
Méthode de traitement de trame de l'état de l'occupant.
Definition: CommunicationGroom.cpp:323
CommunicationGroom::rechercher
void rechercher()
Méthode de recherche bluetooth.
Definition: CommunicationGroom.cpp:66
CommunicationGroom::peripheriqueBluetooth
QBluetoothLocalDevice peripheriqueBluetooth
L'interface Bluetooth du dongle PC.
Definition: CommunicationGroom.h:109
CommunicationGroom::actualiserEtats
void actualiserEtats(int Groom, int Sonnette, int Presence, int ModeSonnette, int ModePresence)
EtatPresence
EtatPresence
Définit les différents états du mode Détecteur de présence.
Definition: CommunicationGroom.h:73
CommunicationGroom::envoyer
void envoyer(QString trame)
Méthode d'envoi de trame.
Definition: CommunicationGroom.cpp:265
FIN_TRAME
#define FIN_TRAME
Valeur de fin de la trame.
Definition: CommunicationGroom.h:21
QObject
CommunicationGroom::socketBluetooth
QBluetoothSocket * socketBluetooth
La socket de communication Bluetooth (client)
Definition: CommunicationGroom.h:108
CommunicationGroom::initialiserBluetooth
void initialiserBluetooth()
Méthode inititialisation du bluetooth.
Definition: CommunicationGroom.cpp:42
CommunicationGroom::fabriquerTrameMessageOccupant
QString fabriquerTrameMessageOccupant(QString messageOccupant)
Méthode de fabrication de la trame "MSGPERSO".
Definition: CommunicationGroom.cpp:304
CommunicationGroom.h
Déclaration de la classe CommunicationGroom.
CommunicationGroom::deconnexionGroom
void deconnexionGroom(QString nomPeripherique, QString adressePeripherique)