dtc-buildscript now via template and utf-8
This commit is contained in:
		| @@ -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 <stdint.h>\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}") | ||||
|  | ||||
|   | ||||
| @@ -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 }, // <EFBFBD>lvorrat ist komplett leer. Den <EFBFBD>lvorrat auff<EFBFBD>llen und im Menu 'Wartung' zur<EFBFBD>ck setzen, | ||||
|     { DTC_TANK_LOW                  , DTC_WARN     }, // <EFBFBD>lvorrat ist unter der Warnschwelle. Den <EFBFBD>lvorrat demn<EFBFBD>chst auff<EFBFBD>llen und im Menu 'Wartung' zur<EFBFBD>ck setzen, | ||||
|     { DTC_NO_EEPROM_FOUND           , DTC_CRITICAL }, // Es wurde kein EEPROM gefunden. Dies l<EFBFBD>sst einen Hardware-Defekt vermuten., | ||||
|     { DTC_EEPROM_CFG_BAD            , DTC_CRITICAL }, // Die Checksumme der Config-Partition des EEPROM ist ung<EFBFBD>ltig. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zur<EFBFBD>ck, | ||||
|     { DTC_EEPROM_PDS_BAD            , DTC_CRITICAL }, // Die Checksumme der Betriebsdaten-Partition des EEPROM ist ung<EFBFBD>ltig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zur<EFBFBD>ck, | ||||
|     { DTC_EEPROM_PDSADRESS_BAD      , DTC_CRITICAL }, // Die Adresse der Betriebsdaten-Partition im EEPROM ist ung<EFBFBD>ltig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zur<EFBFBD>ck, | ||||
|     { DTC_EEPROM_VERSION_BAD        , DTC_CRITICAL }, // Die Layout-Version des EEPROM stimmt nicht mit der Firmware-Version <EFBFBD>berein. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zur<EFBFBD>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 <EFBFBD>berein. Aktualisieren sie den Flash mit der passenden Update-Datei, | ||||
|     { DTC_NO_GPS_SERIAL             , DTC_CRITICAL }, // Es wurde kein GPS-Signal <EFBFBD>ber die serielle Schnittstelle empfangen, Pr<EFBFBD>fen sie die Verbindung und das GPS-Modul, | ||||
|     { DTC_CAN_TRANSCEIVER_FAILED    , DTC_CRITICAL }, // Es konnte keine Verbindung zum CAN-Transceiver hergestellt werden. Pr<EFBFBD>fen Sie die Hardware auf Defekte, | ||||
|     { DTC_NO_CAN_SIGNAL             , DTC_WARN     }, // Es konnte kein CAN-Signal empfangen werden. Pr<EFBFBD>fen sie die Verbindung und die Einstellungen, | ||||
|     { DTC_EEPROM_CFG_SANITY         , DTC_WARN     }, // Ein oder mehrer Einstellungswerte sind ausserhalb plausibler Werte. Pr<EFBFBD>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 | ||||
							
								
								
									
										40
									
								
								Software/include/dtc_defs.h.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Software/include/dtc_defs.h.j2
									
									
									
									
									
										Normal 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 | ||||
		Reference in New Issue
	
	Block a user