larus-breeze / sw_sensor

Firmware for Larus sensor MK1 and MK2
3 stars 3 forks source link

Version info distribution in sw_sensor via CAN_output to AD57 #48

Closed degeflija closed 1 year ago

degeflija commented 1 year ago

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.

MaxBaex commented 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
degeflija commented 1 year ago

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 :-)

UpCountVersion.zip

August2111 commented 1 year ago

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...

MaxBaex commented 1 year ago

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

August2111 commented 1 year ago

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...

MaxBaex commented 1 year ago

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?

degeflija commented 1 year ago

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).

MaxBaex commented 1 year ago

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.

degeflija commented 1 year ago

Korrekt.

MaxBaex commented 1 year ago

Ich schlage vor, folgendes einzufügen:

MaxBaex commented 1 year ago

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.

degeflija commented 1 year ago

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.

MaxBaex commented 1 year ago

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.

MaxBaex commented 1 year ago

close with #58

MaxBaex commented 1 year ago

done