From b2f0fe9b283d31df3a8fb51d5ededa033f65b590 Mon Sep 17 00:00:00 2001 From: Lucas Date: Sun, 24 Aug 2014 11:01:11 +0200 Subject: [PATCH] Plein de trucs sympas --- FenPrincipale.cpp | 222 +++++++++++++++++++++++++++-------- FenPrincipale.h | 26 +++- FenPrincipale.ui | 209 +++++++++++++++++++++++++++++---- InPut/cookiedecoder.cpp | 8 +- InPut/cookiedecoder.h | 1 + InPut/databasecontroller.cpp | 6 +- InPut/databasecontroller.h | 1 + InPut/sensormanager.cpp | 7 ++ InPut/sensorvalue.cpp | 18 +-- InPut/serial.cpp | 24 +++- InPut/serial.h | 7 ++ Logger21.pro | 6 +- dialog.cpp | 11 +- dialog.h | 4 +- main.cpp | 5 +- webservicesmanager.cpp | 114 ++++++++++++++++++ webservicesmanager.h | 38 ++++++ 17 files changed, 602 insertions(+), 105 deletions(-) create mode 100644 webservicesmanager.cpp create mode 100644 webservicesmanager.h diff --git a/FenPrincipale.cpp b/FenPrincipale.cpp index 6b883ec..dbca89d 100644 --- a/FenPrincipale.cpp +++ b/FenPrincipale.cpp @@ -3,11 +3,11 @@ FenPrincipale::FenPrincipale(Serial* _com) { - // Initialisation paramètres position=0; n=0; com = _com; + optimisation_graph = false; resetIndicator=NULL; // -------------------- @@ -28,6 +28,12 @@ FenPrincipale::FenPrincipale(Serial* _com) { kwebview = new QWebView(); p_konami_layout->addWidget(kwebview); // -------------------- + if(com->isOkay()) { + log_serial("Port série activé avec succès"); + } else { + log_serial("Problème d'ouverture du port série"); + } + // Initialisation radio buttons de la barre de menu (sélection port/baudrate) QActionGroup* group = new QActionGroup( this ); this->action137050->setCheckable(true); @@ -63,8 +69,10 @@ FenPrincipale::FenPrincipale(Serial* _com) { sensormgr = new SensorManager(this); QVector sensorList = sensormgr->getSensors(); nbSensors = sensorList.size(); - foreach(Sensor* s, sensorList) + log_decoder("Lecture de la liste des capteurs depuis 'conf/cplist.xml'"); + foreach(Sensor* s, sensorList) { sel_capteur->addItem(s->getName()); + } for(int i=0;igetSensor(i)->getName()); + foreach(SensorValue* s, sensormgr->getSensor(i)->getValues()) { + if(s->getUnit().isEmpty()) + log_decoder("|| ↳ "+s->getName()); + else log_decoder("|| ↳ "+s->getName()+ " en "+s->getUnit()); + modele->setHorizontalHeaderItem(v,new QStandardItem(s->getName())); v++; } @@ -85,6 +101,7 @@ FenPrincipale::FenPrincipale(Serial* _com) { qRegisterMetaType > ("QVector"); // Connect entre la bdd et fenprincipale pour les réponses aux requêtes de lecture connect(sensormgr->getDB(),SIGNAL(dataRead(int,int,QVector,QString)), this,SLOT(data_read(int,int,QVector,QString))); + connect(sensormgr->getDB(),SIGNAL(message(QString)), this,SLOT(log_database(QString))); // ------------------- // Initialisation des différentes pages graphic_range_selector = new TimeRangeSelector(); @@ -92,23 +109,25 @@ FenPrincipale::FenPrincipale(Serial* _com) { tableManager = new TableMgr(&tableauxHist,sensormgr); carte = new MapsView(c_maps); - message("[INFO] Loading boarding table..."); + log_logger("[INFO] Loading boarding table..."); tableauBord = new BoardingTable(container,sensormgr); - message("[INFO] Loaded !"); + log_logger("[INFO] Loaded !"); // ------------------------ // Démarrage du timer d'actualisation - message("[INFO] Starting refreshing timer"); + log_logger("[INFO] Starting refreshing timer"); actTemps = new QTimer(); connect(actTemps,SIGNAL(timeout()),this,SLOT(syncTime())); actTemps->start(1000); // ----------------------------- // Démarrage du décodeur de trames myDecoder = new CookieDecoder(); - connect(myDecoder, SIGNAL(newValue(int,int,double)), sensormgr, SLOT(newValue(int,int,double))); - message("[INFO] All started !"); + connect(myDecoder,SIGNAL(newValue(int,int,double)), sensormgr, SLOT(newValue(int,int,double))); + connect(myDecoder,SIGNAL(message(QString)),this,SLOT(log_decoder(QString))); + log_logger("[INFO] All started !"); // ----------------------------- // Prise en charge du port série connect(com,SIGNAL(dataRead(QList)),this,SLOT(informationsReceived(QList))); + connect(com,SIGNAL(message(QString)),this,SLOT(log_serial(QString))); // ------------------- // Implémentation du chronoreader h_depart = QDateTime::currentDateTime(); @@ -116,37 +135,33 @@ FenPrincipale::FenPrincipale(Serial* _com) { chronolayout->addWidget(chronoWidget); // -------------------- // Lecture des paramètres enregistrés - QFile file("conf/url.ini"); - file.open(QIODevice::ReadOnly); - QString url = QString(file.readAll()); - file.close(); - dataServerLineEdit->setText(url); - - QFile df("conf/datedepart.ini"); - df.open(QIODevice::ReadOnly); - QString date = QString(df.readAll()); - df.close(); - - if(date.size() == 3) { - int h=date.split(":").at(0).toInt(); - int m=date.split(":").at(1).toInt(); - int s=date.split(":").at(2).toInt(); - - heureLancement->setTime(QTime(h,m,s)); - chronoWidget->laucherCounter(QTime(h,m,s)); - } else { - heureLancement->setTime(QTime::currentTime()); - chronoWidget->laucherCounter(QTime::currentTime()); - } + QSettings *data_settings = new QSettings(); + loadSettings(); + + QDateTime t = data_settings->value("datedepart",QDateTime::currentDateTime()).toDateTime(); + heureLancement->setDateTime(t); + chronoWidget->laucherCounter(t.time()); + + mWebServicesManager = new WebServicesManager(); + connect(mWebServicesManager, SIGNAL(notification(int,QString)), this, SLOT(onWebServicesNotification(int,QString))); + connect(mWebServicesManager, SIGNAL(message(QString)), this, SLOT(log_webservices(QString))); + + mWebServicesManager->test(DATASERVER); + mWebServicesManager->test(METEWOWSERVER); // ------------------------- // Couleur custom pour l'indicateur de réception d'informations QPalette p = indicator_rx->palette(); p.setColor(QPalette::Disabled, QPalette::Background, QColor(255,0,0)); indicator_rx->setPalette(p); //--------------------------- + + } -FenPrincipale::~FenPrincipale(){} +FenPrincipale::~FenPrincipale(){ + qDebug() << "tamer"; + delete com; +} void FenPrincipale::resizeEvent(QResizeEvent *) { @@ -222,7 +237,6 @@ void FenPrincipale::syncTime() { * Gestion des données */ void FenPrincipale::informationsReceived(QList trames) { - setIndicatorRx(); if(trames.size() > 0) { for(int i=0;idecodeString(trames[i]); @@ -259,11 +273,12 @@ void FenPrincipale::data_read(int idc, int idv, QVector data, QString reas */ void FenPrincipale::setIndicatorRx() { - resetIndicator = new QTimer(); n++; + qDebug() << "Increment indicator" << n; connect(resetIndicator,SIGNAL(timeout()),this,SLOT(resetIndicatorRx())); + resetIndicator->setSingleShot(true); resetIndicator->start(500); indicator_rx->setChecked(true); @@ -271,16 +286,52 @@ void FenPrincipale::setIndicatorRx() { void FenPrincipale::resetIndicatorRx() { n--; + qDebug() << "Decrement indicator" << n; if(n==0) indicator_rx->setChecked(false); } -void FenPrincipale::message(QString message){ +void FenPrincipale::log_logger(QString message){ + log(0, message); +} + +void FenPrincipale::log_serial(QString message){ + log(1, message); +} - message = QDateTime::currentDateTime().toString("[hh:mm:ss] ") + message; +void FenPrincipale::log_decoder(QString message){ + log(2, message); +} - barreStatus->showMessage(message); - console->appendPlainText(message); +void FenPrincipale::log_database(QString message){ + log(3, message); +} + +void FenPrincipale::log_webservices(QString message){ + log(4, message); +} + +void FenPrincipale::log(int section, QString message) { + message = QDateTime::currentDateTime().toString("[hh:mm:ss] ") + message; + //barreStatus->showMessage(message); + + switch(section) { + case 0: //logger + console->appendPlainText(message); + break; + case 1: //serial + console_serie->append(message); + break; + case 2: //decoder + console_decodeur->append(message); + break; + case 3: // bdd + console_bdd->append(message); + break; + case 4: //web + console_webservices->append(message); + break; + } } /* @@ -398,7 +449,12 @@ void FenPrincipale::on_sel_capteur_currentIndexChanged(int index) void FenPrincipale::on_add_graph_clicked() { - GraphicView* g = new GraphicView(sel_capteur->currentIndex(), sel_valeur->itemData(sel_valeur->currentIndex()).toInt(),this); + int selected_sensor = sel_capteur->currentIndex(); + int selected_value = sel_valeur->itemData(sel_valeur->currentIndex()).toInt(); + if(selected_sensor == -1) + return; + + GraphicView* g = new GraphicView(selected_sensor, selected_value,this); connect(graphic_range_selector, SIGNAL(startDateChanged(QDateTime)), g, SLOT(setStartDT(QDateTime))); @@ -455,30 +511,95 @@ void FenPrincipale::on_actualizeTableButton_clicked() } } +void FenPrincipale::onWebServicesNotification(int type, QString text) { + if(type == DATASERVER) { + dataServerCheckBox->setText(text); + } else if(type == METEWOWSERVER) { + metewowServerCheckBox->setText(text); + } +} + /* - * Ecriture des paramètres + * Paramètres */ -void FenPrincipale::on_dataServerLineEdit_editingFinished() + +void FenPrincipale::loadSettings() { + + QSettings *data_settings = new QSettings(); + dataServerLineEdit->setText(data_settings->value("dataserverurl", "").toString()); + dataServerCheckBox->setChecked(data_settings->value("dataserverenabled", false).toBool()); + metewowServerLineEdit->setText(data_settings->value("metewowserverurl", "").toString()); + metewowServerCheckBox->setChecked(data_settings->value("metewowserverenabled", false).toBool()); + metewowMacLineEdit->setText(data_settings->value("metewowid","LOGGER").toString()); + metewowMdpLineEdit->setText(data_settings->value("metewowmdp","").toString()); +} + + +void FenPrincipale::saveSettings() { + + QSettings* settings = new QSettings(); + settings->setValue("datedepart", heureLancement->dateTime()); + settings->setValue("dataserverurl",dataServerLineEdit->text()); + settings->setValue("dataserverenabled", dataServerCheckBox->isChecked()); + QString mtwServer = metewowServerLineEdit->text(); + if(mtwServer.at(mtwServer.size()-1) != '/' && mtwServer.size() > 0) + metewowServerLineEdit->setText(mtwServer + "/"); + settings->setValue("metewowserverurl",metewowServerLineEdit->text()); + settings->setValue("metewowserverenabled", metewowServerCheckBox->isChecked()); + settings->setValue("metewowid", metewowMacLineEdit->text()); + settings->setValue("metewowmdp", metewowMdpLineEdit->text()); +} + + + +void FenPrincipale::on_dataServerLineEdit_editingFinished() { + saveSettings(); + mWebServicesManager->test(DATASERVER); +} + +void FenPrincipale::on_metewowServerLineEdit_editingFinished() { + saveSettings(); + mWebServicesManager->test(METEWOWSERVER); +} + +void FenPrincipale::on_metewowMacLineEdit_editingFinished() { + saveSettings(); +} + +void FenPrincipale::on_metewowMdpLineEdit_editingFinished() { + saveSettings(); +} + +void FenPrincipale::on_heureLancement_timeChanged(const QTime &time) { + saveSettings(); +} + +void FenPrincipale::on_metewowServerCheckBox_clicked() { - QFile file("conf/url.ini"); - file.open(QIODevice::ReadWrite); - file.resize(0); - file.write(dataServerLineEdit->text().toStdString().c_str()); - file.close(); + saveSettings(); + mWebServicesManager->test(METEWOWSERVER); } -void FenPrincipale::on_heureLancement_timeChanged(const QTime &time) +void FenPrincipale::on_dataServerCheckBox_clicked() { - QFile file("conf/datedepart.ini"); - file.open(QIODevice::ReadWrite); - file.resize(0); - file.write((QString::number(time.hour())+":"+QString::number(time.minute())+":"+QString::number(time.second())).toStdString().c_str()); - file.close(); + saveSettings(); + mWebServicesManager->test(DATASERVER); +} +void FenPrincipale::on_metewowRegisterPushButton_clicked() +{ + mWebServicesManager->metewowRegister(); } +void FenPrincipale::on_metewowDeletePushButton_clicked() +{ + mWebServicesManager->metewowDelete(); +} +WebServicesManager* FenPrincipale::getWebServicesManager() { + return mWebServicesManager; +} /* * Gestion du menu Konami @@ -720,3 +841,4 @@ void FenPrincipale::optimise_graph() { } + diff --git a/FenPrincipale.h b/FenPrincipale.h index d9f1a21..e8ac6d0 100644 --- a/FenPrincipale.h +++ b/FenPrincipale.h @@ -27,6 +27,7 @@ #include "balaifrequenciel.h" #include "defines.h" #include "tablemgr.h" +#include "webservicesmanager.h" #include "UI/timerangeselector.h" @@ -51,10 +52,14 @@ class FenPrincipale : public QMainWindow, public Ui::FenPrincipale SensorManager* getSensorMgr() {return sensormgr; } MapsView* getMap() {return carte;} TableMgr* getTableMgr() {return tableManager;} + WebServicesManager* getWebServicesManager(); // Euh rien void konamify(bool enable); + void loadSettings(); + void saveSettings(); + protected: void reinit_b(); void resizeEvent(QResizeEvent *); @@ -83,6 +88,8 @@ class FenPrincipale : public QMainWindow, public Ui::FenPrincipale CookieDecoder* myDecoder; SensorManager* sensormgr; + WebServicesManager* mWebServicesManager; + // Trucs en vrac QDateTime h_depart; bool optimisation_graph; @@ -95,17 +102,26 @@ class FenPrincipale : public QMainWindow, public Ui::FenPrincipale public slots: + void onWebServicesNotification(int, QString); + void updatePortListMenu(); void portTriggered(); void data_read(int idc, int idv, QVector data, QString reason); - void message(QString message); + void log_logger(QString str); + void log_decoder(QString str); + void log_serial(QString str); + void log_database(QString str); + void log_webservices(QString str); + void log(int id, QString str); + void informationsReceived(QList); void syncTime(); void resetIndicatorRx(); void setIndicatorRx(); + // Slots de type event sur ui void on_b_param_clicked(); void on_b_table_clicked(); @@ -137,6 +153,14 @@ class FenPrincipale : public QMainWindow, public Ui::FenPrincipale void on_action9600_triggered(); void on_action57600_triggered(); void onRangeStartUpdate(QDateTime range_start); +private slots: + void on_metewowServerLineEdit_editingFinished(); + void on_metewowMacLineEdit_editingFinished(); + void on_metewowMdpLineEdit_editingFinished(); + void on_metewowServerCheckBox_clicked(); + void on_dataServerCheckBox_clicked(); + void on_metewowRegisterPushButton_clicked(); + void on_metewowDeletePushButton_clicked(); }; #endif // FENPRINCIPALE_H diff --git a/FenPrincipale.ui b/FenPrincipale.ui index 9cea44d..6919d99 100644 --- a/FenPrincipale.ui +++ b/FenPrincipale.ui @@ -21,8 +21,8 @@ false - - + + @@ -328,7 +328,7 @@ - 4 + 3 @@ -340,10 +340,70 @@ - - - true + + + QTabWidget::North + + + QTabWidget::Rounded + + + 3 + + + Logger + + + + + + true + + + + + + + + Série + + + + + + + + + + Décodeur + + + + + + + + + + Base de données + + + + + + + + + + Web services + + + + + + + @@ -376,6 +436,9 @@ 1 + + QDateTimeEdit::HourSection + - - QDateTimeEdit::HourSection - @@ -405,25 +465,49 @@ - - - - - - - - URL du serveur de réception + + + + + http://127.0.0.1/cookie/bin/add.php - + Interpoler les valeurs de courbe - + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + URL du serveur de réception + + + + Activer mise à jour des infos @@ -433,17 +517,94 @@ - + + + + Heure de lancement + + + + + + + URL du serveur MétéWow + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + S'enregistrer + + + + + + + + + + Identifiant/MDP + + + + + + + + + + false + + + + + + + + + + + + + + + + http://mtw.lortex.org/api/ + + + + + + + QLineEdit::Password + + + + HH:mm:ss - - + + - Heure de lancement + Supprimer @@ -524,7 +685,7 @@ - + QFrame::StyledPanel diff --git a/InPut/cookiedecoder.cpp b/InPut/cookiedecoder.cpp index bac486d..622f38e 100644 --- a/InPut/cookiedecoder.cpp +++ b/InPut/cookiedecoder.cpp @@ -8,9 +8,12 @@ void CookieDecoder::decodeString(QByteArray(&data)) { QString str(data); QStringList elements = str.split("$"); + emit message("Trame: "+str); if(elements.size() < 6) { - if(elements.size()>1) + if(elements.size()>1) { + emit message("Trame incomplète"); qDebug() << "Trame incomplete"; + } return; } @@ -25,8 +28,9 @@ void CookieDecoder::decodeString(QByteArray(&data)) { double valeur = elements[3].toDouble(); int numValeur = elements[2].toInt(); - + emit message("Checksum comparison: "+QString::number((int)checkSum)+" | "+QString::number(QString(elements[4]).toInt(0,16))); if((((int)checkSum == QString(elements[4]).toInt(0,16))||(!checkLeSum))&&((numCapteur!=precIdCapteur)||(precIdValeur!=numValeur))){ + emit message("Trame validée"); emit newValue(numCapteur, numValeur, valeur); precIdCapteur=numCapteur; diff --git a/InPut/cookiedecoder.h b/InPut/cookiedecoder.h index e6b5164..980a4e9 100644 --- a/InPut/cookiedecoder.h +++ b/InPut/cookiedecoder.h @@ -19,6 +19,7 @@ class CookieDecoder : public QObject signals: void newValue (int id_capteur, int id_valeur, double valeur); + void message(QString); private: char get_checksum (QByteArray trame); diff --git a/InPut/databasecontroller.cpp b/InPut/databasecontroller.cpp index 0ecbf5a..adc21b5 100644 --- a/InPut/databasecontroller.cpp +++ b/InPut/databasecontroller.cpp @@ -10,7 +10,9 @@ void DatabaseController::run() { forever { mutex.lock(); if(!work.isEmpty()) { - qDebug() << "[DB] Queue size: " << work.size(); + int s = work.size(); + emit message("Queue size: " + QString::number(s) + " "); + qDebug() << "[DB] Queue size: " << s; QStringList req = work.dequeue().split(";"); mutex.unlock(); if(req.size() >= 4) { @@ -81,9 +83,11 @@ void DatabaseController::setup() { db.setPassword(""); if(!db.open()) { + emit message("La base de données ne s'est pas ouverte. Chiasse."); qDebug() << "la bdd ne s'est pas ouverte"; return; } else { + emit message("La base de données s'est correctement initialisée"); qDebug() << "la bdd s'est correctement initialisée"; } diff --git a/InPut/databasecontroller.h b/InPut/databasecontroller.h index 92939c6..120bc96 100644 --- a/InPut/databasecontroller.h +++ b/InPut/databasecontroller.h @@ -31,6 +31,7 @@ class DatabaseController : public QThread void dataWritten(int idc, int idv); void dataRead(int idc, int idv, QVector data, QString reason); void rangeStartUpdate(QDateTime range_start); + void message(QString); }; #endif // DATABASECONTROLLER_H diff --git a/InPut/sensormanager.cpp b/InPut/sensormanager.cpp index b6aaeff..45d9a45 100644 --- a/InPut/sensormanager.cpp +++ b/InPut/sensormanager.cpp @@ -44,12 +44,17 @@ void SensorManager::getSensorsFromFile() { reader.setDevice(cptConfig); reader.readNext(); Sensor* curSensor = NULL; + + // parent->log_decoder("Récupération de la liste des capteurs depuis conf/cplist.xml"); + while(!reader.atEnd()) { if((reader.name() == "sensor")&&(reader.attributes().value("name").toString() != "")) { Sensor *s = new Sensor(this,reader.attributes().value("name").toString(),reader.attributes().value("id").toString().toInt()); curSensor = s; sensorList.append(s); qDebug() << "New sensor:" << s->getName(); + + // parent->log_decoder("|| Nouveau capteur '" + s->getName() + "' ("+ QString::number(s->getId())+ ")"); } if((reader.name() == "value")&&(reader.attributes().value("name").toString() != "")) { QString coef="x"; @@ -65,9 +70,11 @@ void SensorManager::getSensorsFromFile() { qDebug() << " New value:" << sv->getName(); qDebug() << " For:" << curSensor->getName(); + // parent->log_decoder("|| || Nouvelle valeur '" + sv->getName() + "' ("+ QString::number(sv->getID())+ ")"); } reader.readNext(); } + // parent->log_decoder("Terminé !"); } Sensor* SensorManager::getSensor(int id) { diff --git a/InPut/sensorvalue.cpp b/InPut/sensorvalue.cpp index 2a8ff9d..9cbd9c2 100644 --- a/InPut/sensorvalue.cpp +++ b/InPut/sensorvalue.cpp @@ -31,7 +31,7 @@ void SensorValue::addData(double d, bool parse) { else newData.value=d; qDebug() << "v: " << d << " parser: " << newData.value; - + parent->getParent()->getParent()->log_decoder("Nouvelle valeur: ("+QString::number(parent->getId())+";"+QString::number(id)+") => "+QString::number(newData.value)); parent->getParent()->getDB()->write(parent->getId(),id,newData.value); if(param == "xmap") { @@ -40,19 +40,9 @@ void SensorValue::addData(double d, bool parse) { parent->getParent()->getParent()->getMap()->updateY(newData.value); } - QString url = parent->getParent()->getParent()->dataServerLineEdit->text(); - QStringList split = url.split("||"); - if(split.size() == 2) { - QHttp *serveur_search = new QHttp(split[0]); - serveur_search->setHost(split[0]); - split[1] = split[1].remove('\n'); - serveur_search->get(split[1]+"?t=token&nc="+QString::number(parent->getId())+"&nv="+QString::number(id)+"&v="+QString::number(newData.value)); - } else { - QHttp *serveur_search = new QHttp("home.konfiot.net"); - serveur_search->setHost("home.konfiot.net"); - - serveur_search->get("/Cookie-WebUI-Server/bin/add.php?t=token&nc="+QString::number(parent->getId())+"&nv="+QString::number(id)+"&v="+QString::number(newData.value)); - } + + + parent->getParent()->getParent()->getWebServicesManager()->update(parent->getId(), id, newData.value); } void SensorValue::getData(QString reason, bool last, QDateTime from, QDateTime to) { diff --git a/InPut/serial.cpp b/InPut/serial.cpp index 4ef60dd..0e94d7d 100644 --- a/InPut/serial.cpp +++ b/InPut/serial.cpp @@ -9,11 +9,12 @@ Serial::Serial(QString _port,qint32 _baudrate) speakers_enabled = true; current_channel = 0; doingBalayage = false; + okay = false; } Serial::~Serial() { - + qDebug() << "fermeture port série"; serial_port->close(); } @@ -26,8 +27,14 @@ bool Serial::init() { serial_port->setBaudRate(baudrate); qDebug() << "test"; - if(!serial_port->open(QIODevice::ReadWrite)) + if(!serial_port->open(QIODevice::ReadWrite)) { qDebug() << "yolo"; + emit message("Echec de l'ouverture du port série: "+serial_port->errorString()); + okay = false; + } else { + emit message("Port série ouvert avec succès"); + okay = true; + } QObject::connect(serial_port, SIGNAL(readyRead()), this, SLOT(readData())); @@ -50,6 +57,8 @@ void Serial::setChannel(int id) { str = str + QChar(0x0D) + QChar(0x0A); qDebug() << "ok ta mer" << str; serial_port->write(str.toStdString().c_str()); + + emit message("Changement vers le canal "+id); } } @@ -61,6 +70,10 @@ void Serial::setSpeakersEnabled(bool enabled) { str = str + QChar(0x0D) + QChar(0x0A); serial_port->write(str.toStdString().c_str()); + if(enabled) + emit message("Activation du haut parleur"); + else + emit message("Coupure du haut parleur"); // } } @@ -84,8 +97,8 @@ void Serial::setBaudrate(qint32 bd) { } void Serial::setPort(QString port) { - serial_port->setPortName(port); serial_port->close(); + serial_port->setPortName(port); serial_port->open(QIODevice::ReadWrite); } @@ -97,6 +110,7 @@ QString Serial::getPort() { void Serial::balayageFrequenciel() { qDebug() << "Balayage en cours"; + emit message("Balayage en cours"); doingBalayage = true; @@ -131,9 +145,11 @@ void Serial::readDataBalayage() { if(data.size() >= nvalues) { doingBalayage = false; + emit message("Balayage terminé"); emit balayageDone(data); } else if(time.elapsed() > 5000) { doingBalayage = false; + emit message("Balayage terminé (timeout)"); emit balayageDone(data); qDebug() << " timeout"; } @@ -152,6 +168,8 @@ void Serial::readData() { QByteArray dataread = serial_port->readAll(); + if(dataread.size() != 0) + emit message(QString(dataread)); // qDebug() << dataread; diff --git a/InPut/serial.h b/InPut/serial.h index ccc3631..5334d11 100644 --- a/InPut/serial.h +++ b/InPut/serial.h @@ -30,6 +30,10 @@ class Serial : public QObject qint32 getBaudrate(); QString getPort(); + bool isOkay() { + return okay; + } + static QStringList getPortList(); @@ -41,6 +45,8 @@ public slots: void dataRead(QList); void balayageDone(QVector); + void message(QString); + private: QByteArray balayage_buffer; @@ -65,6 +71,7 @@ public slots: unsigned char buffer[1024]; int tty_fd; + bool okay; qint32 baudrate; }; diff --git a/Logger21.pro b/Logger21.pro index 289b1db..63c24a7 100644 --- a/Logger21.pro +++ b/Logger21.pro @@ -39,7 +39,8 @@ SOURCES += \ UI/histogram.cpp \ UI/qxt/qxtspanslider.cpp \ UI/qxt/qxtglobal.cpp \ - UI/timerangeselector.cpp + UI/timerangeselector.cpp \ + webservicesmanager.cpp HEADERS += \ tablemgr.h \ @@ -67,7 +68,8 @@ HEADERS += \ UI/qxt/qxtspanslider.h \ UI/qxt/qxtspanslider_p.h \ UI/timerangeselector.h \ - exprtk.hpp + exprtk.hpp \ + webservicesmanager.h FORMS += \ FenPrincipale.ui \ diff --git a/dialog.cpp b/dialog.cpp index 2c1035b..d06c0b7 100644 --- a/dialog.cpp +++ b/dialog.cpp @@ -23,6 +23,7 @@ AskDialog::AskDialog() } nItems++; } + textEntry->setText(settings->value("serial/spec","").toString()); nItems++; selectEntry->addItem("Autre"); @@ -30,6 +31,9 @@ AskDialog::AskDialog() textEntry->setVisible(false); else textEntry->setVisible(true); + + if(prev_port == "Autre") + selectEntry->setCurrentIndex(nItems-1); } AskDialog::~AskDialog() @@ -46,15 +50,14 @@ void AskDialog::continueClicked() else port = selectEntry->currentText(); - settings->setValue("serial/port",port); + settings->setValue("serial/port",selectEntry->currentText()); settings->setValue("serial/baud",baudrate->currentIndex()); + settings->setValue("serial/spec",textEntry->text()); - Serial* com = new Serial(port, baudrate->currentText().toInt()); + com = new Serial(port, baudrate->currentText().toInt()); com->init(); - fen = new FenPrincipale(com); - fen->show(); this->close(); } diff --git a/dialog.h b/dialog.h index 455559d..5406349 100644 --- a/dialog.h +++ b/dialog.h @@ -15,13 +15,13 @@ class AskDialog : public QDialog, public Ui::Dialog public: AskDialog(); ~AskDialog(); - + Serial* getSerial() {return com;} private slots: void continueClicked(); void on_selectEntry_currentIndexChanged(const QString &arg1); private: FenPrincipale* fen; - + Serial *com; QSettings* settings; int nItems; diff --git a/main.cpp b/main.cpp index e30b268..43fe28c 100644 --- a/main.cpp +++ b/main.cpp @@ -22,6 +22,7 @@ int main(int argc, char *argv[]) AskDialog* d = new AskDialog(); d->show(); //------------------------------------------------------------------------------ - - return a.exec(); + int rc = a.exec(); + delete d->getSerial(); + return rc; } diff --git a/webservicesmanager.cpp b/webservicesmanager.cpp new file mode 100644 index 0000000..5cc6a79 --- /dev/null +++ b/webservicesmanager.cpp @@ -0,0 +1,114 @@ +#include "webservicesmanager.h" + +WebServicesManager::WebServicesManager() +{ + mSettings = new QSettings(); + net = new QNetworkAccessManager(); +} + +void WebServicesManager::update(int id_c, int id_v, double value) { + + bool dataserverenabled = mSettings->value("dataserverenabled", false).toBool(); + if(dataserverenabled) { + QString url = mSettings->value("dataserverurl","").toString(); + QString requesturl = url + +"?t=token&nc="+QString::number(id_c)+"&nv="+QString::number(id_v)+"&v="+QString::number(value); + emit message("Requête en cours: "+requesturl); + QNetworkRequest request(url); + + QNetworkReply *r = net->get(request); + r->setProperty("test",false); + connect(r, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(erreur(QNetworkReply::NetworkError))); + connect(r, SIGNAL(finished()), this, SLOT(reponse())); + connect(r, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(progression(qint64, qint64) )); + } + + bool mtwserverenabled = mSettings->value("metewowserverenabled", false).toBool(); //todo: implement this*/ +} + +void WebServicesManager::test(int type) { + switch (type) { + case DATASERVER: + emit notification(DATASERVER, "Test..."); + + if(mSettings->value("dataserverenabled", false).toBool()) { + emit message("Test du serveur de réception"); + QString url = mSettings->value("dataserverurl","").toString(); + QNetworkRequest requete(url); + + QNetworkReply *r = net->get(requete); + r->setProperty("t",DATASERVER); + r->setProperty("test",true); + connect(r, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(erreur(QNetworkReply::NetworkError))); + connect(r, SIGNAL(finished()), this, SLOT(reponse())); + connect(r, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(progression(qint64, qint64) )); + } else { + emit notification(DATASERVER, "Désactivé"); + } + break; + case METEWOWSERVER: + emit notification(METEWOWSERVER, "Test..."); + + if(mSettings->value("metewowserverenabled", false).toBool()) { + emit message("Test du serveur météwow"); + QString url = mSettings->value("metewowserverurl","").toString(); + QNetworkRequest requete(url); + + QNetworkReply *r = net->get(requete); + r->setProperty("t",METEWOWSERVER); + r->setProperty("test",true); + connect(r, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(erreur(QNetworkReply::NetworkError))); + connect(r, SIGNAL(finished()), this, SLOT(reponse())); + connect(r, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(progression(qint64, qint64) )); + } else { + emit notification(METEWOWSERVER, "Désactivé"); + } + break; + } +} + +void WebServicesManager::metewowRegister() { + +} + +void WebServicesManager::metewowDelete() { + +} + +void WebServicesManager::reponse() { + QNetworkReply *r = qobject_cast(sender()); + QString resp = r->readAll(); + + QVariant statusCode = r->attribute( QNetworkRequest::HttpStatusCodeAttribute ); + int status; + if ( !statusCode.isValid() ) + status = -1; + else + status = statusCode.toInt(); + + + if(r->property("test").toBool() == true) { + if(r->property("t").toInt() == DATASERVER) { + emit message("Test Serveur de réception: Code "+QString::number(status)+ " ==> taille de la réponse: "+QString::number(resp.size())); + }else { + emit message("Test Serveur météwow: Code "+QString::number(status)+ " ==> taille de la réponse: "+QString::number(resp.size())); + } + } + + emit notification(r->property("t").toInt(), QString::number(status)); + r->deleteLater(); +} + +void WebServicesManager::erreur(QNetworkReply::NetworkError) { + QNetworkReply *r = qobject_cast(sender()); + + if(r->property("t").toInt() == DATASERVER) { + emit message("Test Serveur de réception: Erreur ==> " + r->errorString()); + }else { + emit message("Test Serveur météwow: Erreur ==> "+r->errorString()); + } + + emit notification(r->property("t").toInt(), r->errorString()); + r->deleteLater(); +} + +void WebServicesManager::progression(qint64, qint64) {} diff --git a/webservicesmanager.h b/webservicesmanager.h new file mode 100644 index 0000000..395beb8 --- /dev/null +++ b/webservicesmanager.h @@ -0,0 +1,38 @@ +#ifndef WEBSERVICESMANAGER_H +#define WEBSERVICESMANAGER_H + +#include "QSettings" + +#include +#include +#include +#include + +#include "QDebug" + +#define DATASERVER 1 +#define METEWOWSERVER 2 + +class WebServicesManager : public QObject +{ + Q_OBJECT +public: + WebServicesManager(); + void update(int id_c, int id_v, double value); + void test(int type); + + void metewowRegister(); + void metewowDelete(); +public slots: + void reponse(); + void erreur(QNetworkReply::NetworkError); + void progression(qint64, qint64); +signals: + void notification(int, QString); + void message(QString); +private: + QSettings *mSettings; + QNetworkAccessManager *net; +}; + +#endif // WEBSERVICESMANAGER_H