Compare commits
	
		
			28 Commits
		
	
	
		
			v1.3.14
			...
			v1.3.15-js
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 990d257b09 | |||
| dfbad69ab1 | |||
| 5f0c86ba19 | |||
| 3588b25e65 | |||
| 1f8b88b2b6 | |||
| 0050ea35d0 | |||
| 7e4c138d1b | |||
| 685568d4f6 | |||
| 14b4c035da | |||
| 90de2f415e | |||
| 3cc71cb69b | |||
| fef7533d00 | |||
| e93058cc6b | |||
| e65387aa60 | |||
| 904fa0374b | |||
| 4bf1bbe81f | |||
| 3ccdcbae51 | |||
| 8c50e6cf59 | |||
| 7e69846169 | |||
| 34c55c576c | |||
| 7c2c4d4b80 | |||
| f9f698fd15 | |||
| b4457d8815 | |||
| 3621777827 | |||
| 003bd0bf77 | |||
| 721c5dd7a5 | |||
| a24eb9fd8c | |||
| 24351b8342 | 
@@ -41,7 +41,6 @@ DEFINES += QT_DEPRECATED_WARNINGS
 | 
				
			|||||||
#           up cloning of customer repository.
 | 
					#           up cloning of customer repository.
 | 
				
			||||||
# 1.3.13:   Fix: if the customer repository is corrupted, remove it and re-clone
 | 
					# 1.3.13:   Fix: if the customer repository is corrupted, remove it and re-clone
 | 
				
			||||||
#           the repository (without checking the ISMAS-trigger (WAIT-)button.
 | 
					#           the repository (without checking the ISMAS-trigger (WAIT-)button.
 | 
				
			||||||
VERSION="1.3.14"
 | 
					 | 
				
			||||||
# 1.3.14:   Add additional check for sanity of customer repository using
 | 
					# 1.3.14:   Add additional check for sanity of customer repository using
 | 
				
			||||||
#           "git fsck".
 | 
					#           "git fsck".
 | 
				
			||||||
#           Stream-lined code of update process: massive refactoring.
 | 
					#           Stream-lined code of update process: massive refactoring.
 | 
				
			||||||
@@ -53,6 +52,14 @@ VERSION="1.3.14"
 | 
				
			|||||||
#           repository will be worked on: tariff-files will be synced with the
 | 
					#           repository will be worked on: tariff-files will be synced with the
 | 
				
			||||||
#           local filesystem, json-files will be downloaded to firmware.
 | 
					#           local filesystem, json-files will be downloaded to firmware.
 | 
				
			||||||
#           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"
 | 
				
			||||||
 | 
					#           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.
 | 
				
			||||||
@@ -69,8 +76,9 @@ VERSION="1.3.14"
 | 
				
			|||||||
#       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")
 | 
				
			||||||
@@ -142,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 \
 | 
				
			||||||
