Compare commits
	
		
			15 Commits
		
	
	
		
			master
			...
			dc-downloa
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 052028afe8 | |||
| 9b087f62f9 | |||
| 7d38cc1269 | |||
| f5baad16d5 | |||
| b35e6812aa | |||
| d7e709d997 | |||
| 4d93aa1392 | |||
| b0f1e0a493 | |||
| 0dffc1d1c2 | |||
| 3581dd4b1d | |||
| 8d2d7bbb15 | |||
| e2e7c0772d | |||
| 807cea1042 | |||
| 80712964ef | |||
| 978e98b2ee | 
@@ -103,7 +103,8 @@ DEFINES += QT_DEPRECATED_WARNINGS
 | 
				
			|||||||
#           Move final processing to subclass UpdateProcessRunning.
 | 
					#           Move final processing to subclass UpdateProcessRunning.
 | 
				
			||||||
#           Disable EXIT-button for the whole update-process, except for the
 | 
					#           Disable EXIT-button for the whole update-process, except for the
 | 
				
			||||||
#           checking of the ISMAS-trigger-button (aka WAIT-button).
 | 
					#           checking of the ISMAS-trigger-button (aka WAIT-button).
 | 
				
			||||||
VERSION="1.4.0"
 | 
					# 2.0.0     Download device-controller using reporting-/download-thread.
 | 
				
			||||||
 | 
					VERSION="2.0.0"
 | 
				
			||||||
# PLANNED TODOS:
 | 
					# PLANNED TODOS:
 | 
				
			||||||
#   1:  Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT.
 | 
					#   1:  Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT.
 | 
				
			||||||
#   2:  Wenn der WAIT-Button aktiv ist, dann wird ein Repository repariert (neu
 | 
					#   2:  Wenn der WAIT-Button aktiv ist, dann wird ein Repository repariert (neu
 | 
				
			||||||
