Chrono-Cross  0.8
BTS SN-IR La Salle Avignon 2017
Signaux | Fonctions membres publiques | Connecteurs privés | Fonctions membres privées | Attributs privés
Référence de la classe IHM

#include <ihm.h>

Liste de tous les membres

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

Documentation des constructeurs et destructeur

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();
}

Documentation des fonctions membres

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]

Références port.

Référencé par envoyer().

{
    int nombresOctets = -1;

    if (port == NULL || !port->isOpen())
    {
        return -1;
    }

    nombresOctets = port->write(trame.toLatin1());

    qDebug() << Q_FUNC_INFO << "nombresOctets =" << nombresOctets;
    qDebug() << Q_FUNC_INFO << "trame =" << trame;

    return nombresOctets;
}
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::quit ( ) [signal]

Référencé par IHM(), et quitter().

void IHM::quitter ( ) [private, slot]

Références arreter(), et quit().

Référencé par IHM().

{  
   arreter();

   emit quit();
}
bool IHM::recevoir ( QString &  message,
unsigned int  timeout = TIMEOUT 
) [private]

Références port.

{
    QByteArray buffer;

    if (port == NULL || !port->isOpen())
    {
        return -1;
    }

    port->waitForReadyRead(timeout);
    buffer = port->readAll();
    while (port->waitForReadyRead(100))
        buffer += port->readAll();

    message = QString(buffer.data());

    qDebug() << Q_FUNC_INFO << message;

    return (bool)message.length();
}
void IHM::selectionnerLigne ( int  index) [private, slot]

Références choixLigne, et nomPort.

Référencé par IHM().

{
    nomPort = choixLigne->currentText();
}
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
}

Documentation des données membres

QPushButton* IHM::bEnvoyer [private]

Référencé par IHM().

QPushButton* IHM::boutonOuvrir [private]

Référencé par IHM(), et ouvrir().

QPushButton* IHM::bQuitter [private]

Référencé par IHM().

QCheckBox* IHM::cbDisplayEvent [private]

Référencé par IHM(), et onReadyRead().

QComboBox* IHM::choixLigne [private]
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]
QextSerialPort* IHM::port [private]

La documentation de cette classe a été générée à partir des fichiers suivants :
 Tout Classes Fichiers Fonctions Variables Macros