@@ -157,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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -344,7 +344,41 @@ struct T_devices
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct T_chg_Tub
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t  tubeLevel[8];      // [0]=nr coins of lowest value
 | 
				
			||||||
 | 
					    uint8_t  tubeFull[8];       // 1=full  0 else
 | 
				
			||||||
 | 
					    uint16_t tubeValues[8];     // in cent [0]=lowest value 5c or 10cent
 | 
				
			||||||
 | 
					    uint16_t tubeFilled[8];     // nr of every coin inserted
 | 
				
			||||||
 | 
					    uint16_t tubeDispens[8];     // nr of every coin dispensed
 | 
				
			||||||
 | 
					    // 64 byte
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct T_changer
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Fixdata from Coin Changer
 | 
				
			||||||
 | 
					    uint8_t setup;  	// always 1
 | 
				
			||||||
 | 
					    uint8_t state;  	// step of state machine
 | 
				
			||||||
 | 
					        // 0..12 like EMP, 13...30 for coin dispense
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t level;      // mdb-level, always 3
 | 
				
			||||||
 | 
					    uint16_t countryCode;
 | 
				
			||||||
 | 
					    uint8_t scale;
 | 
				
			||||||
 | 
					    uint8_t decimals;
 | 
				
			||||||
 | 
					    uint8_t coinSetup[16];  // [0]=lowest coin, multiply with scale
 | 
				
			||||||
 | 
					    uint16_t intendedAcceptance;    //bitwise 0,1 1=accept coin, came from master
 | 
				
			||||||
 | 
					    uint8_t tokenChannel;
 | 
				
			||||||
 | 
					    uint8_t pollingRunning;		// 1: emp is polled  0:not
 | 
				
			||||||
 | 
					    uint8_t paymentRunning;	// 1: coins are accepted
 | 
				
			||||||
 | 
					    uint16_t denomination[16];
 | 
				
			||||||
 | 
					    uint16_t availableTubes; //bitwise 0,1 1=av. bit0 = lowest coin value
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct T_bna
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class hwinf
 | 
					class hwinf
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -1373,7 +1407,183 @@ public:
 | 
				
			|||||||
    virtual void mif_getAtbCardExpire(uint8_t *year, uint8_t *month, uint8_t *day, uint8_t *hour, uint8_t *minute) const =0;
 | 
					    virtual void mif_getAtbCardExpire(uint8_t *year, uint8_t *month, uint8_t *day, uint8_t *hour, uint8_t *minute) const =0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    //    Device-Controller-Bootloader convenient version 21.09.2023
 | 
				
			||||||
 | 
					    // ------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // use this to jump to BL:
 | 
				
			||||||
 | 
					    //void hwapi::bl_rebootDC(void) const
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // use this to start BL:
 | 
				
			||||||
 | 
					    // void hwapi::bl_startBL(void) const
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // call this in order to get response from BL:
 | 
				
			||||||
 | 
					    //void hwapi::bl_checkBL(void) const
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // evaluate BL response:
 | 
				
			||||||
 | 
					    //bool hwapi::bl_isUp(void) const
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 29.9.23: new: "completeStart" function, replaces bl_rebootDC(), bl_startBL() and bl_checkBL()
 | 
				
			||||||
 | 
					    // result can be verified with bl_isUp() as before
 | 
				
			||||||
 | 
					    virtual bool bl_completeStart(void) const =0;
 | 
				
			||||||
 | 
					        // must be used in DC's normal operation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // select binfile-name in GUI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // send binfile-name to BL-processor:
 | 
				
			||||||
 | 
					    virtual bool bl_storeFirmware(QString fileName) const =0;
 | 
				
			||||||
 | 
					        // load binary file 3x and compare
 | 
				
			||||||
 | 
					        // return true if loaded correctly
 | 
				
			||||||
 | 
					        // return false:  error, could not load correctly
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // request the number of blocks for this file
 | 
				
			||||||
 | 
					    virtual uint16_t bl_getNrOfFirmwareBlocks(void) const =0;
 | 
				
			||||||
 | 
					        // size of the loaded bin file in 64byte blocks
 | 
				
			||||||
 | 
					        // call after bl_storeFirmware()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // call the next two function's repetitive with "blockNumber"=0,1,2,3....."bl_getNrOfFirmwareBlocks()"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual bool bl_blockAutoLoad(uint16_t blockNumber) const =0;
 | 
				
			||||||
 | 
					        // call in loop from block number 0 up to <= "dcBL_getNrOfBlocks()"
 | 
				
			||||||
 | 
					        //the last block "bl_getNrOfFirmwareBlocks()" is sent as conclusion command (important!)
 | 
				
			||||||
 | 
					        // but after every call WAIT (!) for response "bl_blockAutoResponse()" !!!!
 | 
				
			||||||
 | 
					        // data will be sent to DC, if neccesary addr will be sent additionally
 | 
				
			||||||
 | 
					        // if neccesary sending will automatically repeat up to 3times
 | 
				
			||||||
 | 
					        // retval: false if blockNumber>4095, true else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // check out this response after every block-sending, wait until >0!!!
 | 
				
			||||||
 | 
					    virtual int8_t bl_blockAutoResponse(void) const =0;
 | 
				
			||||||
 | 
					        // after every "bl_blockAutoLoad()" call this until response
 | 
				
			||||||
 | 
					        // retval  0: wait   1: OK, blk was sent    2: OK, transfer complete
 | 
				
			||||||
 | 
					        //         3: error despite repeating, cancel. probably bin file corrupted
 | 
				
			||||||
 | 
					        //      Max duration: 3x no response from BL = 900ms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // finally call:
 | 
				
			||||||
 | 
					    // void hwapi::bl_stopBL(void) const
 | 
				
			||||||
 | 
					    // -------------- end of bootloader ---------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // new from 28.9.23 and earliest from DC version 4.45
 | 
				
			||||||
 | 
					    // get all versions of the DC-Jsons
 | 
				
			||||||
 | 
					    virtual void sys_requestJsonVersions(uint8_t  jsonNr) const =0;
 | 
				
			||||||
 | 
					        // send one request for every single version
 | 
				
			||||||
 | 
					        // jsonNr=1...36, 1=config file (cust.Nr) 2=devices  3=cash  4=res.
 | 
				
			||||||
 | 
					        //      5=printer template 1 ..... 36= template 32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void sys_getJsonVersions(uint8_t  jsonNr, char *versionString) const =0;
 | 
				
			||||||
 | 
					        // jsonNr=1...36, 1=config file (cust.Nr) 2=devices  3=cash  4=res.
 | 
				
			||||||
 | 
					        //      5=printer template 1 ..... 36= template 32
 | 
				
			||||||
 | 
					        // length of buffer is always 16 byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    //   Coin Changer
 | 
				
			||||||
 | 
					    // ------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // find above (same as for coin checker (EMP)):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // mdb_switchPower(true);       // power on/off
 | 
				
			||||||
 | 
					    // cash_startPayment(amount_cent); // start polling, enable coins, changer turns to green
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // getInsertedAmount()
 | 
				
			||||||
 | 
					    // getLastInsertedCoin()
 | 
				
			||||||
 | 
					    // getAllInsertedCoins(uint16_t *types, uint16_t *values)
 | 
				
			||||||
 | 
					        // all inserted coins of this past transaction are stored, max 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // cash_stopPayment();      // and wait for further command (changer blinks yellow)
 | 
				
			||||||
 | 
					    // cash_cancelPayment();    // and return complete paid amount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // after ticket/goods issue:
 | 
				
			||||||
 | 
					    // vend_success()
 | 
				
			||||||
 | 
					        // conclude payment process, keep all coins. Printing was successful
 | 
				
			||||||
 | 
					        // return change (payment above start-amount), so it works only if
 | 
				
			||||||
 | 
					        //  Payment was started with real vending price (pre selection).
 | 
				
			||||||
 | 
					        // if payment was started with maximum price (for direct coin insertion)
 | 
				
			||||||
 | 
					        // then use "changer_returnCoins()", not vend_success()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // vend_failed()
 | 
				
			||||||
 | 
					        // conclude payment process and return complete paid amount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // also valid for changer:
 | 
				
			||||||
 | 
					    // emp_sendSettings(uint16_t coinAcceptance, uint8_t tokenChannel, uint16_t *coinDenomination ) const =0;
 | 
				
			||||||
 | 
					        // coinAcceptance: bit0=coin1 (lowest donomination)  bit15=coin16  bitH=accept  bit L = deny coin (no validation)
 | 
				
			||||||
 | 
					        // tokenChannel 0...31: if this signal comes from emp then a token was inserted
 | 
				
			||||||
 | 
					        // coinDenomination = array of 16 coin values (e.g. 5, 10, 20...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void changer_returnCoins(uint32_t amountInCent) const =0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void changer_requestChangeResult(void) const =0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual uint8_t changer_getChangeResult(uint32_t *returnedAmount) const =0;
 | 
				
			||||||
 | 
					        // get result of coin dispensing
 | 
				
			||||||
 | 
					        // receivedData[0]: 0: not yet started      1:amount returned
 | 
				
			||||||
 | 
					        //                  2:only partial return   3: no return possible
 | 
				
			||||||
 | 
					        // receivedData[2,3,4,5]: returned amount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void changer_getAllParameters(struct T_changer *mw) const =0;
 | 
				
			||||||
 | 
					        // requested automatically with 23, same like EMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void changer_requestTubelevel(void) const =0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void changer_getTubelevel(struct T_chg_Tub *tubLevel) const =0;
 | 
				
			||||||
 | 
					        // don't use tubeDispens[], it's not yet correct!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    //   bank note acceptor
 | 
				
			||||||
 | 
					    // ------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // already defiened functions applying for BNA as well:
 | 
				
			||||||
 | 
					    // mdb_switchPower(true);       // power on/off
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // bank notes are integrated in the normal transaction process, so use the usual functions to run a vending cycle:
 | 
				
			||||||
 | 
					    // cash_startPayment(amount_cent); // start polling, enable bills, reader shows green
 | 
				
			||||||
 | 
					    // getInsertedAmount()
 | 
				
			||||||
 | 
					    // cash_stopPayment();
 | 
				
			||||||
 | 
					    // cash_cancelPayment();
 | 
				
			||||||
 | 
					    // vend_success()
 | 
				
			||||||
 | 
					    // vend_failed()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void bna_sendSettings(uint16_t notesToAccept, uint16_t parameters,
 | 
				
			||||||
 | 
					                                  uint16_t *billDenomination,
 | 
				
			||||||
 | 
					                                  uint32_t acceptanceLimit) const =0;
 | 
				
			||||||
 | 
					        // notesToAccept: bit0=bill1 (lowest donomination)  bitH=accept  bit L = deny
 | 
				
			||||||
 | 
					        // parameters: e.g. use escrow function for some notes
 | 
				
			||||||
 | 
					        // billDenomination = array of 16 bill values (e.g. 5, 10, 20...)
 | 
				
			||||||
 | 
					        // these can be set alternatively by Json-File DC2C_cash.json
 | 
				
			||||||
 | 
					        // acceptanceLimit: device will stop acceptance once this amount is reached and
 | 
				
			||||||
 | 
					        //          optionally keep last bill in escrow until vend_success()
 | 
				
			||||||
 | 
					        //          is called (put bill to stacker) or vend_failed() is called (return bill)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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)
 | 
				
			||||||
 | 
					        // only valid till next start-payment. Cannot add notes which are not activated in Json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void bna_requestParameters(void) const =0;
 | 
				
			||||||
 | 
					        // send command to DC in order to get static invariable device parameters like currency
 | 
				
			||||||
 | 
					        // device must be powered and polled to get these
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual bool bna_getAllParameters(struct T_bna *bna) const =0;
 | 
				
			||||||
 | 
					        // get all constant data from reader (e.g. currency)
 | 
				
			||||||
 | 
					        // and actual Host-Settings (sent with bna_sendSettings() or json)
 | 
				
			||||||
 | 
					        // retval = true if data are valid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void bna_requestCurrentNotes(void) const =0;
 | 
				
			||||||
 | 
					        // send command to DC in order to get transaction data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual uint8_t bna_getCurrentNotes(uint16_t latestBill, uint16_t *currentNotes) const =0;
 | 
				
			||||||
 | 
					        // returns number of collected bank notes since start-command (current transaction)
 | 
				
			||||||
 | 
					        //  latestBill: last accepted bank note, value in cent
 | 
				
			||||||
 | 
					        //  currentNotes an array with up to 16 (further) notes collected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void bna_requestStackerLevel(void) const =0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual uint16_t bna_getStackerLevel(uint32_t *amountInStacker, uint16_t *countOfBills) const =0;
 | 
				
			||||||
 | 
					        // return val: nr of bills in stacker
 | 
				
			||||||
 | 
					        // countOfBills: array of up to 16 sums,    countOfBills[0]=nr of 5€-bills in stacker
 | 
				
			||||||
 | 
					        //                                          countOfBills[1] for 10€   and so on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1395,8 +1605,6 @@ signals:
 | 
				
			|||||||
    virtual void hwapi_payCancelled(void) const=0;
 | 
					    virtual void hwapi_payCancelled(void) const=0;
 | 
				
			||||||
    virtual void hwapi_coinProcessJustStopped(void) const=0;
 | 
					    virtual void hwapi_coinProcessJustStopped(void) const=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    // new from 2023.06.12
 | 
					 | 
				
			||||||
    virtual void hwapi_doorServiceDoorOpened(void) const=0;
 | 
					    virtual void hwapi_doorServiceDoorOpened(void) const=0;
 | 
				
			||||||
    virtual void hwapi_doorVaultDoorOpened(void) const=0;
 | 
					    virtual void hwapi_doorVaultDoorOpened(void) const=0;
 | 
				
			||||||
    virtual void hwapi_doorCoinBoxRemoved(void) const=0;
 | 
					    virtual void hwapi_doorCoinBoxRemoved(void) const=0;
 | 
				
			||||||
