Compare commits

..

11 Commits

Author SHA1 Message Date
SiegfriedSiegert 8a564b9538 main: use configuration for setting variables ...
-> remove wrong default values.
 -> remove dependency for certain host-names
2026-02-10 14:28:13 +01:00
SiegfriedSiegert d5e62e72d3 commandline_parser: add options ...
for sshKeyFile and StrictHostKeyChecking.
Set correct default values.
2026-02-10 14:26:19 +01:00
SiegfriedSiegert 0155d51d3d git-client: add note about GIT_SSH_COMMAND env variants 2026-02-10 14:25:17 +01:00
SiegfriedSiegert 843ac23770 Build: remove lib dependency on Yocto build 2026-02-10 10:16:20 +01:00
SiegfriedSiegert c3b2db7797 Set version 1.5.99 2026-02-10 10:10:34 +01:00
SiegfriedSiegert 51640b70e9 Merge branch '281/Szeged_without_LibDC' into 281/Szeged 2026-02-10 09:55:35 +01:00
SiegfriedSiegert be84c96953 Fix: remove test code 2026-02-10 09:53:58 +01:00
SiegfriedSiegert 24bf190c90 281/Szeged: Skip updating json files ...
... because this is not supported in currently installed DC-FW version
and DC-lib version.
2026-02-09 15:57:22 +01:00
SiegfriedSiegert b656b5eab6 281/Szeged: compile only main program ATBUpdateTool
... because current installed DC-FW version or current installed DClib
in Szeged do not support updating DC-json-files and DC-FW.
2026-02-09 15:55:01 +01:00
SiegfriedSiegert 6681e61f59 Szeged is still using libCAmaster 2026-02-09 15:21:45 +01:00
SiegfriedSiegert 7ec6ab00b1 Use interfaces.h from version 1.3.5 2026-02-09 15:19:42 +01:00
16 changed files with 1575 additions and 262 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ psa-tariff-directory="etc/psa_tariff/"
[PLUGINS] [PLUGINS]
plugin-name="libCAslave.so" plugin-name="libCAmaster.so"
[FLAGS] [FLAGS]
no-psa-hardware-update=false no-psa-hardware-update=false
+2 -1
View File
@@ -1,3 +1,4 @@
TEMPLATE = subdirs TEMPLATE = subdirs
CONFIG += ordered CONFIG += ordered
SUBDIRS = DownloadDCFirmware DownloadDCJsonFiles UpdatePTUDevCtrl #SUBDIRS = DownloadDCFirmware DownloadDCJsonFiles UpdatePTUDevCtrl
SUBDIRS = UpdatePTUDevCtrl
@@ -2,6 +2,9 @@ QT += core serialport
TARGET = ATBUpdateDC TARGET = ATBUpdateDC
include(../common.pri)
VERSION="0.1.0" VERSION="0.1.0"
win32 { win32 {
BUILD_DATE=$$system("date /t") BUILD_DATE=$$system("date /t")
@@ -98,6 +101,9 @@ OTHER_FILES += \
../ATBUpdateTool.ini ../ATBUpdateTool.ini
FORMS += \
mainwindow.ui
########################################################################################## ##########################################################################################
# for running program on target through QtCreator # for running program on target through QtCreator
contains( CONFIG, PTU5 ) { contains( CONFIG, PTU5 ) {
+37 -26
View File
@@ -4,6 +4,7 @@
#include <QByteArray> #include <QByteArray>
#include <QProcess> #include <QProcess>
#include <QCommandLineParser>
#include <QStandardPaths> #include <QStandardPaths>
#include <QSettings> #include <QSettings>
#include <QDir> #include <QDir>
@@ -64,7 +65,9 @@ int main(int argc, char **argv) {
setDebugLevel(LOG_NOTICE); setDebugLevel(LOG_NOTICE);
} }
/* //return 0;
/*
CommandLineParser parser; CommandLineParser parser;
parser.process(a); parser.process(a);
parser.readSettings(); parser.readSettings();
@@ -126,13 +129,21 @@ int main(int argc, char **argv) {
printf(APP_EXTENDED_VERSION"\n"); printf(APP_EXTENDED_VERSION"\n");
return 0; return 0;
} }
*/
QString const &customerRepo
= QDir::cleanPath(workingDir + QDir::separator() + QString("customer_%1").arg(customerNr));
*/
QString const &psaDcDir = internal::customerRepoDcDir();
QString const &psaRepoRootDir = internal::customerRepoRoot();
QString const &psaRepoDir = internal::customerRepoDir();
QString const &branchName = internal::branchName();
bool debug = false; bool debug = false;
bool noaction = true; bool noaction = true;
QString workingDir;
QString libDir; QString libDir;
QString libca; QString libca;
QString workingDir;
std::unique_ptr<QSettings> settings = internal::readSettings(); std::unique_ptr<QSettings> settings = internal::readSettings();
@@ -151,37 +162,37 @@ int main(int argc, char **argv) {
settings->endGroup(); settings->endGroup();
} }
// etc/dc: located under mount-path
std::optional<QString> mountPath = System::checkForUSBStick(psaDcDir);
QFileInfo fi; QFileInfo fi;
if (mountPath.has_value()) {
fi.setFile(mountPath.value(), System::getDCFileOnUsbStick(mountPath.value()));
} else
if ((mountPath = System::checkForSDCard(psaDcDir)).has_value()) {
fi.setFile(mountPath.value(), System::getDCFileOnSDCard(mountPath.value()));
} else {
// ------------------- single command line argument is DC-firmware binary file ----------------- if (debug) {
QStringList args = a.arguments(); qInfo() << "using customer repository" << psaRepoDir;
if (args.size() != 2) {
qCritical() << "ERROR: missing parameter <dc-firmware>";
exit(1);
} }
qCritical() << "------------------------------------------------------"; std::unique_ptr<QString> c = internal::dcCandidateToInstall("/etc/dc/");
qCritical() << "main: argument dc-firmware: " << args.at(1); if (c) {
qCritical() << "------------------------------------------------------"; fi.setFile(*c);
if (fi.exists() == false) {
fi.setFile(args.at(1)); qCritical() << "dc2c.bin candidate" << *c << "does not exist. STOP.";
return -1;
if (!fi.isFile()) { }
qCritical() << "ERROR: parameter " << fi.absoluteFilePath() << " is not a file"; qInfo() << "dc2c.bin canditate" << fi.absoluteFilePath();
exit(1); }
} }
if (!fi.isReadable()) { if (debug) {
qCritical() << "ERROR: parameter " << fi.absoluteFilePath() << " is not readable"; qInfo() << "downloading dc-firmware" << fi.absoluteFilePath();
exit(1); qInfo() << "dc-firmware size (bytes)" << fi.size();
qInfo() << "dc-version" << Update::dcVersion(fi.absoluteFilePath());
} }
qCritical() << "------------------------------------------------------";
qCritical() << "uploading dc-firmware" << fi.absoluteFilePath();
qCritical() << "dc-firmware size (bytes)" << fi.size();
qCritical() << "dc-version" << Update::dcVersion(fi.absoluteFilePath());
qCritical() << "------------------------------------------------------";
Update u(fi.absoluteFilePath(), libca, debug, noaction); Update u(fi.absoluteFilePath(), libca, debug, noaction);
u.run(); u.run();
+2
View File
@@ -397,7 +397,9 @@ int Update::run() {
qInfo() << "<DC-VERSION>" << Update::dcVersion(m_dcFileName); qInfo() << "<DC-VERSION>" << Update::dcVersion(m_dcFileName);
} }
if (!m_debug) {
m_hw->dc_autoRequest(false); m_hw->dc_autoRequest(false);
}
qInfo() << "DC auto request OFF"; qInfo() << "DC auto request OFF";
@@ -1,6 +1,8 @@
QT += core QT += core
QT += serialport network QT += serialport network
include(../common.pri)
TARGET = ATBDownloadDCJsonFiles TARGET = ATBDownloadDCJsonFiles
VERSION="0.1.0" VERSION="0.1.0"
+6 -5
View File
@@ -1,6 +1,8 @@
QT += core gui QT += core gui
QT += widgets serialport network QT += widgets serialport network
include(../common.pri)
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ATBUpdateTool TARGET = ATBUpdateTool
@@ -150,8 +152,10 @@ DEFINES += QT_DEPRECATED_WARNINGS
# 1.5.7 : Add support for dynamic portrait / landscape. # 1.5.7 : Add support for dynamic portrait / landscape.
# 1.5.8 : Use EVENT_ID=<pid of update-tool> for CMD_EVENT. # 1.5.8 : Use EVENT_ID=<pid of update-tool> for CMD_EVENT.
# 1.5.9 : Removed restart of Apism if ISMAS unreachable. # 1.5.9 : Removed restart of Apism if ISMAS unreachable.
# 1,6,9 : Add separate tool ATBUpdateDC for manual updating DC-FW # 1.5.99 : Special version for 281/Szeged: remove all DC-library dependencies, as
VERSION="1.6.0" # DC-firmware in Szeged does not support uploading json-files or uploading
# DC-firmware binaries.
VERSION="1.5.99"
# 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
@@ -257,9 +261,6 @@ contains( CONFIG, PTU5_YOCTO ) {
PTU5BASEPATH = /opt/devel/ptu5 PTU5BASEPATH = /opt/devel/ptu5
ARCH = PTU5 ARCH = PTU5
DEFINES+=PTU5 DEFINES+=PTU5
LIBS += -lCAslave
LIBS += -lCAmaster
} }
contains( CONFIG, DesktopLinux ) { contains( CONFIG, DesktopLinux ) {
greaterThan(QT_MAJOR_VERSION, 4): QT += serialport greaterThan(QT_MAJOR_VERSION, 4): QT += serialport
+1 -1
View File
@@ -405,7 +405,7 @@ std::optional<QString> GitClient::gitPull() {
export GIT_SSH_COMMAND="ssh -i /opt/app/tools/atbupdate/.keys/id_ed25519_ptuConfig -o StrictHostKeyChecking=no" export GIT_SSH_COMMAND="ssh -i /opt/app/tools/atbupdate/.keys/id_ed25519_ptuConfig -o StrictHostKeyChecking=no"
... or use separate known_hosts file: ... or use separate known_hosts file:
export GIT_SSH_COMMAND="ssh -i /mypath/.keys/id_ed25519 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/opt/app/tools/atbupdate/.keys/known_hosts" export GIT_SSH_COMMAND="ssh -i /mypath/.keys/id_ed25519 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/opt/app/tools/atbupdate/.keys/known_hosts
git pull git pull
leads to the following warning/error message: leads to the following warning/error message:
+60 -132
View File
@@ -120,156 +120,84 @@ bool Command::start(QString workingDirectory, QStringList args) {
return m_p->waitForStarted(m_waitForStartTimeout); return m_p->waitForStarted(m_waitForStartTimeout);
} }
bool Command::execute(QString workingDirectory, QStringList args) bool Command::execute(QString workingDirectory, QStringList args) {
{
if (!QDir::setCurrent(workingDirectory)) { if (!QDir::setCurrent(workingDirectory)) {
qCritical() << "SET WORKING_DIRECTORY" qCritical() << "SET WORKING_DIRECTORY" << workingDirectory
<< workingDirectory << "FAILED FOR" << m_command;
<< "FAILED FOR"
<< m_command;
return false; return false;
} }
QScopedPointer<QProcess> p(new QProcess(this)); QScopedPointer<QProcess> p(new QProcess(this));
p->setWorkingDirectory(workingDirectory); p->setWorkingDirectory(workingDirectory);
p->setProcessChannelMode(QProcess::MergedChannels); p->setProcessChannelMode(QProcess::MergedChannels);
connect(p.data(), connect(&(*p), SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutput()));
SIGNAL(readyReadStandardOutput()), connect(&(*p), SIGNAL(readyReadStandardError()), this, SLOT(readyReadStandardError()));
this,
SLOT(readyReadStandardOutput()));
connect(p.data(),
SIGNAL(readyReadStandardError()),
this,
SLOT(readyReadStandardError()));
if (!args.isEmpty()) { if (!args.isEmpty()) {
//qDebug() << "START COMMAND" << m_command << "WITH ARGS" << args
// << "IN" << p->workingDirectory();
p->start(m_command, args); p->start(m_command, args);
} } else {
else { //qDebug() << "START COMMAND" << m_command
// << "IN" << p->workingDirectory();
p->start(m_command); p->start(m_command);
} }
const qint64 start = qint64 const start = QDateTime::currentDateTime().toMSecsSinceEpoch();
QDateTime::currentDateTime().toMSecsSinceEpoch();
if (!p->waitForStarted(m_waitForStartTimeout)) {
const qint64 end =
QDateTime::currentDateTime().toMSecsSinceEpoch();
qCritical() << "PROCESS"
<< m_command
<< "TIMEOUT AT START"
<< QString("(runtime %1ms)").arg(end - start)
<< "IN"
<< p->workingDirectory();
return false;
}
if (p->state() != QProcess::Running) {
qCritical() << "WRONG PROCESS STATE"
<< p->state()
<< "IN"
<< p->workingDirectory();
return false;
}
if (p->waitForStarted(m_waitForStartTimeout)) {
// qDebug() << "PROCESS" << m_command << "STARTED IN" << p->workingDirectory();
if (p->state() == QProcess::ProcessState::Running) {
// qDebug() << "PROCESS" << m_command << "RUNNING IN" << p->workingDirectory();
// wait forever for git/opkg-commands to finish
int wait = m_waitForFinishTimeout; int wait = m_waitForFinishTimeout;
if (m_command.trimmed().startsWith("git", Qt::CaseInsensitive) || if (m_command.trimmed().startsWith("git", Qt::CaseInsensitive) ||
m_command.trimmed().startsWith("opkg", Qt::CaseInsensitive)) { m_command.trimmed().startsWith("opkg", Qt::CaseInsensitive)) {
wait = -1;
wait = 30 * 60 * 1000;
} }
bool const no_timeout = p->waitForFinished(wait);
// IMPORTANT: waitForFinished() is called exactly once. if (no_timeout) {
const bool finished = p->waitForFinished(wait); // qDebug() << "PROCESS" << m_command << "FINISHED IN" << p->workingDirectory();
if (p->exitStatus() == QProcess::NormalExit) {
if (!finished) { if ((m_exitCode = p->exitCode()) == 0) {
qint64 const end = QDateTime::currentDateTime().toMSecsSinceEpoch();
const qint64 end = qDebug() << "EXECUTED" << m_command
QDateTime::currentDateTime().toMSecsSinceEpoch(); << QString("(runtime %1ms)").arg(end-start)
<< "with code" << m_exitCode
qCritical() << "PROCESS WAIT FAILED:" << "IN" << p->workingDirectory();
<< m_command
<< "timeout =" << wait
<< "runtime =" << (end - start)
<< "error =" << p->error()
<< "errorString =" << p->errorString()
<< "state =" << p->state();
if (p->state() != QProcess::NotRunning) {
p->terminate();
if (!p->waitForFinished(5000)) {
qCritical()
<< "Process did not terminate, killing:"
<< m_command;
p->kill();
if (!p->waitForFinished(5000)) {
qCritical()
<< "ERROR: Process still did not finish after kill:"
<< m_command;
}
}
}
m_exitCode = -1;
return false;
}
// From here onward the process has definitely finished.
const qint64 end =
QDateTime::currentDateTime().toMSecsSinceEpoch();
if (p->exitStatus() != QProcess::NormalExit) {
m_exitCode = p->exitCode();
qCritical() << "PROCESS"
<< m_command
<< "CRASHED with code"
<< m_exitCode
<< QString("(after %1ms)").arg(end - start)
<< "IN"
<< p->workingDirectory();
return false;
}
m_exitCode = p->exitCode();
if (m_exitCode != 0) {
qCritical() << "EXECUTED"
<< m_command
<< QString("(runtime %1ms)").arg(end - start)
<< "with code"
<< m_exitCode
<< "IN"
<< p->workingDirectory();
return false;
}
qDebug() << "EXECUTED"
<< m_command
<< QString("(runtime %1ms)").arg(end - start)
<< "with code"
<< m_exitCode
<< "IN"
<< p->workingDirectory();
return true; 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()
<< 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;
} }
+2 -4
View File
@@ -22,11 +22,9 @@ class Command : public QObject {
QProcess *m_p; QProcess *m_p;
Worker *m_worker; Worker *m_worker;
public: public:
static constexpr int COMMAND_START_TIMEOUT_MS = 30 * 1000;
static constexpr int COMMAND_FINISH_TIMEOUT_MS = 30 * 60 * 1000;
explicit Command(QString const &command, explicit Command(QString const &command,
int start_timeout = COMMAND_START_TIMEOUT_MS, int start_timeout = 100000,
int finish_timeout = COMMAND_FINISH_TIMEOUT_MS); int finish_timeout = 100000);
QString getCommandResult(bool reset = false) const; QString getCommandResult(bool reset = false) const;
QString command() const { return m_command; } QString command() const { return m_command; }
+9 -2
View File
@@ -40,6 +40,7 @@ QPluginLoader Update::pluginLoader;
hwinf *Update::loadDCPlugin(QDir const &plugInDir, QString const &fname) { hwinf *Update::loadDCPlugin(QDir const &plugInDir, QString const &fname) {
hwinf *hw = nullptr; hwinf *hw = nullptr;
#if 0
if (plugInDir.exists()) { if (plugInDir.exists()) {
QString pluginLibName(fname); QString pluginLibName(fname);
pluginLibName = plugInDir.absoluteFilePath(pluginLibName); pluginLibName = plugInDir.absoluteFilePath(pluginLibName);
@@ -74,6 +75,7 @@ hwinf *Update::loadDCPlugin(QDir const &plugInDir, QString const &fname) {
qCritical() << "plugins directory" << plugInDir.absolutePath() qCritical() << "plugins directory" << plugInDir.absolutePath()
<< "does not exist"; << "does not exist";
} }
#endif
return hw; return hw;
} }
@@ -117,6 +119,7 @@ Update::Update(Worker *worker,
, m_dryRun(dryRun) , m_dryRun(dryRun)
, m_sys_areDCdataValid(false) { , m_sys_areDCdataValid(false) {
#if 0
if (!m_hw) { if (!m_hw) {
qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_hw == nullptr -> ca-slave plugin not loaded"; qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_hw == nullptr -> ca-slave plugin not loaded";
} else { } else {
@@ -134,6 +137,7 @@ Update::Update(Worker *worker,
qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_sys_areDCDataValid ..." qCritical() << "(" << __func__ << ":" << __LINE__ << ") m_sys_areDCDataValid ..."
<< m_sys_areDCdataValid; << m_sys_areDCdataValid;
} }
#endif
} }
Update::~Update() { Update::~Update() {
@@ -606,6 +610,8 @@ QString Update::getFileVersion(QString const& jsonFileName) {
} }
bool Update::checkDownloadedJsonVersions(QStringList const& jsonFileNames) { bool Update::checkDownloadedJsonVersions(QStringList const& jsonFileNames) {
// note: 2026-02-09: this method is not used!
#if 0
for (QStringList::size_type i=0; i < jsonFileNames.size(); ++i) { for (QStringList::size_type i=0; i < jsonFileNames.size(); ++i) {
@@ -679,14 +685,14 @@ bool Update::checkDownloadedJsonVersions(QStringList const& jsonFileNames) {
qCritical() << "CANNOT FIND JSON-NR FOR" << fName; qCritical() << "CANNOT FIND JSON-NR FOR" << fName;
} }
} }
#endif
return false; return false;
} }
QMap<QString, QString> QMap<QString, QString>
Update::getInstalledJsonVersions(QStringList const& jsonFileNames) { Update::getInstalledJsonVersions(QStringList const& jsonFileNames) {
QMap<QString, QString> map; QMap<QString, QString> map;
#if 0
if (!m_hw) { if (!m_hw) {
qCritical() << "(" << __func__ << ":" << __LINE__ << "):" qCritical() << "(" << __func__ << ":" << __LINE__ << "):"
<< "ERROR!!! m_hw == nullptr"; << "ERROR!!! m_hw == nullptr";
@@ -786,6 +792,7 @@ Update::getInstalledJsonVersions(QStringList const& jsonFileNames) {
} }
} }
#endif
return map; return map;
} }
-3
View File
@@ -178,9 +178,6 @@ QString Utils::zoneName(quint8 i) {
//if (i < (sizeof(zName)/sizeof(char const *))) { //if (i < (sizeof(zName)/sizeof(char const *))) {
// return zName[i]; // return zName[i];
//} //}
Q_UNUSED(i)
return "---"; return "---";
} }
+12 -70
View File
@@ -284,43 +284,14 @@ bool Worker::repairCorruptedRepository() {
return true; return true;
} }
bool Worker::updateTimedOut() const
{
if (!m_updateRuntime.isValid())
return false;
if (m_updateRuntime.elapsed() < UPDATE_MAX_RUNTIME_MS)
return false;
qCritical() << "UPDATE TOOL GLOBAL TIMEOUT:"
<< m_updateRuntime.elapsed()
<< "ms";
return true;
}
void Worker::privateUpdate() { void Worker::privateUpdate() {
m_updateRuntime.start();
auto abortIfTimedOut = [this]() -> bool {
if (!updateTimedOut())
return false;
qCritical() << "UPDATE TOOL GLOBAL TIMEOUT - aborting update";
// Ideally use a dedicated timeout step later.
m_lastFailedUpdateStep = UPDATE_STEP::UPDATE_FINALIZE;
return true;
};
if (!m_mainWindow) { if (!m_mainWindow) {
Utils::printCriticalErrorMsg("m_mainWindow NOT SET"); Utils::printCriticalErrorMsg("m_mainWindow NOT SET");
return; return;
} }
//return;
QString func(__PRETTY_FUNCTION__); QString func(__PRETTY_FUNCTION__);
GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::STARTED)); GUI() << (ISMAS() << (CONSOLE() << UPDATE_STEP::STARTED));
@@ -382,9 +353,6 @@ void Worker::privateUpdate() {
// update procedure, even if ISMAS-trigger is not correctly set ("WAIT") // update procedure, even if ISMAS-trigger is not correctly set ("WAIT")
} }
if (abortIfTimedOut())
return;
emit this->disableExit(); emit this->disableExit();
QDir customerRepository(m_customerRepository); QDir customerRepository(m_customerRepository);
@@ -468,9 +436,6 @@ void Worker::privateUpdate() {
CONSOLE() << UPDATE_STEP::CHECK_REPOSITORY_SUCCESS; CONSOLE() << UPDATE_STEP::CHECK_REPOSITORY_SUCCESS;
setProgress(_CHECKOUT_REPOSITORY_SUCCESS); setProgress(_CHECKOUT_REPOSITORY_SUCCESS);
if (abortIfTimedOut())
return;
if (m_clone == false) { if (m_clone == false) {
if (m_ismasTriggerActive == false) { if (m_ismasTriggerActive == false) {
return; return;
@@ -499,9 +464,6 @@ void Worker::privateUpdate() {
// CHECK-OUT BRANCH // CHECK-OUT BRANCH
// //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = customerEnvironment()) == false) { if ((continueUpdate = customerEnvironment()) == false) {
// even if something goes wrong creating the environment, try to execute // even if something goes wrong creating the environment, try to execute
// opkg_commands // opkg_commands
@@ -524,8 +486,6 @@ void Worker::privateUpdate() {
// COMPUTE CHANGED FILES OF CUSTOMER REPOSITORY // COMPUTE CHANGED FILES OF CUSTOMER REPOSITORY
// //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = filesToUpdate()) == false) { if ((continueUpdate = filesToUpdate()) == false) {
// even if something goes wrong in filesToUpdate, try to execute // even if something goes wrong in filesToUpdate, try to execute
// opkg_commands // opkg_commands
@@ -547,9 +507,6 @@ void Worker::privateUpdate() {
// (R)SYNC THE REPOSITORY WITH THE LOCAL FILEYSTEM // (R)SYNC THE REPOSITORY WITH THE LOCAL FILEYSTEM
// //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = syncCustomerRepositoryAndFS()) == false) { if ((continueUpdate = syncCustomerRepositoryAndFS()) == false) {
// even if something goes wrong with rsync, try to execute // even if something goes wrong with rsync, try to execute
// opkg_commands // opkg_commands
@@ -571,9 +528,6 @@ void Worker::privateUpdate() {
// EXECUTE OPKG COMMANDS // EXECUTE OPKG COMMANDS
// //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = execOpkgCommands()) == false) { if ((continueUpdate = execOpkgCommands()) == false) {
return; return;
} }
@@ -581,18 +535,16 @@ void Worker::privateUpdate() {
GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::EXEC_OPKG_COMMANDS); GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::EXEC_OPKG_COMMANDS);
setProgress(_EXEC_OPKG_COMMAND_SUCCESS); setProgress(_EXEC_OPKG_COMMAND_SUCCESS);
if (abortIfTimedOut())
return;
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// //
// UPDATE THE PSA USING THE CHANGED FILES // UPDATE THE PSA USING THE CHANGED FILES
// //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
if ((continueUpdate = downloadFilesToPSAHardware()) == false) { // for 281/Szeged: skip uploading files to DeviceController
return; //if ((continueUpdate = downloadFilesToPSAHardware()) == false) {
} // return;
//}
lst = QStringList(QString("DONE")); lst = QStringList(QString("DONE"));
ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS)); ISMAS(lst) << (GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::DOWNLOAD_FILES_TO_PSA_HARDWARE_SUCCESS));
@@ -1346,28 +1298,18 @@ qint64 Worker::getFileSize(QString const &fileName) const {
return fInfo.exists() ? fInfo.size() : -1; return fInfo.exists() ? fInfo.size() : -1;
} }
static constexpr int OPKG_START_TIMEOUT_MS = 30 * 1000;
static constexpr int OPKG_FINISH_TIMEOUT_MS = 30 * 60 * 1000;
bool Worker::executeOpkgCommand(QString opkgCommand) { bool Worker::executeOpkgCommand(QString opkgCommand) {
Command c(opkgCommand, Command c(opkgCommand);
OPKG_START_TIMEOUT_MS,
OPKG_FINISH_TIMEOUT_MS);
if (c.execute(m_workingDirectory)) { if (c.execute(m_workingDirectory)) {
Utils::printInfoMsg( QString const r = c.getCommandResult();
QString("EXECUTE OPKG COMMAND %1 OK: %2") Utils::printInfoMsg(QString("EXECUTE OPKG COMMAND %1 OK: %2")
.arg(opkgCommand) .arg(opkgCommand)
.arg(c.getCommandResult())); .arg(c.getCommandResult()));
return true; return true;
} else {
Utils::printCriticalErrorMsg(QString("EXECUTE OPKG COMMAND %1 FAILED")
.arg(opkgCommand));
} }
Utils::printCriticalErrorMsg(
QString("EXECUTE OPKG COMMAND %1 FAILED/TIMED OUT: %2")
.arg(opkgCommand)
.arg(c.getCommandResult()));
return false; return false;
} }
-10
View File
@@ -11,7 +11,6 @@
#include <QMap> #include <QMap>
#include <QDebug> #include <QDebug>
#include <QThread> #include <QThread>
#include <QElapsedTimer>
#include <optional> #include <optional>
#include <initializer_list> #include <initializer_list>
@@ -20,7 +19,6 @@
#include "ismas/ismas_client.h" #include "ismas/ismas_client.h"
#include "utils.h" #include "utils.h"
#ifdef PTU5 #ifdef PTU5
#define SERIAL_PORT "ttymxc2" #define SERIAL_PORT "ttymxc2"
#else #else
@@ -143,14 +141,6 @@ class hwinf;
class Worker : public QThread{ class Worker : public QThread{
Q_OBJECT Q_OBJECT
private:
static constexpr qint64 UPDATE_MAX_RUNTIME_MS =
60LL * 60LL * 1000LL; // 60 minutes
QElapsedTimer m_updateRuntime;
public:
bool updateTimedOut() const;
int const m_customerNr; int const m_customerNr;
QString const m_customerNrStr; QString const m_customerNrStr;
int const m_machineNr; int const m_machineNr;
+1
View File
@@ -0,0 +1 @@
INCLUDEPATH += $$PWD/common/include
File diff suppressed because it is too large Load Diff