diff --git a/UpdatePTUDevCtrl/UpdatePTUDevCtrl.pro b/UpdatePTUDevCtrl/UpdatePTUDevCtrl.pro new file mode 100644 index 0000000..5bd21cf --- /dev/null +++ b/UpdatePTUDevCtrl/UpdatePTUDevCtrl.pro @@ -0,0 +1,267 @@ +QT += core gui +QT += widgets serialport network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = ATBUpdateTool + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +# 1.3.6 : Do not update device-controller/json files, but have the library +# (in a later step) do that. +# Fixed sending messages to ISMAS. +# Always execute contents of opkg_commands-file (even if there are no +# changes). +# 1.3.7 : Wait forever for git-commands to finish in QProcess executing such +# a command. +# 1.3.8 : Remove accessing opkg_commands under file-system-path /etc/psa_update. +# Activate download of json-configuration files. +# 1.3.9 : Fix sendLastVersion: use configured branch and not master branch in +# git show origin/master -s --format="c=%h m=%s d=%cI" ==> +# git show origin/zg1/zone1 -s --format="c=%h m=%s d=%cI" +# Use dynamic values for os-release and apism-version when sending +# last version info. +# 1.3.10: Fix premature killing opkg-commands: detected timeout of 100s was +# too small when updating apism. +# Fix display of UPDATE_SUCCESS when opkg_command fails. Detected when +# updating apsim failed. +# 1.3.11: Integrate version of ATBUpdateTool in SendLastVersion-ISMAS-message. +# 1.3.12: Add command parameters for output of yocto-infos about ATBUpdateTool. +# Use 'git pull' instead of 'git fetch'. +# Use 'git clone --filter=blob:none' instead of 'git clone' to speed +# 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. +# 1.3.14: Add additional check for sanity of customer repository using +# "git fsck". +# Stream-lined code of update process: massive refactoring. +# Added functionality: If WAIT button is not active, then an existing +# customer repository will be repaired, or a not existing repository +# will be cloned. The process stops then. +# However, if the WAIT button is active, the at least the commands in +# opkg_commands will be executed. Changed files in the customer +# 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. +# 1.3.15: Bug fixes found during testing. +# Do not disable Exit-button during update-process. +# Removed worker-thread with an own event-loop: only the GUI thread +# has an event loop. Tested JSON-downloads several times successfully +# (using the slave lib where the CA helper tool was active as master). +# Turned previous worker-object into its own thread, but without any +# own event-loop (so it cannot block anything inside the CA-plugin). +# 1.3.16: Bug fixes found during testing. +# 1.3.17: Add ATBUpdateTool.ini and custom command line parser. Settings +# given in ATBUpdateTool.ini can be overwritten on the command-line. +# 1.3.18: Bug fixes found during testing. +# 1.3.19: Bug fixes found during testing. +# 1.3.20: Bug fixes found during testing. +# 1.3.21: Bug fixes found during testing: +# Fix directory of ATBUpdateTool.ini to be the working directory of +# the application rather than just ".". +# Check existance of etc-directory inside customer repository. +# Check for valid ISMAS trigger (button) 15x (=90s). +# NOTE: if the customer repository is cloned (or repaired and cloned +# again), and if the settings always-download-config=true and +# always-download-dc=true in the ATBUpdateTool.ini file, the download +# the printer-json files and the device controller file, even without +# an activated ISMAS trigger (button). The tariff-files are rsynced to +# the local filesystem for such clone. +# Set new filename for device controller: dc2c.bin. +# 1.3.22: Bug fixes found during testing: +# Fix the path-names of the json-files and the device-controller. +# Set automatic download of json-file in ATBUpdateTool.ini file for +# a fresh clone of the repository. +# 1.3.23: Added a 'break' to prevent a possible endless loop when checking if +# the device is alive. +# +# NOTE: The versioning info has to be shifted up by one version, i.e. what +# happened for 1.3.23 was actually done in 1.3.24. +# 1.3.24 +# +# 1.3._24_: Special version for szeged using a old dc-controller (4.42): +# Changes: +# (1) the ini-File now uses the libCAmaster.so. +# 1.3._25_: Again special version for szeged, using interface.h, version 4.4. +# 1.4.0 : Start with version at 1.4.0 (mainly to see a difference with Szeged) +# Set hash-value in EVENT-objects. Set location (project), version +# and info in send-last-version. +# If the customer repository does not exist, then do not check the +# ISMAS trigger, but proceed with the update procedure. Otherwise, +# check the ISMAS update-trigger as first step. +# If the current time is between 0.00 - 4.00 o'clock, then a wrong +# trigger-value will result in an UPDATE_STEP_NOT_NECESSARY. +# Move final processing to subclass UpdateProcessRunning. +# Disable EXIT-button for the whole update-process, except for the +# checking of the ISMAS-trigger-button (aka WAIT-button). +# 1.4.1 : Sync files in the customer repository (under ./etc) as the very +# first step +VERSION="1.4.1" +# PLANNED TODOS: +# 1: Das Repository wird repariert bwz. neu geklont. Unabhaengig vom WAIT. +# 2: Wenn der WAIT-Button aktiv ist, dann wird ein Repository repariert (neu +# geklont), aber zusaetzlich werden alle verfuegbaren Dateien als neu +# angesehen und die entsprechenden Aktionen durchgefuehrt: tariff-files +# spiegeln, json-files laden und dc laden. Also VORSICHT: das repository +# muss in diesem fall wirklich in ordnung sein. +# 3: Wurde keine Datei geaendert, kein initiales Clone und der WAIT-button +# nicht aktiv, so (passiert natuerlich nichts) kann man davon ausgehen, +# dass es sich um ein automatisches Update handelt. Dann koennte man im +# ISMAS eine entsprechende Meldung anzeigen als Teil von SEND-LAST-VERSION. +# Wenn der WAIT-button aktiv ist, dann werden zumindest die opkg-commands +# ausgefuehrt. +# 5: Falls das Tool mal abstuerzt, dann einen Signal-Handler (fuer TERM) +# installieren, sodass zumnidest SEND-LAST-VERSION mit rausgeht. +# 6: rsync: explizites Binary, nicht das in busybox enthaltene. +# 7: Versionen der Json-Files lassen sich auslesen. +# Problem: Einstellungen in den Json-Files lassen sich auch mittels +# Funktionen in der CD-Library ueberschreiben. Damit ist dann wieder nicht +# mehr so klar, was jetzt eigentlich aktiv ist. +# 8: m_alwaysDownloadConfig und m_alwaysDownloadDC: vorbereitet: man koennte +# es so arrangieren, dass der DC plus die Json-files im Repository immer +# runtergeladen werden, obwohl sich im Repository gar nicts veraendert +# hat. Eeventuell nuetzlich beim initialen Setuo eines PSA. +# 9: Das Kunden-Repository sollte immer gezogen werden, unabhaengig von der +# Stellung des WAIT-Button. Grund: es koennte sein, dass andernfalls ein +# PSA weit hiter anderen steht, und dann ploetzlich einmal alle vorher- +# gehenden Aenderungen anzieht, die gar nicht fuer ihn gemeint waren. +# 11: Das Edit-Fenster teilen um die Anzeige zu verbessern. +# 12: Bei einem Update muss immer ersichtlich sein, warum es ueberhaupt +# angestossen wurde. Steht kein "WAIT" im ISMAS-Trigger, dann kann man +# davon ausgehen, dass es sich um ein automatisches Update handelt. +# In jedem Fall wird bei einem automatischen Update, bei dem der WAIT- +# Button nicht gesetzt war, ein "OK" gesendet, falls sonst nichts weiter +# zu tun ist. Beachte aber: wir haben auch noch den Fall, dass eine SD- +# Karte gesteckt wird. In diesem Fall wird ein komplettes Update gefahren, +# und zwar explizit auch ohne WAIT-Button. +# Am Ende eines Updates steht im ISMAS entweder ein "OK" oder ein "FAIL". +# 13: SendLastVersion: fuer jedes erfolgreich installierte Paket eine +# Send-Last-Version-Nachricht an ISMAS. Dadurch entsteht im ISMAS eine +# History (Christian darueber informieren). +# 14: Installiert werden nur Dateien, die neu sind oder geaendert wurden. +# Nicht etwas Dateien, die geloescht wurden: sicherstellen, dass man hier +# immer direkt im repository arbeitet, nicht auf dem Filesystem. +# Ferner: der DeviceController heisst dc2c.bin, auch fuer die Jsons +# sind Dtandard-Namen vergeben. Alternativ: alle vorhandenen Jsons +# werden runtergeladen: Thomas ist eh fuer deren Inhalte verantworlich. +# WICHTIG: immer ueberpruefen, ob die Dateien im Customer-Repository +# wirklich die richtigen Dateien sind. +# 15: Der WAIT-Button laesst sich auf WAIT zuruecksetzen (etwa wenn git +# selber Probleme hatte). +# 16: Der Download-Thread sollte sowohl die auto-Variable auf false setzen +# als auch den cycle-Timer stoppen, damit sichergestellt ist, dass der +# Download des DC nicht gestoert wird. + + +win32 { + BUILD_DATE=$$system("date /t") + BUILD_TIME=$$system("time /t") +} else { + BUILD_DATE=$$system("date +%d-%m-%y") + BUILD_TIME=$$system("date +%H:%M:%S") +} + +GIT_COMMIT=$$system("git log -1 --format=oneline | cut -d' ' -f1") + +EXTENDED_VERSION="$${VERSION}-$${GIT_COMMIT}" + +INCLUDEPATH += plugins + +CONFIG += c++17 +# CONFIG -= app_bundle + +DEFINES+=APP_VERSION=\\\"$$VERSION\\\" +DEFINES+=APP_BUILD_DATE=\\\"$$BUILD_DATE\\\" +DEFINES+=APP_BUILD_TIME=\\\"$$BUILD_TIME\\\" +DEFINES+=APP_EXTENDED_VERSION=\\\"$$EXTENDED_VERSION\\\" + +# keep comments, as /* fall through */ +QMAKE_CXXFLAGS += -C +QMAKE_CXXFLAGS += -g +QMAKE_CXXFLAGS += -Wno-deprecated-copy -O + +contains( CONFIG, PTU5 ) { + greaterThan(QT_MAJOR_VERSION, 4): QT += serialport + CONFIG += link_pkgconfig + lessThan(QT_MAJOR_VERSION, 5): PKGCONFIG += qextserialport + QMAKE_CXXFLAGS += -O2 -std=c++17 # for GCC >= 4.7 + # QMAKE_CXXFLAGS += -Wno-deprecated-copy + ARCH = PTU5 + DEFINES+=PTU5 +} +contains( CONFIG, PTU5_YOCTO ) { + greaterThan(QT_MAJOR_VERSION, 4): QT += serialport + QMAKE_CXXFLAGS += -std=c++17 # for GCC >= 4.7 + # QMAKE_CXXFLAGS += -Wno-deprecated-copy + PTU5BASEPATH = /opt/devel/ptu5 + ARCH = PTU5 + DEFINES+=PTU5 + + # add qmqtt lib + #LIBS += -lQt5Qmqtt +} +contains( CONFIG, DesktopLinux ) { + greaterThan(QT_MAJOR_VERSION, 4): QT += serialport + lessThan(QT_MAJOR_VERSION, 5): CONFIG += extserialport + # QMAKE_CC = ccache $$QMAKE_CC + # QMAKE_CXX = ccache $$QMAKE_CXX + QMAKE_CXXFLAGS += -std=c++17 + # QMAKE_CXXFLAGS += -Wno-deprecated-copy + linux-clang { QMAKE_CXXFLAGS += -Qunused-arguments } + ARCH = DesktopLinux + DEFINES+=DesktopLinux +} + +SOURCES += \ + main.cpp \ + progress_event.cpp \ + update_dc_event.cpp \ + mainwindow.cpp \ + utils.cpp \ + update.cpp \ + git/git_client.cpp \ + ismas/ismas_client.cpp \ + process/command.cpp \ + message_handler.cpp \ + worker.cpp \ + commandline_parser.cpp + +HEADERS += \ + update.h \ + progress_event.h \ + update_dc_event.h \ + utils.h \ + mainwindow.h \ + git/git_client.h \ + apism/ismas_data.h \ + ismas/ismas_client.h \ + process/command.h \ + message_handler.h \ + worker.h \ + interfaces.h \ + commandline_parser.h \ + plugins/interfaces.h + +OTHER_FILES += \ + ATBUpdateTool.ini + +FORMS += \ + mainwindow.ui + + +########################################################################################## +# for running program on target through QtCreator +contains( CONFIG, PTU5 ) { + qnx: target.path = /tmp/$${TARGET}/bin + else: unix:!android: target.path = /opt/app/tools/atbupdate/ + !isEmpty(target.path): INSTALLS += target +}