Compare commits
5 Commits
master
...
gerhard-de
Author | SHA1 | Date | |
---|---|---|---|
ab13a0c8f9 | |||
263a88ce24 | |||
2f9b1e93c8 | |||
0b090c618d | |||
18590ed54b |
77
interfaces.h
77
interfaces.h
@ -2,6 +2,7 @@
|
||||
#define INTERFACE_H
|
||||
|
||||
#include <QtPlugin>
|
||||
#include <QString>
|
||||
|
||||
|
||||
|
||||
@ -397,6 +398,8 @@ struct T_bna
|
||||
|
||||
};
|
||||
|
||||
class hwapi;
|
||||
class DownloadThread;
|
||||
class hwinf
|
||||
{
|
||||
|
||||
@ -2273,35 +2276,62 @@ public:
|
||||
// countOfBills[1] for 10€ and so on
|
||||
|
||||
|
||||
// download device controller
|
||||
virtual bool dcDownloadRequest(QString const &fileToDownload) const {
|
||||
Q_UNUSED(fileToDownload);
|
||||
return false;
|
||||
}
|
||||
virtual bool dcDownloadRequested() const { return false; }
|
||||
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; }
|
||||
|
||||
|
||||
signals:
|
||||
virtual void hwapi_templatePrintFinished_OK(void) const=0;
|
||||
virtual void hwapi_templatePrintFinished_Err(void) const=0;
|
||||
virtual QString dcDownloadFileName() const { return ""; }
|
||||
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) {
|
||||
Q_UNUSED(totalBlockNumber);
|
||||
}
|
||||
virtual void dcDownloadSetCurrentBlockNumber(uint16_t 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 dcDownloadGetCurrentBlockNumber() const { return 0; }
|
||||
|
||||
virtual void hwapi_coinCollectionJustStarted(void) const=0;
|
||||
virtual void hwapi_coinCollectionAborted(void) const=0;
|
||||
|
||||
virtual void hwapi_gotNewCoin(void) const=0;
|
||||
virtual void hwapi_payStopByMax(void) const=0;
|
||||
virtual void hwapi_payStopByPushbutton(void) const=0;
|
||||
|
||||
virtual void hwapi_payStopByEscrow(void) const=0;
|
||||
virtual void hwapi_payStopByError(void) const=0;
|
||||
virtual void hwapi_payStopByTimeout(void) const=0;
|
||||
virtual void hwapi_payCancelled(void) const=0;
|
||||
virtual void hwapi_coinProcessJustStopped(void) const=0;
|
||||
|
||||
virtual void hwapi_doorServiceDoorOpened(void) const=0;
|
||||
virtual void hwapi_doorVaultDoorOpened(void) const=0;
|
||||
virtual void hwapi_doorCoinBoxRemoved(void) const=0;
|
||||
virtual void hwapi_doorCoinBoxInserted(void) const=0;
|
||||
virtual void hwapi_doorCBinAndAllDoorsClosed(void) const=0;
|
||||
virtual void hwapi_doorAllDoorsClosed(void) const=0;
|
||||
virtual QObject const *getAPI() { return nullptr; }
|
||||
|
||||
signals: // for download
|
||||
void hwapi_reportDCDownloadStatus(QString const&) const;
|
||||
void hwapi_reportDCDownloadSuccess(QString const&) const;
|
||||
void hwapi_reportDCDownloadFailure(QString const&) const;
|
||||
|
||||
// NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid.
|
||||
/* GH Version, bringt Fehler
|
||||
void hwapi_templatePrintFinished_OK() const;
|
||||
void hwapi_templatePrintFinished_Err() const;
|
||||
|
||||
@ -2324,7 +2354,6 @@ signals:
|
||||
void hwapi_doorCoinBoxInserted() const;
|
||||
void hwapi_doorCBinAndAllDoorsClosed() const;
|
||||
void hwapi_doorAllDoorsClosed() const;
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
|
@ -156,6 +156,15 @@ void MainWindow::onQuit() {
|
||||
m_exitTimer->stop();
|
||||
int errorCode = 0;
|
||||
|
||||
Update *update = m_worker->update();
|
||||
if (update) {
|
||||
hwinf *hw = update->hw();
|
||||
if (hw) {
|
||||
hw->dcDownloadReportFinished();
|
||||
hw->dcDownloadFinished();
|
||||
}
|
||||
}
|
||||
|
||||
qCritical()
|
||||
<< QString("ON QUIT: CURRENT STEP %1")
|
||||
.arg(m_worker->getSmap()[m_worker->currentStep()]);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define INTERFACE_H
|
||||
|
||||
#include <QtPlugin>
|
||||
#include <QString>
|
||||
|
||||
|
||||
|
||||
@ -397,6 +398,8 @@ struct T_bna
|
||||
|
||||
};
|
||||
|
||||
class hwapi;
|
||||
class DownloadThread;
|
||||
class hwinf
|
||||
{
|
||||
|
||||
@ -1834,6 +1837,9 @@ public:
|
||||
virtual uint8_t prn_getPrintResult() const {
|
||||
return 0;
|
||||
}
|
||||
// return: 0: just printing, wait
|
||||
// 1: OK - last print was succesful
|
||||
// 2: error - not printed
|
||||
|
||||
|
||||
|
||||
@ -2270,9 +2276,61 @@ public:
|
||||
// countOfBills[1] for 10€ and so on
|
||||
|
||||
|
||||
// download device controller
|
||||
virtual bool dcDownloadRequest(QString const &fileToDownload) const {
|
||||
Q_UNUSED(fileToDownload);
|
||||
return false;
|
||||
}
|
||||
virtual bool dcDownloadRequested() const { return false; }
|
||||
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; }
|
||||
|
||||
|
||||
signals:
|
||||
virtual QString dcDownloadFileName() const { return ""; }
|
||||
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) {
|
||||
Q_UNUSED(totalBlockNumber);
|
||||
}
|
||||
virtual void dcDownloadSetCurrentBlockNumber(uint16_t 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 dcDownloadGetCurrentBlockNumber() const { return 0; }
|
||||
|
||||
virtual QObject const *getAPI() { return nullptr; }
|
||||
|
||||
signals: // for download
|
||||
void hwapi_reportDCDownloadStatus(QString const&) const;
|
||||
void hwapi_reportDCDownloadSuccess(QString const&) const;
|
||||
void hwapi_reportDCDownloadFailure(QString const&) const;
|
||||
|
||||
// NOTE: declaring a "pure virtual" "signal" should be an error and thus not valid.
|
||||
void hwapi_templatePrintFinished_OK() const;
|
||||
void hwapi_templatePrintFinished_Err() const;
|
||||
|
88
update.cpp
88
update.cpp
@ -94,6 +94,7 @@ bool Update::unloadDCPlugin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
class hwapi;
|
||||
Update::Update(Worker *worker,
|
||||
QString customerRepository,
|
||||
QString customerNrStr,
|
||||
@ -130,18 +131,44 @@ Update::Update(Worker *worker,
|
||||
|
||||
qCritical() << "UPDATE: 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;
|
||||
QObject const *obj = m_hw->getAPI();
|
||||
// QObject const *obj = (QObject const *)(hw);
|
||||
|
||||
if (!connect(obj,
|
||||
SIGNAL(hwapi_reportDCDownloadStatus(QString const&)), this,
|
||||
SLOT(onReportDCDownloadStatus(QString const &)))) {
|
||||
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() {
|
||||
}
|
||||
|
||||
|
||||
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.
|
||||
bool Update::openSerial(int br, QString baudrate, QString comPort) const {
|
||||
qDebug() << "opening serial" << br << baudrate << comPort << "...";
|
||||
@ -501,16 +528,57 @@ bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||
}
|
||||
|
||||
bool res = false;
|
||||
bool dcDownloadPossible = true;
|
||||
|
||||
QList<QString>::const_iterator it;
|
||||
for (it = filesToWorkOn.cbegin(); it != filesToWorkOn.cend(); ++it) {
|
||||
m_worker->startProgressLoop();
|
||||
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.*$");
|
||||
if (fToWorkOn.contains(version)) {
|
||||
qCritical() << "ABOUT TO START REPORTING THREAD (1)" << fToWorkOn;
|
||||
if (fToWorkOn.contains(version) && dcDownloadPossible) {
|
||||
// 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;
|
||||
|
||||
// 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
|
||||
@ -539,7 +607,7 @@ bool Update::doUpdate(int &displayIndex, QStringList const &filesToWorkOn) {
|
||||
qInfo() << "dc-firmware-version (NOT UPDATED)" << versions[1];
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
res = updateBinaryRes;
|
||||
|
||||
} else if (fToWorkOn.contains("DC2C_print", Qt::CaseInsensitive)
|
||||
|
3
update.h
3
update.h
@ -92,6 +92,9 @@ private slots:
|
||||
void readyReadStandardOutput();
|
||||
void readyReadStandardError();
|
||||
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
|
||||
|
30
worker.cpp
30
worker.cpp
@ -157,7 +157,14 @@ Worker::Worker(int customerNr,
|
||||
, m_updateProcessRunning(true)
|
||||
, m_mainWindow(nullptr) /* contains plugin */
|
||||
//, 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
|
||||
instance = this;
|
||||
@ -166,9 +173,15 @@ Worker::Worker(int customerNr,
|
||||
QDir::setCurrent(m_workingDirectory);
|
||||
|
||||
m_apismVersion = getAPISMYoctoVersion();
|
||||
|
||||
}
|
||||
|
||||
Worker::~Worker() {
|
||||
if (m_update) {
|
||||
qCritical() << "DELETE UPDATE";
|
||||
delete m_update;
|
||||
m_update = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void Worker::displayProgressInMainWindow(int progress) {
|
||||
@ -819,15 +832,12 @@ bool Worker::downloadFilesToPSAHardware() {
|
||||
if (computeFilesToDownload()) {
|
||||
CONSOLE(m_filesToDownload) << UPDATE_STEP::FILES_TO_DOWNLOAD;
|
||||
|
||||
Update update(this,
|
||||
QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
|
||||
m_customerNrStr,
|
||||
m_branchName,
|
||||
m_pluginDir,
|
||||
m_pluginName,
|
||||
m_workingDirectory);
|
||||
//m_update = new Update(this,
|
||||
// QDir::cleanPath(m_workingDirectory + QDir::separator() + m_customerNrStr),
|
||||
// m_customerNrStr, m_branchName, m_pluginDir,
|
||||
// m_pluginName, m_workingDirectory);
|
||||
|
||||
return update.doUpdate(m_displayIndex, m_filesToDownload);
|
||||
return m_update->doUpdate(m_displayIndex, m_filesToDownload);
|
||||
} else {
|
||||
CONSOLE(QStringList("NO FILES TO DOWNLOAD TO PSA-HW")) << UPDATE_STEP::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")) {
|
||||
qCritical() << "COULD NOT EXECUTE '" << md.command() << "' exitCode=(" << md.exitCode() << ")";
|
||||
}
|
||||
QString const params("-vvv "
|
||||
QString const params("-v "
|
||||
"--recursive "
|
||||
"--progress "
|
||||
"--checksum "
|
||||
|
Loading…
Reference in New Issue
Block a user