Compare commits
9 Commits
4b3a39b0e6
...
34c55c576c
Author | SHA1 | Date | |
---|---|---|---|
34c55c576c | |||
7c2c4d4b80 | |||
f9f698fd15 | |||
b4457d8815 | |||
3621777827 | |||
003bd0bf77 | |||
721c5dd7a5 | |||
a24eb9fd8c | |||
24351b8342 |
@@ -41,7 +41,6 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
||||
# up cloning of customer repository.
|
||||
# 1.3.13: Fix: if the customer repository is corrupted, remove it and re-clone
|
||||
# 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
|
||||
# "git fsck".
|
||||
# Stream-lined code of update process: massive refactoring.
|
||||
@@ -53,6 +52,8 @@ VERSION="1.3.14"
|
||||
# repository will be worked on: tariff-files will be synced with the
|
||||
# local filesystem, json-files will be downloaded to firmware.
|
||||
# The device-controller firmware will be handled in a later version.
|
||||
VERSION="1.3.15"
|
||||
# Bug fixes found during testing.
|
||||
|
||||
# PLANNED TODOS:
|
||||
# 1: Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT.
|
||||
|
@@ -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
|
||||
{
|
||||
@@ -1373,7 +1407,182 @@ public:
|
||||
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)
|
||||
|
||||
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 +1604,6 @@ signals:
|
||||
virtual void hwapi_payCancelled(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_doorVaultDoorOpened(void) const=0;
|
||||
virtual void hwapi_doorCoinBoxRemoved(void) const=0;
|
||||
@@ -1454,9 +1661,17 @@ signals:
|
||||
// 18.9.2023 major improvements for DC data exchange
|
||||
// verification of door and cash box signals
|
||||
// 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
|
||||
//#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)
|
||||
|
Binary file not shown.
@@ -4,6 +4,7 @@
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QRegularExpression>
|
||||
#include <QDateTime>
|
||||
|
||||
Command::Command(QString const &command, int start_timeout, int finish_timeout)
|
||||
: m_command(command.trimmed())
|
||||
@@ -65,6 +66,8 @@ bool Command::execute(QString workingDirectory, QStringList args) {
|
||||
p->start(m_command);
|
||||
}
|
||||
|
||||
qint64 const start = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||||
|
||||
if (p->waitForStarted(m_waitForStartTimeout)) {
|
||||
qDebug() << "PROCESS" << m_command << "STARTED IN" << p->workingDirectory();
|
||||
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();
|
||||
if (p->exitStatus() == QProcess::NormalExit) {
|
||||
if ((m_exitCode = p->exitCode()) == 0) {
|
||||
qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||||
qDebug() << "EXECUTED" << m_command
|
||||
<< QString("(runtime %1ms)").arg(end-start)
|
||||
<< "with code" << m_exitCode
|
||||
<< "IN" << p->workingDirectory();
|
||||
return true;
|
||||
} else {
|
||||
qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||||
qCritical() << "EXECUTED" << m_command
|
||||
<< QString("(runtime %1ms)").arg(end-start)
|
||||
<< "with code" << m_exitCode
|
||||
<< "IN" << p->workingDirectory();
|
||||
}
|
||||
} else {
|
||||
qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||||
qCritical() << "PROCESS" << m_command << "CRASHED with code"
|
||||
<< p->exitCode()
|
||||
<< QString("(after %1ms)").arg(end-start)
|
||||
<< "IN" << p->workingDirectory();
|
||||
}
|
||||
} else {
|
||||
qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||||
qCritical() << "PROCESS" << m_command
|
||||
<< "DID NOT FINISH WITH" << wait
|
||||
<< "MS IN" << p->workingDirectory();
|
||||
<< "MS IN" << p->workingDirectory()
|
||||
<< QString("(runtime %1ms)").arg(end-start);
|
||||
}
|
||||
} else {
|
||||
qCritical() << "WRONG PROCESS STATE" << p->state()
|
||||
<< "IN" << p->workingDirectory();
|
||||
}
|
||||
} else {
|
||||
qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||||
qCritical() << "PROCESS" << m_command << "TIMEOUT AT START"
|
||||
<< QString("(runtime %1ms)").arg(end-start)
|
||||
<< "IN" << p->workingDirectory();
|
||||
}
|
||||
return false;
|
||||
|
40
utils.cpp
40
utils.cpp
@@ -62,20 +62,34 @@ void Utils::printCriticalErrorMsg(QStringList const &errorMsg) {
|
||||
qCritical() << QString(80, 'E');
|
||||
}
|
||||
|
||||
void Utils::printUpdateStatusMsg(QDebug &debug, QStringList const &updateMsg) {
|
||||
debug << QString(80, 'U');
|
||||
void Utils::printUpdateStatusMsg(QDebug debug, QStringList const &updateMsg) {
|
||||
//if (updateMsg.size() > 1) {
|
||||
// qCritical() << QString(80, 'U');
|
||||
//}
|
||||
|
||||
Q_UNUSED(debug);
|
||||
|
||||
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) {
|
||||
qCritical() << QString(80, 'U');
|
||||
//if (updateMsg.size() > 1) {
|
||||
// qCritical() << QString(80, 'U');
|
||||
//}
|
||||
|
||||
for (int i = 0; i < updateMsg.size(); ++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) {
|
||||
@@ -86,11 +100,11 @@ void Utils::printUpdateStatusMsg(QString const &updateMsg, bool upper, bool lowe
|
||||
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) {
|
||||
if (upper) debug << QString(80, 'U');
|
||||
|
||||
debug << updateMsg;
|
||||
qInfo() << updateMsg;
|
||||
|
||||
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) {
|
||||
qCritical() << QString(80, 'I');
|
||||
//if (infoMsg.size() > 1) {
|
||||
// qCritical() << QString(80, 'I');
|
||||
//}
|
||||
|
||||
for (int i = 0; i < infoMsg.size(); ++i) {
|
||||
qCritical() << infoMsg.at(i);
|
||||
}
|
||||
qCritical() << QString(80, 'I');
|
||||
|
||||
//if (infoMsg.size() > 1) {
|
||||
// qCritical() << QString(80, 'I');
|
||||
//}
|
||||
}
|
||||
|
||||
void Utils::printLineEditInfo(QStringList const &lines) {
|
||||
|
4
utils.h
4
utils.h
@@ -17,10 +17,10 @@ namespace Utils {
|
||||
void printCriticalErrorMsg(QStringList const &errorMsg);
|
||||
void printInfoMsg(QString const &infoMsg, bool upper=false, bool lower=false);
|
||||
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(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);
|
||||
QString getTariffLoadTime(QString fileName);
|
||||
QString rstrip(QString const &str);
|
||||
|
166
worker.cpp
166
worker.cpp
@@ -215,17 +215,17 @@ void Worker::update() {
|
||||
bool Worker::isRepositoryCorrupted() {
|
||||
QDir customerRepository(m_customerRepository);
|
||||
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/"));
|
||||
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()) {
|
||||
if (!m_gc.gitFsck()) {
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
@@ -251,149 +251,6 @@ bool Worker::repairCorruptedRepository() {
|
||||
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() {
|
||||
if (!m_mainWindow) {
|
||||
Utils::printCriticalErrorMsg("m_mainWindow NOT SET");
|
||||
@@ -779,12 +636,13 @@ bool Worker::filesToUpdate() {
|
||||
if (!changes.value().contains("Already up to date")) {
|
||||
if (std::optional<QStringList> changedFileNames = m_gc.gitDiff(changes.value())) {
|
||||
m_filesToUpdate << changedFileNames.value();
|
||||
m_filesToUpdate.removeDuplicates();
|
||||
}
|
||||
}
|
||||
GUI() << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::FILES_TO_UPDATE);
|
||||
m_filesToUpdate.removeDuplicates();
|
||||
GUI(m_filesToUpdate) << (CONSOLE(m_filesToUpdate) << UPDATE_STEP::FILES_TO_UPDATE);
|
||||
} else {
|
||||
ISMAS() << (GUI() << (CONSOLE() << UPDATE_STEP::UPDATE_REPOSITORY_FAILURE));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
11
worker.h
11
worker.h
@@ -189,7 +189,8 @@ class Worker : public QObject {
|
||||
|
||||
explicit UpdateProcessRunning(Worker *worker) : m_worker(worker) {
|
||||
m_worker->m_updateProcessRunning = true;
|
||||
emit m_worker->disableExit();
|
||||
// emit m_worker->disableExit();
|
||||
emit m_worker->enableExit();
|
||||
m_worker->startProgressLoop();
|
||||
}
|
||||
|
||||
@@ -288,7 +289,7 @@ private:
|
||||
public:
|
||||
QDebug CONSOLE(QStringList const &lst = QStringList()) {
|
||||
m_debugMsg = lst;
|
||||
return qDebug();
|
||||
return QDebug(QtMsgType::QtInfoMsg);
|
||||
}
|
||||
|
||||
IsmasClient &ISMAS(QStringList const &lst = QStringList()) {
|
||||
@@ -551,10 +552,16 @@ private:
|
||||
case UPDATE_STEP::DOWNLOAD_CONFIG_FILE_FAILURE:
|
||||
break;
|
||||
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER:
|
||||
lst << instance->m_debugMsg;
|
||||
Utils::printUpdateStatusMsg(debug, lst);
|
||||
break;
|
||||
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_SUCCESS:
|
||||
lst << instance->m_debugMsg;
|
||||
Utils::printUpdateStatusMsg(debug, lst);
|
||||
break;
|
||||
case UPDATE_STEP::DOWNLOAD_DEVICE_CONTROLLER_FAILURE:
|
||||
lst << instance->m_debugMsg;
|
||||
Utils::printUpdateStatusMsg(debug, lst);
|
||||
break;
|
||||
case UPDATE_STEP::APPLY_REPOSITORY_CHANGES_SUCCESS:
|
||||
break;
|
||||
|
Reference in New Issue
Block a user