Projet e-stok  0.2
BTS SNIR LaSalle Avignon 2020
Communication.cpp
Aller à la documentation de ce fichier.
1 #include "Communication.h"
2 #include <QDebug>
3 #include <QObject>
4 
23 Communication::Communication(QObject *parent) : QObject(parent), port(new QSerialPort(this)), trameBrute("\0"), nomPort(SERIAL_PORT_NAME)
24 {
25  #ifdef DEBUG_COMMUNICATION
26  qDebug() << Q_FUNC_INFO;
27  #endif
28 }
29 
35 {
36  port->close();
37  #ifdef DEBUG_COMMUNICATION
38  qDebug() << Q_FUNC_INFO;
39  #endif
40 }
41 
47 {
48  #ifdef DEBUG_COMMUNICATION
49  qDebug() << Q_FUNC_INFO;
50  #endif
52  ouvrirPort();
53 }
54 
60 {
61  #ifdef DEBUG_COMMUNICATION
62  qDebug() << Q_FUNC_INFO;
63  #endif
64  port->close();
65 }
66 
72 {
73  #ifdef DEBUG_COMMUNICATION
74  qDebug() << Q_FUNC_INFO;
75  #endif
76  port->setPortName(nomPort);
77  port->setBaudRate(QSerialPort::Baud9600);
78  port->setDataBits(QSerialPort::Data8);
79  port->setParity(QSerialPort::NoParity);
80  port->setStopBits(QSerialPort::OneStop);
81  port->setFlowControl(QSerialPort::NoFlowControl);
82 }
83 
89 {
90  if (port->open(QIODevice::ReadWrite))
91  {
92  #ifdef DEBUG_COMMUNICATION
93  qDebug() << Q_FUNC_INFO << "connecté au port" << nomPort;
94  #endif
95  connect(port, SIGNAL(readyRead()), this, SLOT(recevoirTrame()));
96  }
97  else
98  {
99  #ifdef DEBUG_COMMUNICATION
100  qDebug() << Q_FUNC_INFO << "erreur ouverture du port" << port->error();
101  #endif
102  }
103 }
104 
110 void Communication::setNomPort(QString nouveauPortSerie)
111 {
112  nomPort = nouveauPortSerie;
113  #ifdef DEBUG_COMMUNICATION
114  qDebug() << Q_FUNC_INFO << nomPort;
115  #endif
116 }
117 
123 void Communication::envoyerTrame(QString trame)
124 {
125  if (port->isOpen())
126  {
127  port->write(trame.toLatin1());
128  }
129 }
130 
136 {
137  trameBrute = "\0";
138 
139  while (port->waitForReadyRead(500))
140  {
141  trameBrute.append(port->readAll());
142  }
143 
146 }
147 
154 bool Communication::verifierTrame(QString trame)
155 {
156  #ifdef DEBUG_COMMUNICATION
157  qDebug() << Q_FUNC_INFO << trame;
158  #endif
159  if(!trame.startsWith(EN_TETE))
160  {
161  return false;
162  }
163  if(!trame.endsWith(DELIMITEUR_FIN))
164  {
165  return false;
166  }
167 
168  return true;
169 }
170 
176 void Communication::traiterTrame(QString trame)
177 {
178  if(trame.startsWith(EN_TETE + DELIMITEUR_CHAMP + TRAME_OUVERTURE + DELIMITEUR_CHAMP))
179  {
180  emit envoieTrameOuverture(trame);
181  }
182  else if(trame.startsWith(EN_TETE + DELIMITEUR_CHAMP + TRAME_ETAT + DELIMITEUR_CHAMP))
183  {
184  emit envoieTrameEtat(trame);
185  }
186  else if(trame.startsWith(EN_TETE + DELIMITEUR_CHAMP + TRAME_POIDS + DELIMITEUR_CHAMP))
187  {
188  emit envoieTramePoids(trame);
189  }
190 }
191 
197 void Communication::envoyerRequetePoids(QString numeroCasier)
198 {
199  QString trame = "CASIERS;3;" + numeroCasier + ";\r\n";
200  envoyerTrame(trame);
201 }
202 
209 {
210  QString trame = "CASIERS;1;" + numeroCasier + ";\r\n";
211  envoyerTrame(trame);
212 }
213 
220 {
221  QString trame = "CASIERS;2;" + numeroCasier + ";\r\n";
222  envoyerTrame(trame);
223 }
void traiterTrame(QString trame)
Définition de la méthode TraiterTrame.
void envoieTrameEtat(QString trame)
#define TRAME_OUVERTURE
Definition: Communication.h:32
~Communication()
Destructeur de la classe Communication.
bool verifierTrame(QString trame)
Définition de la méthode verifierTrame.
void arreterCommunicationPort()
Définition de la méthode arreterCommunicationPort.
QString trameBrute
Variable qui contient la trame brute.
Definition: Communication.h:72
QString nomPort
Variable qui contient le nom du port serie.
Definition: Communication.h:73
QSerialPort * port
Variable pointeur sur le port.
Definition: Communication.h:71
void ouvrirPort()
Définition de la métohde ouvrirPort.
void envoyerTrame(QString trame)
Définition de la méthode envoyerTrame.
Définition de la classe Communication.
#define SERIAL_PORT_NAME
Définit le nom du port série associé au SE.
Definition: Communication.h:24
#define TRAME_POIDS
Definition: Communication.h:34
void recevoirTrame()
Définition de la méthode recevoirTrame.
#define DELIMITEUR_CHAMP
Definition: Communication.h:28
void setNomPort(QString nouveauPortSerie)
Définition de la méthode setNomPort.
void envoyerRequeteOuvertureCasier(QString numeroCasier)
Définition de la méthode envoyerRequeteOuvertureCasier.
void envoieTrameOuverture(QString trame)
void envoieTramePoids(QString trame)
#define EN_TETE
Definition: Communication.h:27
#define TRAME_ETAT
Definition: Communication.h:33
void demarrerCommunicationPort()
Définition de la méthode demarrerCommunicationPort.
void configurerPort()
Définition de la méthode configurerPort.
void envoyerRequeteEtatCasiers(QString numeroCasier)
Définition de la méthode envoyerRequeteEtatCasiers.
Communication(QObject *parent=nullptr)
Constructeur de la classe Communication.
void envoyerRequetePoids(QString numeroCasier=0)
Définition de la méthode envoyerRequetePoids.
#define DELIMITEUR_FIN
Definition: Communication.h:29