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 # 1.4.2 : Do not check if /etc/psa_tariff and /etc/psa_tariff are # the same after an rsync. They might be noy after a change of the # customer-number. # 1.4.3 : Use global directory for device-controller interfaces.h-file. # 1.4.4 : Add additional debug messages when downloading json-files. # Move rsyncing of the customer-repository after the actual fetching # of the repository. Otherwise, the update of, for instance # tariff-files, would always be a step behind. # 1.4.5 : In case a new branch has been created in a remote # customer-repository (e.g. origin/zg1/zone101), then fetch/pull # this branch before switching to this now locally existen branch. # : Improve output of GUI/Console and messages sent to ISMAS. # : Fix: do not send the json-files to dc in any case. Bug introduced # when pulling new branch, but branch already existed locally. # 1.4.6 : No exit()-call if loading CA-plugin fails. # Check m_hw (pointer to CA-(Slave)Plugin) before its use. # Only exit() if firmware is configured to be possibly updated, but # loading the CA-plugin failed. # 1.4.7 : Read Json-file versions of Json-files actually loaded into DC. # 1.4.8 : Improve reading Json-file versions of Json-files actually loaded # in DC. If available, show version info instead of blob-info of # Json file. # 1.4.9 : Improve ISMAS output: add messages for JSON downloads. # Do not send CHECK_ISMAS_TRIGGER_SUCCESS to ISMAS for an automatic # update. # In case there is an automatic update (00:00-04:00) use M0100 instead # of U0002. # 1.4.10 : Fix: for the time being, never set the autoRequest-flag to false. # 1.4.11 : Fix: remove hard-coded path to git-repos of gitea in mimbach. Read # from ATBUpdateTool.ini the url for the gitrepositories. # 1.5.0 : Use ptu-config.atb-comm.de (given in ini-file) as new server for # customer repositories. # Fix: allow empty lines in opkg_commands. # 1.5.1 : Fix: do not use cleanPath() on a url-address. # 1.5.2 : Remove .ipk and .gz files in /var/cache/opkg. # 1.5.3 : Build customer_(id) name without right justification. # 1.5.4 : Try to run opkg-commands even under some error conditions (failure # of customerEnvironment(), filesToUpdate() or # syncCustomerRepositoryAndFS(). # 1.5.5 : Call into binary ptuPackageVersion to get installed package # versions. # 1.5.6 : Show additional update progress info in status bar. VERSION="1.5.6" # 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 PTU5BASEPATH = /opt/devel/ptu5 INCLUDEPATH += $$PTU5BASEPATH/qt/libs/devicecontroller/include LIBS += -L$$PTU5BASEPATH/qt/libs/devicecontroller/library # 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 LIBS += -lCAslave LIBS += -lCAmaster } 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 \ commandline_parser.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 }