Compare commits

...

19 Commits

Author SHA1 Message Date
990d257b09 Make sure the dc-data are vaild: set again the auto-request flag inside the CA-plugin.w 2023-11-07 09:33:42 +01:00
dfbad69ab1 Add some comments. Set version to 1.3.15. Removed worker_thread.h/.cpp. 2023-11-07 09:24:32 +01:00
5f0c86ba19 Minor: removed obsolete test-code. 2023-11-07 09:23:43 +01:00
3588b25e65 Removed any references to CA-plugin from MainWindow. 2023-11-07 09:18:04 +01:00
1f8b88b2b6 Update-object now proper memeber of worker-thread.w 2023-11-07 09:14:49 +01:00
0050ea35d0 Update to new interfaces.h 2023-11-07 09:13:15 +01:00
7e4c138d1b Fixed getDCVersion() as part of turning worker-object into its own
thread.
2023-11-07 09:12:17 +01:00
685568d4f6 Call execOpkgCommands(0 and downloadTpPSAHardware() helpers. 2023-11-07 09:11:42 +01:00
14b4c035da Add computeFilesToUpdate() and downloadFilesToPSA() helper functions. 2023-11-07 09:10:45 +01:00
90de2f415e Add new members to worker-class. 2023-11-07 09:10:01 +01:00
3cc71cb69b Minor: remove obsolete code. 2023-11-07 09:09:26 +01:00
fef7533d00 Minor: replace APPLY_... with DOWNLOAD... enum-variables. 2023-11-07 09:08:33 +01:00
e93058cc6b Turn worker-object into a thread. Don't do a moveToThread() anymore. 2023-11-07 09:07:08 +01:00
e65387aa60 Turned worker-object into a thread 2023-11-07 09:04:05 +01:00
904fa0374b Minor: removed empty line 2023-11-07 09:00:25 +01:00
4bf1bbe81f Removed references to update and ca-plugin.w 2023-11-06 16:23:43 +01:00
3ccdcbae51 Removed generation of upodate-object. This will be donw inside
worker(-thread), and only when it is really needed, i.e. when there
are json-files to be updated (or a deveice-controller).
2023-11-06 16:20:27 +01:00
8c50e6cf59 Added command-line option no-psa-hardware-update (future use for
multipass).
2023-11-06 16:19:36 +01:00
7e69846169 Minor: removed obsolete code (commented out). 2023-11-06 16:15:31 +01:00
9 changed files with 158 additions and 352 deletions

View File

@ -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 += \

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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) {

View File

@ -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; }

View File

@ -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;
}

View File

@ -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 ...");