|
Campus Serre
1.0
BTS SN-IR La Salle Avignon 2018
|
Communique avec la serre via un port série virtuel. Plus de détails...
#include <gestionPort.h>
Connecteurs publics | |
| void | receptionnerDonnees () |
| Réception des trames de la serre. | |
Signaux | |
| void | nouvelleTrame (QString trame) |
Fonctions membres publiques | |
| GestionPort (QObject *parent=0) | |
| Constructeur : crée, paramétre et ouvre le port. | |
| ~GestionPort () | |
| Destructeur. | |
| int | envoyerDonnees (const QString &trame) |
| Envoie des trames a la serre. | |
| bool | estOuvert () |
| Vérification si le port est ouvert. | |
Fonctions membres privées | |
| void | creerPort () |
| Création du port. | |
| void | parametrerPort () |
| Paramétrage du port. | |
| void | ouvrirPort () |
| Ouverture du port. | |
| bool | verifierTrame (QString trame) |
| Vérifie si la trame passée en paramètre est une trame PCS complete lisible. | |
| void | fermerPort () |
| Fermeture du port. | |
Attributs privés | |
| QextSerialPort * | port |
| relation vers la classe QextSerialPort | |
| GestionPort::GestionPort | ( | QObject * | parent = 0 | ) |
| parent | Adresse de l'objet parent (sinon 0) |
Références creerPort(), ouvrirPort(), et parametrerPort().
: QObject(parent)
{
creerPort();
parametrerPort();
ouvrirPort();
}
{
}
| void GestionPort::creerPort | ( | ) | [private] |
Référencé par GestionPort().
| int GestionPort::envoyerDonnees | ( | const QString & | trame | ) |
| bool GestionPort::estOuvert | ( | ) |
Références port.
Référencé par IHMCampusSerre::IHMCampusSerre().
| void GestionPort::fermerPort | ( | ) | [private] |
| void GestionPort::nouvelleTrame | ( | QString | trame | ) | [signal] |
Référencé par receptionnerDonnees().
| void GestionPort::ouvrirPort | ( | ) | [private] |
Références PORT, port, et receptionnerDonnees().
Référencé par GestionPort().
{
port->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
if(port->isOpen())
{
connect(port, SIGNAL(readyRead()), this, SLOT(receptionnerDonnees()));
}
else
{
qDebug() << Q_FUNC_INFO << "Port" << QLatin1String(PORT) << "non ouvert";
}
}
| void GestionPort::parametrerPort | ( | ) | [private] |
Références port.
Référencé par GestionPort().
| void GestionPort::receptionnerDonnees | ( | ) | [slot] |
Références nouvelleTrame(), port, et verifierTrame().
Référencé par ouvrirPort().
{
QByteArray donneesRecues;
while(port->bytesAvailable())
{
donneesRecues += port->readAll();
usleep(100000);
}
QStringList listeDonnees;
QString donnees(donneesRecues);
listeDonnees = donnees.split("$",QString::SkipEmptyParts);
for(int i = 0; i < listeDonnees.length(); i++)
{
qDebug() << Q_FUNC_INFO << '$' + listeDonnees.at(i);
if(verifierTrame('$' + listeDonnees.at(i)))
{
emit nouvelleTrame('$' + listeDonnees.at(i));
}
}
}
| bool GestionPort::verifierTrame | ( | QString | trame | ) | [private] |
| trame | QString La trame à verifier |
Référencé par receptionnerDonnees().
{
QString checksum;
const QString debutTrame = "$";
const QString typeTrame = "PCS";
const QString debutChecksum = "*";
/*
//Exemple de trame
//QString trame = "$PCS.000.235.220.800.600.020.001.025.000.001*";
*/
// phrase vide ?
if(trame.length() != 0)
{
// est-ce une phrase PCS ?
if(trame.startsWith(debutTrame))
{
// est-ce la bonne phrase ?
if(trame.startsWith(debutTrame + typeTrame))
{
// y-a-t-il un checksum ?
if(trame.contains(debutChecksum))
{
checksum = trame.section(debutChecksum, 1, 1);
qDebug() << Q_FUNC_INFO << "checksum : 0x" << checksum;
return 1;
}
else
qDebug() << Q_FUNC_INFO << "Attention : il n'y a pas de checksum dans cette phrase !";
return 0;
}
else
qDebug() << Q_FUNC_INFO << "Erreur : ce n'est pas une trame PCS !";
return 0;
}
else
qDebug() << Q_FUNC_INFO << "Erreur : ce n'est pas une trame PCS !";
return 0;
}
else
qDebug() << Q_FUNC_INFO << "Erreur : phrase vide !";
return 0;
}
QextSerialPort* GestionPort::port [private] |
Référencé par creerPort(), envoyerDonnees(), estOuvert(), fermerPort(), ouvrirPort(), parametrerPort(), et receptionnerDonnees().
1.7.6.1