From a4afeeb39635c81b085ab6114575c5586c2bc812 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Mon, 19 Jun 2023 15:59:17 +0200 Subject: [PATCH] Added Qt-commandline parser --- main.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/main.cpp b/main.cpp index 3ecbfaa..704fc9c 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,10 @@ #include #include +#ifdef __linux__ +#include // system() +#endif + #include "message_handler.h" #include "plugins/interfaces.h" @@ -14,6 +18,9 @@ #include #include #include +#include +#include +#include #include "update.h" #include "worker_thread.h" @@ -27,17 +34,26 @@ #define SERIAL_PORT "ttyUSB0" #endif -static void doWork(QString update_ctrl_file, QString workingDir) { +class hwinf; +static void doWork(hwinf *hw, QString update_ctrl_file, QString workingDir) { std::this_thread::sleep_for(std::chrono::milliseconds(2000)); - //Update update(update_ctrl_file, workingDir); - //update.doUpdate(); + Update update(hw, update_ctrl_file, workingDir); + update.doUpdate(); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); QCoreApplication::quit(); } // argv[1]: file to send to dc int main(int argc, char *argv[]) { + + QByteArray const value = qgetenv("XDG_RUNTIME_DIR"); + if (value.size() == 0) { + qputenv("XDG_RUNTIME_DIR", "/run/user/0"); + } + QApplication a(argc, argv); + QApplication::setApplicationName("ATBUpdateTool"); + QApplication::setApplicationVersion("1.0"); if (!messageHandlerInstalled()) { // change internal qt-QDebug-handling atbInstallMessageHandler(atbDebugOutput); @@ -45,31 +61,64 @@ int main(int argc, char *argv[]) { //setDebugLevel(QtMsgType::QtDebugMsg); } - QByteArray const value = qgetenv("XDG_RUNTIME_DIR"); - if (value.size() == 0) { - qputenv("XDG_RUNTIME_DIR", "/run/user/0"); - } + QCommandLineParser parser; + parser.setApplicationDescription("Download tool for downloading device controller firmware, printer json-files and executing opkg-commands."); + parser.addHelpOption(); + parser.addVersionOption(); - QString rtPath = QCoreApplication::applicationDirPath(); - QString plugInDir(rtPath +(rtPath.endsWith("/") ? "" : "/") + "plugins"); + QCommandLineOption pluginDirectoryOption(QStringList() << "plugin-directory" << "plugin-directory", + QCoreApplication::translate("main", "Where to find dc-plugin."), + QCoreApplication::translate("main", "directory")); + QString const pluginDefault = "./plugins"; + pluginDirectoryOption.setDefaultValue(pluginDefault); + parser.addOption(pluginDirectoryOption); + + QCommandLineOption pluginNameOption(QStringList() << "plugin-name" << "plugin-name", + QCoreApplication::translate("main", "Name of dc-plugin."), + QCoreApplication::translate("main", "directory")); + QString const pluginNameDefault = "libCAmaster.so"; + pluginNameOption.setDefaultValue(pluginNameDefault); + parser.addOption(pluginNameOption); + + QCommandLineOption workingDirectoryOption(QStringList() << "working-directory" << "working-directory", + QCoreApplication::translate("main", "working directory of update-script."), + QCoreApplication::translate("main", "directory")); + QString const workingDirectoryDefault = "."; + workingDirectoryOption.setDefaultValue(workingDirectoryDefault); + parser.addOption(workingDirectoryOption); + + // Process the actual command line arguments given by the user + parser.process(a); + QString plugInDir = parser.value(pluginDirectoryOption); + QString plugInName = parser.value(pluginNameOption); + QString workingDir = parser.value(workingDirectoryOption); + QString const rtPath = QCoreApplication::applicationDirPath(); + + if (plugInDir == pluginDefault) { + plugInDir = (rtPath + "/" + pluginDefault); + } if (!QDir(plugInDir).exists()) { qCritical() << plugInDir << "does not exists, but has to contain dc-library"; exit(-1); } - qInfo() << "pwd" << "=" << rtPath; qInfo() << "plugInDir" << "=" << plugInDir; + qInfo() << "plugInName" << "=" << plugInName; + qInfo() << "workingDir" << "=" << workingDir; - hwinf *hw = Update::loadDCPlugin(QDir(plugInDir), "libCAmaster.so"); + // before loading the library, delete all possible shared memory segments +#if defined Q_OS_LINUX || defined Q_OS_UNIX + // system("rm -rf /tmp/qipc*"); +#else +#error "Only tested under UNIX/LINUX" +#endif + + hwinf *hw = Update::loadDCPlugin(QDir(plugInDir), plugInName); + hw->dc_autoRequest(false); QString const update_ctrl_file = "/opt/app/tools/atbupdate/update_log.csv"; - QString const workingDir = (argc == 2) ? argv[1] : "."; - Update update(hw, update_ctrl_file, workingDir); - - return 0; - - std::thread t(doWork, update_ctrl_file, workingDir); + std::thread t(doWork, hw, update_ctrl_file, workingDir); int ret = a.exec(); t.join();