Closed degeflija closed 1 year ago
Vorschlag von Horst:
#!/bin/sh
# Git hook to generate a header file with commit hash and commit time.
echo //generated by post-hook command in .git\hooks > Core/Inc/git-commit-version.h
git log -1 --format='#define GIT_COMMIT_HASH "%h"%n' >> Core/Inc/git-commit-version.h
git show --no-patch --no-notes --pretty='#define GIT_COMMIT_TIME "%cI"%n' >> Core/Inc/git-commit-version.h
echo -n "#define GIT_TAG_INFO \"" >> Core/Inc/git-commit-version.h
git describe --always --dirty --tags > Core/Inc/git-commit-tag.h
echo -e $(cat Core/Inc/git-commit-tag.h)\" >> Core/Inc/git-commit-version.h
# --------------------------------------------------------
# HMR 4.3.23
#
# Umcodieren des GIT-Version-Tags in eine
# hex-codierte Versionsnummer
#TagFile="Core/Inc/git-commit-tag.h" <<<<<<<<<<<<
#VersionFile="Core/Inc/git-commit-version.h" <<<<<<<<<<<<
TagFile="git-commit-tag.h" <<<<<<<<<<<<
VersionFile="git-commit-version.h" <<<<<<<<<<<<
read loc_string < $VersionFile
# TagFile lesen
if [ -r $TagFile ]; then
# tokenizing
read loc_string < $TagFile
# create numbers from sring tokens
OLDIFS="$IFS"
IFS='.' tokens=( $loc_string )
echo "set Major="${tokens[0]}
Major=${tokens[0]}
echo "set Minor="${tokens[1]}
Minor=${tokens[1]}
echo "set Micro="${tokens[2]}
Micro=${tokens[2]}
IFS="$OLDIFS" # restore IFS
else
# Kein TagFile gefunden
Major=0
Minor=0
Micro=0
fi
# VersionFile="Core/Inc/git-commit-version.h" extended by one line
# Hinweis: Zwischen dem abschliessenden " und \ muss ein Blank stehen !!!
# ====
printf "#define VERSION_TXT6 0x%02x%02x%04x\r\n" $Major $Minor $Micro >> $VersionFile
#-----------------------------------------------------------------------
# End of File
Ich habe das eben selbst ausprobiert, als ich mir eine Version von Klaus_Work von GIT runtergezogen habe. Leider bin ich auf einen Fehler gestoßen. Die Anweisung tokens=( $loc_string ) wird in der Eclipse-Umgebung nicht verstanden. In meiner Umgebung lief das, aber die ist sicher nicht repräsentativ.
Uwe, du bist der Cross-Platform-Spezialist. Bitte schau mal nach. Unten angehängt der BASH-Code nach den ersten Korrekturen, aber noch mit dem Token-Problem.
Die Hashes erzeugen ja eine bös-agressive Darstellung meines friedlichen BASH-Codes :-)
Hallo Horst, wenn Du den ganzen Code-Text beim Editieren markierst und in die eckigen Klammern oben beim Edidor (" < > ", 5.Symbol in der Leiste) einfasst, wird der Code als Code dargestellt - und die Hashes spielen keine Rolle mehr :). Im Preview kannst Du Dir das erst einmal vor dem Absenden noch Anschauen...
Hallo August,
da ich mit Shell Bash Skripten auf Kriegsfuß stehe hätte ich das mit Python gelösen. Der Nachteil ist das man auf Windows zusätzlich eine Python Umgebung braucht. Auf den meisten Linux Systemen ist das ja meistens schon installiert...
Ich hatte hier mal angefangen: https://github.com/larus-breeze/sw_sensor/blob/max_work/scripts/create-decimal-version-info.py
Gruß Max
Python ist gut, das ist bei Windows m.E. auch installiert - oder sehr leicht nachinstallierbar :) Für die Shell musst Du ja ein extra Script für Window und Linux machen...
https://github.com/larus-breeze/sw_sensor/blob/max_work/scripts/create-decimal-version-info.py
git-commit-version.h sieht jetzt so aus:
//generated by bash script in scripts
#define GIT_COMMIT_HASH "9090107"
#define GIT_COMMIT_TIME "2023-03-24T16:30:34+01:00"
#define GIT_TAG_INFO "0.2.1-22-g9090107-dirty"
#define GIT_TAG_DEC 0x00020116
@degeflija : Wo brauchst du diesen Hex define in der Software?
Am Ende von CAN_output.cpp steht dieses Code Snippet:
p.id=c_CAN_Id_SystemState; // 0x10d p.dlc=4; p.data_w[0] = system_state; CAN_send(p, 1);
Wenn es wie folgt erweitert wird
p.id=c_CAN_Id_SystemState; // 0x10d p.dlc=8; p.data_w[0] = system_state; p.data_w[1] = Version_TXT6; CAN_send(p, 1);
dann bekomme ich im AD57 die Version der Sensor SW auf dem CAN-Bus in adäquater Form und kann sie anzeigen, so wie die SW-Versionen der anderen Beteiligten (AD57, Utility und dann auch Sensor).
Ok das ist ja dann eine Änderung in der Lib: https://github.com/larus-breeze/sw_sensor_algorithms/blob/main/Output_Formatter/CAN_output.cpp Das muss dann koordiniert eingebaut werden, damit sowohl https://github.com/larus-breeze/SIL_flight_sensor_emulator/ als auch https://github.com/larus-breeze/sw_sensor weiterhin kompilierbar ist.
Korrekt.
Ich schlage vor, folgendes einzufügen:
In "system_configuration.h" in sw_sensor:
In "system_configuration.h" in SIL_flight_sensor_emulator:
Pull Request für sw_sensor_algorithms angelegt: https://github.com/larus-breeze/sw_sensor_algorithms/pull/9 Zuerst muss die Lib aktualisiert werden, dann kann das Feature hier in sw_sensor implementiert werden.
Max, ich verstehe nicht, was da jetzt realisiert wird. Ich verstehe auch nicht, warum da jetzt noch mit Python eine neue Baustelle aufgemacht wird. Muss man jetzt auch auf WIN10 zwanghaft Python installieren ? Diese Form der Diskussion ist für den A... Ein Telefonanruf klärt das allemal besser.
Dein Shell Skript hat nicht funktioniert. Ich löse "solche" Probleme mit Python. Da komme ich schnell zum Ziel und das ist zumindest von der Idee her Platformunabhängig. Wenn das so eingebaut wird und du die Firmware sw_sensor Kompilieren willst dann, brauchst du in Zukunft Python.
Ich halte eine Diskussion hier (in einem Ticket) für Ideal, da dann alles wesentliche zu einer Software Änderung an einer Stelle steht.
Du kannst auch einfach mal diesen Branch auschecken: https://github.com/larus-breeze/sw_sensor/tree/max_work und gucken ob du es kompilieren kannst. Vielleicht hast du Python schon installiert. Das ist ja quasi ein Standard.
close with #58
done
All code written around the AD57 relies on a common schema to denote and display version information : "V major.minor.build".
Inside the sensor code there is a analoguous yet slightly different mechanism implemented with the-file.
This bash file, when called, creates a sourcefile "git-commit-version.h" using info from a file called .
In order to streamline and combine this solution with the versioning in AD57 files, I have suggested an add-on on how to build the required #define in git-commit-version.h.
This proposal works seamlessly with the sw_sensor code as it stands.
All information on behalf that enhancement (bash code, CAN_output.cpp code snippet) has been forwarded to Max and Uwe, in order for them to proof-read and then to integrate these inputs.
I think it would be wise that I not tinker with the holy cow, that I better leave that to the Äkspädden.