Update current devl-status.

This commit is contained in:
Gerhard Hoffmann 2023-12-08 13:09:19 +01:00
parent 2f9b1e93c8
commit 263a88ce24
5 changed files with 180 additions and 73 deletions

View File

@ -399,6 +399,7 @@ struct T_bna
}; };
class hwapi; class hwapi;
class DownloadThread;
class hwinf class hwinf
{ {
@ -2276,33 +2277,59 @@ public:
// download device controller // download device controller
virtual void dcDownloadStart() {} virtual bool dcDownloadRequest(QString const &fileToDownload) const {
virtual void dcDownloadRequest(QString const &fileToDownload) { Q_UNUSED(fileToDownload);
Q_UNUSED(fileToDownload); return false;
} }
virtual bool dcDownloadRequested() const { return false; } virtual bool dcDownloadRequested() const { return false; }
virtual void dcDownloadResetRequest() {} virtual bool dcDownloadResetRequest() const { return false; }
virtual bool dcDownloadRequestAck() const { return false; }
virtual bool dcDownloadRunning() const { return false; }
virtual bool dcDownloadFinished() { return false; }
virtual bool dcDownloadReportStart() const { return false; }
virtual bool dcDownloadReportRunning() const { return true; }
virtual bool dcDownloadReportFinished() { return true; }
virtual bool dcDownloadThreadStart() { return false; }
virtual bool dcDownloadThreadRunning() const { return true; }
virtual void dcDownloadThreadFinalize(DownloadThread *) {}
virtual bool dcDownloadThreadFinished() const { return true; }
virtual bool dcDownloadReportThreadStart() { return false; }
virtual bool dcDownloadReportThreadRunning() const { return true; }
virtual void dcDownloadReportThreadFinalize() {}
virtual void dcDownloadReportThreadQuit() {}
virtual bool dcDownloadReportThreadFinished() const { return true; }
virtual QString dcDownloadFileName() const { return ""; } virtual QString dcDownloadFileName() const { return ""; }
virtual void dcDownloadReportStart() {} virtual bool dcDownloadSetRequested(bool requested) {
Q_UNUSED(requested); return false;
}
virtual bool dcDownloadSetRunning(bool running) {
Q_UNUSED(running); return false;
}
virtual bool dcDownloadSetFinished(bool finished) {
Q_UNUSED(finished); return false;
}
virtual void dcDownloadSetTotalBlockNumber(uint16_t totalBlockNumber) { virtual void dcDownloadSetTotalBlockNumber(uint16_t totalBlockNumber) {
Q_UNUSED(totalBlockNumber); Q_UNUSED(totalBlockNumber);
} }
virtual void dcDownloadSetCurrentBlockNumber(uint16_t currentBlockNumber) { virtual void dcDownloadSetCurrentBlockNumber(uint16_t currentBlockNumber) {
Q_UNUSED(currentBlockNumber); Q_UNUSED(currentBlockNumber);
} }
virtual bool dcDownloadGetRequested() const { return false; }
virtual bool dcDownloadGetRunning() const { return false; }
virtual bool dcDownloadGetFinished() const { return false; }
virtual uint16_t dcDownloadGetTotalBlockNumber() const { return 0; } virtual uint16_t dcDownloadGetTotalBlockNumber() const { return 0; }
virtual uint16_t dcDownloadGetCurrentBlockNumber() const { return 0; } virtual uint16_t dcDownloadGetCurrentBlockNumber() const { return 0; }
virtual bool dcDownloadStarted() const { return false; } virtual QObject const *getAPI() { return nullptr; }
virtual bool dcDownloadRunning() const { return false; }
virtual bool dcDownloadFinished() const { return false; }
virtual hwapi *getAPI() { return nullptr; }
signals: // for download signals: // for download
void hwapi_reportDCDownloadStatus(QString const &) const; void hwapi_reportDCDownloadStatus(QString const&) const;
void hwapi_reportDCDownloadSuccess(QString const &) const; void hwapi_reportDCDownloadSuccess(QString const&) const;
void hwapi_reportDCDownloadFailure(QString const &) const; void hwapi_reportDCDownloadFailure(QString const&) const;
// NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid. // NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid.
void hwapi_templatePrintFinished_OK() const; void hwapi_templatePrintFinished_OK() const;

View File

@ -156,6 +156,15 @@ void MainWindow::onQuit() {
m_exitTimer->stop(); m_exitTimer->stop();
int errorCode = 0; int errorCode = 0;
Update *update = m_worker->update();
if (update) {
hwinf *hw = update->hw();
if (hw) {
hw->dcDownloadReportFinished();
hw->dcDownloadFinished();
}
}
qCritical() qCritical()
<< QString("ON QUIT: CURRENT STEP %1") << QString("ON QUIT: CURRENT STEP %1")
.arg(m_worker->getSmap()[m_worker->currentStep()]); .arg(m_worker->getSmap()[m_worker->currentStep()]);

View File

@ -399,6 +399,7 @@ struct T_bna
}; };
class hwapi; class hwapi;
class DownloadThread;
class hwinf class hwinf
{ {
@ -2276,33 +2277,59 @@ public:
// download device controller // download device controller
virtual void dcDownloadStart() {} virtual bool dcDownloadRequest(QString const &fileToDownload) const {
virtual void dcDownloadRequest(QString const &fileToDownload) { Q_UNUSED(fileToDownload);
Q_UNUSED(fileToDownload); return false;
} }
virtual bool dcDownloadRequested() const { return false; } virtual bool dcDownloadRequested() const { return false; }
virtual void dcDownloadResetRequest() {} virtual bool dcDownloadResetRequest() const { return false; }
virtual bool dcDownloadRequestAck() const { return false; }
virtual bool dcDownloadRunning() const { return false; }
virtual bool dcDownloadFinished() { return false; }
virtual bool dcDownloadReportStart() const { return false; }
virtual bool dcDownloadReportRunning() const { return true; }
virtual bool dcDownloadReportFinished() { return true; }
virtual bool dcDownloadThreadStart() { return false; }
virtual bool dcDownloadThreadRunning() const { return true; }
virtual void dcDownloadThreadFinalize(DownloadThread *) {}
virtual bool dcDownloadThreadFinished() const { return true; }
virtual bool dcDownloadReportThreadStart() { return false; }
virtual bool dcDownloadReportThreadRunning() const { return true; }
virtual void dcDownloadReportThreadFinalize() {}
virtual void dcDownloadReportThreadQuit() {}
virtual bool dcDownloadReportThreadFinished() const { return true; }
virtual QString dcDownloadFileName() const { return ""; } virtual QString dcDownloadFileName() const { return ""; }
virtual void dcDownloadReportStart() {} virtual bool dcDownloadSetRequested(bool requested) {
Q_UNUSED(requested); return false;
}
virtual bool dcDownloadSetRunning(bool running) {
Q_UNUSED(running); return false;
}
virtual bool dcDownloadSetFinished(bool finished) {
Q_UNUSED(finished); return false;
}
virtual void dcDownloadSetTotalBlockNumber(uint16_t totalBlockNumber) { virtual void dcDownloadSetTotalBlockNumber(uint16_t totalBlockNumber) {
Q_UNUSED(totalBlockNumber); Q_UNUSED(totalBlockNumber);
} }
virtual void dcDownloadSetCurrentBlockNumber(uint16_t currentBlockNumber) { virtual void dcDownloadSetCurrentBlockNumber(uint16_t currentBlockNumber) {
Q_UNUSED(currentBlockNumber); Q_UNUSED(currentBlockNumber);
} }
virtual bool dcDownloadGetRequested() const { return false; }
virtual bool dcDownloadGetRunning() const { return false; }
virtual bool dcDownloadGetFinished() const { return false; }
virtual uint16_t dcDownloadGetTotalBlockNumber() const { return 0; } virtual uint16_t dcDownloadGetTotalBlockNumber() const { return 0; }
virtual uint16_t dcDownloadGetCurrentBlockNumber() const { return 0; } virtual uint16_t dcDownloadGetCurrentBlockNumber() const { return 0; }
virtual bool dcDownloadStarted() const { return false; } virtual QObject const *getAPI() { return nullptr; }
virtual bool dcDownloadRunning() const { return false; }
virtual bool dcDownloadFinished() const { return false; }
virtual hwapi *getAPI() { return nullptr; }
signals: // for download signals: // for download
void hwapi_reportDCDownloadStatus(QString const &) const; void hwapi_reportDCDownloadStatus(QString const&) const;
void hwapi_reportDCDownloadSuccess(QString const &) const; void hwapi_reportDCDownloadSuccess(QString const&) const;
void hwapi_reportDCDownloadFailure(QString const &) const; void hwapi_reportDCDownloadFailure(QString const&) const;
// NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid. // NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid.
void hwapi_templatePrintFinished_OK() const; void hwapi_templatePrintFinished_OK() const;

View File

@ -3,7 +3,6 @@
#include "utils.h" #include "utils.h"
#include "update_dc_event.h" #include "update_dc_event.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "plugins/interfaces.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QApplication> #include <QApplication>
@ -19,6 +18,8 @@
#include "unistd.h" #include "unistd.h"
#endif #endif
#include "plugins/interfaces.h"
#include <QSharedMemory> #include <QSharedMemory>
#include <QScopedPointer> #include <QScopedPointer>
#include <QDir> #include <QDir>
@ -118,7 +119,6 @@ Update::Update(Worker *worker,
, m_dryRun(dryRun) , m_dryRun(dryRun)
, m_sys_areDCdataValid(false) { , m_sys_areDCdataValid(false) {
#if 0
int tries = 20; int tries = 20;
while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) { while ((m_sys_areDCdataValid = m_hw->sys_areDCdataValid()) == false) {
// must deliver 'true', only then are all data from hwapi valid // must deliver 'true', only then are all data from hwapi valid
@ -128,39 +128,35 @@ Update::Update(Worker *worker,
m_hw->dc_autoRequest(true); m_hw->dc_autoRequest(true);
QThread::msleep(500); QThread::msleep(500);
} }
#endif
QObject const *obj = (QObject const *)(m_hw->getAPI());
if (connect(obj,
SIGNAL(hwapi_reportDCDownloadStatus(QString const&)), this,
SLOT(onReportDCDownloadStatus(QString const &)))) {
qCritical() << "connect ok";
}
connect(obj,
SIGNAL(hwapi_reportDCDownloadSuccess(QString const&)), this,
SLOT(onReportDCDownloadSuccess(QString const &)));
connect(obj,
SIGNAL(hwapi_reportDCDownloadFailure(QString const &)), this,
SLOT(onReportDCDownloadFailure(QString const &)));
qCritical() << "UPDATE: m_sys_areDCDataValid ..." << m_sys_areDCdataValid; qCritical() << "UPDATE: m_sys_areDCDataValid ..." << m_sys_areDCdataValid;
//qInfo() << "UPDATE: m_serialInterface ..." << m_serialInterface; QObject const *obj = m_hw->getAPI();
//qInfo() << "UPDATE: m_baudrate ..." << m_baudrate; // QObject const *obj = (QObject const *)(hw);
//qInfo() << "UPDATE: m_customerRepository ..." << m_customerRepository;
//qInfo() << "UPDATE: m_customerNr ..........." << m_customerNrStr; if (!connect(obj,
//qInfo() << "UPDATE: m_branchName ..........." << m_branchName; SIGNAL(hwapi_reportDCDownloadStatus(QString const&)), this,
//qInfo() << "UPDATE: m_pluginName ..........." << m_pluginName; SLOT(onReportDCDownloadStatus(QString const &)))) {
//qInfo() << "UPDATE: m_workingDirectory ....." << m_workingDir; qCritical() << "ERROR connect() to onReportDCDownloadStatus() failed";
}
if (!connect(obj,
SIGNAL(hwapi_reportDCDownloadSuccess(QString const&)), this,
SLOT(onReportDCDownloadSuccess(QString const &)))) {
qCritical() << "ERROR connect() to onReportDCDownloadSuccess() failed";
}
if (!connect(obj,
SIGNAL(hwapi_reportDCDownloadFailure(QString const &)), this,
SLOT(onReportDCDownloadFailure(QString const &)))) {
qCritical() << "ERROR connect() to onReportDCDownloadFailure() failed";
}
} }
Update::~Update() { Update::~Update() {
} }
void Update::onReportDCDownloadStatus(QString const &status) { void Update::onReportDCDownloadStatus(QString const &status) {
qCritical() << "status" << status; emit m_worker->showStatusMessage("DL", status);
//emit m_worker->showStatusMessage("", status);
} }
void Update::onReportDCDownloadSuccess(QString const &msg) { void Update::onReportDCDownloadSuccess(QString const &msg) {
@ -171,6 +167,8 @@ void Update::onReportDCDownloadFailure(QString const &errorMsg) {
qCritical() << "msg" << 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 << "...";
@ -524,27 +522,63 @@ QStringList Update::getDcSoftAndHardWareVersion() {
} }
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";
// return false; return false;
//} }
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(QString("/tmp") + QDir::separator() + it->trimmed()); QString const &fToWorkOn = QDir::cleanPath(m_customerRepository + QDir::separator() + it->trimmed());
//QString const &fToWorkOn = QDir::cleanPath(m_customerRepository + QDir::separator() + it->trimmed());
static const QRegularExpression version("^.*dc2c[.][0-9]{1,2}[.][0-9]{1,2}[.]bin.*$"); static const QRegularExpression version("^.*dc2c[.][0-9]{1,2}[.][0-9]{1,2}[.]bin.*$");
if (fToWorkOn.contains(version)) { qCritical() << "ABOUT TO START REPORTING THREAD (1)" << fToWorkOn;
m_hw->dcDownloadRequest(fToWorkOn); if (fToWorkOn.contains(version) && dcDownloadPossible) {
m_hw->dcDownloadReportStart(); // start reporting thread // download for dc possible only once
dcDownloadPossible = false;
m_hw->dcDownloadRequest(fToWorkOn); // initiate download process
// test
m_hw->dcDownloadThreadStart();
if (!m_hw->dcDownloadRunning()) { // may take some time
qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__
<< QString("line=%1 DOWNLOAD NOT RUNNING").arg(__LINE__);
continue; // wait for reporting thread to start
}
if (!m_hw->dcDownloadReportThreadStart()) { // may take some time
qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__
<< QString("line=%1 REPORT THREAD NOT RUNNING").arg(__LINE__);
continue; // wait for reporting thread to start
}
if (!m_hw->dcDownloadReportRunning()) { // may take some time
qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__
<< QString("line=%1 DOWNLOAD REPORT NOT RUNNING").arg(__LINE__);
continue; // reporting events from download thread
}
if (!m_hw->dcDownloadReportFinished()) { // may take some time
qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__
<< QString("line=%1 DOWNLOAD REPORT THREAD DID NOT FINISH").arg(__LINE__);
m_hw->dcDownloadReportThreadQuit();
continue; // wait for download thread to finish
}
qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__
<< QString("line=%1 DOWNLOAD SUCCESS").arg(__LINE__);
bool updateBinaryRes = true; bool updateBinaryRes = true;
// CONSOLE()
// CONSOLE()
#if 0
m_hw->dc_autoRequest(false);// default: turn auto-request setting off m_hw->dc_autoRequest(false);// default: turn auto-request setting off
QThread::sleep(1); // wait to be sure that there are no more QThread::sleep(1); // wait to be sure that there are no more
// commands sent to dc-hardware // commands sent to dc-hardware
@ -573,7 +607,7 @@ 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 if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive) } else if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive)

View File

@ -157,7 +157,14 @@ Worker::Worker(int customerNr,
, m_updateProcessRunning(true) , m_updateProcessRunning(true)
, m_mainWindow(nullptr) /* contains plugin */ , m_mainWindow(nullptr) /* contains plugin */
//, m_withoutIsmasDirectPort(true) /* useful for testing */ { //, m_withoutIsmasDirectPort(true) /* useful for testing */ {
, m_withoutIsmasDirectPort(false) /* useful for testing */ { , m_withoutIsmasDirectPort(false) /* useful for testing */
// IMPORTANT: allocate m_update here, otherwise the connects() inside of
// Update might not work: keep in mind that worker (this) is a thread without
// an own event-loop.
, m_update(new Update(this,
QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
m_customerNrStr, m_branchName, m_pluginDir,
m_pluginName, m_workingDirectory)) {
// TODO: turn object into singleton // TODO: turn object into singleton
instance = this; instance = this;
@ -166,9 +173,15 @@ Worker::Worker(int customerNr,
QDir::setCurrent(m_workingDirectory); QDir::setCurrent(m_workingDirectory);
m_apismVersion = getAPISMYoctoVersion(); m_apismVersion = getAPISMYoctoVersion();
} }
Worker::~Worker() { Worker::~Worker() {
if (m_update) {
qCritical() << "DELETE UPDATE";
delete m_update;
m_update = nullptr;
}
} }
void Worker::displayProgressInMainWindow(int progress) { void Worker::displayProgressInMainWindow(int progress) {
@ -819,15 +832,12 @@ bool Worker::downloadFilesToPSAHardware() {
if (computeFilesToDownload()) { if (computeFilesToDownload()) {
CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD; CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD;
Update update(this, //m_update = new Update(this,
QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr), // QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
m_customerNrStr, // m_customerNrStr, m_branchName, m_pluginDir,
m_branchName, // m_pluginName, m_workingDirectory);
m_pluginDir,
m_pluginName,
m_workingDirectory);
return update.doUpdate(m_displayIndex, m_filesToDownload); return m_update->doUpdate(m_displayIndex, m_filesToDownload);
} else { } else {
CONSOLE(QStringList("NO FILES TO DOWNLOAD TO PSA-HW")) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE; CONSOLE(QStringList("NO FILES TO DOWNLOAD TO PSA-HW")) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE;
setProgress(_DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE); setProgress(_DOWNLOAD_FILES_TO_PSA_HARDWARE_FAILURE);
@ -847,7 +857,7 @@ bool Worker::syncCustomerRepositoryAndFS() {
QStringList() << "-c" << "mkdir -p /etc/psa_config /etc/dc /etc/psa_tariff")) { QStringList() << "-c" << "mkdir -p /etc/psa_config /etc/dc /etc/psa_tariff")) {
qCritical() << "COULD NOT EXECUTE '" << md.command() << "' exitCode=(" << md.exitCode() << ")"; qCritical() << "COULD NOT EXECUTE '" << md.command() << "' exitCode=(" << md.exitCode() << ")";
} }
QString const params("-vvv " QString const params("-v "
"--recursive " "--recursive "
"--progress " "--progress "
"--checksum " "--checksum "