![]() |
Chrono-Cross
0.8
BTS SN-IR La Salle Avignon 2017
|
#include <ihm.h>
Signaux | |
void | terminer () |
void | quit () |
Fonctions membres publiques | |
IHM (QWidget *parent=0) | |
~IHM () | |
Connecteurs privés | |
void | quitter () |
void | selectionnerLigne (int index) |
void | actualiserMessage (const QString &message) |
void | envoyerCommande () |
void | envoyer (QString &trame) |
void | ouvrir () |
void | onReadyRead () |
Fonctions membres privées | |
void | lireParametresINI () |
void | ecrireParametresINI () |
void | initialiserBD () |
void | demarrer () |
void | arreter () |
int | emettre (const QString &trame) |
bool | ouvrirPort (const QString &portName) |
char | verifierAcquittement (QString trame) |
unsigned short | calculerChecksum (QString data) |
bool | recevoir (QString &message, unsigned int timeout=TIMEOUT) |
Attributs privés | |
QextSerialPort * | port |
QByteArray | donnees |
QLabel * | labelLigne |
QComboBox * | choixLigne |
QLabel * | labelType |
QComboBox * | leType |
QLabel * | labelCommande |
QLineEdit * | leCommande |
QCheckBox * | cbDisplayEvent |
QTextEdit * | messagesTTE |
QPushButton * | bEnvoyer |
QPushButton * | bQuitter |
QPushButton * | boutonOuvrir |
QSqlDatabase | db |
QString | nomPort |
IHM::IHM | ( | QWidget * | parent = 0 | ) |
Références bEnvoyer, boutonOuvrir, bQuitter, cbDisplayEvent, choixLigne, envoyerCommande(), initialiserBD(), labelCommande, labelLigne, labelType, leCommande, leType, lireParametresINI(), messagesTTE, nomPort, ouvrir(), port, quit(), quitter(), et selectionnerLigne().
: QWidget( parent ) { labelLigne = new QLabel(this); labelLigne->setText(QString::fromUtf8("Port : ")); choixLigne = new QComboBox(this); for(int i=0; i < 4; i++) { choixLigne->addItem("/dev/ttyUSB" + QString::number(i)); } choixLigne->setCurrentIndex(0); labelType = new QLabel(this); labelType->setText(QString::fromUtf8("Transmission : ")); leType = new QComboBox(this); leType->addItem("Aucune"); leType->addItem("RS232"); leType->setCurrentIndex(1); labelCommande = new QLabel(QString::fromUtf8("Commande :"), this); leCommande = new QLineEdit(this); //leCommande->setText(""); //leCommande->setFixedWidth(leCommande->sizeHint().width()); cbDisplayEvent = new QCheckBox(QString::fromUtf8("Display Event"), this); messagesTTE = new QTextEdit(this); messagesTTE->setReadOnly(true); bEnvoyer = new QPushButton(QString::fromUtf8("Envoyer"), this); bEnvoyer->setEnabled(true); //bArreter = new QPushButton(QString::fromUtf8("Arrêter"), this); //bArreter->setEnabled(false); bQuitter = new QPushButton("Quitter", this); boutonOuvrir = new QPushButton("Ouvrir", this); boutonOuvrir->setEnabled(true); QHBoxLayout *hLayout0a = new QHBoxLayout; QHBoxLayout *hLayout0b = new QHBoxLayout; QHBoxLayout *hLayout3 = new QHBoxLayout; QHBoxLayout *hLayout4 = new QHBoxLayout; QVBoxLayout *mainLayout = new QVBoxLayout; hLayout0a->addWidget(labelLigne); hLayout0a->addWidget(choixLigne); hLayout0a->addWidget(labelType); hLayout0a->addWidget(leType); hLayout0a->addWidget(boutonOuvrir); hLayout0a->addStretch(); hLayout0b->addWidget(labelCommande); hLayout0b->addWidget(leCommande); hLayout0b->addWidget(bEnvoyer); hLayout0b->addWidget(cbDisplayEvent); hLayout0b->addStretch(); hLayout3->addWidget(messagesTTE); hLayout4->addWidget(bQuitter); hLayout4->addStretch(); mainLayout->addLayout(hLayout0a); mainLayout->addLayout(hLayout0b); mainLayout->addLayout(hLayout3); mainLayout->addLayout(hLayout4); setLayout(mainLayout); // Initialisation port = NULL; nomPort = ""; initialiserBD(); connect(choixLigne, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerLigne(int))); connect(bEnvoyer, SIGNAL(clicked()), this, SLOT(envoyerCommande())); connect(bQuitter, SIGNAL(clicked()), this, SLOT(quitter())); connect(boutonOuvrir, SIGNAL(clicked()), this, SLOT(ouvrir())); connect(this, SIGNAL(quit()), qApp, SLOT(quit())); lireParametresINI(); setWindowTitle(QString::fromUtf8("Test Chrono TagHeuer")); //setFixedHeight(sizeHint().height()); //move(0, 0); const int width = qApp->desktop()->availableGeometry(this).width(); // ou : qApp->desktop()->width() const int height = qApp->desktop()->availableGeometry(this).height(); // ou : qApp->desktop()->height() //qDebug() << Q_FUNC_INFO << width << height; resize(width, height-30); }
IHM::~IHM | ( | ) |
Références ecrireParametresINI(), et port.
{ if (port != NULL && port->isOpen()) { port->close(); } ecrireParametresINI(); }
void IHM::actualiserMessage | ( | const QString & | message | ) | [private, slot] |
Références messagesTTE.
Référencé par envoyer(), onReadyRead(), et ouvrir().
{ messagesTTE->append(message); }
void IHM::arreter | ( | ) | [private] |
Référencé par quitter().
{ }
unsigned short IHM::calculerChecksum | ( | QString | data | ) | [private] |
Référencé par envoyer().
{ unsigned short checksum = 0; int i = 0; if(data.startsWith("#")) i = 1; for(;i<data.length();i++) checksum += data[i].toLatin1(); return checksum; }
void IHM::demarrer | ( | ) | [private] |
{ }
void IHM::ecrireParametresINI | ( | ) | [private] |
Références choixLigne.
Référencé par ~IHM().
{ QString fichierINI = qApp->applicationDirPath() + "/" + qApp->applicationName() + ".ini"; QSettings parametres(fichierINI, QSettings::IniFormat); parametres.setIniCodec(QTextCodec::codecForName("UTF-8")); parametres.beginGroup("rs232"); parametres.setValue("port", choixLigne->currentText()); parametres.endGroup(); }
int IHM::emettre | ( | const QString & | trame | ) | [private] |
void IHM::envoyer | ( | QString & | trame | ) | [private, slot] |
Références actualiserMessage(), calculerChecksum(), et emettre().
Référencé par envoyerCommande().
{ unsigned short checksum = 0; checksum = calculerChecksum(trame); trame += QString("\t%1").arg(checksum, 4, 16, QChar('0')).toUpper(); qDebug() << Q_FUNC_INFO << trame; actualiserMessage(QString::fromUtf8("Trame envoyée : %1").arg(trame)); trame += "\r\n"; emettre(trame); }
void IHM::envoyerCommande | ( | ) | [private, slot] |
Références envoyer(), leCommande, leType, port, et T_AUCUNE.
Référencé par IHM().
{ if (port != NULL && port->isOpen()) { if(leType->currentIndex() == T_AUCUNE) { QMessageBox::critical(0, "Erreur !", ("Il faut choisir un type de transmission !")); return; } } else if(leType->currentIndex() > T_AUCUNE) { QMessageBox::critical(0, "Erreur !", ("Il faut ouvrir le port !")); return; } if(leCommande->text().isEmpty()) return; QString trame = leCommande->text(); envoyer(trame); }
void IHM::initialiserBD | ( | ) | [private] |
Référencé par IHM().
{ /*db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(qApp->applicationDirPath() + "/" + qApp->applicationName() + ".sqlite"); if(!db.open()) { qDebug() << "Erreur" << qApp->applicationDirPath() + "/" + qApp->applicationName() + ".sqlite"; return ; }*/ }
void IHM::lireParametresINI | ( | ) | [private] |
Références choixLigne, et nomPort.
Référencé par IHM().
{ QString fichierINI = qApp->applicationDirPath() + "/" + qApp->applicationName() + ".ini"; QSettings parametres(fichierINI, QSettings::IniFormat); parametres.setIniCodec(QTextCodec::codecForName("UTF-8")); nomPort = parametres.value("rs232/port", "/dev/toto").toString(); bool trouve = false; for(int i=0; i < choixLigne->count(); i++) { if(choixLigne->itemText(i) == nomPort) { choixLigne->setCurrentIndex(i); trouve = true; } } if(!trouve) { choixLigne->addItem(nomPort); int position = choixLigne->findText(nomPort); choixLigne->setCurrentIndex(position); } }
void IHM::onReadyRead | ( | ) | [private, slot] |
Références actualiserMessage(), cbDisplayEvent, DISPLAY_EVENT, donnees, port, et verifierAcquittement().
Référencé par ouvrirPort().
{ while(port->bytesAvailable()) { donnees += port->readAll(); usleep(100000); // cf. timeout } if(donnees.contains("\r\n")) { QString trameRecue = QString(donnees.data()); QStringList trames = trameRecue.split("\r\n"); char etatAcquittement; qDebug() << Q_FUNC_INFO << "trame(s) recue(s) =" << trames; for(int i =0;i<trames.size();i++) { if(!trames.at(i).isEmpty()) { etatAcquittement = verifierAcquittement(trames.at(i)); if(etatAcquittement == 'C') { actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : <font color=\"green\">ok</font>")); continue; } if(etatAcquittement == 'R') { actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : <font color=\"red\">erreur !</font>")); continue; } if(trames.at(i).startsWith(DISPLAY_EVENT)) { if(cbDisplayEvent->checkState()) actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : %1").arg(trames.at(i))); } else { actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : <font color=\"blue\"> </font>").arg(trames.at(i))); } } } donnees.clear(); } }
void IHM::ouvrir | ( | ) | [private, slot] |
Références actualiserMessage(), boutonOuvrir, nomPort, ouvrirPort(), et port.
Référencé par IHM().
{ QString trame; QString reponse; if(boutonOuvrir->text() == "Ouvrir") { if(nomPort.length() == 0) { QMessageBox::critical(0, "Erreur !", ("Il faut choisir un port !")); return; } if(!ouvrirPort(nomPort)) { QMessageBox::critical(0, "Erreur !", QString("Impossible d'ouvrir le port %1 !").arg(nomPort)); return; } actualiserMessage(QString::fromUtf8("Ouverture du port %1 réussie").arg(nomPort)); boutonOuvrir->setText("Fermer"); } else { if (port != NULL && port->isOpen()) { port->close(); } delete port; port = NULL; actualiserMessage(QString::fromUtf8("Fermeture du port %1").arg(nomPort)); boutonOuvrir->setText("Ouvrir"); } }
bool IHM::ouvrirPort | ( | const QString & | portName | ) | [private] |
Références onReadyRead(), et port.
Référencé par ouvrir().
{ if (port != NULL && port->isOpen()) { port->close(); disconnect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead())); } port = new QextSerialPort(portName, QextSerialPort::EventDriven); port->setBaudRate(BAUD9600); port->setFlowControl(FLOW_OFF); port->setParity(PAR_NONE); port->setDataBits(DATA_8); port->setStopBits(STOP_1); //port->setTimeout(500); if (port->open(QIODevice::ReadWrite) == true) { connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead())); } return port->isOpen(); }
void IHM::quitter | ( | ) | [private, slot] |
bool IHM::recevoir | ( | QString & | message, |
unsigned int | timeout = TIMEOUT |
||
) | [private] |
Références port.
void IHM::selectionnerLigne | ( | int | index | ) | [private, slot] |
void IHM::terminer | ( | ) | [signal] |
char IHM::verifierAcquittement | ( | QString | trame | ) | [private] |
Référencé par onReadyRead().
{ /* Type de trame d'acquittement : cf. http://www.reliableracing.com/downloads/THCOM08.pdf page 15 AK X Avec : X = 'C' accepted, 'F' rejected, 'R' not supported */ if(trame.startsWith("AK C")) return 'C'; else if(trame.startsWith("AK F")) return 'F'; else if(trame.startsWith("AK R")) return 'R'; else return 'N'; // ce n'est pas une trame d'acquittement }
QPushButton* IHM::bEnvoyer [private] |
Référencé par IHM().
QPushButton* IHM::boutonOuvrir [private] |
QPushButton* IHM::bQuitter [private] |
Référencé par IHM().
QCheckBox* IHM::cbDisplayEvent [private] |
Référencé par IHM(), et onReadyRead().
QComboBox* IHM::choixLigne [private] |
Référencé par ecrireParametresINI(), IHM(), lireParametresINI(), et selectionnerLigne().
QSqlDatabase IHM::db [private] |
QByteArray IHM::donnees [private] |
Référencé par onReadyRead().
QLabel* IHM::labelCommande [private] |
Référencé par IHM().
QLabel* IHM::labelLigne [private] |
Référencé par IHM().
QLabel* IHM::labelType [private] |
Référencé par IHM().
QLineEdit* IHM::leCommande [private] |
Référencé par envoyerCommande(), et IHM().
QComboBox* IHM::leType [private] |
Référencé par envoyerCommande(), et IHM().
QTextEdit* IHM::messagesTTE [private] |
Référencé par actualiserMessage(), et IHM().
QString IHM::nomPort [private] |
Référencé par IHM(), lireParametresINI(), ouvrir(), et selectionnerLigne().
QextSerialPort* IHM::port [private] |
Référencé par emettre(), envoyerCommande(), IHM(), onReadyRead(), ouvrir(), ouvrirPort(), recevoir(), et ~IHM().