@@ -176,7 +177,10 @@ GIT_COMMIT=$$system("git log -1 --format=oneline | cut -d' ' -f1")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
EXTENDED_VERSION="$${VERSION}-$${GIT_COMMIT}"
 | 
					EXTENDED_VERSION="$${VERSION}-$${GIT_COMMIT}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INCLUDEPATH += plugins
 | 
					!contains(CONFIG, INCLUDEINTERFACES) {
 | 
				
			||||||
 | 
					    INCLUDEINTERFACES=/opt/ptu5/opt/DCLibraries/include
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					INCLUDEPATH += plugins $${INCLUDEINTERFACES}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG += c++17
 | 
					CONFIG += c++17
 | 
				
			||||||
# CONFIG -= app_bundle
 | 
					# CONFIG -= app_bundle
 | 
				
			||||||
@@ -249,9 +253,7 @@ HEADERS += \
 | 
				
			|||||||
        process/command.h \
 | 
					        process/command.h \
 | 
				
			||||||
        message_handler.h \
 | 
					        message_handler.h \
 | 
				
			||||||
        worker.h \
 | 
					        worker.h \
 | 
				
			||||||
        interfaces.h \
 | 
					        commandline_parser.h
 | 
				
			||||||
        commandline_parser.h \
 | 
					 | 
				
			||||||
        plugins/interfaces.h
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
OTHER_FILES += \
 | 
					OTHER_FILES += \
 | 
				
			||||||
    ATBUpdateTool.ini
 | 
					    ATBUpdateTool.ini
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										275
									
								
								update.cpp
									
									
									
									
									
								
							
							
						
						
									
										275
									
								
								update.cpp
									
									
									
									
									
								
							@@ -98,6 +98,7 @@ bool Update::unloadDCPlugin() {
 | 
				
			|||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class hwapi;
 | 
				
			||||||
Update::Update(Worker *worker,
 | 
					Update::Update(Worker *worker,
 | 
				
			||||||
               QString customerRepository,
 | 
					               QString customerRepository,
 | 
				
			||||||
               QString customerNrStr,
 | 
					               QString customerNrStr,
 | 
				
			||||||
@@ -122,31 +123,70 @@ Update::Update(Worker *worker,
 | 
				
			|||||||
    , m_dryRun(dryRun)
 | 
					    , m_dryRun(dryRun)
 | 
				
			||||||
    , m_sys_areDCdataValid(false) {
 | 
					    , m_sys_areDCdataValid(false) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int tries = 20;
 | 
					    if (!m_hw) {
 | 
				
			||||||
    while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
 | 
					        qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_hw == nullptr -> ca-slave plugin loaded ???";
 | 
				
			||||||
        // must deliver 'true', only then are all data from hwapi valid
 | 
					    } else {
 | 
				
			||||||
        if (--tries < 0) {
 | 
					        int tries = 20;
 | 
				
			||||||
            qCritical() << "ERROR!!! DC DATA NOT VALID -> CA-MASTER-PLUGIN NOT CONNECTED";
 | 
					        while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
 | 
				
			||||||
            break;
 | 
					            // 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";
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            m_hw->dc_autoRequest(true);
 | 
				
			||||||
 | 
					            QThread::msleep(500);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        m_hw->dc_autoRequest(true);
 | 
					
 | 
				
			||||||
        QThread::msleep(500);
 | 
					        qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_sys_areDCDataValid ..."
 | 
				
			||||||
 | 
					                    << m_sys_areDCdataValid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        QObject const *obj = m_hw->getAPI();
 | 
				
			||||||
 | 
					        Q_ASSERT(obj != nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        QDebug critical = qCritical();
 | 
				
			||||||
 | 
					        critical << "connect() to onReportDCDownloadStatus() ...";
 | 
				
			||||||
 | 
					        if (!connect(obj,
 | 
				
			||||||
 | 
					                     SIGNAL(hwapi_reportDCDownloadStatus(QString const&)),
 | 
				
			||||||
 | 
					                     this,
 | 
				
			||||||
 | 
					                     SLOT(onReportDCDownloadStatus(QString const &)))) {
 | 
				
			||||||
 | 
					            critical << "FAILED";
 | 
				
			||||||
 | 
					        } else critical << "DONE";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        critical = qCritical();
 | 
				
			||||||
 | 
					        critical << "connect() to onReportDCDownloadSuccess() ...";
 | 
				
			||||||
 | 
					        if (!connect(obj,
 | 
				
			||||||
 | 
					            SIGNAL(hwapi_reportDCDownloadSuccess(QString const&)), this,
 | 
				
			||||||
 | 
					            SLOT(onReportDCDownloadSuccess(QString const &)))) {
 | 
				
			||||||
 | 
					            critical << "FAILED";
 | 
				
			||||||
 | 
					        } else critical << "DONE";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        critical = qCritical();
 | 
				
			||||||
 | 
					        critical << "connect() to onReportDCDownloadFailure() ...";
 | 
				
			||||||
 | 
					        if (!connect(obj,
 | 
				
			||||||
 | 
					            SIGNAL(hwapi_reportDCDownloadFailure(QString const &)), this,
 | 
				
			||||||
 | 
					            SLOT(onReportDCDownloadFailure(QString const &)))) {
 | 
				
			||||||
 | 
					            critical << "FAILED";
 | 
				
			||||||
 | 
					        } else critical << "DONE";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    qCritical() << __PRETTY_FUNCTION__ << "m_sys_areDCDataValid ..." << m_sys_areDCdataValid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_serialInterface    ..." << m_serialInterface;
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_baudrate           ..." << m_baudrate;
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_customerRepository ..." << m_customerRepository;
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_customerNr ..........." << m_customerNrStr;
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_branchName ..........." << m_branchName;
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_pluginName ..........." << m_pluginName;
 | 
					 | 
				
			||||||
    //qInfo() << "UPDATE: m_workingDirectory ....." << m_workingDir;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Update::~Update() {
 | 
					Update::~Update() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Update::onReportDCDownloadStatus(QString const &status) {
 | 
				
			||||||
 | 
					    emit m_worker->showStatusMessage("DL", status);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Update::onReportDCDownloadSuccess(QString const &msg) {
 | 
				
			||||||
 | 
					    qCritical() << "msg" << msg;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Update::onReportDCDownloadFailure(QString const &errorMsg) {
 | 
				
			||||||
 | 
					    qCritical() << "msg" << errorMsg;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// br is a index into a table, used for historical reasons.
 | 
					// br is a index into a table, used for historical reasons.
 | 
				
			||||||
bool Update::openSerial(int br, QString baudrate, QString comPort) const {
 | 
					bool Update::openSerial(int br, QString baudrate, QString comPort) const {
 | 
				
			||||||
    qDebug() << "opening serial" << br << baudrate << comPort << "...";
 | 
					    qDebug() << "opening serial" << br << baudrate << comPort << "...";
 | 
				
			||||||
@@ -374,7 +414,7 @@ bool Update::downloadJson(enum FileTypeJson type,
 | 
				
			|||||||
        QFileInfo fi(jsFileToSendToDC); // max. size of template file is 800 bytes
 | 
					        QFileInfo fi(jsFileToSendToDC); // max. size of template file is 800 bytes
 | 
				
			||||||
        if (file.exists()) {
 | 
					        if (file.exists()) {
 | 
				
			||||||
            if (file.open(QIODevice::ReadOnly)) {
 | 
					            if (file.open(QIODevice::ReadOnly)) {
 | 
				
			||||||
                if (fi.size() <= 800) {
 | 
					                if (fi.size() > 0 && fi.size() <= 800) {
 | 
				
			||||||
                    QByteArray ba = file.readAll();
 | 
					                    QByteArray ba = file.readAll();
 | 
				
			||||||
                    // kindOfFile: 1=config, 2=device, 3=cash, 4=serial, 5=time, 6=printer
 | 
					                    // kindOfFile: 1=config, 2=device, 3=cash, 4=serial, 5=time, 6=printer
 | 
				
			||||||
                    //      nrOfTemplate=1...32 if kindOfFile==6
 | 
					                    //      nrOfTemplate=1...32 if kindOfFile==6
 | 
				
			||||||
@@ -590,7 +630,6 @@ bool Update::checkDownloadedJsonVersions(QStringList const& jsonFileNames) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
 | 
					bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
 | 
				
			||||||
    if (m_sys_areDCdataValid == false) {
 | 
					    if (m_sys_areDCdataValid == false) {
 | 
				
			||||||
        qCritical() << "ERROR!!! DC DATA NOT VALID -> CA-MASTER-PLUGIN NOT CONNECTED";
 | 
					        qCritical() << "ERROR!!! DC DATA NOT VALID -> CA-MASTER-PLUGIN NOT CONNECTED";
 | 
				
			||||||
@@ -598,30 +637,96 @@ bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool res = false;
 | 
					    bool res = false;
 | 
				
			||||||
 | 
					    bool dcDownloadPossible = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    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) {
 | 
				
			||||||
        m_worker->startProgressLoop();
 | 
					        m_worker->startProgressLoop();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        QString const &fToWorkOn = QDir::cleanPath(m_customerRepository + QDir::separator() + it->trimmed());
 | 
					        QString const &fToWorkOn = QDir::cleanPath(m_customerRepository + QDir::separator() + it->trimmed());
 | 
				
			||||||
 | 
					        if (fToWorkOn.endsWith("/dc2c.bin") && dcDownloadPossible) {
 | 
				
			||||||
 | 
					            // download for dc possible only once
 | 
				
			||||||
 | 
					            // download of device-controller should always be the last step
 | 
				
			||||||
 | 
					            dcDownloadPossible = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!m_hw->dcDownloadRequest(fToWorkOn)) {  // initiate download process
 | 
				
			||||||
 | 
					                qCritical() << "DOWNLOAD-REQUEST-ERROR FOR" << fToWorkOn;
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            QThread::sleep(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int tries = 5;
 | 
				
			||||||
 | 
					            while (!m_hw->dcDownloadRunning()) { // may take some time
 | 
				
			||||||
 | 
					                if (--tries < 0) {
 | 
				
			||||||
 | 
					                    qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                                << "(" << __func__ << ":" << __LINE__ << ") DOWNLOAD NOT RUNNING";
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                QThread::sleep(1);
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                        << "(" << __func__ << ":" << __LINE__ << ") DOWNLOAD RUNNING";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            QThread::sleep(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            tries = 5;
 | 
				
			||||||
 | 
					            while (!m_hw->dcDownloadReportThreadStart()) { // may take some time
 | 
				
			||||||
 | 
					                if (--tries < 0) {
 | 
				
			||||||
 | 
					                    qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                                << "(" << __func__ << ":" << __LINE__ << ") REPORT THREAD NOT STARTED";
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                        << "(" << __func__ << ":" << __LINE__ << ") REPORT THREAD STARTED";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            QThread::sleep(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            tries = 5;
 | 
				
			||||||
 | 
					            while (!m_hw->dcDownloadReportRunning()) {     // may take some time
 | 
				
			||||||
 | 
					                if (--tries < 0) {
 | 
				
			||||||
 | 
					                    qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                                << "(" << __func__ << ":" << __LINE__ << ") DOWNLOAD REPORT NOT RUNNING";
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                        << "(" << __func__ << ":" << __LINE__ << ") DOWNLOAD REPORT RUNNING";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            tries = 1200;
 | 
				
			||||||
 | 
					            while (m_hw->dcDownloadReportRunning()) {
 | 
				
			||||||
 | 
					                QThread::msleep(1000);
 | 
				
			||||||
 | 
					                if (--tries < 0) {
 | 
				
			||||||
 | 
					                    qCritical() << QDateTime::currentDateTime().toString(Qt::ISODate)
 | 
				
			||||||
 | 
					                                << "(" << __func__ << ":" << __LINE__
 | 
				
			||||||
 | 
					                                << ") DOWNLOAD REPORT STILL RUNNING AFTER 20mins";
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (fToWorkOn.contains("dc2c.bin")) {
 | 
					 | 
				
			||||||
            bool updateBinaryRes = true;
 | 
					            bool updateBinaryRes = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // CONSOLE()
 | 
					            // CONSOLE()
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
					            m_hw->dc_autoRequest(false);// default: turn auto-request setting off
 | 
				
			||||||
 | 
					            QThread::sleep(1);          // wait to be sure that there are no more
 | 
				
			||||||
 | 
					                                        // commands sent to dc-hardware
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // m_hw->dc_autoRequest(false);// default: turn auto-request setting off
 | 
					            if ((updateBinaryRes = updateBinary(fToWorkOn)) == true) {
 | 
				
			||||||
            // QThread::sleep(1);          // wait to be sure that there are no more
 | 
					 | 
				
			||||||
            //                            // commands sent to dc-hardware
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // if ((updateBinaryRes = updateBinary(fToWorkOn)) == true) {
 | 
					 | 
				
			||||||
            //
 | 
					 | 
				
			||||||
                // qCritical() << "downloaded binary" << fToWorkOn;
 | 
					                // qCritical() << "downloaded binary" << fToWorkOn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //    ++displayIndex;
 | 
					                ++displayIndex;
 | 
				
			||||||
            //    emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(2, ' ') + QString(")")
 | 
					                emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(2, ' ') + QString(")")
 | 
				
			||||||
            //        + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
					                    + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
				
			||||||
            //        Worker::UPDATE_STEP_DONE);
 | 
					                    Worker::UPDATE_STEP_DONE);
 | 
				
			||||||
            //}
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            m_hw->dc_autoRequest(true); // turn auto-request setting on
 | 
					            m_hw->dc_autoRequest(true); // turn auto-request setting on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -637,65 +742,65 @@ bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
 | 
				
			|||||||
                    qInfo() << "dc-firmware-version (NOT UPDATED)" << versions[1];
 | 
					                    qInfo() << "dc-firmware-version (NOT UPDATED)" << versions[1];
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
            res = updateBinaryRes;
 | 
					            res = updateBinaryRes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else {
 | 
					        } else if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive)
 | 
				
			||||||
            if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive)
 | 
					 | 
				
			||||||
                && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
					                && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
				
			||||||
                res = true;
 | 
					            res = true;
 | 
				
			||||||
                int i = fToWorkOn.indexOf("DC2C_print", Qt::CaseInsensitive);
 | 
					            int i = fToWorkOn.indexOf("DC2C_print", Qt::CaseInsensitive);
 | 
				
			||||||
                int const templateIdx = fToWorkOn.mid(i).midRef(10, 2).toInt();
 | 
					            int const templateIdx = fToWorkOn.mid(i).midRef(10, 2).toInt();
 | 
				
			||||||
                if ((templateIdx < 1) || (templateIdx > 32)) {
 | 
					            if ((templateIdx < 1) || (templateIdx > 32)) {
 | 
				
			||||||
                    qCritical() << "WRONG TEMPLATE INDEX" << templateIdx;
 | 
					                qCritical() << "WRONG TEMPLATE INDEX" << templateIdx;
 | 
				
			||||||
                    res = false;
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    if ((res = updatePrinterTemplate(templateIdx, fToWorkOn))) {
 | 
					 | 
				
			||||||
                        Utils::printInfoMsg(
 | 
					 | 
				
			||||||
                            QString("DOWNLOADED PRINTER TEMPLATE %1 WITH INDEX=%2")
 | 
					 | 
				
			||||||
                                .arg(fToWorkOn)
 | 
					 | 
				
			||||||
                                .arg(templateIdx));
 | 
					 | 
				
			||||||
                        ++displayIndex;
 | 
					 | 
				
			||||||
                        emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
					 | 
				
			||||||
                              + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
					 | 
				
			||||||
                                Worker::UPDATE_STEP_DONE);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            } else if (fToWorkOn.contains("DC2C_cash", Qt::CaseInsensitive)
 | 
					 | 
				
			||||||
                    && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
					 | 
				
			||||||
                res = true;
 | 
					 | 
				
			||||||
                if ((res = updateCashConf(fToWorkOn))) {
 | 
					 | 
				
			||||||
                    Utils::printInfoMsg(QString("DOWNLOADED CASH TEMPLATE %1").arg(fToWorkOn));
 | 
					 | 
				
			||||||
                    ++displayIndex;
 | 
					 | 
				
			||||||
                    emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
					 | 
				
			||||||
                          + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
					 | 
				
			||||||
                            Worker::UPDATE_STEP_DONE);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            } else if (fToWorkOn.contains("DC2C_conf", Qt::CaseInsensitive)
 | 
					 | 
				
			||||||
                    && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
					 | 
				
			||||||
                res = true;
 | 
					 | 
				
			||||||
                if ((res= updateConfig(fToWorkOn))) {
 | 
					 | 
				
			||||||
                    Utils::printInfoMsg(QString("DOWNLOADED CONFIG TEMPLATE %1").arg(fToWorkOn));
 | 
					 | 
				
			||||||
                    ++displayIndex;
 | 
					 | 
				
			||||||
                    emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
					 | 
				
			||||||
                          + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
					 | 
				
			||||||
                            Worker::UPDATE_STEP_DONE);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            } else if (fToWorkOn.contains("DC2C_device", Qt::CaseInsensitive)
 | 
					 | 
				
			||||||
                    && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
					 | 
				
			||||||
                res = true;
 | 
					 | 
				
			||||||
                if ((res = updateDeviceConf(fToWorkOn))) {
 | 
					 | 
				
			||||||
                    Utils::printInfoMsg(QString("DOWNLOADED DEVICE TEMPLATE %1").arg(fToWorkOn));
 | 
					 | 
				
			||||||
                    ++displayIndex;
 | 
					 | 
				
			||||||
                    emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
					 | 
				
			||||||
                          + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
					 | 
				
			||||||
                            Worker::UPDATE_STEP_DONE);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                qCritical() << "UNKNOWN JSON FILE NAME" << fToWorkOn;
 | 
					 | 
				
			||||||
                res = false;
 | 
					                res = false;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if ((res = updatePrinterTemplate(templateIdx, fToWorkOn))) {
 | 
				
			||||||
 | 
					                    Utils::printInfoMsg(
 | 
				
			||||||
 | 
					                        QString("DOWNLOADED PRINTER TEMPLATE %1 WITH INDEX=%2")
 | 
				
			||||||
 | 
					                            .arg(fToWorkOn)
 | 
				
			||||||
 | 
					                            .arg(templateIdx));
 | 
				
			||||||
 | 
					                    ++displayIndex;
 | 
				
			||||||
 | 
					                    emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
				
			||||||
 | 
					                          + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
				
			||||||
 | 
					                            Worker::UPDATE_STEP_DONE);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (fToWorkOn.contains("DC2C_cash", Qt::CaseInsensitive)
 | 
				
			||||||
 | 
					                && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
				
			||||||
 | 
					            res = true;
 | 
				
			||||||
 | 
					            if ((res = updateCashConf(fToWorkOn))) {
 | 
				
			||||||
 | 
					                Utils::printInfoMsg(QString("DOWNLOADED CASH TEMPLATE %1").arg(fToWorkOn));
 | 
				
			||||||
 | 
					                ++displayIndex;
 | 
				
			||||||
 | 
					                emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
				
			||||||
 | 
					                      + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
				
			||||||
 | 
					                        Worker::UPDATE_STEP_DONE);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (fToWorkOn.contains("DC2C_conf", Qt::CaseInsensitive)
 | 
				
			||||||
 | 
					                && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
				
			||||||
 | 
					            res = true;
 | 
				
			||||||
 | 
					            if ((res= updateConfig(fToWorkOn))) {
 | 
				
			||||||
 | 
					                Utils::printInfoMsg(QString("DOWNLOADED CONFIG TEMPLATE %1").arg(fToWorkOn));
 | 
				
			||||||
 | 
					                ++displayIndex;
 | 
				
			||||||
 | 
					                emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
				
			||||||
 | 
					                      + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
				
			||||||
 | 
					                        Worker::UPDATE_STEP_DONE);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (fToWorkOn.contains("DC2C_device", Qt::CaseInsensitive)
 | 
				
			||||||
 | 
					                && fToWorkOn.endsWith(".json", Qt::CaseInsensitive)) {
 | 
				
			||||||
 | 
					            res = true;
 | 
				
			||||||
 | 
					            if ((res = updateDeviceConf(fToWorkOn))) {
 | 
				
			||||||
 | 
					                Utils::printInfoMsg(QString("DOWNLOADED DEVICE TEMPLATE %1").arg(fToWorkOn));
 | 
				
			||||||
 | 
					                ++displayIndex;
 | 
				
			||||||
 | 
					                emit m_worker->appendText(QString("\n(") + QString("%1").arg(displayIndex).rightJustified(3, ' ') + QString(")")
 | 
				
			||||||
 | 
					                      + QString(" Update ") + QFileInfo(fToWorkOn).fileName(),
 | 
				
			||||||
 | 
					                        Worker::UPDATE_STEP_DONE);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            qCritical() << "UNKNOWN JSON FILE NAME" << fToWorkOn;
 | 
				
			||||||
 | 
					            res = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        // m_worker->stopProgressLoop();
 | 
				
			||||||
 | 
					        // m_worker->setProgress(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (res == false) {
 | 
					        if (res == false) {
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								update.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								update.h
									
									
									
									
									
								
							@@ -94,6 +94,8 @@ private slots:
 | 
				
			|||||||
    void readyReadStandardOutput();
 | 
					    void readyReadStandardOutput();
 | 
				
			||||||
    void readyReadStandardError();
 | 
					    void readyReadStandardError();
 | 
				
			||||||
    void finished(int exitCode, QProcess::ExitStatus exitStatus);
 | 
					    void finished(int exitCode, QProcess::ExitStatus exitStatus);
 | 
				
			||||||
 | 
					    void onReportDCDownloadStatus(QString const &status);
 | 
				
			||||||
 | 
					    void onReportDCDownloadSuccess(QString const &msg);
 | 
				
			||||||
 | 
					    void onReportDCDownloadFailure(QString const &errorMsg);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif // UPDATE_H_INCLUDED
 | 
					#endif // UPDATE_H_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								worker.cpp
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								worker.cpp
									
									
									
									
									
								
							@@ -165,8 +165,14 @@ Worker::Worker(int customerNr,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // TODO: turn object into singleton
 | 
					    // TODO: turn object into singleton
 | 
				
			||||||
    instance = this;
 | 
					    instance = this;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    m_lastFailedUpdateStep = UPDATE_STEP::NONE;
 | 
					    m_lastFailedUpdateStep = UPDATE_STEP::NONE;
 | 
				
			||||||
 | 
					    m_update = new Update(this,
 | 
				
			||||||
 | 
					                          QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
 | 
				
			||||||
 | 
					                          m_customerNrStr,
 | 
				
			||||||
 | 
					                          m_branchName,
 | 
				
			||||||
 | 
					                          m_pluginDir,
 | 
				
			||||||
 | 
					                          m_pluginName,
 | 
				
			||||||
 | 
					                          m_workingDirectory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this->setObjectName("worker-object");
 | 
					    this->setObjectName("worker-object");
 | 
				
			||||||
    QDir::setCurrent(m_workingDirectory);
 | 
					    QDir::setCurrent(m_workingDirectory);
 | 
				
			||||||
@@ -175,6 +181,10 @@ Worker::Worker(int customerNr,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Worker::~Worker() {
 | 
					Worker::~Worker() {
 | 
				
			||||||
 | 
					    if (m_update != nullptr) {
 | 
				
			||||||
 | 
					        delete m_update;
 | 
				
			||||||
 | 
					        m_update = nullptr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Worker::displayProgressInMainWindow(int progress) {
 | 
					void Worker::displayProgressInMainWindow(int progress) {
 | 
				
			||||||
@@ -752,7 +762,7 @@ bool Worker::filesToUpdate() {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        m_filesToUpdate.removeDuplicates();
 | 
					        m_filesToUpdate.removeDuplicates();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        qCritical() << __PRETTY_FUNCTION__ << "FILES-TO-UPDATE" << m_filesToUpdate;
 | 
					        qCritical() << "(" << __func__ << ":" << __LINE__ << ") FILES-TO-UPDATE" << m_filesToUpdate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::FILES_TO_UPDATE);
 | 
					        GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::FILES_TO_UPDATE);
 | 
				
			||||||
        setProgress(_FILES_TO_UPDATE);
 | 
					        setProgress(_FILES_TO_UPDATE);
 | 
				
			||||||
@@ -889,15 +899,7 @@ bool Worker::downloadFilesToPSAHardware() {
 | 
				
			|||||||
            QStringList lst = m_filesToDownload;
 | 
					            QStringList lst = m_filesToDownload;
 | 
				
			||||||
            ISMAS(lst) << (CONSOLE(lst) << UPDATE_STEP::FILES_TO_DOWNLOAD);
 | 
					            ISMAS(lst) << (CONSOLE(lst) << UPDATE_STEP::FILES_TO_DOWNLOAD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Update update(this,
 | 
					            if (m_update && m_update->doUpdate(m_displayIndex, m_filesToDownload)) {
 | 
				
			||||||
                          QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
 | 
					 | 
				
			||||||
                          m_customerNrStr,
 | 
					 | 
				
			||||||
                          m_branchName,
 | 
					 | 
				
			||||||
                          m_pluginDir,
 | 
					 | 
				
			||||||
                          m_pluginName,
 | 
					 | 
				
			||||||
                          m_workingDirectory);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (update.doUpdate(m_displayIndex, m_filesToDownload)) {
 | 
					 | 
				
			||||||
                // prepared for use: at the moment, the dc-library does not work
 | 
					                // prepared for use: at the moment, the dc-library does not work
 | 
				
			||||||
                // as expected.
 | 
					                // as expected.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1061,6 +1063,17 @@ QString Worker::getAPISMYoctoInstallationStatus()  {
 | 
				
			|||||||
    return "N/A";
 | 
					    return "N/A";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString Worker::getDCVersionPreparedForDownload(QString const &filename) {
 | 
				
			||||||
 | 
					    if (QFile::exists(filename)) {  // <customer-repo/etc/dc/dc2c.bin>
 | 
				
			||||||
 | 
					        QString const cmd = QString("strings %1 | grep -e DC2[Cc]\\. | head -n1").arg(filename);
 | 
				
			||||||
 | 
					        Command c("bash");
 | 
				
			||||||
 | 
					        if (c.execute("/tmp", QStringList() << "-c" << cmd)) {
 | 
				
			||||||
 | 
					            return c.getCommandResult(); // DC2c.04.42  14.09.2023
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return "N/A";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString Worker::getATBQTVersion() const {
 | 
					QString Worker::getATBQTVersion() const {
 | 
				
			||||||
    QString const cmd = QString("echo -n $(/opt/app/ATBAPP/ATBQT -v | head -n 2 | cut -d':' -f2)");
 | 
					    QString const cmd = QString("echo -n $(/opt/app/ATBAPP/ATBQT -v | head -n 2 | cut -d':' -f2)");
 | 
				
			||||||
@@ -1185,7 +1198,9 @@ PSAInstalled Worker::getPSAInstalled() {
 | 
				
			|||||||
    if (m_versionInfo.size() == 3) {
 | 
					    if (m_versionInfo.size() == 3) {
 | 
				
			||||||
        qCritical() << QString("***** %1:%2").arg(__func__).arg(__LINE__)
 | 
					        qCritical() << QString("***** %1:%2").arg(__func__).arg(__LINE__)
 | 
				
			||||||
                    << "m_versionInfo" << m_versionInfo << "*****";
 | 
					                    << "m_versionInfo" << m_versionInfo << "*****";
 | 
				
			||||||
        psaInstalled.versionInfo.lastCommit = m_versionInfo.at(0);
 | 
					        psaInstalled.versionInfo.lastCommit = QString("%1-%2")
 | 
				
			||||||
 | 
					                .arg(QCoreApplication::applicationPid())
 | 
				
			||||||
 | 
					                .arg(m_versionInfo.at(0));
 | 
				
			||||||
        psaInstalled.versionInfo.reason = m_versionInfo.at(1);
 | 
					        psaInstalled.versionInfo.reason = m_versionInfo.at(1);
 | 
				
			||||||
        psaInstalled.versionInfo.created = m_versionInfo.at(2);
 | 
					        psaInstalled.versionInfo.created = m_versionInfo.at(2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								worker.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								worker.h
									
									
									
									
									
								
							@@ -249,7 +249,6 @@ class Worker : public QThread{
 | 
				
			|||||||
                                     << UPDATE_STEP::SEND_LAST_VERSION));
 | 
					                                     << UPDATE_STEP::SEND_LAST_VERSION));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            m_worker->stopProgressLoop();
 | 
					            m_worker->stopProgressLoop();
 | 
				
			||||||
 | 
					 | 
				
			||||||
            m_worker->m_updateProcessRunning = false;
 | 
					            m_worker->m_updateProcessRunning = false;
 | 
				
			||||||
            emit m_worker->enableExit();
 | 
					            emit m_worker->enableExit();
 | 
				
			||||||
            emit m_worker->restartExitTimer();
 | 
					            emit m_worker->restartExitTimer();
 | 
				
			||||||
@@ -370,6 +369,7 @@ public:
 | 
				
			|||||||
    static QString getATBUpdateToolYoctoInstallationStatus();
 | 
					    static QString getATBUpdateToolYoctoInstallationStatus();
 | 
				
			||||||
    static QString getAPISMYoctoVersion();
 | 
					    static QString getAPISMYoctoVersion();
 | 
				
			||||||
    static QString getAPISMYoctoInstallationStatus();
 | 
					    static QString getAPISMYoctoInstallationStatus();
 | 
				
			||||||
 | 
					    static QString getDCVersionPreparedForDownload(QString const &filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static const QString UPDATE_STEP_OK;
 | 
					    static const QString UPDATE_STEP_OK;
 | 
				
			||||||
    static const QString UPDATE_STEP_DONE;
 | 
					    static const QString UPDATE_STEP_DONE;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user