Compare commits
19 Commits
34c55c576c
...
990d257b09
Author | SHA1 | Date | |
---|---|---|---|
990d257b09 | |||
dfbad69ab1 | |||
5f0c86ba19 | |||
3588b25e65 | |||
1f8b88b2b6 | |||
0050ea35d0 | |||
7e4c138d1b | |||
685568d4f6 | |||
14b4c035da | |||
90de2f415e | |||
3cc71cb69b | |||
fef7533d00 | |||
e93058cc6b | |||
e65387aa60 | |||
904fa0374b | |||
4bf1bbe81f | |||
3ccdcbae51 | |||
8c50e6cf59 | |||
7e69846169 |
@ -54,6 +54,12 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||||||
# The device-controller firmware will be handled in a later version.
|
# The device-controller firmware will be handled in a later version.
|
||||||
VERSION="1.3.15"
|
VERSION="1.3.15"
|
||||||
# Bug fixes found during testing.
|
# Bug fixes found during testing.
|
||||||
|
# Don't disable Exit-button during update-process.
|
||||||
|
# Removed worker-thread with an own event-loop: only the GUI thread
|
||||||
|
# has an event loop. Tested JSON-downloads several times successfully
|
||||||
|
# (using the slave lib where the CA helper tool was active as master).
|
||||||
|
# Turned previous worker-object into its own thread, but without any
|
||||||
|
# own event-loop (so it cannot block anything inside the CA-plugin).
|
||||||
|
|
||||||
# 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.
|
||||||
@ -70,8 +76,9 @@ VERSION="1.3.15"
|
|||||||
# ausgefuehrt.
|
# ausgefuehrt.
|
||||||
# 4: rsync: immer alle Dateien soiegeln (bis auf opkg-commands)
|
# 4: rsync: immer alle Dateien soiegeln (bis auf opkg-commands)
|
||||||
# 5: Falls das Tool mal abstuerzt, dann einen Signal-Handler (fuer TERM)
|
# 5: Falls das Tool mal abstuerzt, dann einen Signal-Handler (fuer TERM)
|
||||||
# installieren, sodass zumnidest SEND-LASt-VERSION mit rausgeht.
|
# installieren, sodass zumnidest SEND-LAST-VERSION mit rausgeht.
|
||||||
# 6: rsync: explizites Binary, nicht das in busybox enthaltene.
|
# 6: rsync: explizites Binary, nicht das in busybox enthaltene.
|
||||||
|
# 7: Ein ini-File oder sowas.
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
BUILD_DATE=$$system("date /t")
|
BUILD_DATE=$$system("date /t")
|
||||||
@ -143,8 +150,7 @@ SOURCES += \
|
|||||||
ismas/ismas_client.cpp \
|
ismas/ismas_client.cpp \
|
||||||
process/command.cpp \
|
process/command.cpp \
|
||||||
message_handler.cpp \
|
message_handler.cpp \
|
||||||
worker.cpp \
|
worker.cpp
|
||||||
worker_thread.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
update.h \
|
update.h \
|
||||||
@ -158,7 +164,6 @@ HEADERS += \
|
|||||||
process/command.h \
|
process/command.h \
|
||||||
message_handler.h \
|
message_handler.h \
|
||||||
worker.h \
|
worker.h \
|
||||||
worker_thread.h \
|
|
||||||
plugins/interfaces.h
|
plugins/interfaces.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
|
48
main.cpp
48
main.cpp
@ -64,24 +64,6 @@ int main(int argc, char *argv[]) {
|
|||||||
setDebugLevel(LOG_NOTICE);
|
setDebugLevel(LOG_NOTICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if defined (Q_OS_UNIX) || defined (Q_OS_LINUX)
|
|
||||||
//#ifdef _POSIX_THREAD_PROCESS_SHARED
|
|
||||||
// errno = 0;
|
|
||||||
// int res = 0;
|
|
||||||
// if ((res = sysconf(_SC_THREAD_PROCESS_SHARED)) < 0) {
|
|
||||||
// if (errno != 0) {
|
|
||||||
// qCritical() << "_POSIX_THREAD_PROCESS_SHARED NOT SUPPORTED"
|
|
||||||
// << strerror(errno);
|
|
||||||
// exit(-1);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// if (res == _POSIX_THREAD_PROCESS_SHARED) {
|
|
||||||
// Utils::printInfoMsg("_POSIX_THREAD_PROCESS_SHARED SUPPORTED");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//#endif
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
parser.setApplicationDescription("Download tool for downloading device controller firmware, printer json-files and executing opkg-commands.");
|
parser.setApplicationDescription("Download tool for downloading device controller firmware, printer json-files and executing opkg-commands.");
|
||||||
parser.addHelpOption();
|
parser.addHelpOption();
|
||||||
@ -101,6 +83,10 @@ int main(int argc, char *argv[]) {
|
|||||||
pluginNameOption.setDefaultValue(pluginNameDefault);
|
pluginNameOption.setDefaultValue(pluginNameDefault);
|
||||||
parser.addOption(pluginNameOption);
|
parser.addOption(pluginNameOption);
|
||||||
|
|
||||||
|
QCommandLineOption noDownloadOption("no-psa-hardware-update",
|
||||||
|
QCoreApplication::translate("main", "Do not update the PSA firmware (json, device-controller)."));
|
||||||
|
parser.addOption(noDownloadOption);
|
||||||
|
|
||||||
QCommandLineOption workingDirectoryOption(QStringList() << "working-directory" << "working-directory",
|
QCommandLineOption workingDirectoryOption(QStringList() << "working-directory" << "working-directory",
|
||||||
QCoreApplication::translate("main", "working directory of update-script."),
|
QCoreApplication::translate("main", "working directory of update-script."),
|
||||||
QCoreApplication::translate("main", "directory"));
|
QCoreApplication::translate("main", "directory"));
|
||||||
@ -130,6 +116,7 @@ int main(int argc, char *argv[]) {
|
|||||||
QString plugInName = parser.value(pluginNameOption);
|
QString plugInName = parser.value(pluginNameOption);
|
||||||
QString workingDir = parser.value(workingDirectoryOption);
|
QString workingDir = parser.value(workingDirectoryOption);
|
||||||
bool const dryRun = parser.isSet(dryRunOption);
|
bool const dryRun = parser.isSet(dryRunOption);
|
||||||
|
bool const noUpdatePsaHardware = parser.isSet(noDownloadOption);
|
||||||
bool const showYoctoVersion = parser.isSet(yoctoVersionOption);
|
bool const showYoctoVersion = parser.isSet(yoctoVersionOption);
|
||||||
bool const showYoctoInstallStatus = parser.isSet(yoctoInstallStatusOption);
|
bool const showYoctoInstallStatus = parser.isSet(yoctoInstallStatusOption);
|
||||||
bool const showExtendedVersion = parser.isSet(extendedVersionOption);
|
bool const showExtendedVersion = parser.isSet(extendedVersionOption);
|
||||||
@ -170,6 +157,7 @@ int main(int argc, char *argv[]) {
|
|||||||
qInfo() << "plugInName ..............." << plugInName;
|
qInfo() << "plugInName ..............." << plugInName;
|
||||||
qInfo() << "workingDir ..............." << workingDir;
|
qInfo() << "workingDir ..............." << workingDir;
|
||||||
qInfo() << "dryRun ..................." << dryRun;
|
qInfo() << "dryRun ..................." << dryRun;
|
||||||
|
qInfo() << "noUpdatePsaHardware ......" << noUpdatePsaHardware;
|
||||||
qInfo() << "extended-version ........." << APP_EXTENDED_VERSION;
|
qInfo() << "extended-version ........." << APP_EXTENDED_VERSION;
|
||||||
//qInfo() << "yocto-version ............" << Worker::getATBUpdateToolYoctoVersion();
|
//qInfo() << "yocto-version ............" << Worker::getATBUpdateToolYoctoVersion();
|
||||||
//qInfo() << "yocto-install-status ....." << Worker::getATBUpdateToolYoctoInstallationStatus();
|
//qInfo() << "yocto-install-status ....." << Worker::getATBUpdateToolYoctoInstallationStatus();
|
||||||
@ -181,35 +169,17 @@ int main(int argc, char *argv[]) {
|
|||||||
#error "Only tested under UNIX/LINUX"
|
#error "Only tested under UNIX/LINUX"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
hwinf *hw = Update::loadDCPlugin(QDir(plugInDir), plugInName);
|
|
||||||
hw->dc_autoRequest(true);
|
|
||||||
// hw->dc_openSerial(5, "115200", "ttymxc2", 1);
|
|
||||||
|
|
||||||
Worker worker(customerNr,
|
Worker worker(customerNr,
|
||||||
machineNr,
|
machineNr,
|
||||||
zoneNr,
|
zoneNr,
|
||||||
branchName,
|
branchName,
|
||||||
|
plugInDir,
|
||||||
plugInName,
|
plugInName,
|
||||||
workingDir,
|
workingDir,
|
||||||
|
noUpdatePsaHardware,
|
||||||
dryRun);
|
dryRun);
|
||||||
|
|
||||||
QString const customerNrStr(
|
MainWindow mw(&worker);
|
||||||
QString("customer_") + QString::number(customerNr).rightJustified(3, '0'));
|
|
||||||
|
|
||||||
QScopedPointer<Update> update(
|
|
||||||
new Update(hw,
|
|
||||||
&worker,
|
|
||||||
QDir::cleanPath(workingDir + QDir::separator() + customerNrStr),
|
|
||||||
customerNrStr,
|
|
||||||
branchName,
|
|
||||||
plugInName,
|
|
||||||
workingDir,
|
|
||||||
dryRun,
|
|
||||||
nullptr,
|
|
||||||
SERIAL_PORT,
|
|
||||||
"115200"));
|
|
||||||
|
|
||||||
MainWindow mw(hw, &worker, update.get());
|
|
||||||
worker.setMainWindow(&mw);
|
worker.setMainWindow(&mw);
|
||||||
|
|
||||||
mw.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
|
mw.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
|
||||||
|
179
mainwindow.cpp
179
mainwindow.cpp
@ -13,102 +13,14 @@
|
|||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
|
||||||
|
|
||||||
|
MainWindow::MainWindow(Worker *worker, QWidget *parent)
|
||||||
#if EMERGENCY_LEAVE_BL==1
|
|
||||||
static int step = 0;
|
|
||||||
|
|
||||||
void MainWindow::emergencyLeaveBL() {
|
|
||||||
//
|
|
||||||
qCritical() << __func__ << step;
|
|
||||||
switch(step) {
|
|
||||||
case 0:
|
|
||||||
if (m_hw->dc_openSerial(5, "115200", "ttymxc2", 1)) {
|
|
||||||
qCritical() << __func__ << "open ok";
|
|
||||||
step++;
|
|
||||||
QThread::msleep(2000);
|
|
||||||
m_hw->dc_autoRequest(false);
|
|
||||||
emit leaveBL();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
m_hw->bl_rebootDC();
|
|
||||||
QThread::msleep(1000);
|
|
||||||
qCritical() << __func__ << "reboot ok" << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
step++;
|
|
||||||
emit leaveBL();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
case 6:
|
|
||||||
m_hw->bl_startBL();
|
|
||||||
QThread::msleep(1000);
|
|
||||||
qCritical() << __func__ << "start" << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
step++;
|
|
||||||
emit leaveBL();
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
case 9:
|
|
||||||
case 11:
|
|
||||||
case 13:
|
|
||||||
case 15:
|
|
||||||
m_hw->bl_checkBL();
|
|
||||||
qCritical() << __func__ << "check" << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
QThread::msleep(1500);
|
|
||||||
++step;
|
|
||||||
emit leaveBL();
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
case 10:
|
|
||||||
case 12:
|
|
||||||
case 14:
|
|
||||||
case 16:
|
|
||||||
qCritical() << __func__ << "is Up..." << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
if (m_hw->bl_isUp()) {
|
|
||||||
qCritical() << __func__ << "is Up...OK" << step << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
QThread::msleep(5000);
|
|
||||||
step = 16;
|
|
||||||
} else {
|
|
||||||
qCritical() << __func__ << "is Up...NO" << step << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
}
|
|
||||||
++step;
|
|
||||||
emit leaveBL();
|
|
||||||
break;
|
|
||||||
case 17:
|
|
||||||
case 18:
|
|
||||||
case 19:
|
|
||||||
qCritical() << __func__ << "stop" << QDateTime::currentDateTime().toString(Qt::ISODateWithMs);
|
|
||||||
m_hw->bl_stopBL();
|
|
||||||
QThread::msleep(1000);
|
|
||||||
//m_hw->dc_closeSerial();
|
|
||||||
++step;
|
|
||||||
emit leaveBL();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MainWindow::MainWindow(hwinf *hw, Worker *worker, Update *update, QWidget *parent)
|
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
, ui(new Ui::MainWindow)
|
, ui(new Ui::MainWindow)
|
||||||
, m_hw(hw)
|
|
||||||
, m_worker(worker)
|
, m_worker(worker)
|
||||||
, m_width(70)
|
, m_width(70)
|
||||||
, m_progressRunning(false)
|
, m_progressRunning(false)
|
||||||
// , m_progressValue(0)
|
|
||||||
, m_update(update)
|
|
||||||
, m_updateStep(UpdateDcEvent::UpdateStep::NONE) {
|
, m_updateStep(UpdateDcEvent::UpdateStep::NONE) {
|
||||||
|
|
||||||
#if EMERGENCY_LEAVE_BL==1
|
|
||||||
QTimer *t = new QTimer(this);
|
|
||||||
connect(t, SIGNAL(timeout()), this, SLOT(emergencyLeaveBL()));
|
|
||||||
connect(this, SIGNAL(leaveBL()), this, SLOT(emergencyLeaveBL()), Qt::QueuedConnection);
|
|
||||||
t->setSingleShot(true);
|
|
||||||
t->start(1000);
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
this->setStatusBar(new QStatusBar(this));
|
this->setStatusBar(new QStatusBar(this));
|
||||||
QFont f;
|
QFont f;
|
||||||
f.setStyleHint(QFont::Monospace);
|
f.setStyleHint(QFont::Monospace);
|
||||||
@ -138,7 +50,7 @@ MainWindow::MainWindow(hwinf *hw, Worker *worker, Update *update, QWidget *paren
|
|||||||
// ui->updateStatus->installEventFilter(this);
|
// ui->updateStatus->installEventFilter(this);
|
||||||
|
|
||||||
m_startTimer = new QTimer(this);
|
m_startTimer = new QTimer(this);
|
||||||
connect(m_startTimer, SIGNAL(timeout()), m_worker, SLOT(update()));
|
connect(m_startTimer, SIGNAL(timeout()), m_worker, SLOT(start()));
|
||||||
m_startTimer->setSingleShot(true);
|
m_startTimer->setSingleShot(true);
|
||||||
m_startTimer->start(1000);
|
m_startTimer->start(1000);
|
||||||
|
|
||||||
@ -215,86 +127,6 @@ void MainWindow::customEvent(QEvent *event) {
|
|||||||
} else {
|
} else {
|
||||||
qCritical() << "!!! UNKNOWN SENDER !!!";
|
qCritical() << "!!! UNKNOWN SENDER !!!";
|
||||||
}
|
}
|
||||||
} else
|
|
||||||
if (event->type() == UpdateDcEvent::type()) {
|
|
||||||
UpdateDcEvent *pevent = (UpdateDcEvent *)event;
|
|
||||||
UpdateDcEvent::UpdateStep const updateStep = pevent->updateStep();
|
|
||||||
QObject const *sender = pevent->sender();
|
|
||||||
if (sender == m_worker) {
|
|
||||||
QDateTime const &recv = QDateTime::currentDateTime();
|
|
||||||
QDateTime const &send = pevent->sendDateTime();
|
|
||||||
qint64 const delay = recv.toMSecsSinceEpoch() - send.toMSecsSinceEpoch();
|
|
||||||
switch(updateStep) {
|
|
||||||
case UpdateDcEvent::UpdateStep::NONE:
|
|
||||||
break;
|
|
||||||
case UpdateDcEvent::UpdateStep::DC_REBOOT: {
|
|
||||||
m_hw->bl_rebootDC();
|
|
||||||
QString msg = QDateTime::currentDateTime().toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": reset device controller (delay=%1ms").arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
m_updateStep = UpdateDcEvent::UpdateStep::DC_REBOOT;
|
|
||||||
} break;
|
|
||||||
case UpdateDcEvent::UpdateStep::BL_START: {
|
|
||||||
QString const &msg = recv.toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": start bootloader (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
m_hw->bl_startBL();
|
|
||||||
if (pevent->count() == BL_START_COUNT) {
|
|
||||||
m_updateStep = UpdateDcEvent::UpdateStep::BL_START;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case UpdateDcEvent::UpdateStep::BL_CHECK: {
|
|
||||||
if (m_updateStep != UpdateDcEvent::UpdateStep::BL_IS_UP) {
|
|
||||||
QString const &msg = recv.toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": request bootloader version (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
m_hw->bl_checkBL();
|
|
||||||
//m_updateStep = UpdateDcEvent::UpdateStep::BL_CHECK;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case UpdateDcEvent::UpdateStep::BL_IS_UP: {
|
|
||||||
QString msg = recv.toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": check running bootloader (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
if (m_updateStep != UpdateDcEvent::UpdateStep::BL_IS_UP) {
|
|
||||||
if (m_hw->bl_isUp()) {
|
|
||||||
msg = recv.toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": bootloader running (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
m_updateStep = UpdateDcEvent::UpdateStep::BL_IS_UP;
|
|
||||||
} else {
|
|
||||||
msg = recv.toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": bootloader stop requested (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
if (m_updateStep == UpdateDcEvent::UpdateStep::BL_STOP) {
|
|
||||||
msg = QDateTime::currentDateTime().toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": bootloader down (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
m_updateStep = UpdateDcEvent::UpdateStep::BL_IS_DOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case UpdateDcEvent::UpdateStep::BL_STOP: {
|
|
||||||
QString const &msg = QDateTime::currentDateTime().toString(Qt::ISODateWithMs)
|
|
||||||
+ QString(": stop bootloader (%1, delay=%2ms)").arg(pevent->count()).arg(delay);
|
|
||||||
emit m_worker->showStatusMessage("dc update", msg);
|
|
||||||
Utils::printInfoMsg(msg.toUpper());
|
|
||||||
//if (m_bootLoaderIsUp) {
|
|
||||||
m_hw->bl_stopBL();
|
|
||||||
m_updateStep = UpdateDcEvent::UpdateStep::BL_STOP;
|
|
||||||
//}
|
|
||||||
} break;
|
|
||||||
default: ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QThread::yieldCurrentThread();
|
QThread::yieldCurrentThread();
|
||||||
@ -312,13 +144,6 @@ void MainWindow::onEnableExit() {
|
|||||||
ui->exit->setEnabled(true);
|
ui->exit->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//bool MainWindow::eventFilter(QObject *obj, QEvent *ev) {
|
|
||||||
// if (obj == ui->updateStatus) {
|
|
||||||
// qCritical() << "REc. event for text edit" << ev->type();
|
|
||||||
// }
|
|
||||||
// return QMainWindow::eventFilter(obj, ev);
|
|
||||||
//}
|
|
||||||
|
|
||||||
void MainWindow::onRestartExitTimer() {
|
void MainWindow::onRestartExitTimer() {
|
||||||
m_exitTimer->stop();
|
m_exitTimer->stop();
|
||||||
m_exitTimer->start(60 * 1000);
|
m_exitTimer->start(60 * 1000);
|
||||||
|
10
mainwindow.h
10
mainwindow.h
@ -21,10 +21,9 @@ class MainWindow : public QMainWindow {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void customEvent(QEvent *event) override;
|
void customEvent(QEvent *event) override;
|
||||||
// bool eventFilter(QObject *obj, QEvent *ev) override;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MainWindow(hwinf *hw, Worker *worker, Update *update, QWidget *parent = nullptr);
|
MainWindow(Worker *worker, QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
static const int START_PROGRESS_LOOP = -1;
|
static const int START_PROGRESS_LOOP = -1;
|
||||||
@ -34,11 +33,6 @@ public:
|
|||||||
static const int BL_IS_UP_COUNT = 5;
|
static const int BL_IS_UP_COUNT = 5;
|
||||||
static const int BL_STOP_COUNT = 5;
|
static const int BL_STOP_COUNT = 5;
|
||||||
|
|
||||||
// int progressValue() const { return m_progressValue; }
|
|
||||||
hwinf *getPlugin() { return m_hw; }
|
|
||||||
hwinf const *getPlugin() const { return m_hw; }
|
|
||||||
Update *getUpdate() { return m_update; }
|
|
||||||
Update const *getUpdate() const { return m_update; }
|
|
||||||
UpdateDcEvent::UpdateStep updateStep() const { return m_updateStep; }
|
UpdateDcEvent::UpdateStep updateStep() const { return m_updateStep; }
|
||||||
void setUpdateStep(UpdateDcEvent::UpdateStep updateStep) { m_updateStep = updateStep; }
|
void setUpdateStep(UpdateDcEvent::UpdateStep updateStep) { m_updateStep = updateStep; }
|
||||||
|
|
||||||
@ -72,14 +66,12 @@ private:
|
|||||||
void onShowMessage(QString, QString);
|
void onShowMessage(QString, QString);
|
||||||
|
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
hwinf *m_hw;
|
|
||||||
Worker *m_worker;
|
Worker *m_worker;
|
||||||
int const m_width;
|
int const m_width;
|
||||||
QTimer *m_startTimer;
|
QTimer *m_startTimer;
|
||||||
QTimer *m_exitTimer;
|
QTimer *m_exitTimer;
|
||||||
bool m_progressRunning;
|
bool m_progressRunning;
|
||||||
//int m_progressValue;
|
//int m_progressValue;
|
||||||
Update *m_update;
|
|
||||||
UpdateDcEvent::UpdateStep m_updateStep;
|
UpdateDcEvent::UpdateStep m_updateStep;
|
||||||
};
|
};
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
@ -1559,6 +1559,7 @@ public:
|
|||||||
|
|
||||||
virtual void bna_setCurrentAcceptance(uint16_t notesToAccept) const =0;
|
virtual void bna_setCurrentAcceptance(uint16_t notesToAccept) const =0;
|
||||||
// can be used to block notes dynamically, example: from now only 5€ bills are allowed (if only 3€ are to be paid)
|
// can be used to block notes dynamically, example: from now only 5€ bills are allowed (if only 3€ are to be paid)
|
||||||
|
// only valid till next start-payment. Cannot add notes which are not activated in Json
|
||||||
|
|
||||||
virtual void bna_requestParameters(void) const =0;
|
virtual void bna_requestParameters(void) const =0;
|
||||||
// send command to DC in order to get static invariable device parameters like currency
|
// send command to DC in order to get static invariable device parameters like currency
|
||||||
|
18
update.cpp
18
update.cpp
@ -94,11 +94,11 @@ bool Update::unloadDCPlugin() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Update::Update(hwinf *hw,
|
Update::Update(Worker *worker,
|
||||||
Worker *worker,
|
|
||||||
QString customerRepository,
|
QString customerRepository,
|
||||||
QString customerNrStr,
|
QString customerNrStr,
|
||||||
QString branchName,
|
QString branchName,
|
||||||
|
QString plugInDir,
|
||||||
QString pluginName,
|
QString pluginName,
|
||||||
QString workingDir,
|
QString workingDir,
|
||||||
bool dryRun,
|
bool dryRun,
|
||||||
@ -106,7 +106,7 @@ Update::Update(hwinf *hw,
|
|||||||
char const *serialInterface,
|
char const *serialInterface,
|
||||||
char const *baudrate)
|
char const *baudrate)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_hw(hw)
|
, m_hw(loadDCPlugin(QDir(plugInDir), pluginName))
|
||||||
, m_worker(worker)
|
, m_worker(worker)
|
||||||
, m_serialInterface(serialInterface)
|
, m_serialInterface(serialInterface)
|
||||||
, m_baudrate(baudrate)
|
, m_baudrate(baudrate)
|
||||||
@ -742,7 +742,17 @@ QStringList Update::getDcSoftAndHardWareVersion() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||||
// always assume that serial line is open
|
int tries = 20;
|
||||||
|
while (!m_hw->sys_areDCdataValid()) { // must deliver 'true', only then are all
|
||||||
|
// data from hwapi valid
|
||||||
|
if (--tries < 0) {
|
||||||
|
qCritical() << "ERROR!!! DC DATA NOT VALID -> CA-MASTER-PLUGIN NOT CONNECTED";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
m_hw->dc_autoRequest(true);
|
||||||
|
QThread::msleep(500);
|
||||||
|
}
|
||||||
|
|
||||||
bool res = false;
|
bool res = false;
|
||||||
QList<QString>::const_iterator it;
|
QList<QString>::const_iterator it;
|
||||||
for (it = filesToWorkOn.cbegin(); it != filesToWorkOn.cend(); ++it) {
|
for (it = filesToWorkOn.cbegin(); it != filesToWorkOn.cend(); ++it) {
|
||||||
|
11
update.h
11
update.h
@ -21,8 +21,8 @@ class Worker;
|
|||||||
class Update : public QObject {
|
class Update : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
hwinf *m_hw;
|
hwinf *m_hw = nullptr;
|
||||||
Worker *m_worker;
|
Worker *m_worker = nullptr;
|
||||||
char const *m_serialInterface;
|
char const *m_serialInterface;
|
||||||
char const *m_baudrate;
|
char const *m_baudrate;
|
||||||
QString m_customerRepository;
|
QString m_customerRepository;
|
||||||
@ -44,11 +44,11 @@ public:
|
|||||||
static QStringList split(QString line, QChar sep = ',');
|
static QStringList split(QString line, QChar sep = ',');
|
||||||
|
|
||||||
|
|
||||||
explicit Update(hwinf *hw,
|
explicit Update(Worker *worker,
|
||||||
Worker *worker,
|
|
||||||
QString customerRepository,
|
QString customerRepository,
|
||||||
QString customerNrStr,
|
QString customerNrStr,
|
||||||
QString branchName,
|
QString branchName,
|
||||||
|
QString plugInDir,
|
||||||
QString pluginName,
|
QString pluginName,
|
||||||
QString workingDir,
|
QString workingDir,
|
||||||
bool dryRun = false,
|
bool dryRun = false,
|
||||||
@ -58,6 +58,9 @@ public:
|
|||||||
virtual ~Update() override;
|
virtual ~Update() override;
|
||||||
bool doUpdate(int &displayIndex, QStringList const &linesToWorkOn);
|
bool doUpdate(int &displayIndex, QStringList const &linesToWorkOn);
|
||||||
|
|
||||||
|
hwinf *hw() { return m_hw; }
|
||||||
|
hwinf const *hw() const { return m_hw; }
|
||||||
|
|
||||||
//QString customerId() { return m_customerId; }
|
//QString customerId() { return m_customerId; }
|
||||||
//QString const customerId() const { return m_customerId; }
|
//QString const customerId() const { return m_customerId; }
|
||||||
|
|
||||||
|
163
worker.cpp
163
worker.cpp
@ -66,7 +66,6 @@ const QMap<UPDATE_STEP, const char*> Worker::smap (
|
|||||||
INSERT_ELEMENT(UPDATE_STEP::CHECK_FOR_REPOSITORY_CHANGES_SUCCESS),
|
INSERT_ELEMENT(UPDATE_STEP::CHECK_FOR_REPOSITORY_CHANGES_SUCCESS),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::CHECK_FOR_REPOSITORY_CHANGES_FAILURE),
|
INSERT_ELEMENT(UPDATE_STEP::CHECK_FOR_REPOSITORY_CHANGES_FAILURE),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::FILES_TO_UPDATE),
|
INSERT_ELEMENT(UPDATE_STEP::FILES_TO_UPDATE),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::APPLY_REPOSITORY_CHANGES),
|
|
||||||
INSERT_ELEMENT(UPDATE_STEP::FILES_TO_DOWNLOAD),
|
INSERT_ELEMENT(UPDATE_STEP::FILES_TO_DOWNLOAD),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::EXEC_OPKG_COMMANDS),
|
INSERT_ELEMENT(UPDATE_STEP::EXEC_OPKG_COMMANDS),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::EXEC_OPKG_COMMAND_1),
|
INSERT_ELEMENT(UPDATE_STEP::EXEC_OPKG_COMMAND_1),
|
||||||
@ -87,8 +86,9 @@ const QMap<UPDATE_STEP, const char*> Worker::smap (
|
|||||||
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER),
|
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_SUCCESS),
|
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_SUCCESS),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE),
|
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::APPLY_REPOSITORY_CHANGES_SUCCESS),
|
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::APPLY_REPOSITORY_CHANGES_FAILURE),
|
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS),
|
||||||
|
INSERT_ELEMENT(UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY),
|
INSERT_ELEMENT(UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY_SUCCESS),
|
INSERT_ELEMENT(UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY_SUCCESS),
|
||||||
INSERT_ELEMENT(UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY_FAILURE),
|
INSERT_ELEMENT(UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY_FAILURE),
|
||||||
@ -111,22 +111,25 @@ Worker::Worker(int customerNr,
|
|||||||
int machineNr,
|
int machineNr,
|
||||||
int zoneNr,
|
int zoneNr,
|
||||||
QString branchName,
|
QString branchName,
|
||||||
|
QString pluginDir,
|
||||||
QString pluginName,
|
QString pluginName,
|
||||||
QString workingDirectory,
|
QString workingDirectory,
|
||||||
|
bool noUpdatePsaHardware,
|
||||||
bool dryRun,
|
bool dryRun,
|
||||||
QObject *parent,
|
QObject *parent,
|
||||||
char const *serialInterface,
|
char const *serialInterface,
|
||||||
char const *baudrate)
|
char const *baudrate)
|
||||||
: m_workerThread("workerThread")
|
: m_customerNr(customerNr)
|
||||||
, m_customerNr(customerNr)
|
|
||||||
, m_customerNrStr(QString("customer_") + QString::number(m_customerNr).rightJustified(3, '0'))
|
, m_customerNrStr(QString("customer_") + QString::number(m_customerNr).rightJustified(3, '0'))
|
||||||
, m_machineNr(machineNr)
|
, m_machineNr(machineNr)
|
||||||
, m_zoneNr(zoneNr)
|
, m_zoneNr(zoneNr)
|
||||||
|
, m_pluginDir(pluginDir)
|
||||||
, m_pluginName(pluginName)
|
, m_pluginName(pluginName)
|
||||||
, m_workingDirectory(workingDirectory)
|
, m_workingDirectory(workingDirectory)
|
||||||
, m_branchName(branchName)
|
, m_branchName(branchName)
|
||||||
, m_customerRepositoryPath(QString("https://git.mimbach49.de/GerhardHoffmann/%1.git").arg(m_customerNrStr))
|
, m_customerRepositoryPath(QString("https://git.mimbach49.de/GerhardHoffmann/%1.git").arg(m_customerNrStr))
|
||||||
, m_customerRepository(QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr))
|
, m_customerRepository(QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr))
|
||||||
|
, m_noUpdatePsaHardware(noUpdatePsaHardware)
|
||||||
, m_dryRun(dryRun)
|
, m_dryRun(dryRun)
|
||||||
, m_parent(parent)
|
, m_parent(parent)
|
||||||
, m_serialInterface(serialInterface)
|
, m_serialInterface(serialInterface)
|
||||||
@ -158,31 +161,9 @@ Worker::Worker(int customerNr,
|
|||||||
QDir::setCurrent(m_workingDirectory);
|
QDir::setCurrent(m_workingDirectory);
|
||||||
|
|
||||||
m_apismVersion = getAPISMYoctoVersion();
|
m_apismVersion = getAPISMYoctoVersion();
|
||||||
|
|
||||||
this->moveToThread(&m_workerThread);
|
|
||||||
m_workerThread.start();
|
|
||||||
|
|
||||||
int cnt = 0;
|
|
||||||
while (!m_workerThread.isRunning()) {
|
|
||||||
if (++cnt > 5) {
|
|
||||||
Utils::printCriticalErrorMsg("starting worker thread FAILED");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QThread::sleep(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Worker::~Worker() {
|
Worker::~Worker() {
|
||||||
int cnt = 0;
|
|
||||||
m_workerThread.quit();
|
|
||||||
while (!m_workerThread.isFinished()) {
|
|
||||||
if (!m_workerThread.wait(1000)) {
|
|
||||||
if (++cnt > 5) {
|
|
||||||
Utils::printCriticalErrorMsg("stopping worker thread FAILED");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Worker::displayProgressInMainWindow(int progress) {
|
void Worker::displayProgressInMainWindow(int progress) {
|
||||||
@ -207,7 +188,7 @@ void Worker::stopProgressLoop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static std::once_flag once;
|
static std::once_flag once;
|
||||||
void Worker::update() {
|
void Worker::run() {
|
||||||
// user should not start the update process several times
|
// user should not start the update process several times
|
||||||
std::call_once(once, &Worker::privateUpdate, this);
|
std::call_once(once, &Worker::privateUpdate, this);
|
||||||
}
|
}
|
||||||
@ -385,15 +366,26 @@ void Worker::privateUpdate() {
|
|||||||
ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_REPOSITORY_SUCCESS));
|
ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_REPOSITORY_SUCCESS));
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// EXECUTE OPKG COMMANDS
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
if ((continueUpdate = execOpkgCommands()) == false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GUI() << (CONSOLE() << UPDATE_STEP::EXEC_OPKG_COMMAND_SUCCESS);
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// UPDATE THE PSA USING THE CHANGED FILES
|
// UPDATE THE PSA USING THE CHANGED FILES
|
||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
if ((continueUpdate = updateFiles()) == false) {
|
if ((continueUpdate = downloadFilesToPSAHardware()) == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GUI() << (CONSOLE() << UPDATE_STEP::APPLY_REPOSITORY_CHANGES_SUCCESS);
|
GUI() << (CONSOLE() << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS);
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
@ -645,15 +637,31 @@ bool Worker::filesToUpdate() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Worker::updateFiles() {
|
bool Worker::computeFilesToDownload() {
|
||||||
m_filesToDownload.clear();
|
m_filesToDownload.clear();
|
||||||
m_displayIndex = 0;
|
for (int i = 0; i < m_filesToUpdate.size(); ++i) {
|
||||||
|
QString const fName = m_filesToUpdate.at(i);
|
||||||
|
if (fName.contains("DC2C_print", Qt::CaseInsensitive) ||
|
||||||
|
fName.contains("DC2C_device", Qt::CaseInsensitive) ||
|
||||||
|
fName.contains("DC2C_conf", Qt::CaseInsensitive) ||
|
||||||
|
fName.contains("DC2C_cash", Qt::CaseInsensitive)) {
|
||||||
|
m_filesToDownload << fName; // download printer-config-files
|
||||||
|
} else {
|
||||||
|
static const QRegularExpression version("^.*dc2c[.][0-9]{1,2}[.][0-9]{1,2}[.]bin.*$");
|
||||||
|
if (fName.contains(version)) {
|
||||||
|
m_filesToDownload << fName; // download device controller
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::APPLY_REPOSITORY_CHANGES);
|
return (m_filesToDownload.size() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Worker::execOpkgCommands() {
|
||||||
for (int i = 0; i < m_filesToUpdate.size(); ++i) {
|
for (int i = 0; i < m_filesToUpdate.size(); ++i) {
|
||||||
QString const fName = m_filesToUpdate.at(i);
|
QString const fName = m_filesToUpdate.at(i);
|
||||||
if (fName.contains("opkg_commands", Qt::CaseInsensitive)) {
|
if (fName.contains("opkg_commands", Qt::CaseInsensitive)) {
|
||||||
@ -730,31 +738,32 @@ bool Worker::updateFiles() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
|
||||||
if (fName.contains("DC2C_print", Qt::CaseInsensitive) ||
|
|
||||||
fName.contains("DC2C_device", Qt::CaseInsensitive) ||
|
|
||||||
fName.contains("DC2C_conf", Qt::CaseInsensitive) ||
|
|
||||||
fName.contains("DC2C_cash", Qt::CaseInsensitive)) {
|
|
||||||
m_filesToDownload << fName; // download printer-config-files
|
|
||||||
} else {
|
|
||||||
static const QRegularExpression version("^.*dc2c[.][0-9]{1,2}[.][0-9]{1,2}[.]bin.*$");
|
|
||||||
if (fName.contains(version)) {
|
|
||||||
m_filesToDownload << fName; // download device controller
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_filesToDownload.size() > 0) {
|
bool Worker::downloadFilesToPSAHardware() {
|
||||||
CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD;
|
m_displayIndex = 0;
|
||||||
|
|
||||||
Update *update = m_mainWindow->getUpdate();
|
GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE);
|
||||||
if (update) {
|
|
||||||
return update->doUpdate(m_displayIndex, m_filesToDownload);
|
if (m_noUpdatePsaHardware == false) {
|
||||||
|
if (computeFilesToDownload()) {
|
||||||
|
CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD;
|
||||||
|
|
||||||
|
Update update(this,
|
||||||
|
QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
|
||||||
|
m_customerNrStr,
|
||||||
|
m_branchName,
|
||||||
|
m_pluginDir,
|
||||||
|
m_pluginName,
|
||||||
|
m_workingDirectory);
|
||||||
|
|
||||||
|
return update.doUpdate(m_displayIndex, m_filesToDownload);
|
||||||
} else {
|
} else {
|
||||||
CONSOLE(QStringList("UPDATE NOT SET")) << UPDATE_STEP::ERROR;
|
CONSOLE(QStringList("NO FILES TO DOWNLOAD TO PSA-HW")) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
CONSOLE(QStringList("NO FILES TO DOENLOAD TO PSA-HW")) << UPDATE_STEP::ERROR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -843,17 +852,6 @@ bool Worker::syncCustomerRepositoryAndFS() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
bool Worker::sendIsmasLastVersionNotification(int progress) {
|
|
||||||
m_ismasClient.setProgressInPercent(progress);
|
|
||||||
IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
|
|
||||||
QString("#M=APISM#C=CMD_SENDVERSION#J=") +
|
|
||||||
m_ismasClient.updateOfPSASendVersion(getPSAInstalled()));
|
|
||||||
emit appendText(QString("Send last version info "), UPDATE_STEP_DONE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool Worker::saveLogFile() {
|
bool Worker::saveLogFile() {
|
||||||
// ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::SAVE_LOGS));
|
// ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::SAVE_LOGS));
|
||||||
// ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::SAVE_LOGS_FAILURE));
|
// ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::SAVE_LOGS_FAILURE));
|
||||||
@ -965,22 +963,25 @@ QString Worker::getPluginVersion(QString const &pluginFileName) const {
|
|||||||
|
|
||||||
QStringList Worker::getDCVersion() const {
|
QStringList Worker::getDCVersion() const {
|
||||||
QStringList lst = (QStringList() << "N/A" << "N/A");
|
QStringList lst = (QStringList() << "N/A" << "N/A");
|
||||||
hwinf *hwi = m_mainWindow->getPlugin();
|
Update const *up = update();
|
||||||
if (hwi) {
|
if (up) {
|
||||||
hwi->dc_autoRequest(true); // turn auto-request setting on
|
hwinf const *caPlugin = up->hw();
|
||||||
|
if (caPlugin) {
|
||||||
|
caPlugin->dc_autoRequest(true); // turn auto-request setting on
|
||||||
|
|
||||||
QByteArray const cmp(8, char(0));
|
QByteArray const cmp(8, char(0));
|
||||||
QByteArray hw(""), sw("");
|
QByteArray hw(""), sw("");
|
||||||
for (int i=0; i<5; ++i) {
|
for (int i=0; i<5; ++i) {
|
||||||
hw = hwi->dc_getHWversion().toUtf8();
|
hw = caPlugin->dc_getHWversion().toUtf8();
|
||||||
sw = hwi->dc_getSWversion().toUtf8();
|
sw = caPlugin->dc_getSWversion().toUtf8();
|
||||||
if (!hw.startsWith(cmp)) {
|
if (!hw.startsWith(cmp)) {
|
||||||
lst.clear();
|
lst.clear();
|
||||||
qInfo() << hw << sw;
|
qInfo() << hw << sw;
|
||||||
lst << hw << sw;
|
lst << hw << sw;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
QThread::sleep(1);
|
||||||
}
|
}
|
||||||
QThread::sleep(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lst;
|
return lst;
|
||||||
@ -1104,11 +1105,3 @@ PSAInstalled Worker::getPSAInstalled() {
|
|||||||
|
|
||||||
return psaInstalled;
|
return psaInstalled;
|
||||||
}
|
}
|
||||||
|
|
||||||
hwinf *Worker::getPlugin() {
|
|
||||||
return m_mainWindow ? m_mainWindow->getPlugin() : nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
hwinf const *Worker::getPlugin() const {
|
|
||||||
return m_mainWindow ? m_mainWindow->getPlugin() : nullptr;
|
|
||||||
}
|
|
||||||
|
67
worker.h
67
worker.h
@ -10,11 +10,11 @@
|
|||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
|
|
||||||
#include "worker_thread.h"
|
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "git/git_client.h"
|
#include "git/git_client.h"
|
||||||
#include "ismas/ismas_client.h"
|
#include "ismas/ismas_client.h"
|
||||||
@ -64,7 +64,6 @@
|
|||||||
#define _FILES_TO_UPDATE (37)
|
#define _FILES_TO_UPDATE (37)
|
||||||
#define _CHECK_FOR_REPOSITORY_CHANGES_FAILURE (38)
|
#define _CHECK_FOR_REPOSITORY_CHANGES_FAILURE (38)
|
||||||
#define _FILES_TO_DOWNLOAD (39)
|
#define _FILES_TO_DOWNLOAD (39)
|
||||||
#define _APPLY_REPOSITORY_CHANGES (40)
|
|
||||||
#define _EXEC_OPKG_COMMANDS (41)
|
#define _EXEC_OPKG_COMMANDS (41)
|
||||||
#define _EXEC_OPKG_COMMAND_1 (42)
|
#define _EXEC_OPKG_COMMAND_1 (42)
|
||||||
#define _EXEC_OPKG_COMMAND_2 (43)
|
#define _EXEC_OPKG_COMMAND_2 (43)
|
||||||
@ -78,14 +77,15 @@
|
|||||||
#define _EXEC_OPKG_COMMAND_LAST (51)
|
#define _EXEC_OPKG_COMMAND_LAST (51)
|
||||||
#define _EXEC_OPKG_COMMAND_FAILURE (52)
|
#define _EXEC_OPKG_COMMAND_FAILURE (52)
|
||||||
#define _EXEC_OPKG_COMMAND_SUCCESS (53)
|
#define _EXEC_OPKG_COMMAND_SUCCESS (53)
|
||||||
#define _DOWNLOAD_CONFIG_FILE (54)
|
#define _DOWNLOAD_FILES_TO_PSA_HARDWARE (54)
|
||||||
#define _DOWNLOAD_CONFIG_FILE_SUCCESS (63)
|
#define _DOWNLOAD_CONFIG_FILE (55)
|
||||||
#define _DOWNLOAD_CONFIG_FILE_FAILURE (64)
|
#define _DOWNLOAD_CONFIG_FILE_SUCCESS (56)
|
||||||
|
#define _DOWNLOAD_CONFIG_FILE_FAILURE (57)
|
||||||
#define _DOWNLOAD_DEVICE_CONTROLLER (65)
|
#define _DOWNLOAD_DEVICE_CONTROLLER (65)
|
||||||
#define _DOWNLOAD_DEVICE_CONTROLLER_SUCCESS (86)
|
#define _DOWNLOAD_DEVICE_CONTROLLER_SUCCESS (86)
|
||||||
#define _DOWNLOAD_DEVICE_CONTROLLER_FAILURE (87)
|
#define _DOWNLOAD_DEVICE_CONTROLLER_FAILURE (87)
|
||||||
#define _APPLY_REPOSITORY_CHANGES_FAILURE (88)
|
#define _DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE (88)
|
||||||
#define _APPLY_REPOSITORY_CHANGES_SUCCESS (89)
|
#define _DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS (89)
|
||||||
#define _SYNC_CUSTOMER_REPOSITORY (90)
|
#define _SYNC_CUSTOMER_REPOSITORY (90)
|
||||||
#define _SYNC_CUSTOMER_REPOSITORY_FAILURE (91)
|
#define _SYNC_CUSTOMER_REPOSITORY_FAILURE (91)
|
||||||
#define _SYNC_CUSTOMER_REPOSITORY_SUCCESS (92)
|
#define _SYNC_CUSTOMER_REPOSITORY_SUCCESS (92)
|
||||||
@ -110,19 +110,20 @@
|
|||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
class hwinf;
|
class hwinf;
|
||||||
class Worker : public QObject {
|
class Worker : public QThread{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
WorkerThread m_workerThread;
|
|
||||||
int const m_customerNr;
|
int const m_customerNr;
|
||||||
QString const m_customerNrStr;
|
QString const m_customerNrStr;
|
||||||
int const m_machineNr;
|
int const m_machineNr;
|
||||||
int const m_zoneNr;
|
int const m_zoneNr;
|
||||||
|
QString const m_pluginDir;
|
||||||
QString const m_pluginName;
|
QString const m_pluginName;
|
||||||
QString const m_workingDirectory;
|
QString const m_workingDirectory;
|
||||||
QString const m_branchName;
|
QString const m_branchName;
|
||||||
QString const m_customerRepositoryPath;
|
QString const m_customerRepositoryPath;
|
||||||
QString const m_customerRepository;
|
QString const m_customerRepository;
|
||||||
|
bool const m_noUpdatePsaHardware;
|
||||||
bool const m_dryRun;
|
bool const m_dryRun;
|
||||||
QObject *m_parent;
|
QObject *m_parent;
|
||||||
QString const m_serialInterface;
|
QString const m_serialInterface;
|
||||||
@ -240,7 +241,7 @@ public:
|
|||||||
CHECK_FOR_REPOSITORY_CHANGES_SUCCESS = _CHECK_FOR_REPOSITORY_CHANGES_SUCCESS,
|
CHECK_FOR_REPOSITORY_CHANGES_SUCCESS = _CHECK_FOR_REPOSITORY_CHANGES_SUCCESS,
|
||||||
CHECK_FOR_REPOSITORY_CHANGES_FAILURE = _CHECK_FOR_REPOSITORY_CHANGES_FAILURE,
|
CHECK_FOR_REPOSITORY_CHANGES_FAILURE = _CHECK_FOR_REPOSITORY_CHANGES_FAILURE,
|
||||||
FILES_TO_UPDATE = _FILES_TO_UPDATE,
|
FILES_TO_UPDATE = _FILES_TO_UPDATE,
|
||||||
APPLY_REPOSITORY_CHANGES = _APPLY_REPOSITORY_CHANGES,
|
DOWNLOAD_FILES_TO_PSA_HARDWARE = _DOWNLOAD_FILES_TO_PSA_HARDWARE,
|
||||||
FILES_TO_DOWNLOAD = _FILES_TO_DOWNLOAD,
|
FILES_TO_DOWNLOAD = _FILES_TO_DOWNLOAD,
|
||||||
EXEC_OPKG_COMMANDS = _EXEC_OPKG_COMMANDS,
|
EXEC_OPKG_COMMANDS = _EXEC_OPKG_COMMANDS,
|
||||||
EXEC_OPKG_COMMAND_1 = _EXEC_OPKG_COMMAND_1,
|
EXEC_OPKG_COMMAND_1 = _EXEC_OPKG_COMMAND_1,
|
||||||
@ -261,8 +262,8 @@ public:
|
|||||||
DOWNLOAD_DEVICE_CONTROLLER = _DOWNLOAD_DEVICE_CONTROLLER,
|
DOWNLOAD_DEVICE_CONTROLLER = _DOWNLOAD_DEVICE_CONTROLLER,
|
||||||
DOWNLOAD_DEVICE_CONTROLLER_SUCCESS = _DOWNLOAD_DEVICE_CONTROLLER_SUCCESS,
|
DOWNLOAD_DEVICE_CONTROLLER_SUCCESS = _DOWNLOAD_DEVICE_CONTROLLER_SUCCESS,
|
||||||
DOWNLOAD_DEVICE_CONTROLLER_FAILURE = _DOWNLOAD_DEVICE_CONTROLLER_FAILURE,
|
DOWNLOAD_DEVICE_CONTROLLER_FAILURE = _DOWNLOAD_DEVICE_CONTROLLER_FAILURE,
|
||||||
APPLY_REPOSITORY_CHANGES_SUCCESS = _APPLY_REPOSITORY_CHANGES_SUCCESS,
|
DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS = _DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS,
|
||||||
APPLY_REPOSITORY_CHANGES_FAILURE = _APPLY_REPOSITORY_CHANGES_FAILURE,
|
DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE = _DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE,
|
||||||
SYNC_CUSTOMER_REPOSITORY = _SYNC_CUSTOMER_REPOSITORY,
|
SYNC_CUSTOMER_REPOSITORY = _SYNC_CUSTOMER_REPOSITORY,
|
||||||
SYNC_CUSTOMER_REPOSITORY_SUCCESS = _SYNC_CUSTOMER_REPOSITORY_SUCCESS,
|
SYNC_CUSTOMER_REPOSITORY_SUCCESS = _SYNC_CUSTOMER_REPOSITORY_SUCCESS,
|
||||||
SYNC_CUSTOMER_REPOSITORY_FAILURE = _SYNC_CUSTOMER_REPOSITORY_FAILURE,
|
SYNC_CUSTOMER_REPOSITORY_FAILURE = _SYNC_CUSTOMER_REPOSITORY_FAILURE,
|
||||||
@ -285,6 +286,10 @@ private:
|
|||||||
UPDATE_STEP m_currentStep;
|
UPDATE_STEP m_currentStep;
|
||||||
static Worker *instance;
|
static Worker *instance;
|
||||||
QStringList m_opkgCommands;
|
QStringList m_opkgCommands;
|
||||||
|
Update *m_update = nullptr;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void run();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QDebug CONSOLE(QStringList const &lst = QStringList()) {
|
QDebug CONSOLE(QStringList const &lst = QStringList()) {
|
||||||
@ -321,8 +326,10 @@ public:
|
|||||||
int machineNr,
|
int machineNr,
|
||||||
int zoneNr,
|
int zoneNr,
|
||||||
QString branchName,
|
QString branchName,
|
||||||
|
QString pluginDir,
|
||||||
QString pluginName,
|
QString pluginName,
|
||||||
QString workingDir = ".",
|
QString workingDir = ".",
|
||||||
|
bool noUpdatePsaHardware = false,
|
||||||
bool dryRun = false,
|
bool dryRun = false,
|
||||||
QObject *parent = nullptr,
|
QObject *parent = nullptr,
|
||||||
char const *serialInterface = SERIAL_PORT,
|
char const *serialInterface = SERIAL_PORT,
|
||||||
@ -330,8 +337,6 @@ public:
|
|||||||
~Worker();
|
~Worker();
|
||||||
|
|
||||||
void setMainWindow(MainWindow *mainWindow) { m_mainWindow = mainWindow; }
|
void setMainWindow(MainWindow *mainWindow) { m_mainWindow = mainWindow; }
|
||||||
hwinf *getPlugin();
|
|
||||||
hwinf const *getPlugin() const;
|
|
||||||
void setProgress(int progress);
|
void setProgress(int progress);
|
||||||
void displayProgressInMainWindow(int progress);
|
void displayProgressInMainWindow(int progress);
|
||||||
void startProgressLoop();
|
void startProgressLoop();
|
||||||
@ -352,6 +357,9 @@ public:
|
|||||||
MainWindow *mainWindow() { return m_mainWindow; }
|
MainWindow *mainWindow() { return m_mainWindow; }
|
||||||
MainWindow const *mainWindow() const { return m_mainWindow; }
|
MainWindow const *mainWindow() const { return m_mainWindow; }
|
||||||
|
|
||||||
|
Update *update() { return m_update; }
|
||||||
|
Update const *update() const { return m_update; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void appendText(QString, QString suffix = "");
|
void appendText(QString, QString suffix = "");
|
||||||
void replaceLast(QString, QString);
|
void replaceLast(QString, QString);
|
||||||
@ -365,14 +373,11 @@ signals:
|
|||||||
void enableExit();
|
void enableExit();
|
||||||
void disableExit();
|
void disableExit();
|
||||||
|
|
||||||
public slots:
|
|
||||||
void update();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
bool updateTriggerSet();
|
bool updateTriggerSet();
|
||||||
bool customerEnvironment();
|
bool customerEnvironment();
|
||||||
bool filesToUpdate();
|
bool filesToUpdate();
|
||||||
bool updateFiles();
|
bool downloadFilesToPSAHardware();
|
||||||
bool syncCustomerRepositoryAndFS();
|
bool syncCustomerRepositoryAndFS();
|
||||||
// bool sendIsmasLastVersionNotification(int progress);
|
// bool sendIsmasLastVersionNotification(int progress);
|
||||||
bool saveLogFile();
|
bool saveLogFile();
|
||||||
@ -380,6 +385,8 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
PSAInstalled getPSAInstalled();
|
PSAInstalled getPSAInstalled();
|
||||||
void privateUpdate();
|
void privateUpdate();
|
||||||
|
bool computeFilesToDownload();
|
||||||
|
bool execOpkgCommands();
|
||||||
|
|
||||||
static const QMap<UPDATE_STEP, const char*> smap;
|
static const QMap<UPDATE_STEP, const char*> smap;
|
||||||
|
|
||||||
@ -510,7 +517,7 @@ private:
|
|||||||
break;
|
break;
|
||||||
case UPDATE_STEP::FILES_TO_UPDATE:
|
case UPDATE_STEP::FILES_TO_UPDATE:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES: {
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE: {
|
||||||
lst << instance->m_debugMsg;
|
lst << instance->m_debugMsg;
|
||||||
Utils::printUpdateStatusMsg(debug, lst);
|
Utils::printUpdateStatusMsg(debug, lst);
|
||||||
} break;
|
} break;
|
||||||
@ -563,9 +570,9 @@ private:
|
|||||||
lst << instance->m_debugMsg;
|
lst << instance->m_debugMsg;
|
||||||
Utils::printUpdateStatusMsg(debug, lst);
|
Utils::printUpdateStatusMsg(debug, lst);
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_SUCCESS:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_FAILURE:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY:
|
case UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY:
|
||||||
break;
|
break;
|
||||||
@ -774,8 +781,8 @@ private:
|
|||||||
case UPDATE_STEP::FILES_TO_UPDATE:
|
case UPDATE_STEP::FILES_TO_UPDATE:
|
||||||
ismasClient.setProgressInPercent(_FILES_TO_UPDATE);
|
ismasClient.setProgressInPercent(_FILES_TO_UPDATE);
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE:
|
||||||
ismasClient.setProgressInPercent(_APPLY_REPOSITORY_CHANGES);
|
ismasClient.setProgressInPercent(_DOWNLOAD_FILES_TO_PSA_HARDWARE);
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::FILES_TO_DOWNLOAD:
|
case UPDATE_STEP::FILES_TO_DOWNLOAD:
|
||||||
ismasClient.setProgressInPercent(_FILES_TO_DOWNLOAD);
|
ismasClient.setProgressInPercent(_FILES_TO_DOWNLOAD);
|
||||||
@ -922,11 +929,11 @@ private:
|
|||||||
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
|
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
|
||||||
ismasClient.setProgressInPercent(_DOWNLOAD_DEVICE_CONTROLLER_FAILURE);
|
ismasClient.setProgressInPercent(_DOWNLOAD_DEVICE_CONTROLLER_FAILURE);
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_SUCCESS:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS:
|
||||||
ismasClient.setProgressInPercent(_APPLY_REPOSITORY_CHANGES_SUCCESS);
|
ismasClient.setProgressInPercent(_DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS);
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_FAILURE:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE:
|
||||||
ismasClient.setProgressInPercent(_APPLY_REPOSITORY_CHANGES_FAILURE);
|
ismasClient.setProgressInPercent(_DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE);
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY:
|
case UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY:
|
||||||
ismasClient.setProgressInPercent(_SYNC_CUSTOMER_REPOSITORY);
|
ismasClient.setProgressInPercent(_SYNC_CUSTOMER_REPOSITORY);
|
||||||
@ -1110,7 +1117,7 @@ private:
|
|||||||
emit worker->appendText(QString("\n ") + worker->m_filesToUpdate.at(0));
|
emit worker->appendText(QString("\n ") + worker->m_filesToUpdate.at(0));
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::FILES_TO_DOWNLOAD:
|
case UPDATE_STEP::FILES_TO_DOWNLOAD:
|
||||||
break;
|
break;
|
||||||
@ -1160,9 +1167,9 @@ private:
|
|||||||
break;
|
break;
|
||||||
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
|
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_SUCCESS:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_FAILURE:
|
case UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE:
|
||||||
break;
|
break;
|
||||||
case UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY:
|
case UPDATE_STEP::SYNC_CUSTOMER_REPOSITORY:
|
||||||
emit worker->appendText("\nSync customer environment with filesystem ...");
|
emit worker->appendText("\nSync customer environment with filesystem ...");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user