Compare commits
19 Commits
improve-is
...
f741fb96f9
Author | SHA1 | Date | |
---|---|---|---|
f741fb96f9 | |||
8d1c719626 | |||
b5389a599e | |||
ea2f42beed | |||
22e751e197 | |||
05c7d11ef8 | |||
63dc70dda9 | |||
e5ab9b98cd | |||
4477647acf | |||
d64b029a2d | |||
e24022a612 | |||
60d78790ba | |||
543e712c62 | |||
8402fde6b5 | |||
f15cc636c6 | |||
adaa12395e | |||
853c29e448 | |||
78c214ceb4 | |||
88bec387c5 |
@@ -1,5 +1,5 @@
|
|||||||
QT += core
|
QT += core gui
|
||||||
QT += serialport network
|
QT += widgets serialport network
|
||||||
|
|
||||||
TARGET = ATBDownloadDCFirmware
|
TARGET = ATBDownloadDCFirmware
|
||||||
|
|
||||||
@@ -66,14 +66,25 @@ contains( CONFIG, DesktopLinux ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
main.cpp
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
sender_thread.cpp \
|
||||||
|
receiver_thread.cpp \
|
||||||
|
../common/src/message_handler.cpp
|
||||||
|
|
||||||
# HEADERS +=
|
HEADERS += \
|
||||||
|
mainwindow.h \
|
||||||
|
sender_thread.h \
|
||||||
|
receiver_thread.h \
|
||||||
|
../common/include/message_handler.h
|
||||||
|
|
||||||
OTHER_FILES += \
|
OTHER_FILES += \
|
||||||
ATBDownloadDCFirmware.ini
|
ATBDownloadDCFirmware.ini
|
||||||
|
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
##########################################################################################
|
##########################################################################################
|
||||||
# for running program on target through QtCreator
|
# for running program on target through QtCreator
|
||||||
contains( CONFIG, PTU5 ) {
|
contains( CONFIG, PTU5 ) {
|
||||||
|
@@ -1,8 +1,53 @@
|
|||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
|
#include "../common/include/message_handler.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <sys/sysinfo.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PTU5
|
||||||
|
#define SERIAL_PORT "ttymxc2"
|
||||||
|
#else
|
||||||
|
#define SERIAL_PORT "ttyUSB0"
|
||||||
|
#endif
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
Q_UNUSED(argc);
|
QByteArray const value = qgetenv("LC_ALL");
|
||||||
Q_UNUSED(argv);
|
if (value != "C") {
|
||||||
|
qputenv("LC_ALL", "C");
|
||||||
|
}
|
||||||
|
// qputenv("XDG_RUNTIME_DIR", "/var/run/user/0");
|
||||||
|
|
||||||
return 0;
|
openlog("ATB-UPDATE-DC-FIRMWARE", LOG_PERROR | LOG_PID | LOG_CONS, LOG_USER);
|
||||||
|
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
QApplication::setApplicationName("ATBUpdateTool");
|
||||||
|
QApplication::setApplicationVersion(APP_VERSION);
|
||||||
|
|
||||||
|
if (!messageHandlerInstalled()) { // change internal qt-QDebug-handling
|
||||||
|
atbInstallMessageHandler(atbDebugOutput);
|
||||||
|
setDebugLevel(LOG_NOTICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
QThread::currentThread()->setObjectName("main thread");
|
||||||
|
qInfo() << "Main thread" << QThread::currentThreadId();
|
||||||
|
|
||||||
|
MainWindow mw;
|
||||||
|
|
||||||
|
mw.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
|
||||||
|
//mw.showFullScreen();
|
||||||
|
|
||||||
|
qCritical() << "SHOW";
|
||||||
|
|
||||||
|
mw.show();
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
350
DownloadDCFirmware/mainwindow.cpp
Normal file
350
DownloadDCFirmware/mainwindow.cpp
Normal file
@@ -0,0 +1,350 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
#include <QDateTime>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QScrollBar>
|
||||||
|
#include <QEvent>
|
||||||
|
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
, ui(new Ui::MainWindow)
|
||||||
|
, m_serial(new QSerialPort(this))
|
||||||
|
, m_width(70) {
|
||||||
|
|
||||||
|
this->setStatusBar(new QStatusBar(this));
|
||||||
|
QFont f;
|
||||||
|
f.setStyleHint(QFont::Monospace);
|
||||||
|
f.setWeight(QFont::Bold);
|
||||||
|
f.setFamily("Misc Fixed");
|
||||||
|
f.setPixelSize(12);
|
||||||
|
this->statusBar()->setFont(f);
|
||||||
|
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
//ui->updateProgress->setRange(0, 100);
|
||||||
|
//ui->updateProgress->reset();
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
QStringList lst;
|
||||||
|
QString start = QDateTime::currentDateTime().toString(Qt::ISODate);
|
||||||
|
lst << QString("Start: ") + start.leftJustified(m_width-10);
|
||||||
|
lst << QString("").leftJustified(m_width-3, '=');
|
||||||
|
lst << QString("Update tool version: %1 - %2 %3").arg(APP_VERSION).arg(APP_BUILD_DATE).arg(APP_BUILD_TIME).leftJustified(m_width-3);
|
||||||
|
lst << QString("Machine number : %1 ").arg(m_worker->machineNr()).leftJustified(m_width-3);
|
||||||
|
lst << QString("Customer number : %1 ").arg(m_worker->customerNr()).leftJustified(m_width-3);
|
||||||
|
lst << QString("Zone number : %1 (%2)").arg(m_worker->zoneNr()).arg(Utils::zoneName(m_worker->zoneNr())).leftJustified(m_width-3);
|
||||||
|
lst << QString("APISM version : %1").arg(m_worker->apismVersion()).leftJustified(m_width-3);
|
||||||
|
lst << QString("").leftJustified(m_width-3, '=');
|
||||||
|
|
||||||
|
ui->updateStatus->setText(lst.join('\n'));
|
||||||
|
ui->updateStatus->setEnabled(true);
|
||||||
|
// ui->updateStatus->installEventFilter(this);
|
||||||
|
|
||||||
|
m_startTimer = new QTimer(this);
|
||||||
|
connect(m_startTimer, SIGNAL(timeout()), m_worker, SLOT(start()));
|
||||||
|
m_startTimer->setSingleShot(true);
|
||||||
|
m_startTimer->start(1000);
|
||||||
|
|
||||||
|
m_exitTimer = new QTimer(this);
|
||||||
|
connect(m_exitTimer, SIGNAL(timeout()), ui->exit, SLOT(click()));
|
||||||
|
m_exitTimer->setSingleShot(true);
|
||||||
|
m_exitTimer->start(1800 * 1000);
|
||||||
|
|
||||||
|
connect(ui->exit, SIGNAL(clicked()),this,SLOT(onQuit()));
|
||||||
|
connect(m_worker, SIGNAL(disableExit()),this,SLOT(onDisableExit()));
|
||||||
|
connect(m_worker, SIGNAL(enableExit()),this,SLOT(onEnableExit()));
|
||||||
|
connect(m_worker, SIGNAL(stopStartTimer()),this,SLOT(onStopStartTimer()));
|
||||||
|
connect(m_worker, SIGNAL(restartExitTimer()),this,SLOT(onRestartExitTimer()));
|
||||||
|
connect(m_worker, SIGNAL(appendText(QString,QString)),this,SLOT(onAppendText(QString,QString)));
|
||||||
|
connect(m_worker, SIGNAL(showErrorMessage(QString,QString)),this, SLOT(onShowErrorMessage(QString,QString)));
|
||||||
|
connect(m_worker, SIGNAL(showStatusMessage(QString,QString)),this, SLOT(onShowStatusMessage(QString,QString)));
|
||||||
|
connect(m_worker, SIGNAL(showErrorMessage(QStringList)),this, SLOT(onShowErrorMessage(QStringList)));
|
||||||
|
connect(m_worker, SIGNAL(showStatusMessage(QString,QString)),this, SLOT(onShowStatusMessage(QString,QString)));
|
||||||
|
connect(m_worker, SIGNAL(replaceLast(QString,QString)),this,SLOT(onReplaceLast(QString,QString)));
|
||||||
|
connect(m_worker, SIGNAL(replaceLast(QStringList,QString)),this, SLOT(onReplaceLast(QStringList,QString)));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow() {
|
||||||
|
//delete m_startTimer;
|
||||||
|
//delete m_exitTimer;
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MainWindow::openSerialPort() {
|
||||||
|
// const SettingsDialog::Settings p = m_settings->settings();
|
||||||
|
//m_serial->setPortName(p.name);
|
||||||
|
//m_serial->setBaudRate(p.baudRate);
|
||||||
|
//m_serial->setDataBits(p.dataBits);
|
||||||
|
//m_serial->setParity(p.parity);
|
||||||
|
//m_serial->setStopBits(p.stopBits);
|
||||||
|
///m_serial->setFlowControl(p.flowControl);
|
||||||
|
m_serial->setPortName("");
|
||||||
|
m_serial->setBaudRate(QSerialPort::Baud115200);
|
||||||
|
m_serial->setDataBits(QSerialPort::DataBits::Data8);
|
||||||
|
m_serial->setParity(QSerialPort::Parity::NoParity);
|
||||||
|
m_serial->setStopBits(QSerialPort::StopBits::OneStop);
|
||||||
|
m_serial->setFlowControl(QSerialPort::FlowControl::HardwareControl);
|
||||||
|
if (m_serial->open(QIODevice::ReadWrite)) {
|
||||||
|
//m_console->setEnabled(true);
|
||||||
|
//m_console->setLocalEchoEnabled(p.localEchoEnabled);
|
||||||
|
//m_ui->actionConnect->setEnabled(false);
|
||||||
|
//m_ui->actionDisconnect->setEnabled(true);
|
||||||
|
//m_ui->actionConfigure->setEnabled(false);
|
||||||
|
//showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
|
||||||
|
// .arg(p.name, p.stringBaudRate, p.stringDataBits,
|
||||||
|
// p.stringParity, p.stringStopBits, p.stringFlowControl));
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
//QMessageBox::critical(this, tr("Error"), m_serial->errorString());
|
||||||
|
|
||||||
|
//showStatusMessage(tr("Open error"));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MainWindow::closeSerialPort() {
|
||||||
|
if (m_serial->isOpen()) {
|
||||||
|
m_serial->close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
//m_console->setEnabled(false);
|
||||||
|
//m_ui->actionConnect->setEnabled(true);
|
||||||
|
//m_ui->actionDisconnect->setEnabled(false);
|
||||||
|
//m_ui->actionConfigure->setEnabled(true);
|
||||||
|
//showStatusMessage(tr("Disconnected"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
void MainWindow::customEvent(QEvent *event) {
|
||||||
|
if (event->type() == ProgressEvent::type()) {
|
||||||
|
ProgressEvent *pevent = (ProgressEvent *)event;
|
||||||
|
int const progress = pevent->progressPercent();
|
||||||
|
QObject const *sender = pevent->sender();
|
||||||
|
if (sender == this) {
|
||||||
|
switch(progress) {
|
||||||
|
case 0: {
|
||||||
|
ui->updateProgress->reset();
|
||||||
|
} break;
|
||||||
|
case START_PROGRESS_LOOP: {
|
||||||
|
m_progressRunning = true;
|
||||||
|
ui->updateProgress->reset();
|
||||||
|
// m_progressValue = 10;
|
||||||
|
QApplication::postEvent(this, new ProgressEvent(this, 1));
|
||||||
|
} break;
|
||||||
|
case STOP_PROGRESS_LOOP: {
|
||||||
|
m_progressRunning = false;
|
||||||
|
// m_progressValue -= 10;
|
||||||
|
// m_worker->setProgress(m_progressValue/10);
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
if (m_progressRunning) {
|
||||||
|
// m_progressValue = progress;
|
||||||
|
ui->updateProgress->setValue(progress);
|
||||||
|
// ueberpruefen: hauptfenster schickt sich selber ein event
|
||||||
|
// QApplication::postEvent(this, new ProgressEvent(this, progress));
|
||||||
|
// QThread::msleep(500);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (sender == m_worker) {
|
||||||
|
switch(progress) {
|
||||||
|
case 0: {
|
||||||
|
ui->updateProgress->reset();
|
||||||
|
} break;
|
||||||
|
case START_PROGRESS_LOOP: {
|
||||||
|
QApplication::postEvent(this, new ProgressEvent(this, START_PROGRESS_LOOP));
|
||||||
|
} break;
|
||||||
|
case STOP_PROGRESS_LOOP: {
|
||||||
|
QApplication::postEvent(this, new ProgressEvent(this, STOP_PROGRESS_LOOP));
|
||||||
|
} break;
|
||||||
|
default:{
|
||||||
|
ui->updateProgress->setValue(progress);
|
||||||
|
}}
|
||||||
|
} else {
|
||||||
|
qCritical() << "!!! UNKNOWN SENDER !!!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QThread::yieldCurrentThread();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onStopStartTimer() {
|
||||||
|
m_startTimer->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onDisableExit() {
|
||||||
|
ui->exit->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onEnableExit() {
|
||||||
|
ui->exit->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onRestartExitTimer() {
|
||||||
|
m_exitTimer->stop();
|
||||||
|
m_exitTimer->start(5 * 1000);
|
||||||
|
|
||||||
|
scrollDownTextEdit();
|
||||||
|
ui->updateStatus->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onQuit() {
|
||||||
|
m_exitTimer->stop();
|
||||||
|
int errorCode = 0;
|
||||||
|
|
||||||
|
qCritical()
|
||||||
|
<< QString("ON QUIT: CURRENT STEP %1")
|
||||||
|
.arg(m_worker->getSmap()[m_worker->currentStep()]);
|
||||||
|
|
||||||
|
// TODO: replace SEND_LAST_VERSION with UPDATE_SUCCEEDED
|
||||||
|
if (m_worker->currentStep() != Worker::UPDATE_STEP::SEND_LAST_VERSION) {
|
||||||
|
errorCode = -1;
|
||||||
|
}
|
||||||
|
qCritical() << QString("ON QUIT: EXIT CODE %1").arg(errorCode);
|
||||||
|
qApp->exit(errorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::scrollDownTextEdit() {
|
||||||
|
// Utils::printInfoMsg(QString("SCROLL-DOWN-TEXT_EDIT CALLED AT ")
|
||||||
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
||||||
|
|
||||||
|
ui->updateStatus->setEnabled(true);
|
||||||
|
|
||||||
|
QTextCursor tmpCursor = ui->updateStatus->textCursor();
|
||||||
|
tmpCursor.movePosition(QTextCursor::End);
|
||||||
|
ui->updateStatus->setTextCursor(tmpCursor);
|
||||||
|
ui->updateStatus->ensureCursorVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onAppendText(QString text, QString suffix) {
|
||||||
|
// Utils::printInfoMsg(QString("ON APPEND CALLED AT ")
|
||||||
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
||||||
|
|
||||||
|
QString editText = ui->updateStatus->toPlainText();
|
||||||
|
scrollDownTextEdit();
|
||||||
|
|
||||||
|
if (!suffix.isNull() && suffix.size() > 0) {
|
||||||
|
//qInfo() << "TEXT" << text << "SUFFIX" << suffix;
|
||||||
|
if (suffix == Worker::UPDATE_STEP_SUCCESS || suffix == Worker::UPDATE_STEP_FAIL) {
|
||||||
|
ui->updateStatus->insertPlainText(QString("\n").leftJustified(m_width-3, '=') + " ");
|
||||||
|
// editText += QString("\n").leftJustified(m_width-3, '=');
|
||||||
|
// editText += " ";
|
||||||
|
}
|
||||||
|
QString const &add = (QString("\n") + text).leftJustified(m_width - (2 + suffix.size())) + suffix;
|
||||||
|
ui->updateStatus->insertPlainText(add);
|
||||||
|
// editText += add;
|
||||||
|
} else {
|
||||||
|
QString const &add = text.leftJustified(m_width-9);
|
||||||
|
ui->updateStatus->insertPlainText(add);
|
||||||
|
//editText += add;
|
||||||
|
}
|
||||||
|
|
||||||
|
// debug
|
||||||
|
// QString editText = ui->updateStatus->toPlainText();
|
||||||
|
// Utils::printLineEditInfo(editText.split('\n', QString::SplitBehavior::SkipEmptyParts));
|
||||||
|
// ui->updateStatus->setText(editText.trimmed());
|
||||||
|
|
||||||
|
scrollDownTextEdit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onReplaceLast(QStringList newTextLines, QString suffix) {
|
||||||
|
// Utils::printInfoMsg(QString("ON REPLACE LAST (LIST) CALLED AT ")
|
||||||
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
||||||
|
int const s = newTextLines.size();
|
||||||
|
if (s > 0) {
|
||||||
|
QString editText = ui->updateStatus->toPlainText();
|
||||||
|
QStringList lines = editText.split('\n', QString::SplitBehavior::SkipEmptyParts);
|
||||||
|
QString newText;
|
||||||
|
if (lines.size() >= s) {
|
||||||
|
for (int i = 0; i < s; ++i) {
|
||||||
|
lines.removeLast();
|
||||||
|
}
|
||||||
|
if (lines.size() > 0) {
|
||||||
|
newText = lines.join('\n');
|
||||||
|
newText += '\n';
|
||||||
|
}
|
||||||
|
QStringList newLines;
|
||||||
|
for (int i = 0; i < s; ++i) {
|
||||||
|
if (i == 0 && !suffix.isNull() && suffix.size() > 0 && suffix != "\n") {
|
||||||
|
newLines += Utils::rstrip(newTextLines.at(i).leftJustified(m_width-10) + suffix);
|
||||||
|
} else {
|
||||||
|
newLines += Utils::rstrip(newTextLines.at(i).leftJustified(m_width-10));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lines += newLines;
|
||||||
|
newText += newLines.join(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->updateStatus->setText(newText);
|
||||||
|
Utils::printLineEditInfo(lines);
|
||||||
|
scrollDownTextEdit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onReplaceLast(QString text, QString suffix) {
|
||||||
|
// Utils::printInfoMsg(QString("ON REPLACE LAST (TEXT) CALLED AT ")
|
||||||
|
// + QDateTime::currentDateTime().toString(Qt::ISODateWithMs));
|
||||||
|
QString editText = ui->updateStatus->toPlainText();
|
||||||
|
QStringList lines = editText.split('\n', QString::SplitBehavior::SkipEmptyParts);
|
||||||
|
if (lines.size() > 0) {
|
||||||
|
// removing the last line is really meant for refreshing the last line
|
||||||
|
// with a string very similar than the original one, typically only
|
||||||
|
// followed by a suffix.
|
||||||
|
if (lines.last().contains(text)) {
|
||||||
|
lines.removeLast();
|
||||||
|
}
|
||||||
|
if (!suffix.isNull() && suffix.size() > 0 && suffix != "\n") {
|
||||||
|
QString const add = text.leftJustified(m_width-10) + suffix;
|
||||||
|
if (!add.isEmpty()) {
|
||||||
|
lines += text.leftJustified(m_width-10) + suffix;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QString const add = text.leftJustified(m_width-10);
|
||||||
|
if (!add.isEmpty()) {
|
||||||
|
lines += text.leftJustified(m_width-10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils::printLineEditInfo(lines);
|
||||||
|
ui->updateStatus->setText(lines.join('\n').trimmed());
|
||||||
|
scrollDownTextEdit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onShowMessage(QString title, QString text) {
|
||||||
|
this->statusBar()->clearMessage();
|
||||||
|
this->statusBar()->showMessage( // timeout: 10000
|
||||||
|
QString(title + " " + text).leftJustified(80, ' '), 10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onShowErrorMessage(QString title, QString text) {
|
||||||
|
onShowMessage(title, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onShowStatusMessage(QString title, QString text) {
|
||||||
|
onShowMessage(title, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onShowErrorMessage(QStringList lst) {
|
||||||
|
if (lst.size() >= 2) {
|
||||||
|
onShowMessage(lst.at(0), lst.at(1));
|
||||||
|
}
|
||||||
|
if (lst.size() == 1) {
|
||||||
|
onShowMessage(lst.at(0), "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onShowStatusMessage(QStringList lst) {
|
||||||
|
if (lst.size() >= 2) {
|
||||||
|
onShowMessage(lst.at(0), lst.at(1));
|
||||||
|
}
|
||||||
|
if (lst.size() == 1) {
|
||||||
|
onShowMessage(lst.at(0), "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
58
DownloadDCFirmware/mainwindow.h
Normal file
58
DownloadDCFirmware/mainwindow.h
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QStatusBar>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QSerialPort>
|
||||||
|
#include <QSerialPortInfo>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
//void onAppendText(QString, QString suffix = "");
|
||||||
|
//void onReplaceLast(QStringList, QString suffix = "");
|
||||||
|
//void onReplaceLast(QString, QString suffix = "");
|
||||||
|
//void onShowErrorMessage(QString, QString);
|
||||||
|
//void onShowStatusMessage(QString, QString);
|
||||||
|
//void onShowErrorMessage(QStringList);
|
||||||
|
//void onShowStatusMessage(QStringList);
|
||||||
|
//void onStopStartTimer();
|
||||||
|
//void onRestartExitTimer();
|
||||||
|
//void onEnableExit();
|
||||||
|
//void onDisableExit();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
// void onQuit();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// void scrollDownTextEdit();
|
||||||
|
// void onShowMessage(QString, QString);
|
||||||
|
|
||||||
|
bool openSerialPort();
|
||||||
|
bool closeSerialPort();
|
||||||
|
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
QSerialPort *m_serial;
|
||||||
|
// Worker *m_worker;
|
||||||
|
int const m_width;
|
||||||
|
// QTimer *m_startTimer;
|
||||||
|
// QTimer *m_exitTimer;
|
||||||
|
// bool m_progressRunning;
|
||||||
|
//int m_progressValue;
|
||||||
|
// UpdateDcEvent::UpdateStep m_updateStep;
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
62
DownloadDCFirmware/mainwindow.ui
Normal file
62
DownloadDCFirmware/mainwindow.ui
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>800</width>
|
||||||
|
<height>480</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Source Code Pro</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<widget class="QWidget" name="layoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>781</width>
|
||||||
|
<height>441</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0" rowspan="3" colspan="2">
|
||||||
|
<widget class="QTextEdit" name="updateStatus">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Misc Fixed</family>
|
||||||
|
<pointsize>11</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeAdjustPolicy">
|
||||||
|
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
0
DownloadDCFirmware/receiver_thread.cpp
Normal file
0
DownloadDCFirmware/receiver_thread.cpp
Normal file
0
DownloadDCFirmware/receiver_thread.h
Normal file
0
DownloadDCFirmware/receiver_thread.h
Normal file
0
DownloadDCFirmware/sender_thread.cpp
Normal file
0
DownloadDCFirmware/sender_thread.cpp
Normal file
0
DownloadDCFirmware/sender_thread.h
Normal file
0
DownloadDCFirmware/sender_thread.h
Normal file
@@ -117,7 +117,13 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||||||
# customer-repository (e.g. origin/zg1/zone101), then fetch/pull
|
# customer-repository (e.g. origin/zg1/zone101), then fetch/pull
|
||||||
# this branch before switching to this now locally existen branch.
|
# this branch before switching to this now locally existen branch.
|
||||||
# : Improve output of GUI/Console and messages sent to ISMAS.
|
# : Improve output of GUI/Console and messages sent to ISMAS.
|
||||||
VERSION="1.4.6"
|
# : Fix: do not send the json-files to dc in any case. Bug introduced
|
||||||
|
# when pulling new branch, but branch already existed locally.
|
||||||
|
# 1.4.6 : No exit()-call if loading CA-plugin fails.
|
||||||
|
# Check m_hw (pointer to CA-(Slave)Plugin) before its use.
|
||||||
|
# Only exit() if firmware is configured to be possibly updated, but
|
||||||
|
# loading the CA-plugin failed.
|
||||||
|
VERSION="1.4.7"
|
||||||
# PLANNED TODOS:
|
# PLANNED TODOS:
|
||||||
# 1: Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT.
|
# 1: Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT.
|
||||||
# 2: Wenn der WAIT-Button aktiv ist, dann wird ein Repository repariert (neu
|
# 2: Wenn der WAIT-Button aktiv ist, dann wird ein Repository repariert (neu
|
||||||
|
@@ -193,7 +193,7 @@ QStringList GitClient::gitShowReason(QString branchName) {
|
|||||||
int const m = s.indexOf("m=");
|
int const m = s.indexOf("m=");
|
||||||
int const d = s.indexOf("d=");
|
int const d = s.indexOf("d=");
|
||||||
|
|
||||||
QString msg = IsmasClient::getReasonForLastSendVersion();
|
QString msg{""}; // IsmasClient::getReasonForLastSendVersion();
|
||||||
QString commit{""}, date{""};
|
QString commit{""}, date{""};
|
||||||
|
|
||||||
if (c != -1) {
|
if (c != -1) {
|
||||||
@@ -205,9 +205,9 @@ QStringList GitClient::gitShowReason(QString branchName) {
|
|||||||
start = m + 2;
|
start = m + 2;
|
||||||
if (d >= start) {
|
if (d >= start) {
|
||||||
length = d - start;
|
length = d - start;
|
||||||
msg += " (";
|
// msg = " (";
|
||||||
msg = s.mid(start, length).trimmed();
|
msg = s.mid(start, length).trimmed();
|
||||||
msg += ")";
|
// msg += ")";
|
||||||
|
|
||||||
start = d + 2;
|
start = d + 2;
|
||||||
date = s.mid(start);
|
date = s.mid(start);
|
||||||
|
@@ -130,7 +130,9 @@ int main(int argc, char *argv[]) {
|
|||||||
if (!QDir(plugInDir).exists()) {
|
if (!QDir(plugInDir).exists()) {
|
||||||
qCritical() << plugInDir
|
qCritical() << plugInDir
|
||||||
<< "does not exists, but has to contain dc-library";
|
<< "does not exists, but has to contain dc-library";
|
||||||
exit(-1);
|
if (noUpdatePsaHardware == false) {
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// before loading the library, delete all possible shared memory segments
|
// before loading the library, delete all possible shared memory segments
|
||||||
|
@@ -12,7 +12,8 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<family>Source Code Pro</family>
|
<family>Terminus</family>
|
||||||
|
<pointsize>11</pointsize>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@@ -29,21 +30,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="3" column="2">
|
<item row="0" column="0" rowspan="3" colspan="2">
|
||||||
<widget class="QPushButton" name="exit">
|
|
||||||
<property name="text">
|
|
||||||
<string>Exit</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QProgressBar" name="updateProgress">
|
|
||||||
<property name="value">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0" rowspan="3" colspan="3">
|
|
||||||
<widget class="QTextEdit" name="updateStatus">
|
<widget class="QTextEdit" name="updateStatus">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@@ -52,6 +39,7 @@
|
|||||||
<font>
|
<font>
|
||||||
<family>Misc Fixed</family>
|
<family>Misc Fixed</family>
|
||||||
<pointsize>11</pointsize>
|
<pointsize>11</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
<bold>true</bold>
|
<bold>true</bold>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
|
@@ -52,7 +52,6 @@ hwinf *Update::loadDCPlugin(QDir const &plugInDir, QString const &fname) {
|
|||||||
qCritical() << "in directory" << plugInDir.absolutePath();
|
qCritical() << "in directory" << plugInDir.absolutePath();
|
||||||
qCritical() << "cannot load plugin" << pluginLoader.fileName();
|
qCritical() << "cannot load plugin" << pluginLoader.fileName();
|
||||||
qCritical() << pluginLoader.errorString();
|
qCritical() << pluginLoader.errorString();
|
||||||
exit(-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qCritical() << "loadDCPlugin() plugin directory:" << plugInDir.absolutePath();
|
qCritical() << "loadDCPlugin() plugin directory:" << plugInDir.absolutePath();
|
||||||
@@ -60,25 +59,20 @@ hwinf *Update::loadDCPlugin(QDir const &plugInDir, QString const &fname) {
|
|||||||
|
|
||||||
if (!pluginLoader.isLoaded()) {
|
if (!pluginLoader.isLoaded()) {
|
||||||
qCritical() << pluginLoader.errorString();
|
qCritical() << pluginLoader.errorString();
|
||||||
exit(-2);
|
|
||||||
}
|
}
|
||||||
QObject *plugin = pluginLoader.instance();
|
QObject *plugin = pluginLoader.instance();
|
||||||
if (!plugin) {
|
if (!plugin) {
|
||||||
qCritical() << "cannot start instance";
|
qCritical() << "cannot start instance";
|
||||||
exit(-3);
|
|
||||||
}
|
}
|
||||||
if (! (hw = qobject_cast<hwinf *>(plugin))) {
|
if (! (hw = qobject_cast<hwinf *>(plugin))) {
|
||||||
qCritical() << "cannot cast plugin" << plugin << "to hwinf";
|
qCritical() << "cannot cast plugin" << plugin << "to hwinf";
|
||||||
exit(-4);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qCritical() << pluginLibName << "does not exist";
|
qCritical() << pluginLibName << "does not exist";
|
||||||
exit(-5);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qCritical() << "plugins directory" << plugInDir.absolutePath()
|
qCritical() << "plugins directory" << plugInDir.absolutePath()
|
||||||
<< "does not exist";
|
<< "does not exist";
|
||||||
exit(-6);
|
|
||||||
}
|
}
|
||||||
return hw;
|
return hw;
|
||||||
}
|
}
|
||||||
@@ -124,7 +118,7 @@ Update::Update(Worker *worker,
|
|||||||
, m_sys_areDCdataValid(false) {
|
, m_sys_areDCdataValid(false) {
|
||||||
|
|
||||||
if (!m_hw) {
|
if (!m_hw) {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_hw == nullptr -> ca-slave plugin loaded ???";
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_hw == nullptr -> ca-slave plugin not loaded";
|
||||||
} else {
|
} else {
|
||||||
int tries = 20;
|
int tries = 20;
|
||||||
while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
|
while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
|
||||||
@@ -191,33 +185,37 @@ void Update::onReportDCDownloadFailure(QString const &errorMsg) {
|
|||||||
|
|
||||||
// br is a index into a table, used for historical reasons.
|
// br is a index into a table, used for historical reasons.
|
||||||
bool Update::openSerial(int br, QString baudrate, QString comPort) const {
|
bool Update::openSerial(int br, QString baudrate, QString comPort) const {
|
||||||
qDebug() << "opening serial" << br << baudrate << comPort << "...";
|
if (m_hw) {
|
||||||
if (m_hw->dc_openSerial(br, baudrate, comPort, 1) == true) { // 1 for connect
|
qDebug() << "opening serial" << br << baudrate << comPort << "...";
|
||||||
Utils::printInfoMsg(
|
if (m_hw->dc_openSerial(br, baudrate, comPort, 1) == true) { // 1 for connect
|
||||||
|
Utils::printInfoMsg(
|
||||||
|
QString("OPENING SERIAL %1").arg(br)
|
||||||
|
+ " " + baudrate + " " + comPort + "...OK");
|
||||||
|
|
||||||
|
// m_hw->dc_autoRequest(true);
|
||||||
|
m_hw->dc_autoRequest(false);
|
||||||
|
QThread::sleep(1);
|
||||||
|
|
||||||
|
Utils::printInfoMsg(QString("IS PORT OPEN %1").arg(m_hw->dc_isPortOpen()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils::printCriticalErrorMsg(
|
||||||
QString("OPENING SERIAL %1").arg(br)
|
QString("OPENING SERIAL %1").arg(br)
|
||||||
+ " " + baudrate + " " + comPort + "...OK");
|
+ " " + baudrate + " " + comPort + "...FAILED");
|
||||||
|
|
||||||
// m_hw->dc_autoRequest(true);
|
|
||||||
m_hw->dc_autoRequest(false);
|
|
||||||
QThread::sleep(1);
|
|
||||||
|
|
||||||
Utils::printInfoMsg(QString("IS PORT OPEN %1").arg(m_hw->dc_isPortOpen()));
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::printCriticalErrorMsg(
|
|
||||||
QString("OPENING SERIAL %1").arg(br)
|
|
||||||
+ " " + baudrate + " " + comPort + "...FAILED");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update::closeSerial() const {
|
void Update::closeSerial() const {
|
||||||
qInfo() << "CLOSED SERIAL" << m_baudrate << m_serialInterface;
|
qInfo() << "CLOSED SERIAL" << m_baudrate << m_serialInterface;
|
||||||
m_hw->dc_closeSerial();
|
if (m_hw) {
|
||||||
|
m_hw->dc_closeSerial();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Update::isSerialOpen() const {
|
bool Update::isSerialOpen() const {
|
||||||
return m_hw->dc_isPortOpen();
|
return m_hw ? m_hw->dc_isPortOpen() : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -396,78 +394,88 @@ bool Update::downloadJson(enum FileTypeJson type,
|
|||||||
int templateIdx,
|
int templateIdx,
|
||||||
QString jsFileToSendToDC) const {
|
QString jsFileToSendToDC) const {
|
||||||
|
|
||||||
m_hw->dc_autoRequest(true); // downloading Json needs the AutoEmission flag
|
|
||||||
qDebug() << "SET AUTO-REQUEST=TRUE";
|
|
||||||
QThread::sleep(1); // make sure the auto-request flag is acknowledged
|
|
||||||
|
|
||||||
QStringList lst;
|
|
||||||
bool ready = false;
|
|
||||||
int nTry = 25;
|
|
||||||
while ((ready = m_hw->sys_ready4sending()) == false) {
|
|
||||||
QThread::msleep(200);
|
|
||||||
if (--nTry <= 0) {
|
|
||||||
QString msg("SYS NOT READY FOR SENDING AFTER 5 SECONDS");
|
|
||||||
Utils::printCriticalErrorMsg(msg);
|
|
||||||
lst << msg;
|
|
||||||
|
|
||||||
if (m_worker) {
|
|
||||||
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst) << Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
QString msg;
|
if (m_hw) {
|
||||||
lst.clear();
|
m_hw->dc_autoRequest(true); // downloading Json needs the AutoEmission flag
|
||||||
if (ready) {
|
qDebug() << "SET AUTO-REQUEST=TRUE";
|
||||||
QFile file(jsFileToSendToDC);
|
QThread::sleep(1); // make sure the auto-request flag is acknowledged
|
||||||
QFileInfo fi(jsFileToSendToDC); // max. size of template file is 800 bytes
|
|
||||||
if (file.exists()) {
|
|
||||||
if (file.open(QIODevice::ReadOnly)) {
|
|
||||||
if (fi.size() > 0 && fi.size() <= 800) {
|
|
||||||
QByteArray ba = file.readAll();
|
|
||||||
// kindOfFile: 1=config, 2=device, 3=cash, 4=serial, 5=time, 6=printer
|
|
||||||
// nrOfTemplate=1...32 if kindOfFile==6
|
|
||||||
// content = content of the Json file, max 800byte ascii signs
|
|
||||||
if (m_hw->sys_sendJsonFileToDc((uint8_t)(type),
|
|
||||||
templateIdx,
|
|
||||||
(uint8_t *)ba.data())) {
|
|
||||||
|
|
||||||
/*
|
QStringList lst;
|
||||||
* Note: the machine id is contained in DC2C_conf.json.
|
bool ready = false;
|
||||||
* The idea was to use this to check if the download of
|
int nTry = 25;
|
||||||
* the json-file was correct. It did not work, as the
|
while ((ready = m_hw->sys_ready4sending()) == false) {
|
||||||
* update of the PSA (to reflect a change in the
|
QThread::msleep(200);
|
||||||
* machine id) did not happen immediately.
|
if (--nTry <= 0) {
|
||||||
*
|
QString msg("SYS NOT READY FOR SENDING AFTER 5 SECONDS");
|
||||||
m_hw->dc_autoRequest(true);
|
Utils::printCriticalErrorMsg(msg);
|
||||||
QThread::msleep(500);
|
lst << msg;
|
||||||
|
|
||||||
// testing
|
if (m_worker) {
|
||||||
m_hw->request_ReadbackMachineID();
|
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst) << Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
||||||
QThread::msleep(500);
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t data[64];
|
QString msg;
|
||||||
memset(data, 0x00, sizeof(data));
|
lst.clear();
|
||||||
uint8_t length = 0;
|
if (ready) {
|
||||||
|
QFile file(jsFileToSendToDC);
|
||||||
|
QFileInfo fi(jsFileToSendToDC); // max. size of template file is 800 bytes
|
||||||
|
if (file.exists()) {
|
||||||
|
if (file.open(QIODevice::ReadOnly)) {
|
||||||
|
if (fi.size() > 0 && fi.size() <= 800) {
|
||||||
|
QByteArray ba = file.readAll();
|
||||||
|
// kindOfFile: 1=config, 2=device, 3=cash, 4=serial, 5=time, 6=printer
|
||||||
|
// nrOfTemplate=1...32 if kindOfFile==6
|
||||||
|
// content = content of the Json file, max 800byte ascii signs
|
||||||
|
if (m_hw->sys_sendJsonFileToDc((uint8_t)(type),
|
||||||
|
templateIdx,
|
||||||
|
(uint8_t *)ba.data())) {
|
||||||
|
|
||||||
m_hw->readback_machineIDdata(&length, data);
|
/*
|
||||||
|
* Note: the machine id is contained in DC2C_conf.json.
|
||||||
|
* The idea was to use this to check if the download of
|
||||||
|
* the json-file was correct. It did not work, as the
|
||||||
|
* update of the PSA (to reflect a change in the
|
||||||
|
* machine id) did not happen immediately.
|
||||||
|
*
|
||||||
|
m_hw->dc_autoRequest(true);
|
||||||
|
QThread::msleep(500);
|
||||||
|
|
||||||
QThread::msleep(500);
|
// testing
|
||||||
|
m_hw->request_ReadbackMachineID();
|
||||||
|
QThread::msleep(500);
|
||||||
|
|
||||||
QByteArray ba((const char*)data, length);
|
uint8_t data[64];
|
||||||
|
memset(data, 0x00, sizeof(data));
|
||||||
|
uint8_t length = 0;
|
||||||
|
|
||||||
qCritical() << length << "MACHINE ID =" << ba.toHex(':');
|
m_hw->readback_machineIDdata(&length, data);
|
||||||
*/
|
|
||||||
|
|
||||||
if (m_worker) {
|
QThread::msleep(500);
|
||||||
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst) << Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
|
||||||
|
QByteArray ba((const char*)data, length);
|
||||||
|
|
||||||
|
qCritical() << length << "MACHINE ID =" << ba.toHex(':');
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (m_worker) {
|
||||||
|
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst) << Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = true;
|
||||||
|
} else {
|
||||||
|
msg = QString("ERROR SEND JSON-FILE %1 TO DC").arg(file.fileName());
|
||||||
|
Utils::printCriticalErrorMsg(msg);
|
||||||
|
lst << msg;
|
||||||
|
if (m_worker) {
|
||||||
|
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst)
|
||||||
|
<< Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = true;
|
|
||||||
} else {
|
} else {
|
||||||
msg = QString("ERROR SEND JSON-FILE %1 TO DC").arg(file.fileName());
|
msg = QString("SIZE OF %1 TOO BIG (%2 BYTES)").arg(jsFileToSendToDC).arg(fi.size());
|
||||||
Utils::printCriticalErrorMsg(msg);
|
Utils::printCriticalErrorMsg(msg);
|
||||||
lst << msg;
|
lst << msg;
|
||||||
if (m_worker) {
|
if (m_worker) {
|
||||||
@@ -476,16 +484,17 @@ bool Update::downloadJson(enum FileTypeJson type,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg = QString("SIZE OF %1 TOO BIG (%2 BYTES)").arg(jsFileToSendToDC).arg(fi.size());
|
msg = QString("CAN NOT OPEN ") + jsFileToSendToDC + " FOR READING";
|
||||||
Utils::printCriticalErrorMsg(msg);
|
Utils::printCriticalErrorMsg(msg);
|
||||||
lst << msg;
|
lst << msg;
|
||||||
|
|
||||||
if (m_worker) {
|
if (m_worker) {
|
||||||
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst)
|
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst)
|
||||||
<< Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
<< Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg = QString("CAN NOT OPEN ") + jsFileToSendToDC + " FOR READING";
|
msg = QString(jsFileToSendToDC) + " DOES NOT EXIST";
|
||||||
Utils::printCriticalErrorMsg(msg);
|
Utils::printCriticalErrorMsg(msg);
|
||||||
lst << msg;
|
lst << msg;
|
||||||
|
|
||||||
@@ -494,21 +503,12 @@ bool Update::downloadJson(enum FileTypeJson type,
|
|||||||
<< Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
<< Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
msg = QString(jsFileToSendToDC) + " DOES NOT EXIST";
|
|
||||||
Utils::printCriticalErrorMsg(msg);
|
|
||||||
lst << msg;
|
|
||||||
|
|
||||||
if (m_worker) {
|
|
||||||
m_worker->ISMAS(lst) << (m_worker->GUI(lst) << (m_worker->CONSOLE(lst)
|
|
||||||
<< Worker::UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
m_hw->dc_autoRequest(false);
|
m_hw->dc_autoRequest(false);
|
||||||
qDebug() << "SET AUTO-REQUEST=FALSE";
|
qDebug() << "SET AUTO-REQUEST=FALSE";
|
||||||
QThread::sleep(1); // make sure the auto-request flag is acknowledged
|
QThread::sleep(1); // make sure the auto-request flag is acknowledged
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -564,24 +564,26 @@ void Update::finished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QStringList Update::getDcSoftAndHardWareVersion() {
|
QStringList Update::getDcSoftAndHardWareVersion() {
|
||||||
m_hw->dc_autoRequest(true);
|
if (m_hw) {
|
||||||
QThread::sleep(1); // make sure the timer-slots are active
|
m_hw->dc_autoRequest(true);
|
||||||
|
QThread::sleep(1); // make sure the timer-slots are active
|
||||||
|
|
||||||
for (int i=0; i < 3; ++i) { // send explicit reuests to get
|
for (int i=0; i < 3; ++i) { // send explicit reuests to get
|
||||||
// current SW/HW-versions
|
// current SW/HW-versions
|
||||||
m_hw->request_DC2_SWversion();
|
m_hw->request_DC2_SWversion();
|
||||||
m_hw->request_DC2_HWversion();
|
m_hw->request_DC2_HWversion();
|
||||||
QThread::sleep(1);
|
QThread::sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString const &hwVersion = m_hw->dc_getHWversion().toLower().trimmed();
|
QString const &hwVersion = m_hw->dc_getHWversion().toLower().trimmed();
|
||||||
QString const &swVersion = m_hw->dc_getSWversion().toLower().trimmed();
|
QString const &swVersion = m_hw->dc_getSWversion().toLower().trimmed();
|
||||||
|
|
||||||
m_hw->dc_autoRequest(false);
|
m_hw->dc_autoRequest(false);
|
||||||
QThread::sleep(1); // make sure the timer-slots are inactive
|
QThread::sleep(1); // make sure the timer-slots are inactive
|
||||||
|
|
||||||
if (!hwVersion.isEmpty() && !swVersion.isEmpty()) {
|
if (!hwVersion.isEmpty() && !swVersion.isEmpty()) {
|
||||||
return QStringList() << hwVersion << swVersion;
|
return QStringList() << hwVersion << swVersion;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return QStringList() << "DC HW-version not available"
|
return QStringList() << "DC HW-version not available"
|
||||||
@@ -671,6 +673,11 @@ bool Update::checkDownloadedJsonVersions(QStringList const& jsonFileNames) {
|
|||||||
}
|
}
|
||||||
bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||||
|
|
||||||
|
if (!m_hw) {
|
||||||
|
Utils::printInfoMsg("CA-PLUGIN NOT LOADED");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
int tries = 20;
|
int tries = 20;
|
||||||
while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
|
while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
|
||||||
// must deliver 'true', only then are all data from hwapi valid
|
// must deliver 'true', only then are all data from hwapi valid
|
||||||
|
@@ -44,6 +44,7 @@ QString Utils::getLocation(QString fileName) {
|
|||||||
if (c != -1) {
|
if (c != -1) {
|
||||||
location = line.mid(c+1);
|
location = line.mid(c+1);
|
||||||
if (!location.isEmpty()) {
|
if (!location.isEmpty()) {
|
||||||
|
location = location.replace(QChar(','), QString(""));
|
||||||
return location.replace(QChar('"'), QString("")).trimmed();
|
return location.replace(QChar('"'), QString("")).trimmed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -69,6 +70,7 @@ QString Utils::getTariffVersion(QString fileName) {
|
|||||||
if (c != -1) {
|
if (c != -1) {
|
||||||
version = line.mid(c+1);
|
version = line.mid(c+1);
|
||||||
if (!version.isEmpty()) {
|
if (!version.isEmpty()) {
|
||||||
|
version = version.replace(QChar(','), QString(""));
|
||||||
return version.replace(QChar('"'), QString("")).trimmed();
|
return version.replace(QChar('"'), QString("")).trimmed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,6 +96,7 @@ QString Utils::getTariffInfo(QString fileName) {
|
|||||||
if (c != -1) {
|
if (c != -1) {
|
||||||
info = line.mid(c+1);
|
info = line.mid(c+1);
|
||||||
if (!info.isEmpty()) {
|
if (!info.isEmpty()) {
|
||||||
|
info = info.replace(QChar(','), QString(""));
|
||||||
return info.replace(QChar('"'), QString("")).trimmed();
|
return info.replace(QChar('"'), QString("")).trimmed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include <QJsonParseError>
|
#include <QJsonParseError>
|
||||||
#include <Qt>
|
#include <Qt>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
|
||||||
#include "message_handler.h"
|
#include "message_handler.h"
|
||||||
#include <DeviceController/interfaces.h>
|
#include <DeviceController/interfaces.h>
|
||||||
@@ -169,13 +170,16 @@ Worker::Worker(int customerNr,
|
|||||||
// TODO: turn object into singleton
|
// TODO: turn object into singleton
|
||||||
instance = this;
|
instance = this;
|
||||||
m_lastFailedUpdateStep = UPDATE_STEP::NONE;
|
m_lastFailedUpdateStep = UPDATE_STEP::NONE;
|
||||||
m_update = new Update(this,
|
|
||||||
QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
|
if (m_noUpdatePsaHardware == false) {
|
||||||
m_customerNrStr,
|
m_update = new Update(this,
|
||||||
m_branchName,
|
QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
|
||||||
m_pluginDir,
|
m_customerNrStr,
|
||||||
m_pluginName,
|
m_branchName,
|
||||||
m_workingDirectory);
|
m_pluginDir,
|
||||||
|
m_pluginName,
|
||||||
|
m_workingDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
this->setObjectName("worker-object");
|
this->setObjectName("worker-object");
|
||||||
QDir::setCurrent(m_workingDirectory);
|
QDir::setCurrent(m_workingDirectory);
|
||||||
@@ -300,13 +304,18 @@ void Worker::privateUpdate() {
|
|||||||
m_updateNotNecessary = true;
|
m_updateNotNecessary = true;
|
||||||
m_ismasTriggerStatusMessage = QStringList(QString("NO UPDATE NECESSARY (%1)").arg(current.toString(Qt::ISODate)));
|
m_ismasTriggerStatusMessage = QStringList(QString("NO UPDATE NECESSARY (%1)").arg(current.toString(Qt::ISODate)));
|
||||||
|
|
||||||
qCritical() << "privateUpdate m_ismasTriggerStatusMessage:" << QStringList(QString("NO UPDATE NECESSARY (%1)").arg(current.toString(Qt::ISODate)));
|
qCritical() << "privateUpdate m_ismasTriggerStatusMessage:"
|
||||||
|
<< QStringList(m_ismasTriggerStatusMessage);
|
||||||
qCritical() << "***";
|
qCritical() << "***";
|
||||||
|
|
||||||
// the customer-repository does exist, but the ISMAS-trigger is
|
// the customer-repository does exist, and the ISMAS-trigger is
|
||||||
// *NOT* "WAIT", but from 00:00:00 - 00:03:59 this counts as an
|
// *NOT* "WAIT", but from 00:00:00 - 00:03:59 this counts as an
|
||||||
// automatic update
|
// automatic update
|
||||||
|
|
||||||
|
QStringList lst = m_ismasTriggerStatusMessage;
|
||||||
|
// trigger message to ISMAS and CONSOLE
|
||||||
|
ISMAS(lst) << (CONSOLE(lst) << (m_lastFailedUpdateStep = UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS));
|
||||||
|
// overwrite m_lastFailedUpdateStep
|
||||||
m_lastFailedUpdateStep = UPDATE_STEP::NONE;
|
m_lastFailedUpdateStep = UPDATE_STEP::NONE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -730,29 +739,28 @@ bool Worker::customerEnvironment() {
|
|||||||
if (QDir(m_customerRepository).exists()) {
|
if (QDir(m_customerRepository).exists()) {
|
||||||
if (m_clone == false) {
|
if (m_clone == false) {
|
||||||
if (m_gc.branchExistsRemotely()) {
|
if (m_gc.branchExistsRemotely()) {
|
||||||
QString msg("PULL NEW BRANCH " + m_branchName);
|
QString msg;
|
||||||
QStringList lst(msg);
|
QStringList lst;
|
||||||
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::PULL_NEW_BRANCH));
|
|
||||||
if (!m_gc.branchExistsLocally()) {
|
if (!m_gc.branchExistsLocally()) {
|
||||||
|
lst.clear();
|
||||||
msg = QString("PULLING OF NEW BRANCH " + m_branchName + " DOES NOT EXIST LOCALLY");
|
msg = QString("PULLING OF NEW BRANCH " + m_branchName + " DOES NOT EXIST LOCALLY");
|
||||||
QStringList lst(msg);
|
lst << msg;
|
||||||
CONSOLE(lst) << UPDATE_STEP::PULL_NEW_BRANCH;
|
CONSOLE(lst) << UPDATE_STEP::PULL_NEW_BRANCH;
|
||||||
if (!m_gc.gitPullNewBranches()) {
|
if (!m_gc.gitPullNewBranches()) {
|
||||||
msg = QString("PULLING OF NEW BRANCH " + m_branchName + "FAILED");
|
lst.clear();
|
||||||
QStringList lst(msg);
|
msg = QString("PULLING OF NEW BRANCH " + m_branchName + " FAILED");
|
||||||
|
lst << msg;
|
||||||
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << (m_lastFailedUpdateStep = UPDATE_STEP::PULL_NEW_BRANCH_FAILURE)));
|
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << (m_lastFailedUpdateStep = UPDATE_STEP::PULL_NEW_BRANCH_FAILURE)));
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
msg = QString("PULLING OF NEW BRANCH " + m_branchName + "SUCCESS");
|
lst.clear();
|
||||||
QStringList lst(msg);
|
msg = QString("PULLING OF NEW BRANCH " + m_branchName + " SUCCESS");
|
||||||
|
lst << msg;
|
||||||
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << (m_lastFailedUpdateStep = UPDATE_STEP::PULL_NEW_BRANCH_SUCCESS)));
|
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << (m_lastFailedUpdateStep = UPDATE_STEP::PULL_NEW_BRANCH_SUCCESS)));
|
||||||
m_pulledNewBranch = true;
|
m_pulledNewBranch = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg = QString("PULLING ALREADY EXISTING LOCAL BRANCH " + m_branchName + "SUCCESS");
|
m_pulledNewBranch = false;
|
||||||
QStringList lst(msg);
|
|
||||||
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << (m_lastFailedUpdateStep = UPDATE_STEP::PULL_NEW_BRANCH_SUCCESS)));
|
|
||||||
m_pulledNewBranch = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1251,15 +1259,48 @@ PSAInstalled Worker::getPSAInstalled() {
|
|||||||
psaInstalled.versionInfo.created = "N/A";
|
psaInstalled.versionInfo.created = "N/A";
|
||||||
|
|
||||||
if (m_versionInfo.size() == 3) {
|
if (m_versionInfo.size() == 3) {
|
||||||
qCritical() << QString("***** %1:%2").arg(__func__).arg(__LINE__)
|
QString const &lastCommit = m_versionInfo.at(0);
|
||||||
<< "m_versionInfo" << m_versionInfo << "*****";
|
QString reason = m_versionInfo.at(1);
|
||||||
psaInstalled.versionInfo.lastCommit = QString("%1-%2")
|
QDateTime const dt = QDateTime::fromString(m_versionInfo.at(2), Qt::ISODate);
|
||||||
.arg(QCoreApplication::applicationPid())
|
QString version{""};
|
||||||
.arg(m_versionInfo.at(0));
|
QString date{""};
|
||||||
psaInstalled.versionInfo.reason = m_versionInfo.at(1);
|
if (dt.isValid()) {
|
||||||
|
date += " ";
|
||||||
|
date += dt.date().toString(Qt::ISODate);
|
||||||
|
}
|
||||||
|
static const QRegularExpression re("^\\s*(\\d+)\\.(\\d+)\\.(\\d+)(.*$)");
|
||||||
|
QRegularExpressionMatch match = re.match(reason);
|
||||||
|
if (match.hasMatch()) {
|
||||||
|
int const lastCapturedIndex = match.lastCapturedIndex();
|
||||||
|
if (lastCapturedIndex >= 1) {
|
||||||
|
version += " v";
|
||||||
|
version += match.captured(1); // major
|
||||||
|
}
|
||||||
|
if (lastCapturedIndex >= 2) {
|
||||||
|
version += ".";
|
||||||
|
version += match.captured(2); // minor
|
||||||
|
}
|
||||||
|
if (lastCapturedIndex >= 3) {
|
||||||
|
version += ".";
|
||||||
|
version += match.captured(3); // patch
|
||||||
|
}
|
||||||
|
if (lastCapturedIndex >= 4) { // rest after version
|
||||||
|
reason = match.captured(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
psaInstalled.versionInfo.lastCommit = QString("%1%2").arg(lastCommit).arg(version);
|
||||||
|
psaInstalled.versionInfo.reason = reason;
|
||||||
psaInstalled.versionInfo.created = m_versionInfo.at(2);
|
psaInstalled.versionInfo.created = m_versionInfo.at(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//qCritical() << "";
|
||||||
|
//qCritical() << "VERSION-INFO";
|
||||||
|
//qCritical() << "LAST-COMMIT" << psaInstalled.versionInfo.lastCommit;
|
||||||
|
//qCritical() << "REASON" << psaInstalled.versionInfo.reason;
|
||||||
|
//qCritical() << "CREATED" << psaInstalled.versionInfo.created;
|
||||||
|
//qCritical() << "";
|
||||||
|
|
||||||
if (m_zoneNr != 0) {
|
if (m_zoneNr != 0) {
|
||||||
QString const &n = QString("%1").arg(m_zoneNr).rightJustified(2, '0');
|
QString const &n = QString("%1").arg(m_zoneNr).rightJustified(2, '0');
|
||||||
psaInstalled.tariff.name = QString("tariff%1.json").arg(n);
|
psaInstalled.tariff.name = QString("tariff%1.json").arg(n);
|
||||||
|
@@ -733,7 +733,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Worker::instance->m_currentStep = step;
|
Worker::instance->m_currentStep = step;
|
||||||
QStringList lst = QStringList(smap[step]);
|
// QStringList lst = QStringList(smap[step]);
|
||||||
|
|
||||||
switch (step) {
|
switch (step) {
|
||||||
case UPDATE_STEP::NONE: {
|
case UPDATE_STEP::NONE: {
|
||||||
@@ -756,7 +756,8 @@ private:
|
|||||||
QString("REPOSITORY %1 AND BRANCH %2 OK")
|
QString("REPOSITORY %1 AND BRANCH %2 OK")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -772,7 +773,8 @@ private:
|
|||||||
QString("REPOSITORY %1 and BRANCH %2 ***NOT OK***")
|
QString("REPOSITORY %1 and BRANCH %2 ***NOT OK***")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -791,7 +793,8 @@ private:
|
|||||||
QString("SANITY OF %1 (BRANCH %2) OK")
|
QString("SANITY OF %1 (BRANCH %2) OK")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -807,7 +810,8 @@ private:
|
|||||||
QString("SANITY OF %1 and BRANCH %2 ***NOT*** OK")
|
QString("SANITY OF %1 and BRANCH %2 ***NOT*** OK")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -832,7 +836,8 @@ private:
|
|||||||
QString("CLONED REPOSITORY %1 AND CHECKED OUT BRANCH %2")
|
QString("CLONED REPOSITORY %1 AND CHECKED OUT BRANCH %2")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
|
ismasClient.sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
|
||||||
ismasUpdateNews);
|
ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -848,7 +853,8 @@ private:
|
|||||||
QString("CLONING REPOSITORY %1 OR CHECKING OUT BRANCH %2 FAILED")
|
QString("CLONING REPOSITORY %1 OR CHECKING OUT BRANCH %2 FAILED")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -863,7 +869,8 @@ private:
|
|||||||
QString("CHECKED OUT REPOSITORY %1 AND CHECKED OUT BRANCH %2")
|
QString("CHECKED OUT REPOSITORY %1 AND CHECKED OUT BRANCH %2")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()),
|
.arg(instance->m_gc.branchName()),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A"));
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A"));
|
||||||
} break;
|
} break;
|
||||||
case UPDATE_STEP::CHECKOUT_REPOSITORY_FAILURE: {
|
case UPDATE_STEP::CHECKOUT_REPOSITORY_FAILURE: {
|
||||||
ismasClient.setProgressInPercent(_CHECKOUT_REPOSITORY_FAILURE);
|
ismasClient.setProgressInPercent(_CHECKOUT_REPOSITORY_FAILURE);
|
||||||
@@ -877,7 +884,8 @@ private:
|
|||||||
QString("%1: CHECKING OUT BRANCH %2 FAILED")
|
QString("%1: CHECKING OUT BRANCH %2 FAILED")
|
||||||
.arg(instance->m_customerRepository)
|
.arg(instance->m_customerRepository)
|
||||||
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
.arg(instance->m_gc.branchName()).toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -886,10 +894,24 @@ private:
|
|||||||
} break;
|
} break;
|
||||||
case UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS: {
|
case UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS: {
|
||||||
ismasClient.setProgressInPercent(_CHECK_ISMAS_TRIGGER_SUCCESS);
|
ismasClient.setProgressInPercent(_CHECK_ISMAS_TRIGGER_SUCCESS);
|
||||||
ismasClient.sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
|
QString const &ismasUpdateNews =
|
||||||
QString("#M=APISM#C=CMD_EVENT#J=") +
|
QString("#M=APISM#C=CMD_EVENT#J=") +
|
||||||
ismasClient.updateTriggerSet("ISMAS TRIGGER SET",
|
ismasClient.updateNewsToIsmas(
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A"));
|
_ISMAS_CONTINUE, //
|
||||||
|
_CHECK_ISMAS_TRIGGER_SUCCESS,
|
||||||
|
(instance->m_updateNotNecessary)
|
||||||
|
? IsmasClient::RESULT_CODE::NO_UPDATE_NECESSARY
|
||||||
|
: IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
|
smap[UPDATE_STEP::CHECK_ISMAS_TRIGGER_SUCCESS],
|
||||||
|
instance->m_updateNotNecessary
|
||||||
|
? QString("NO-UPDATE-NECESSARY (%1:%2)")
|
||||||
|
.arg(instance->m_customerRepository)
|
||||||
|
.arg(instance->m_gc.branchName()).toStdString().c_str()
|
||||||
|
: QString("ISMAS-TRIGGER ON WAIT").toStdString().c_str(),
|
||||||
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
|
ismasClient.sendRequestReceiveResponse(
|
||||||
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
case UPDATE_STEP::CHECK_ISMAS_TRIGGER_WRONG_VALUE: {
|
case UPDATE_STEP::CHECK_ISMAS_TRIGGER_WRONG_VALUE: {
|
||||||
ismasClient.setProgressInPercent(_CHECK_ISMAS_TRIGGER_WRONG_VALUE);
|
ismasClient.setProgressInPercent(_CHECK_ISMAS_TRIGGER_WRONG_VALUE);
|
||||||
@@ -901,7 +923,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::ISMAS_TRIGGER_ERROR,
|
IsmasClient::RESULT_CODE::ISMAS_TRIGGER_ERROR,
|
||||||
smap[UPDATE_STEP::CHECK_ISMAS_TRIGGER],
|
smap[UPDATE_STEP::CHECK_ISMAS_TRIGGER],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -915,7 +938,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::ISMAS_TRIGGER_ERROR,
|
IsmasClient::RESULT_CODE::ISMAS_TRIGGER_ERROR,
|
||||||
smap[UPDATE_STEP::CHECK_ISMAS_TRIGGER],
|
smap[UPDATE_STEP::CHECK_ISMAS_TRIGGER],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -929,7 +953,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::INITIAL_CLONE_WITHOUT_ACTIVE_ISMAS_TRIGGER],
|
smap[UPDATE_STEP::INITIAL_CLONE_WITHOUT_ACTIVE_ISMAS_TRIGGER],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -943,7 +968,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::INITIAL_CLONE_WITH_ACTIVE_ISMAS_TRIGGER],
|
smap[UPDATE_STEP::INITIAL_CLONE_WITH_ACTIVE_ISMAS_TRIGGER],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -957,7 +983,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
}
|
}
|
||||||
@@ -972,7 +999,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::GIT_PULL_ERROR,
|
IsmasClient::RESULT_CODE::GIT_PULL_ERROR,
|
||||||
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
}
|
}
|
||||||
@@ -987,7 +1015,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
}
|
}
|
||||||
@@ -1002,7 +1031,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -1016,7 +1046,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -1030,7 +1061,8 @@ private:
|
|||||||
IsmasClient::RESULT_CODE::GIT_SWITCH_BRANCH_ERROR,
|
IsmasClient::RESULT_CODE::GIT_SWITCH_BRANCH_ERROR,
|
||||||
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
smap[UPDATE_STEP::CHECKOUT_BRANCH],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1
|
||||||
|
? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
ismasClient.sendRequestReceiveResponse(
|
ismasClient.sendRequestReceiveResponse(
|
||||||
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
IsmasClient::APISM::DB_PORT, ismasUpdateNews);
|
||||||
} break;
|
} break;
|
||||||
@@ -1307,7 +1339,7 @@ private:
|
|||||||
QString const &ismasUpdateNews =
|
QString const &ismasUpdateNews =
|
||||||
QString("#M=APISM#C=CMD_EVENT#J=") +
|
QString("#M=APISM#C=CMD_EVENT#J=") +
|
||||||
ismasClient.updateNewsToIsmas(
|
ismasClient.updateNewsToIsmas(
|
||||||
_ISMAS_SET_WAIT_OK,
|
_ISMAS_SET_WAIT_OK, // U0002
|
||||||
ismasClient.getProgressInPercent(),
|
ismasClient.getProgressInPercent(),
|
||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::SUCCESS,
|
||||||
smap[UPDATE_STEP::UPDATE_FINALIZE],
|
smap[UPDATE_STEP::UPDATE_FINALIZE],
|
||||||
@@ -1321,9 +1353,9 @@ private:
|
|||||||
QString const &ismasUpdateNews =
|
QString const &ismasUpdateNews =
|
||||||
QString("#M=APISM#C=CMD_EVENT#J=") +
|
QString("#M=APISM#C=CMD_EVENT#J=") +
|
||||||
ismasClient.updateNewsToIsmas(
|
ismasClient.updateNewsToIsmas(
|
||||||
_ISMAS_SET_WAIT_OK,
|
_ISMAS_SET_WAIT_OK, // U0002
|
||||||
ismasClient.getProgressInPercent(),
|
ismasClient.getProgressInPercent(),
|
||||||
IsmasClient::RESULT_CODE::SUCCESS,
|
IsmasClient::RESULT_CODE::NO_UPDATE_NECESSARY,
|
||||||
smap[UPDATE_STEP::UPDATE_FINALIZE],
|
smap[UPDATE_STEP::UPDATE_FINALIZE],
|
||||||
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
instance->m_ismasMsg.join(' ').toStdString().c_str(),
|
||||||
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
instance->m_versionInfo.size() >= 1 ? instance->m_versionInfo.at(0).toUtf8().constData() : "N/A");
|
||||||
@@ -1335,7 +1367,7 @@ private:
|
|||||||
QString const &ismasUpdateNews =
|
QString const &ismasUpdateNews =
|
||||||
QString("#M=APISM#C=CMD_EVENT#J=") +
|
QString("#M=APISM#C=CMD_EVENT#J=") +
|
||||||
ismasClient.updateNewsToIsmas(
|
ismasClient.updateNewsToIsmas(
|
||||||
_ISMAS_FAILURE,
|
_ISMAS_FAILURE, // U0003 is sent only once
|
||||||
ismasClient.getProgressInPercent(),
|
ismasClient.getProgressInPercent(),
|
||||||
IsmasClient::RESULT_CODE::UPDATE_IN_ERROR_STATE,
|
IsmasClient::RESULT_CODE::UPDATE_IN_ERROR_STATE,
|
||||||
smap[UPDATE_STEP::UPDATE_FINALIZE],
|
smap[UPDATE_STEP::UPDATE_FINALIZE],
|
||||||
|
23
common/include/message_handler.h
Executable file
23
common/include/message_handler.h
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef MESSAGE_HANDLER_H_INCLUDED
|
||||||
|
#define MESSAGE_HANDLER_H_INCLUDED
|
||||||
|
|
||||||
|
#include <QtGlobal>
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <syslog.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int getDebugLevel();
|
||||||
|
void setDebugLevel(int newDebugLevel);
|
||||||
|
|
||||||
|
bool messageHandlerInstalled();
|
||||||
|
QtMessageHandler atbInstallMessageHandler(QtMessageHandler handler);
|
||||||
|
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
||||||
|
// typedef void (*QtMessageHandler)(QtMsgType, const char *);
|
||||||
|
void atbDebugOutput(QtMsgType type, const char *msg);
|
||||||
|
#elif QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
// typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
|
||||||
|
void atbDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // MESSAGE_HANDLER_H_INCLUDED
|
97
common/src/message_handler.cpp
Executable file
97
common/src/message_handler.cpp
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#include "message_handler.h"
|
||||||
|
|
||||||
|
#include <QDateTime>
|
||||||
|
#include <cstring>
|
||||||
|
#include <QString>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QMessageLogContext>
|
||||||
|
|
||||||
|
|
||||||
|
static char const *DBG_NAME[] = { "DBG ", "WARN ", "CRIT ", "FATAL", "INFO " };
|
||||||
|
static bool installedMsgHandler = false;
|
||||||
|
static int debugLevel = LOG_NOTICE;
|
||||||
|
|
||||||
|
int getDebugLevel() { return debugLevel; }
|
||||||
|
void setDebugLevel(int newDebugLevel) {
|
||||||
|
debugLevel = newDebugLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool messageHandlerInstalled() {
|
||||||
|
return installedMsgHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
QtMessageHandler atbInstallMessageHandler(QtMessageHandler handler) {
|
||||||
|
installedMsgHandler = (handler != 0);
|
||||||
|
static QtMessageHandler prevHandler = nullptr;
|
||||||
|
if (handler) {
|
||||||
|
prevHandler = qInstallMessageHandler(handler);
|
||||||
|
return prevHandler;
|
||||||
|
} else {
|
||||||
|
return qInstallMessageHandler(prevHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief Print message according to given debug level.
|
||||||
|
///
|
||||||
|
/// \note Install this function using qInstallMsgHandler().
|
||||||
|
///
|
||||||
|
/// int main(int argc, char **argv) {
|
||||||
|
/// installMsgHandler(atbDebugOutput);
|
||||||
|
/// QApplication app(argc, argv);
|
||||||
|
/// ...
|
||||||
|
/// return app.exec();
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
#if (QT_VERSION > QT_VERSION_CHECK(5, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
|
void atbDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
|
||||||
|
Q_UNUSED(context);
|
||||||
|
QString const localMsg = QString(DBG_NAME[type]) + msg.toLocal8Bit();
|
||||||
|
|
||||||
|
switch (debugLevel) {
|
||||||
|
case LOG_DEBUG: { // debug-level message
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
} break;
|
||||||
|
case LOG_INFO: { // informational message
|
||||||
|
if (type != QtDebugMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case LOG_NOTICE: { // normal, but significant, condition
|
||||||
|
if (type != QtDebugMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case LOG_WARNING: { // warning conditions
|
||||||
|
if (type != QtInfoMsg && type != QtDebugMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case LOG_ERR: { // error conditions
|
||||||
|
if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case LOG_CRIT: { // critical conditions
|
||||||
|
if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case LOG_ALERT: { // action must be taken immediately
|
||||||
|
if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case LOG_EMERG: { // system is unusable
|
||||||
|
if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) {
|
||||||
|
syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
//fprintf(stderr, "%s No ErrorLevel defined! %s\n",
|
||||||
|
// datetime.toStdString().c_str(), msg.toStdString().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
Reference in New Issue
Block a user