dtc-buildscript now via template and utf-8

This commit is contained in:
Marcel Peterkau 2023-10-20 12:05:27 +02:00
parent 2138f640ee
commit b37c0a05be
3 changed files with 73 additions and 51 deletions

View File

@ -1,5 +1,6 @@
import os import os
import time import time
from jinja2 import Environment, FileSystemLoader
import json import json
# Pfad zur Eingabedatei und Ausgabedatei # Pfad zur Eingabedatei und Ausgabedatei
@ -95,43 +96,24 @@ for i, line in enumerate(dtc_lines):
# Unix-Zeitstempel hinzufügen # Unix-Zeitstempel hinzufügen
timestamp = int(time.time()) timestamp = int(time.time())
# Headerdatei schreiben env = Environment(loader=FileSystemLoader('include', encoding='utf-8'))
with open(output_file, "w") as f: # Lade das Jinja2-Template aus der Datei
f.write(f"// Auto-generated by script on {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))}\n") template = env.get_template('dtc_defs.h.j2')
f.write(f"#ifndef DTC_DEFS_H\n")
f.write(f"#define DTC_DEFS_H\n\n")
f.write("#include <stdint.h>\n\n")
f.write("typedef uint32_t DTCNum_t;\n\n")
f.write("typedef enum\n") # Erstelle ein Context-Dictionary mit den erforderlichen Daten
f.write("{\n") context = {
f.write(" DTC_INACTIVE,\n") 'timestamp_unix': timestamp,
f.write(" DTC_ACTIVE,\n") 'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)),
f.write(" DTC_PREVIOUS\n") 'dtc_macros': dtc_macros, # Übergebe die dtc_macros-Liste direkt
f.write("} DTCActive_t;\n\n") 'dtc_structs': dtc_structs, # Übergebe die dtc_structs-Liste direkt
}
f.write("typedef enum\n") # Rendere das Template mit den Werten und erhalte den Header-Text
f.write("{\n") header_text = template.render(context)
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")
f.write("typedef struct {\n") # Schreibe den generierten Header-Text in die Header-Datei
f.write(" DTCNum_t code;\n") with open(output_file, "w", encoding='utf-8') as f:
f.write(" DTCSeverity_t severity;\n") f.write(header_text)
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")
print(f"Header-Datei wurde erstellt: {output_file}") print(f"Header-Datei wurde erstellt: {output_file}")

View File

@ -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 #ifndef DTC_DEFS_H
#define DTC_DEFS_H #define DTC_DEFS_H
@ -43,23 +43,23 @@ typedef struct {
#define DTC_LAST_DTC 14 #define DTC_LAST_DTC 14
const DTC_t dtc_definitions[] = { const DTC_t dtc_definitions[] = {
{ DTC_NO_DTC , DTC_NONE }, // No Error, { 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_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_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_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_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_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_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_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_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_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_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_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_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_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 { 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

View File

@ -0,0 +1,40 @@
// Auto-generated by script on {{ timestamp }}
#ifndef DTC_DEFS_H
#define DTC_DEFS_H
#include <stdint.h>
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