Projet e-stock  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  qDebug() << Q_FUNC_INFO;
26 }
27 
33 {
34  port->close();
35  qDebug() << Q_FUNC_INFO;
36 }
37 
43 {
44  qDebug() << Q_FUNC_INFO;
46  ouvrirPort();
47 }
48 
54 {
55  qDebug() << Q_FUNC_INFO;
56  port->close();
57 }
58 
64 {
65  qDebug() << Q_FUNC_INFO;
66  port->setPortName(nomPort);
67  port->setBaudRate(QSerialPort::Baud9600);
68  port->setDataBits(QSerialPort::Data8);
69  port->setParity(QSerialPort::NoParity);
70  port->setStopBits(QSerialPort::OneStop);
71  port->setFlowControl(QSerialPort::NoFlowControl);
72 }
73 
79 {
80  if (port->open(QIODevice::ReadWrite))
81  {
82  qDebug() << Q_FUNC_INFO << "connecté au port" << nomPort;
83  connect(port, SIGNAL(readyRead()), this, SLOT(recevoirTrame()));
84  }
85  else
86  {
87  qDebug() << Q_FUNC_INFO << "erreur ouverture du port" << port->error();
88  }
89 }
90 
96 void Communication::setNomPort(QString nouveauPortSerie)
97 {
98  nomPort = nouveauPortSerie;
99  qDebug() << Q_FUNC_INFO << nomPort;
100 }
101 
107 void Communication::envoyerTrame(QString trame)
108 {
109  if (port->isOpen())
110  {
111  port->write(trame.toLatin1());
112  }
113 }
114 
120 {
121  trameBrute = "\0";
122 
123  while (port->waitForReadyRead(500))
124  {
125  trameBrute.append(port->readAll());
126  }
127 
130 }
131 
138 bool Communication::verifierTrame(QString trame)
139 {
140  qDebug() << Q_FUNC_INFO << trame;
141  if(!trame.startsWith(EN_TETE))
142  {
143  return false;
144  }
145  if(!trame.endsWith(DELIMITEUR_FIN))
146  {
147  return false;
148  }
149 
150  return true;
151 }
152 
158 void Communication::traiterTrame(QString trame)
159 {
160  if(trame.startsWith(EN_TETE + DELIMITEUR_CHAMP + TRAME_OUVERTURE + DELIMITEUR_CHAMP))
161  {
162  emit envoieTrameOuverture(trame);
163  }
164  else if(trame.startsWith(EN_TETE + DELIMITEUR_CHAMP + TRAME_ETAT + DELIMITEUR_CHAMP))
165  {
166  emit envoieTrameEtat(trame);
167  }
168  else if(trame.startsWith(EN_TETE + DELIMITEUR_CHAMP + TRAME_POIDS + DELIMITEUR_CHAMP))
169  {
170  emit envoieTramePoids(trame);
171  }
172 }
173 
179 void Communication::envoyerRequetePoids(QString numeroCasier)
180 {
181  QString trame = "CASIERS;3;" + numeroCasier + ";\r\n";
182  envoyerTrame(trame);
183 }
void traiterTrame(QString trame)
Définition de la méthode TraiterTrame.
void envoieTrameEtat(QString trame)
#define TRAME_OUVERTURE
Definition: Communication.h:30
~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:68
QString nomPort
Variable qui contient le nom du port serie.
Definition: Communication.h:69
QSerialPort * port
Variable pointeur sur le port.
Definition: Communication.h:67
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:22
#define TRAME_POIDS
Definition: Communication.h:32
void recevoirTrame()
Définition de la méthode recevoirTrame.
#define DELIMITEUR_CHAMP
Definition: Communication.h:26
void setNomPort(QString nouveauPortSerie)
Définition de la méthode setNomPort.
void envoieTrameOuverture(QString trame)
void envoieTramePoids(QString trame)
#define EN_TETE
Definition: Communication.h:25
#define TRAME_ETAT
Definition: Communication.h:31
La classe QObject est la classe de base de tous les objets Qt. Elle permet à ces objets Qt de dispose...
void demarrerCommunicationPort()
Définition de la méthode demarrerCommunicationPort.
void configurerPort()
Définition de la méthode configurerPort.
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:27