@@ -1454,9 +1662,17 @@ signals:
 | 
				
			|||||||
    // 18.9.2023 major improvements for DC data exchange
 | 
					    // 18.9.2023 major improvements for DC data exchange
 | 
				
			||||||
    // verification of door and cash box signals
 | 
					    // verification of door and cash box signals
 | 
				
			||||||
    // intensive verification of Json-Programming Master-Slave (PTU to DC), 100% ok
 | 
					    // intensive verification of Json-Programming Master-Slave (PTU to DC), 100% ok
 | 
				
			||||||
 | 
					//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/4.6"
 | 
				
			||||||
#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/4.6"
 | 
					 | 
				
			||||||
    // 20.9.2023: speeding up door and cash box signals
 | 
					    // 20.9.2023: speeding up door and cash box signals
 | 
				
			||||||
 | 
					//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/4.7"
 | 
				
			||||||
 | 
					    // 26.09.2023: added improved DC-bootloader files
 | 
				
			||||||
 | 
					//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/4.8"
 | 
				
			||||||
 | 
					// 28.09.2023: added version request of DC-Json-Files
 | 
				
			||||||
 | 
					//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/5.0"
 | 
				
			||||||
 | 
					    // 10.10.2023: added coin changer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/5.1"
 | 
				
			||||||
 | 
					// 20.10.2023: added bill validator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Q_DECLARE_INTERFACE(hwinf, HWINF_iid)
 | 
					Q_DECLARE_INTERFACE(hwinf, HWINF_iid)
 | 
				
			||||||
 
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							@@ -4,6 +4,7 @@
 | 
				
			|||||||
