ROV'NET  0.2
BTS SNIR LaSalle Avignon 2020
communicationrov.cpp
Aller à la documentation de ce fichier.
1 
7 #include "communicationrov.h"
8 
10 {
11  qDebug() << Q_FUNC_INFO;
12  port = new QSerialPort(this);
13 
14  connect(port, SIGNAL(errorOccurred(QSerialPort::SerialPortError)), this, SLOT(gererErreur(QSerialPort::SerialPortError)));
15 }
16 
18 {
19  if(port->isOpen())
20  port->close();
21  qDebug() << Q_FUNC_INFO;
22 }
23 
25 {
26  if(port->open(QIODevice::ReadWrite))
27  {
28  qDebug() << Q_FUNC_INFO << "Port ouvert" << port->isOpen();
29  if(port->isOpen())
30  {
31  emit etatPortModifie(true, port->portName());
32  connect(port, SIGNAL(readyRead()), this, SLOT(recevoir()));
33  return true;
34  }
35  else
36  return false;
37  }
38  #ifdef MODE_CONNECTE
39  else
40  {
41  if(!port->isOpen())
42  {
43  QMessageBox::critical(nullptr, "Communication rov", QString::fromUtf8("Erreur ouverture du port série !"));
44  return false;
45  }
46  }
47  #endif
48 }
49 
51 {
52  port->close();
53  disconnect(port, SIGNAL(readyRead()), this, SLOT(recevoir()));
54  qDebug() << Q_FUNC_INFO << "Port fermé" << !port->isOpen();
55  emit etatPortModifie(false, port->portName());
56 }
57 
59 {
60  port->setPortName(maConfiguration.port);
61  port->setBaudRate(maConfiguration.debit);
62  port->setDataBits((QSerialPort::DataBits)maConfiguration.bitsDonnees);
63  port->setStopBits((QSerialPort::StopBits)maConfiguration.bitStop);
64  port->setParity(QSerialPort::NoParity);
65  port->setFlowControl(QSerialPort::NoFlowControl);
66 }
67 
69 {
70  int nombresOctets = -1;
71 
72  if (port == NULL || !port->isOpen())
73  {
74  return -1;
75  }
76 
77  nombresOctets = port->write(trame.toLatin1());
78  return nombresOctets;
79 }
80 
82 {
83  while(port->bytesAvailable())
84  {
85  donnees += port->readAll();
86  //qDebug() << Q_FUNC_INFO << "bytesAvailable" << port->bytesAvailable() << "donnees" << donnees;
87  }
88 
89  if(donnees.startsWith("$") && donnees.endsWith("\r\n"))
90  {
91  trameRecue = QString(donnees.data());
92  //qDebug() << Q_FUNC_INFO << "trameRecue" << trameRecue;
94  donnees.clear();
95  }
96 }
97 
99 {
100  QStringList listePortsDetectes;
101 
102  foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
103  {
104  listePortsDetectes.push_back(info.portName());
105  }
106 
107  return listePortsDetectes;
108 }
109 
111 {
112  return port->isOpen();
113 }
114 
115 void CommunicationRov::gererErreur(QSerialPort::SerialPortError erreur)
116 {
117  switch(erreur)
118  {
119  case QSerialPort::ResourceError : fermerPort();
120  break;
121  }
122 }
123 
bool getEtatPort()
retourne l&#39;etat du port série
int debit
Attribut définissant la vitesse en bits/s de la communication.
static QStringList detecterPortsDisponibles()
retourne la liste des ports disponibles
void recevoir()
Récupere la trame disponible sur le port à la réception du signal ReadyRead et émet un signal nouvell...
void nouvelleTrame(QString trame)
Envoie un signal informant qu&#39;une nouvelle trame est disponible.
structure permettant de configurer une communication
QSerialPort * port
accède a la configuration de la liaison série
int bitsDonnees
Attribut définissant le nombre de bits de données de la communication.
~CommunicationRov()
Destructeur de la classe CommunicationRov.
void setConfiguration(Configuration maConfiguration)
Affecte a l&#39;objet CommunicationRov une configuration du port série virtuel.
void etatPortModifie(bool etat, QString information)
Envoie un signal informant que l&#39;état du port a été modifié
QString trameRecue
Derniere trameRecue.
int bitStop
Attribut définissant le nombre de bits de stop de la communication.
QString port
Attribut définissant le nom d&#39;un port.
Fichier qui contient la déclaration de la classe CommunicationRov.
La classe QObject est la classe de base de tous les objets Qt. Elle permet à ces objets Qt de dispose...
CommunicationRov(QObject *parent=nullptr)
constructeur de la classe CommunicationRov
bool ouvrirPort()
Permet d&#39;ouvrir le port série virtuel.
int emettreTrame(QString trame)
Emet la trame vers le robot.
void gererErreur(QSerialPort::SerialPortError)
void fermerPort()
Permet de fermer le port série virtuel.
QByteArray donnees
Tableau contenant les données bruts envoyé depuis la liason série.