From b37c0a05be464f24b564d4fb36ea96d037858265 Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Fri, 20 Oct 2023 12:05:27 +0200 Subject: [PATCH] dtc-buildscript now via template and utf-8 --- Software/build_dtcs.py | 50 +++++++++++----------------------- Software/include/dtc_defs.h | 34 +++++++++++------------ Software/include/dtc_defs.h.j2 | 40 +++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 51 deletions(-) create mode 100644 Software/include/dtc_defs.h.j2 diff --git a/Software/build_dtcs.py b/Software/build_dtcs.py index 662765e..b04e73b 100644 --- a/Software/build_dtcs.py +++ b/Software/build_dtcs.py @@ -1,5 +1,6 @@ import os import time +from jinja2 import Environment, FileSystemLoader import json # Pfad zur Eingabedatei und Ausgabedatei @@ -95,43 +96,24 @@ for i, line in enumerate(dtc_lines): # Unix-Zeitstempel hinzufügen timestamp = int(time.time()) -# Headerdatei schreiben -with open(output_file, "w") as f: - f.write(f"// Auto-generated by script on {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))}\n") - f.write(f"#ifndef DTC_DEFS_H\n") - f.write(f"#define DTC_DEFS_H\n\n") - f.write("#include \n\n") - - f.write("typedef uint32_t DTCNum_t;\n\n") +env = Environment(loader=FileSystemLoader('include', encoding='utf-8')) +# Lade das Jinja2-Template aus der Datei +template = env.get_template('dtc_defs.h.j2') - f.write("typedef enum\n") - f.write("{\n") - f.write(" DTC_INACTIVE,\n") - f.write(" DTC_ACTIVE,\n") - f.write(" DTC_PREVIOUS\n") - f.write("} DTCActive_t;\n\n") +# Erstelle ein Context-Dictionary mit den erforderlichen Daten +context = { + 'timestamp_unix': timestamp, + 'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)), + 'dtc_macros': dtc_macros, # Ãœbergebe die dtc_macros-Liste direkt + 'dtc_structs': dtc_structs, # Ãœbergebe die dtc_structs-Liste direkt +} - f.write("typedef enum\n") - f.write("{\n") - f.write(" DTC_NONE,\n") - f.write(" DTC_INFO,\n") - f.write(" DTC_WARN,\n") - f.write(" DTC_CRITICAL\n") - f.write("} DTCSeverity_t;\n\n") +# Rendere das Template mit den Werten und erhalte den Header-Text +header_text = template.render(context) - f.write("typedef struct {\n") - f.write(" DTCNum_t code;\n") - f.write(" DTCSeverity_t severity;\n") - f.write("} DTC_t;\n\n") - - # Füge die DTC_NAME_CONSTANT #define hinzu - f.write("\n".join(dtc_macros) + "\n\n") - - f.write(f"const DTC_t dtc_definitions[] = {{\n") - f.write(",\n".join(dtc_structs) + "\n") - f.write("};\n\n") - f.write(f"const uint32_t dtc_generation_timestamp = {timestamp};\n\n") - f.write("#endif // DTC_DEFS_H\n") +# Schreibe den generierten Header-Text in die Header-Datei +with open(output_file, "w", encoding='utf-8') as f: + f.write(header_text) print(f"Header-Datei wurde erstellt: {output_file}") diff --git a/Software/include/dtc_defs.h b/Software/include/dtc_defs.h index d2c248d..1eb07af 100644 --- a/Software/include/dtc_defs.h +++ b/Software/include/dtc_defs.h @@ -1,4 +1,4 @@ -// Auto-generated by script on 2023-09-27 19:05:49 +// Auto-generated by script on 2023-10-20 12:04:36 #ifndef DTC_DEFS_H #define DTC_DEFS_H @@ -43,23 +43,23 @@ typedef struct { #define DTC_LAST_DTC 14 const DTC_t dtc_definitions[] = { - { DTC_NO_DTC , DTC_NONE }, // No Error, - { DTC_TANK_EMPTY , DTC_CRITICAL }, // Ölvorrat ist komplett leer. Den Ölvorrat auffüllen und im Menu 'Wartung' zurück setzen, - { DTC_TANK_LOW , DTC_WARN }, // Ölvorrat ist unter der Warnschwelle. Den Ölvorrat demnächst auffüllen und im Menu 'Wartung' zurück setzen, - { DTC_NO_EEPROM_FOUND , DTC_CRITICAL }, // Es wurde kein EEPROM gefunden. Dies lässt einen Hardware-Defekt vermuten., - { DTC_EEPROM_CFG_BAD , DTC_CRITICAL }, // Die Checksumme der Config-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück, - { DTC_EEPROM_PDS_BAD , DTC_CRITICAL }, // Die Checksumme der Betriebsdaten-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück, - { DTC_EEPROM_PDSADRESS_BAD , DTC_CRITICAL }, // Die Adresse der Betriebsdaten-Partition im EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück, - { DTC_EEPROM_VERSION_BAD , DTC_CRITICAL }, // Die Layout-Version des EEPROM stimmt nicht mit der Firmware-Version überein. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück, - { DTC_FLASHFS_ERROR , DTC_CRITICAL }, // Der Flashspeicher konnte nicht initialisiert werden. Aktualisieren sie Flash & Firmware, - { DTC_FLASHFS_VERSION_ERROR , DTC_CRITICAL }, // Die Version des Flashspeicher stimmt nicht mit der Firmware-Version überein. Aktualisieren sie den Flash mit der passenden Update-Datei, - { DTC_NO_GPS_SERIAL , DTC_CRITICAL }, // Es wurde kein GPS-Signal über die serielle Schnittstelle empfangen, Prüfen sie die Verbindung und das GPS-Modul, - { DTC_CAN_TRANSCEIVER_FAILED , DTC_CRITICAL }, // Es konnte keine Verbindung zum CAN-Transceiver hergestellt werden. Prüfen Sie die Hardware auf Defekte, - { DTC_NO_CAN_SIGNAL , DTC_WARN }, // Es konnte kein CAN-Signal empfangen werden. Prüfen sie die Verbindung und die Einstellungen, - { DTC_EEPROM_CFG_SANITY , DTC_WARN }, // Ein oder mehrer Einstellungswerte sind ausserhalb plausibler Werte. Prüfen Sie Ihre Einstellungen, + { DTC_NO_DTC , DTC_NONE }, // No Error + { DTC_TANK_EMPTY , DTC_CRITICAL }, // Ölvorrat ist komplett leer. Den Ölvorrat auffüllen und im Menu 'Wartung' zurück setzen + { DTC_TANK_LOW , DTC_WARN }, // Ölvorrat ist unter der Warnschwelle. Den Ölvorrat demnächst auffüllen und im Menu 'Wartung' zurück setzen + { DTC_NO_EEPROM_FOUND , DTC_CRITICAL }, // Es wurde kein EEPROM gefunden. Dies lässt einen Hardware-Defekt vermuten. + { DTC_EEPROM_CFG_BAD , DTC_CRITICAL }, // Die Checksumme der Config-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück + { DTC_EEPROM_PDS_BAD , DTC_CRITICAL }, // Die Checksumme der Betriebsdaten-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück + { DTC_EEPROM_PDSADRESS_BAD , DTC_CRITICAL }, // Die Adresse der Betriebsdaten-Partition im EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück + { DTC_EEPROM_VERSION_BAD , DTC_CRITICAL }, // Die Layout-Version des EEPROM stimmt nicht mit der Firmware-Version überein. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück + { DTC_FLASHFS_ERROR , DTC_CRITICAL }, // Der Flashspeicher konnte nicht initialisiert werden. Aktualisieren sie Flash & Firmware + { DTC_FLASHFS_VERSION_ERROR , DTC_CRITICAL }, // Die Version des Flashspeicher stimmt nicht mit der Firmware-Version überein. Aktualisieren sie den Flash mit der passenden Update-Datei + { DTC_NO_GPS_SERIAL , DTC_CRITICAL }, // Es wurde kein GPS-Signal über die serielle Schnittstelle empfangen, Prüfen sie die Verbindung und das GPS-Modul + { DTC_CAN_TRANSCEIVER_FAILED , DTC_CRITICAL }, // Es konnte keine Verbindung zum CAN-Transceiver hergestellt werden. Prüfen Sie die Hardware auf Defekte + { DTC_NO_CAN_SIGNAL , DTC_WARN }, // Es konnte kein CAN-Signal empfangen werden. Prüfen sie die Verbindung und die Einstellungen + { DTC_EEPROM_CFG_SANITY , DTC_WARN }, // Ein oder mehrer Einstellungswerte sind ausserhalb plausibler Werte. Prüfen Sie Ihre Einstellungen { DTC_LAST_DTC , DTC_NONE } // Last Error }; -const uint32_t dtc_generation_timestamp = 1695834349; +const uint32_t dtc_generation_timestamp = 1697796276; -#endif // DTC_DEFS_H +#endif // DTC_DEFS_H \ No newline at end of file diff --git a/Software/include/dtc_defs.h.j2 b/Software/include/dtc_defs.h.j2 new file mode 100644 index 0000000..88c6e1d --- /dev/null +++ b/Software/include/dtc_defs.h.j2 @@ -0,0 +1,40 @@ +// Auto-generated by script on {{ timestamp }} +#ifndef DTC_DEFS_H +#define DTC_DEFS_H + +#include + +typedef uint32_t DTCNum_t; + +typedef enum +{ + DTC_INACTIVE, + DTC_ACTIVE, + DTC_PREVIOUS +} DTCActive_t; + +typedef enum +{ + DTC_NONE, + DTC_INFO, + DTC_WARN, + DTC_CRITICAL +} DTCSeverity_t; + +typedef struct { + DTCNum_t code; + DTCSeverity_t severity; +} DTC_t; + +{% for dtc in dtc_macros -%} +{{ dtc }} +{% endfor %} +const DTC_t dtc_definitions[] = { +{% for struct in dtc_structs -%} +{{ struct }} +{% endfor -%} +}; + +const uint32_t dtc_generation_timestamp = {{ timestamp_unix }}; + +#endif // DTC_DEFS_H