#include <QDebug>
 | 
					#include <QDebug>
 | 
				
			||||||
#include <QDir>
 | 
					#include <QDir>
 | 
				
			||||||
#include <QRegularExpression>
 | 
					#include <QRegularExpression>
 | 
				
			||||||
 | 
					#include <QDateTime>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Command::Command(QString const &command, int start_timeout, int finish_timeout)
 | 
					Command::Command(QString const &command, int start_timeout, int finish_timeout)
 | 
				
			||||||
    : m_command(command.trimmed())
 | 
					    : m_command(command.trimmed())
 | 
				
			||||||
@@ -65,6 +66,8 @@ bool Command::execute(QString workingDirectory, QStringList args) {
 | 
				
			|||||||
        p->start(m_command);
 | 
					        p->start(m_command);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qint64 const start = QDateTime::currentDateTime().toMSecsSinceEpoch();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (p->waitForStarted(m_waitForStartTimeout)) {
 | 
					    if (p->waitForStarted(m_waitForStartTimeout)) {
 | 
				
			||||||
        qDebug() << "PROCESS" << m_command << "STARTED IN" << p->workingDirectory();
 | 
					        qDebug() << "PROCESS" << m_command << "STARTED IN" << p->workingDirectory();
 | 
				
			||||||
        if (p->state() == QProcess::ProcessState::Running) {
 | 
					        if (p->state() == QProcess::ProcessState::Running) {
 | 
				
			||||||
@@ -80,31 +83,41 @@ bool Command::execute(QString workingDirectory, QStringList args) {
 | 
				
			|||||||
                qDebug() << "PROCESS" << m_command << "FINISHED IN" << p->workingDirectory();
 | 
					                qDebug() << "PROCESS" << m_command << "FINISHED IN" << p->workingDirectory();
 | 
				
			||||||
                if (p->exitStatus() == QProcess::NormalExit) {
 | 
					                if (p->exitStatus() == QProcess::NormalExit) {
 | 
				
			||||||
                    if ((m_exitCode = p->exitCode()) == 0) {
 | 
					                    if ((m_exitCode = p->exitCode()) == 0) {
 | 
				
			||||||
 | 
					                        qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
 | 
				
			||||||
                        qDebug() << "EXECUTED" << m_command
 | 
					                        qDebug() << "EXECUTED" << m_command
 | 
				
			||||||
 | 
					                                 << QString("(runtime %1ms)").arg(end-start)
 | 
				
			||||||
                                 << "with code" << m_exitCode
 | 
					                                 << "with code" << m_exitCode
 | 
				
			||||||
                                 << "IN" << p->workingDirectory();
 | 
					                                 << "IN" << p->workingDirectory();
 | 
				
			||||||
                        return true;
 | 
					                        return true;
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
 | 
				
			||||||
                        qCritical() << "EXECUTED" << m_command
 | 
					                        qCritical() << "EXECUTED" << m_command
 | 
				
			||||||
 | 
					                                    << QString("(runtime %1ms)").arg(end-start)
 | 
				
			||||||
                                    << "with code" << m_exitCode
 | 
					                                    << "with code" << m_exitCode
 | 
				
			||||||
                                    << "IN" << p->workingDirectory();
 | 
					                                    << "IN" << p->workingDirectory();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
 | 
					                    qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
 | 
				
			||||||
                    qCritical() << "PROCESS" << m_command << "CRASHED with code"
 | 
					                    qCritical() << "PROCESS" << m_command << "CRASHED with code"
 | 
				
			||||||
                                << p->exitCode()
 | 
					                                << p->exitCode()
 | 
				
			||||||
 | 
					                                << QString("(after %1ms)").arg(end-start)
 | 
				
			||||||
                                << "IN" << p->workingDirectory();
 | 
					                                << "IN" << p->workingDirectory();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
 | 
					                qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
 | 
				
			||||||
                qCritical() << "PROCESS" << m_command
 | 
					                qCritical() << "PROCESS" << m_command
 | 
				
			||||||
                            << "DID NOT FINISH WITH" << wait
 | 
					                            << "DID NOT FINISH WITH" << wait
 | 
				
			||||||
                            << "MS IN" << p->workingDirectory();
 | 
					                            << "MS IN" << p->workingDirectory()
 | 
				
			||||||
 | 
					                            << QString("(runtime %1ms)").arg(end-start);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            qCritical() << "WRONG PROCESS STATE" << p->state()
 | 
					            qCritical() << "WRONG PROCESS STATE" << p->state()
 | 
				
			||||||
                        << "IN" << p->workingDirectory();
 | 
					                        << "IN" << p->workingDirectory();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
					        qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
 | 
				
			||||||
        qCritical() << "PROCESS" << m_command << "TIMEOUT AT START"
 | 
					        qCritical() << "PROCESS" << m_command << "TIMEOUT AT START"
 | 
				
			||||||
 | 
					                    << QString("(runtime %1ms)").arg(end-start)
 | 
				
			||||||
                    << "IN" << p->workingDirectory();
 | 
					                    << "IN" << p->workingDirectory();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								utils.cpp
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								utils.cpp
									
									
									
									
									
								
							@@ -62,20 +62,34 @@ void Utils::printCriticalErrorMsg(QStringList const &errorMsg) {
 | 
				
			|||||||
    qCritical() << QString(80, 'E');
 | 
					    qCritical() << QString(80, 'E');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Utils::printUpdateStatusMsg(QDebug &debug, QStringList const &updateMsg) {
 | 
					void Utils::printUpdateStatusMsg(QDebug debug, QStringList const &updateMsg) {
 | 
				
			||||||
    debug << QString(80, 'U');
 | 
					    //if (updateMsg.size() > 1) {
 | 
				
			||||||
 | 
					    //    qCritical() << QString(80, 'U');
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Q_UNUSED(debug);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < updateMsg.size(); ++i) {
 | 
					    for (int i = 0; i < updateMsg.size(); ++i) {
 | 
				
			||||||
        debug << updateMsg.at(i);
 | 
					        qInfo() << updateMsg.at(i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    debug << QString(80, 'U');
 | 
					
 | 
				
			||||||
 | 
					    //if (updateMsg.size() > 1) {
 | 
				
			||||||
 | 
					    //    qCritical() << QString(80, 'U');
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Utils::printUpdateStatusMsg(QStringList const &updateMsg) {
 | 
					void Utils::printUpdateStatusMsg(QStringList const &updateMsg) {
 | 
				
			||||||
    qCritical() << QString(80, 'U');
 | 
					    //if (updateMsg.size() > 1) {
 | 
				
			||||||
 | 
					    //    qCritical() << QString(80, 'U');
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < updateMsg.size(); ++i) {
 | 
					    for (int i = 0; i < updateMsg.size(); ++i) {
 | 
				
			||||||
        qCritical() << updateMsg.at(i);
 | 
					        qCritical() << updateMsg.at(i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    qCritical() << QString(80, 'U');
 | 
					
 | 
				
			||||||
 | 
					    //if (updateMsg.size() > 1) {
 | 
				
			||||||
 | 
					    //    qCritical() << QString(80, 'U');
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Utils::printUpdateStatusMsg(QString const &updateMsg, bool upper, bool lower) {
 | 
					void Utils::printUpdateStatusMsg(QString const &updateMsg, bool upper, bool lower) {
 | 
				
			||||||
@@ -86,11 +100,11 @@ void Utils::printUpdateStatusMsg(QString const &updateMsg, bool upper, bool lowe
 | 
				
			|||||||
    if (lower) qCritical() << QString(80, 'U');
 | 
					    if (lower) qCritical() << QString(80, 'U');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Utils::printUpdateStatusMsg(QDebug &debug, QString const &updateMsg,
 | 
					void Utils::printUpdateStatusMsg(QDebug debug, QString const &updateMsg,
 | 
				
			||||||
                                 bool upper, bool lower) {
 | 
					                                 bool upper, bool lower) {
 | 
				
			||||||
    if (upper) debug << QString(80, 'U');
 | 
					    if (upper) debug << QString(80, 'U');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    debug << updateMsg;
 | 
					    qInfo() << updateMsg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (lower) debug << QString(80, 'U');
 | 
					    if (lower) debug << QString(80, 'U');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -105,11 +119,17 @@ void Utils::printInfoMsg(QString const &infoMsg, bool upper, bool lower) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Utils::printInfoMsg(QStringList const &infoMsg) {
 | 
					void Utils::printInfoMsg(QStringList const &infoMsg) {
 | 
				
			||||||
    qCritical() << QString(80, 'I');
 | 
					    //if (infoMsg.size() > 1) {
 | 
				
			||||||
 | 
					    //    qCritical() << QString(80, 'I');
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < infoMsg.size(); ++i) {
 | 
					    for (int i = 0; i < infoMsg.size(); ++i) {
 | 
				
			||||||
        qCritical() << infoMsg.at(i);
 | 
					        qCritical() << infoMsg.at(i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    qCritical() << QString(80, 'I');
 | 
					
 | 
				
			||||||
 | 
					    //if (infoMsg.size() > 1) {
 | 
				
			||||||
 | 
					    //    qCritical() << QString(80, 'I');
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Utils::printLineEditInfo(QStringList const &lines) {
 | 
					void Utils::printLineEditInfo(QStringList const &lines) {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								utils.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								utils.h
									
									
									
									
									
								
							@@ -17,10 +17,10 @@ namespace Utils {
 | 
				
			|||||||
    void printCriticalErrorMsg(QStringList const &errorMsg);
 | 
					    void printCriticalErrorMsg(QStringList const &errorMsg);
 | 
				
			||||||
    void printInfoMsg(QString const &infoMsg, bool upper=false, bool lower=false);
 | 
					    void printInfoMsg(QString const &infoMsg, bool upper=false, bool lower=false);
 | 
				
			||||||
    void printInfoMsg(QStringList const &infoMsg);
 | 
					    void printInfoMsg(QStringList const &infoMsg);
 | 
				
			||||||
    void printUpdateStatusMsg(QDebug &debug, QStringList const &updateMsg);
 | 
					    void printUpdateStatusMsg(QDebug debug, QStringList const &updateMsg);
 | 
				
			||||||
    void printUpdateStatusMsg(QStringList const &updateMsg);
 | 
					    void printUpdateStatusMsg(QStringList const &updateMsg);
 | 
				
			||||||
    void printUpdateStatusMsg(QString const &updateMsg, bool upper=false, bool lower=false);
 | 
					    void printUpdateStatusMsg(QString const &updateMsg, bool upper=false, bool lower=false);
 | 
				
			||||||
    void printUpdateStatusMsg(QDebug &debug, QString const &updateMsg, bool upper=false, bool lower=false);
 | 
					    void printUpdateStatusMsg(QDebug debug, QString const &updateMsg, bool upper=false, bool lower=false);
 | 
				
			||||||
    void printLineEditInfo(QStringList const &lines);
 | 
					    void printLineEditInfo(QStringList const &lines);
 | 
				
			||||||
    QString getTariffLoadTime(QString fileName);
 | 
					    QString getTariffLoadTime(QString fileName);
 | 
				
			||||||
    QString rstrip(QString const &str);
 | 
					    QString rstrip(QString const &str);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										311
									
								
								worker.cpp
									
									
									
									
									
								
							
							
						
						
									
										311
									
								
								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);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -215,17 +196,17 @@ void Worker::update() {
 | 
				
			|||||||
bool Worker::isRepositoryCorrupted() {
 | 
					bool Worker::isRepositoryCorrupted() {
 | 
				
			||||||
    QDir customerRepository(m_customerRepository);
 | 
					    QDir customerRepository(m_customerRepository);
 | 
				
			||||||
    if (customerRepository.exists()) {
 | 
					    if (customerRepository.exists()) {
 | 
				
			||||||
        QDir customerRepositoryEtc(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/"));
 | 
					 | 
				
			||||||
        QDir customerRepositoryOpt(QDir::cleanPath(m_customerRepository + QDir::separator() + "opt/"));
 | 
					 | 
				
			||||||
        QDir customerRepositoryGit(QDir::cleanPath(m_customerRepository + QDir::separator() + ".git/"));
 | 
					        QDir customerRepositoryGit(QDir::cleanPath(m_customerRepository + QDir::separator() + ".git/"));
 | 
				
			||||||
        if (!m_gc.gitFsck()
 | 
					        if (!m_gc.gitFsck()) {
 | 
				
			||||||
            // etc-directory inside git-repository does not exist, which means the
 | 
					 | 
				
			||||||
            // git-repository is corrupted -> remove it and start from scratch
 | 
					 | 
				
			||||||
         || !customerRepositoryEtc.exists()
 | 
					 | 
				
			||||||
         || !customerRepositoryGit.exists()
 | 
					 | 
				
			||||||
         || !customerRepositoryOpt.exists()) {
 | 
					 | 
				
			||||||
            // should never happen
 | 
					            // should never happen
 | 
				
			||||||
            Utils::printCriticalErrorMsg("CORRUPTED CUSTOMER REPOSITORY");
 | 
					            Utils::printCriticalErrorMsg("CORRUPTED CUSTOMER REPOSITORY: GIT_FSCK FAILED");
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // .git-directory inside git-repository does not exist, which means the
 | 
				
			||||||
 | 
					        // git-repository is corrupted -> remove it and start from scratch
 | 
				
			||||||
 | 
					        if (!customerRepositoryGit.exists()) {
 | 
				
			||||||
 | 
					            // should never happen
 | 
				
			||||||
 | 
					            Utils::printCriticalErrorMsg("CORRUPTED CUSTOMER REPOSITORY .GIT DOES NOT EXIST");
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -251,149 +232,6 @@ bool Worker::repairCorruptedRepository() {
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
int Worker::sendCloneAndCheckoutFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CLONE_AND_CHECKOUT_FAILURE,
 | 
					 | 
				
			||||||
                          QString("CLONE OR CHECKOUT FAILED: ") + m_customerRepository);
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.errorGitClone(m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return CLONE_AND_CHECKOUT_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendCloneAndCheckoutSuccess() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CLONE_AND_CHECKOUT_SUCCESS,
 | 
					 | 
				
			||||||
                          QString("CLONED REPOSITORY %1 AND CHECKED OUT BRANCH %2")
 | 
					 | 
				
			||||||
                            .arg(m_customerRepository)
 | 
					 | 
				
			||||||
                            .arg(m_gc.branchName()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
            QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
                m_ismasClient.cloneAndCheckoutCustomerRepository(
 | 
					 | 
				
			||||||
                    m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return CLONE_AND_CHECKOUT_SUCCESS;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendIsmasTriggerFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_UPDATE_TRIGGER_SET_FAILURE,
 | 
					 | 
				
			||||||
                        QString("ISMAS update trigger wrong"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "CHECK-UPDATE-TRIGGER",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return ISMAS_TRIGGER_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendCustomerEnvironmentConfigurationFailed() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CHECKOUT_BRANCH_FAILURE,
 | 
					 | 
				
			||||||
                        QString("Configuring customer environment failed"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "GIT-CHECKOUT-BRANCH",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return ENVIRONMENT_CONFIG_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendPullFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_FETCH_UPDATES_REQUEST_FAILURE,
 | 
					 | 
				
			||||||
                        QString("No files to update"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "FETCH-FILES-TO-UPDATE",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return GIT_PULL_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendFileUpdateFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::PSA_UPDATE_FILES_FAILED,
 | 
					 | 
				
			||||||
                        QString("Updating files failed"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "UPDATE-FILES",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return UPDATE_FILES_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendRsyncFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::RSYNC_UPDATES_FAILURE,
 | 
					 | 
				
			||||||
                        QString("Syncing files to update failed"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "RSYNC-UPDATE-FILES",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return RSYNC_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendLastVersionFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_SEND_LAST_VERSION_FAILED,
 | 
					 | 
				
			||||||
                        QString("Sending ISMAS last version failed"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "ISMAS-SEND-LAST-VERSION",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return SEND_LAST_VERSION_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendSaveLogFilesFailure() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::SAVE_LOG_FILES_FAILED,
 | 
					 | 
				
			||||||
                        QString("Saving log files failed"));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR,
 | 
					 | 
				
			||||||
                                            "SAVE-LOG-FILES",
 | 
					 | 
				
			||||||
                                            m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return SAVE_LOG_FILES_FAILURE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendFoundFilesToUpdateSuccess() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CHECK_FILES_TO_UPDATE_SUCCESS,
 | 
					 | 
				
			||||||
                        QString("Files to update: ") + m_filesToUpdate.join(','));
 | 
					 | 
				
			||||||
    IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
        QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
            m_ismasClient.updateOfPSAContinues("CHECK-FILES-TO-UPDATE",
 | 
					 | 
				
			||||||
                                               m_updateStatus.m_statusDescription));
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int Worker::sendUpdateSucceededAndActivated() {
 | 
					 | 
				
			||||||
    ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_SUCCEEDED));
 | 
					 | 
				
			||||||
    ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_ACTIVATED));
 | 
					 | 
				
			||||||
    //IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
    //    QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
    //        m_ismasClient.updateOfPSASucceeded(""));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //m_ismasClient.setProgressInPercent(100);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // mark update as activated -> this resets the WAIT button
 | 
					 | 
				
			||||||
    //IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
    //    QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
					 | 
				
			||||||
    //        m_ismasClient.updateOfPSAActivated());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return UPDATE_SUCCESS_AND_ACTIVATED;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int Worker::sendFinalResult() {
 | 
					 | 
				
			||||||
    m_updateStatus = UpdateStatus(UPDATE_STATUS::UPDATE_PROCESS_SUCCESS,
 | 
					 | 
				
			||||||
                                  QString("Update process succeeded. Reset WAIT."));
 | 
					 | 
				
			||||||
    if (std::optional<QString> s = m_ismasClient.finalResult(IsmasClient::RESULT_CODE::SUCCESS,
 | 
					 | 
				
			||||||
                                                             m_updateStatus.m_statusDescription)) {
 | 
					 | 
				
			||||||
        IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
					 | 
				
			||||||
            QString("#M=APISM#C=CMD_EVENT#J=") + s.value());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void Worker::privateUpdate() {
 | 
					void Worker::privateUpdate() {
 | 
				
			||||||
    if (!m_mainWindow) {
 | 
					    if (!m_mainWindow) {
 | 
				
			||||||
        Utils::printCriticalErrorMsg("m_mainWindow NOT SET");
 | 
					        Utils::printCriticalErrorMsg("m_mainWindow NOT SET");
 | 
				
			||||||
@@ -528,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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ////////////////////////////////////////////////////////////////////////////
 | 
					    ////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
@@ -779,23 +628,40 @@ bool Worker::filesToUpdate() {
 | 
				
			|||||||
        if (!changes.value().contains("Already up to date")) {
 | 
					        if (!changes.value().contains("Already up to date")) {
 | 
				
			||||||
            if (std::optional<QStringList> changedFileNames = m_gc.gitDiff(changes.value())) {
 | 
					            if (std::optional<QStringList> changedFileNames = m_gc.gitDiff(changes.value())) {
 | 
				
			||||||
                m_filesToUpdate << changedFileNames.value();
 | 
					                m_filesToUpdate << changedFileNames.value();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        m_filesToUpdate.removeDuplicates();
 | 
					        m_filesToUpdate.removeDuplicates();
 | 
				
			||||||
            }
 | 
					        GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::FILES_TO_UPDATE);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        GUI() << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::FILES_TO_UPDATE);
 | 
					 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_REPOSITORY_FAILURE));
 | 
					        ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_REPOSITORY_FAILURE));
 | 
				
			||||||
 | 
					        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)) {
 | 
				
			||||||
@@ -872,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() {
 | 
				
			||||||
 | 
					    m_displayIndex = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (m_noUpdatePsaHardware == false) {
 | 
				
			||||||
 | 
					        if (computeFilesToDownload()) {
 | 
				
			||||||
            CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD;
 | 
					            CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Update *update = m_mainWindow->getUpdate();
 | 
					            Update update(this,
 | 
				
			||||||
        if (update) {
 | 
					                          QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
 | 
				
			||||||
            return update->doUpdate(m_displayIndex, m_filesToDownload);
 | 
					                          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;
 | 
				
			||||||
@@ -985,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));
 | 
				
			||||||
@@ -1107,15 +963,17 @@ 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;
 | 
				
			||||||
@@ -1125,6 +983,7 @@ QStringList Worker::getDCVersion() const {
 | 
				
			|||||||
                QThread::sleep(1);
 | 
					                QThread::sleep(1);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    return lst;
 | 
					    return lst;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1246,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;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										78
									
								
								worker.h
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								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;
 | 
				
			||||||
@@ -189,7 +190,8 @@ class Worker : public QObject {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        explicit UpdateProcessRunning(Worker *worker) : m_worker(worker) {
 | 
					        explicit UpdateProcessRunning(Worker *worker) : m_worker(worker) {
 | 
				
			||||||
            m_worker->m_updateProcessRunning = true;
 | 
					            m_worker->m_updateProcessRunning = true;
 | 
				
			||||||
            emit m_worker->disableExit();
 | 
					            // emit m_worker->disableExit();
 | 
				
			||||||
 | 
					            emit m_worker->enableExit();
 | 
				
			||||||
            m_worker->startProgressLoop();
 | 
					            m_worker->startProgressLoop();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -239,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,
 | 
				
			||||||
@@ -260,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,
 | 
				
			||||||
@@ -284,11 +286,15 @@ 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()) {
 | 
				
			||||||
        m_debugMsg = lst;
 | 
					        m_debugMsg = lst;
 | 
				
			||||||
        return qDebug();
 | 
					        return QDebug(QtMsgType::QtInfoMsg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IsmasClient &ISMAS(QStringList const &lst = QStringList()) {
 | 
					    IsmasClient &ISMAS(QStringList const &lst = QStringList()) {
 | 
				
			||||||
@@ -320,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,
 | 
				
			||||||
@@ -329,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();
 | 
				
			||||||
@@ -351,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);
 | 
				
			||||||
@@ -364,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();
 | 
				
			||||||
@@ -379,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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -509,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;
 | 
				
			||||||
@@ -551,14 +559,20 @@ private:
 | 
				
			|||||||
        case UPDATE_STEP::DOWNLOAD_CONFIG_FILE_FAILURE:
 | 
					        case UPDATE_STEP::DOWNLOAD_CONFIG_FILE_FAILURE:
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
        case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER:
 | 
					        case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER:
 | 
				
			||||||
 | 
					            lst << instance->m_debugMsg;
 | 
				
			||||||
 | 
					            Utils::printUpdateStatusMsg(debug, lst);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
        case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_SUCCESS:
 | 
					        case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_SUCCESS:
 | 
				
			||||||
 | 
					            lst << instance->m_debugMsg;
 | 
				
			||||||
 | 
					            Utils::printUpdateStatusMsg(debug, lst);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
        case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
 | 
					        case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
 | 
				
			||||||
 | 
					            lst << instance->m_debugMsg;
 | 
				
			||||||
 | 
					            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;
 | 
				
			||||||
@@ -767,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);
 | 
				
			||||||
@@ -915,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);
 | 
				
			||||||
@@ -1103,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;
 | 
				
			||||||
@@ -1153,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 ...");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user