added checksum to auto-generated files
This commit is contained in:
parent
925167ec3c
commit
58c6bc820a
@ -2,6 +2,9 @@ import os
|
|||||||
import time
|
import time
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
import json
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import filechecksum as fcs
|
||||||
|
|
||||||
def build_dtcs():
|
def build_dtcs():
|
||||||
# Pfad zur Eingabedatei und Ausgabedatei
|
# Pfad zur Eingabedatei und Ausgabedatei
|
||||||
@ -81,47 +84,62 @@ def build_dtcs():
|
|||||||
# Sortieren der Zeilen nach der Nummer aufsteigend
|
# Sortieren der Zeilen nach der Nummer aufsteigend
|
||||||
dtc_lines.sort(key=lambda x: x[0])
|
dtc_lines.sort(key=lambda x: x[0])
|
||||||
|
|
||||||
# DTC_NAME_CONSTANT-Makros initialisieren
|
checksum = fcs.calculate_checksum(dtc_lines)
|
||||||
dtc_macros = []
|
|
||||||
dtc_structs = []
|
|
||||||
dtc_table_data = []
|
|
||||||
|
|
||||||
# Verarbeiten der sortierten Zeilen
|
|
||||||
for i, line in enumerate(dtc_lines):
|
|
||||||
num, dtc_name, dtc_severity, title, description = line
|
|
||||||
dtc_macros.append(f"#define {dtc_name:<30} {num}")
|
|
||||||
comma = "," if i < len(dtc_lines) - 1 else " "
|
|
||||||
dtc_structs.append(f" {{ {dtc_name:<30}, {dtc_severity:<12} }}{comma} // {description}")
|
|
||||||
dtc_table_data.append({"num": num, "title": title, "description": description})
|
|
||||||
|
|
||||||
# Unix-Zeitstempel hinzufügen
|
|
||||||
timestamp = int(time.time())
|
timestamp = int(time.time())
|
||||||
|
|
||||||
env = Environment(loader=FileSystemLoader('codegen/templates', encoding='utf-8'))
|
if fcs.read_and_compare_checksum(output_file, checksum):
|
||||||
# Lade das Jinja2-Template aus der Datei
|
print("Keine Änderungen im DTC-Headerfile erforderlich.")
|
||||||
template = env.get_template('dtc_defs.h.j2')
|
else:
|
||||||
|
# DTC_NAME_CONSTANT-Makros initialisieren
|
||||||
|
dtc_macros = []
|
||||||
|
dtc_structs = []
|
||||||
|
|
||||||
# Erstelle ein Context-Dictionary mit den erforderlichen Daten
|
# Verarbeiten der sortierten Zeilen
|
||||||
context = {
|
for i, line in enumerate(dtc_lines):
|
||||||
'timestamp_unix': timestamp,
|
num, dtc_name, dtc_severity, title, description = line
|
||||||
'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)),
|
dtc_macros.append(f"#define {dtc_name:<30} {num}")
|
||||||
'date' : time.strftime('%d.%m.%Y', time.localtime(timestamp)),
|
comma = "," if i < len(dtc_lines) - 1 else " "
|
||||||
'dtc_macros': dtc_macros, # Übergebe die dtc_macros-Liste direkt
|
dtc_structs.append(f" {{ {dtc_name:<30}, {dtc_severity:<12} }}{comma} // {description}")
|
||||||
'dtc_structs': dtc_structs, # Übergebe die dtc_structs-Liste direkt
|
|
||||||
}
|
env = Environment(loader=FileSystemLoader('codegen/templates', encoding='utf-8'))
|
||||||
|
# Lade das Jinja2-Template aus der Datei
|
||||||
|
template = env.get_template('dtc_defs.h.j2')
|
||||||
|
|
||||||
|
# Erstelle ein Context-Dictionary mit den erforderlichen Daten
|
||||||
|
context = {
|
||||||
|
'timestamp_unix': timestamp,
|
||||||
|
'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)),
|
||||||
|
'date' : time.strftime('%d.%m.%Y', time.localtime(timestamp)),
|
||||||
|
'dtc_macros': dtc_macros, # Übergebe die dtc_macros-Liste direkt
|
||||||
|
'dtc_structs': dtc_structs, # Übergebe die dtc_structs-Liste direkt
|
||||||
|
'checksum' : checksum
|
||||||
|
}
|
||||||
|
|
||||||
# Rendere das Template mit den Werten und erhalte den Header-Text
|
# Rendere das Template mit den Werten und erhalte den Header-Text
|
||||||
header_text = template.render(context)
|
header_text = template.render(context)
|
||||||
|
|
||||||
# Schreibe den generierten Header-Text in die Header-Datei
|
# Schreibe den generierten Header-Text in die Header-Datei
|
||||||
with open(output_file, "w", encoding='utf-8') as f:
|
with open(output_file, "w", encoding='utf-8') as f:
|
||||||
f.write(header_text)
|
f.write(header_text)
|
||||||
|
|
||||||
print(f"Header-Datei wurde erstellt: {output_file}")
|
print(f"Header-Datei wurde erstellt: {output_file}")
|
||||||
|
|
||||||
# JSON-Datei mit UTF-8-Zeichencodierung erstellen
|
if fcs.read_and_compare_json_checksum(json_output_file, checksum):
|
||||||
with open(json_output_file, 'w', encoding='utf-8') as json_f:
|
print("Keine Änderungen im DTC-JSON-file erforderlich.")
|
||||||
json.dump(dtc_table_data, json_f, ensure_ascii=False, indent=4, separators=(',', ': '))
|
else:
|
||||||
|
dtc_info = {
|
||||||
|
"codegenerator_checksum": checksum,
|
||||||
|
'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)),
|
||||||
|
"dtc_table_data": []
|
||||||
|
}
|
||||||
|
|
||||||
print(f"JSON-Datei wurde erstellt: {json_output_file}")
|
# Verarbeiten der sortierten Zeilen
|
||||||
|
for i, line in enumerate(dtc_lines):
|
||||||
|
num, dtc_name, dtc_severity, title, description = line
|
||||||
|
dtc_info["dtc_table_data"].append({"num": num, "title": title, "description": description})
|
||||||
|
|
||||||
|
# JSON-Datei mit UTF-8-Zeichencodierung erstellen
|
||||||
|
with open(json_output_file, 'w', encoding='utf-8') as json_f:
|
||||||
|
json.dump(dtc_info, json_f, ensure_ascii=False, indent=4, separators=(',', ': '))
|
||||||
|
|
||||||
|
print(f"JSON-Datei wurde erstellt: {json_output_file}")
|
||||||
|
45
Software/codegen/filechecksum.py
Normal file
45
Software/codegen/filechecksum.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
import hashlib
|
||||||
|
import json
|
||||||
|
|
||||||
|
# Funktion zum Berechnen der SHA-256-Checksumme
|
||||||
|
def calculate_checksum(data):
|
||||||
|
sha256 = hashlib.sha256()
|
||||||
|
sha256.update(str(data).encode('utf-8'))
|
||||||
|
return sha256.hexdigest()
|
||||||
|
|
||||||
|
# Funktion zum Lesen und Vergleichen der Checksumme in einer Datei
|
||||||
|
def read_and_compare_checksum(file_path, expected_checksum):
|
||||||
|
try:
|
||||||
|
with open(file_path, 'r') as file:
|
||||||
|
content = file.read()
|
||||||
|
# Suche nach der Zeile mit der Checksumme
|
||||||
|
checksum_line_start = content.find("// CODEGENERATOR_CHECKSUM:")
|
||||||
|
if checksum_line_start != -1:
|
||||||
|
# Extrahiere die Checksumme aus der Zeile
|
||||||
|
existing_checksum = content[checksum_line_start + len("// CODEGENERATOR_CHECKSUM:"):].strip()
|
||||||
|
# Vergleiche die Checksummen
|
||||||
|
if existing_checksum == expected_checksum:
|
||||||
|
return True
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass # Datei existiert nicht, was nicht schlimm ist
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def read_and_compare_json_checksum(json_file_path, expected_checksum):
|
||||||
|
try:
|
||||||
|
with open(json_file_path, 'r') as json_file:
|
||||||
|
# Lade das JSON aus der Datei
|
||||||
|
data = json.load(json_file)
|
||||||
|
|
||||||
|
# Überprüfe, ob "codegenerator_checksum" im JSON vorhanden ist
|
||||||
|
if "codegenerator_checksum" in data:
|
||||||
|
existing_checksum = data["codegenerator_checksum"]
|
||||||
|
|
||||||
|
# Vergleiche die Checksummen
|
||||||
|
if existing_checksum == expected_checksum:
|
||||||
|
return True
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass # Datei existiert nicht, was nicht schlimm ist
|
||||||
|
|
||||||
|
return False
|
@ -3,6 +3,8 @@ import time
|
|||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
import filechecksum as fcs
|
||||||
|
|
||||||
# Pfad zur Eingabedatei und Ausgabedatei
|
# Pfad zur Eingabedatei und Ausgabedatei
|
||||||
input_file = "include/config.h"
|
input_file = "include/config.h"
|
||||||
output_sourcefile = "src/struct2json.cpp"
|
output_sourcefile = "src/struct2json.cpp"
|
||||||
@ -67,6 +69,7 @@ def struct2json():
|
|||||||
|
|
||||||
variable_types = get_types(content, variable_names)
|
variable_types = get_types(content, variable_names)
|
||||||
structs = extract_struct_fields(content, variable_types)
|
structs = extract_struct_fields(content, variable_types)
|
||||||
|
checksum = fcs.calculate_checksum(structs)
|
||||||
|
|
||||||
env = Environment(loader=FileSystemLoader('codegen/templates', encoding='utf-8'))
|
env = Environment(loader=FileSystemLoader('codegen/templates', encoding='utf-8'))
|
||||||
# Lade das Jinja2-Template aus der Datei
|
# Lade das Jinja2-Template aus der Datei
|
||||||
@ -78,16 +81,28 @@ def struct2json():
|
|||||||
'timestamp_unix': timestamp,
|
'timestamp_unix': timestamp,
|
||||||
'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)),
|
'timestamp' : time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)),
|
||||||
'date' : time.strftime('%d.%m.%Y', time.localtime(timestamp)),
|
'date' : time.strftime('%d.%m.%Y', time.localtime(timestamp)),
|
||||||
'structs': structs, # Übergebe die foo-Liste direkt
|
'structs': structs,
|
||||||
|
'checksum': checksum
|
||||||
}
|
}
|
||||||
|
|
||||||
# Rendere das Template mit den Werten und erhalte den Source-Text
|
# Überprüfe, ob die Checksummen übereinstimmen
|
||||||
source_text = template_c.render(context)
|
if fcs.read_and_compare_checksum(output_sourcefile, checksum):
|
||||||
header_text = template_h.render(context)
|
print("Keine Änderungen in der Source-Datei erforderlich.")
|
||||||
|
else:
|
||||||
|
# Rendere das Template mit den Werten und erhalte den Source-Text
|
||||||
|
source_text = template_c.render(context)
|
||||||
|
# Schreibe den generierten Source-Text in die Source-Datei
|
||||||
|
with open(output_sourcefile, "w", encoding='utf-8') as f:
|
||||||
|
f.write(source_text)
|
||||||
|
print(f"Source-Datei wurde erstellt: {output_sourcefile}")
|
||||||
|
|
||||||
# Schreibe den generierten Source-Text in die Source-Dateien
|
# Überprüfe, ob die Checksummen übereinstimmen
|
||||||
with open(output_sourcefile, "w", encoding='utf-8') as f:
|
if fcs.read_and_compare_checksum(output_headerfile, checksum):
|
||||||
f.write(source_text)
|
print("Keine Änderungen in der Header-Datei erforderlich.")
|
||||||
with open(output_headerfile, "w", encoding='utf-8') as f:
|
else:
|
||||||
f.write(header_text)
|
# Rendere das Template mit den Werten und erhalte den Header-Text
|
||||||
print(f"Source-Dateien wurde erstellt: {output_sourcefile}, {output_headerfile}")
|
header_text = template_h.render(context)
|
||||||
|
# Schreibe den generierten Header-Text in die Header-Datei
|
||||||
|
with open(output_headerfile, "w", encoding='utf-8') as f:
|
||||||
|
f.write(header_text)
|
||||||
|
print(f"Header-Datei wurde erstellt: {output_headerfile}")
|
@ -49,6 +49,6 @@ const DTC_t dtc_definitions[] = {
|
|||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint32_t dtc_generation_timestamp = {{ timestamp_unix }};
|
|
||||||
|
|
||||||
#endif // DTC_DEFS_H
|
#endif // DTC_DEFS_H
|
||||||
|
|
||||||
|
// CODEGENERATOR_CHECKSUM: {{ checksum }}
|
@ -21,3 +21,5 @@ void generateJsonObject_{{ var_name }}(JsonObject& data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
// CODEGENERATOR_CHECKSUM: {{ checksum }}
|
@ -21,4 +21,6 @@
|
|||||||
void generateJsonObject_{{ var_name }}(JsonObject& data);
|
void generateJsonObject_{{ var_name }}(JsonObject& data);
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
#endif /* _STRUCT2JSON_H_ */
|
#endif /* _STRUCT2JSON_H_ */
|
||||||
|
|
||||||
|
// CODEGENERATOR_CHECKSUM: {{ checksum }}
|
@ -1,92 +1,96 @@
|
|||||||
[
|
{
|
||||||
{
|
"codegenerator_checksum": "23dff82a4745f67041012080b05ec367c2dd44c6bb02974143b227ba49682b6f",
|
||||||
"num": 0,
|
"timestamp": "2024-01-10 19:06:30",
|
||||||
"title": "No Error",
|
"dtc_table_data": [
|
||||||
"description": "No Error"
|
{
|
||||||
},
|
"num": 0,
|
||||||
{
|
"title": "No Error",
|
||||||
"num": 1,
|
"description": "No Error"
|
||||||
"title": "Ölvorrat leer",
|
},
|
||||||
"description": "Ölvorrat ist komplett leer. Den Ölvorrat auffüllen und im Menu 'Wartung' zurück setzen"
|
{
|
||||||
},
|
"num": 1,
|
||||||
{
|
"title": "Ölvorrat leer",
|
||||||
"num": 2,
|
"description": "Ölvorrat ist komplett leer. Den Ölvorrat auffüllen und im Menu 'Wartung' zurück setzen"
|
||||||
"title": "Ölvorrat niedrig",
|
},
|
||||||
"description": "Ölvorrat ist unter der Warnschwelle. Den Ölvorrat demnächst auffüllen und im Menu 'Wartung' zurück setzen"
|
{
|
||||||
},
|
"num": 2,
|
||||||
{
|
"title": "Ölvorrat niedrig",
|
||||||
"num": 3,
|
"description": "Ölvorrat ist unter der Warnschwelle. Den Ölvorrat demnächst auffüllen und im Menu 'Wartung' zurück setzen"
|
||||||
"title": "kein EEPROM erkannt",
|
},
|
||||||
"description": "Es wurde kein EEPROM gefunden. Dies lässt einen Hardware-Defekt vermuten."
|
{
|
||||||
},
|
"num": 3,
|
||||||
{
|
"title": "kein EEPROM erkannt",
|
||||||
"num": 4,
|
"description": "Es wurde kein EEPROM gefunden. Dies lässt einen Hardware-Defekt vermuten."
|
||||||
"title": "EEPROM CFG Checksumme",
|
},
|
||||||
"description": "Die Checksumme der Config-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück"
|
{
|
||||||
},
|
"num": 4,
|
||||||
{
|
"title": "EEPROM CFG Checksumme",
|
||||||
"num": 5,
|
"description": "Die Checksumme der Config-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück"
|
||||||
"title": "EEPROM PDS Checksumme",
|
},
|
||||||
"description": "Die Checksumme der Betriebsdaten-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück"
|
{
|
||||||
},
|
"num": 5,
|
||||||
{
|
"title": "EEPROM PDS Checksumme",
|
||||||
"num": 6,
|
"description": "Die Checksumme der Betriebsdaten-Partition des EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück"
|
||||||
"title": "EEPROM PDS Adresse",
|
},
|
||||||
"description": "Die Adresse der Betriebsdaten-Partition im EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück"
|
{
|
||||||
},
|
"num": 6,
|
||||||
{
|
"title": "EEPROM PDS Adresse",
|
||||||
"num": 7,
|
"description": "Die Adresse der Betriebsdaten-Partition im EEPROM ist ungültig. Setzen sie den EEPROM-Bereich 'PDS' im Menu 'Wartung' zurück"
|
||||||
"title": "EEPROM Version falsch",
|
},
|
||||||
"description": "Die Layout-Version des EEPROM stimmt nicht mit der Firmware-Version überein. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück"
|
{
|
||||||
},
|
"num": 7,
|
||||||
{
|
"title": "EEPROM Version falsch",
|
||||||
"num": 8,
|
"description": "Die Layout-Version des EEPROM stimmt nicht mit der Firmware-Version überein. Setzen sie den EEPROM-Bereich 'CFG' im Menu 'Wartung' zurück"
|
||||||
"title": "Flashspeicher Fehler",
|
},
|
||||||
"description": "Der Flashspeicher konnte nicht initialisiert werden. Aktualisieren sie Flash & Firmware"
|
{
|
||||||
},
|
"num": 8,
|
||||||
{
|
"title": "Flashspeicher Fehler",
|
||||||
"num": 9,
|
"description": "Der Flashspeicher konnte nicht initialisiert werden. Aktualisieren sie Flash & Firmware"
|
||||||
"title": "Flashversion falsch",
|
},
|
||||||
"description": "Die Version des Flashspeicher stimmt nicht mit der Firmware-Version überein. Aktualisieren sie den Flash mit der passenden Update-Datei"
|
{
|
||||||
},
|
"num": 9,
|
||||||
{
|
"title": "Flashversion falsch",
|
||||||
"num": 10,
|
"description": "Die Version des Flashspeicher stimmt nicht mit der Firmware-Version überein. Aktualisieren sie den Flash mit der passenden Update-Datei"
|
||||||
"title": "Keine GPS-Verbindung",
|
},
|
||||||
"description": "Es wurde kein GPS-Signal über die serielle Schnittstelle empfangen, Prüfen sie die Verbindung und das GPS-Modul"
|
{
|
||||||
},
|
"num": 10,
|
||||||
{
|
"title": "Keine GPS-Verbindung",
|
||||||
"num": 11,
|
"description": "Es wurde kein GPS-Signal über die serielle Schnittstelle empfangen, Prüfen sie die Verbindung und das GPS-Modul"
|
||||||
"title": "CAN-Transceiver Error",
|
},
|
||||||
"description": "Es konnte keine Verbindung zum CAN-Transceiver hergestellt werden. Prüfen Sie die Hardware auf Defekte"
|
{
|
||||||
},
|
"num": 11,
|
||||||
{
|
"title": "CAN-Transceiver Error",
|
||||||
"num": 12,
|
"description": "Es konnte keine Verbindung zum CAN-Transceiver hergestellt werden. Prüfen Sie die Hardware auf Defekte"
|
||||||
"title": "Keine CAN-Verbindung",
|
},
|
||||||
"description": "Es konnte kein CAN-Signal empfangen werden. Prüfen sie die Verbindung und die Einstellungen"
|
{
|
||||||
},
|
"num": 12,
|
||||||
{
|
"title": "Keine CAN-Verbindung",
|
||||||
"num": 13,
|
"description": "Es konnte kein CAN-Signal empfangen werden. Prüfen sie die Verbindung und die Einstellungen"
|
||||||
"title": "Config-Validierung",
|
},
|
||||||
"description": "Ein oder mehrer Einstellungswerte sind ausserhalb plausibler Werte. Prüfen Sie Ihre Einstellungen"
|
{
|
||||||
},
|
"num": 13,
|
||||||
{
|
"title": "Config-Validierung",
|
||||||
"num": 14,
|
"description": "Ein oder mehrer Einstellungswerte sind ausserhalb plausibler Werte. Prüfen Sie Ihre Einstellungen"
|
||||||
"title": "Dummy-DTC Info",
|
},
|
||||||
"description": "Ein Dummy-DTC der Schwere \"Info\" für Debugging-Zwecke"
|
{
|
||||||
},
|
"num": 14,
|
||||||
{
|
"title": "Dummy-DTC Info",
|
||||||
"num": 15,
|
"description": "Ein Dummy-DTC der Schwere \"Info\" für Debugging-Zwecke"
|
||||||
"title": "Dummy-DTC Warnung",
|
},
|
||||||
"description": "Ein Dummy-DTC der Schwere \"Warnung\" für Debugging-Zwecke"
|
{
|
||||||
},
|
"num": 15,
|
||||||
{
|
"title": "Dummy-DTC Warnung",
|
||||||
"num": 16,
|
"description": "Ein Dummy-DTC der Schwere \"Warnung\" für Debugging-Zwecke"
|
||||||
"title": "Dummy-DTC Kritisch",
|
},
|
||||||
"description": "Ein Dummy-DTC der Schwere \"Kritisch\" für Debugging-Zwecke"
|
{
|
||||||
},
|
"num": 16,
|
||||||
{
|
"title": "Dummy-DTC Kritisch",
|
||||||
"num": 17,
|
"description": "Ein Dummy-DTC der Schwere \"Kritisch\" für Debugging-Zwecke"
|
||||||
"title": "Last Error",
|
},
|
||||||
"description": "Last Error"
|
{
|
||||||
}
|
"num": 17,
|
||||||
]
|
"title": "Last Error",
|
||||||
|
"description": "Last Error"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -7,10 +7,10 @@
|
|||||||
* It includes enums for DTC active status, severity levels, and specific DTC codes.
|
* It includes enums for DTC active status, severity levels, and specific DTC codes.
|
||||||
* The file also defines an array of DTC definitions and a timestamp indicating the generation time.
|
* The file also defines an array of DTC definitions and a timestamp indicating the generation time.
|
||||||
*
|
*
|
||||||
* @note This file is auto-generated by a script on 2024-01-09 12:08:43.
|
* @note This file is auto-generated by a script on 2024-01-10 18:37:05.
|
||||||
*
|
*
|
||||||
* @author Marcel Peterkau
|
* @author Marcel Peterkau
|
||||||
* @date 09.01.2024
|
* @date 10.01.2024
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DTC_DEFS_H
|
#ifndef DTC_DEFS_H
|
||||||
@ -80,6 +80,6 @@ const DTC_t dtc_definitions[] = {
|
|||||||
{ DTC_LAST_DTC , DTC_NONE } // Last Error
|
{ DTC_LAST_DTC , DTC_NONE } // Last Error
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint32_t dtc_generation_timestamp = 1704798523;
|
#endif // DTC_DEFS_H
|
||||||
|
|
||||||
#endif // DTC_DEFS_H
|
// CODEGENERATOR_CHECKSUM: 23dff82a4745f67041012080b05ec367c2dd44c6bb02974143b227ba49682b6f
|
@ -3,10 +3,10 @@
|
|||||||
*
|
*
|
||||||
* @brief Header file for converting structs to JSON objects.
|
* @brief Header file for converting structs to JSON objects.
|
||||||
*
|
*
|
||||||
* @note This file is auto-generated by a script on 2024-01-09 20:41:57.
|
* @note This file is auto-generated by a script on 2024-01-10 18:01:52.
|
||||||
*
|
*
|
||||||
* @author Marcel Peterkau
|
* @author Marcel Peterkau
|
||||||
* @date 09.01.2024
|
* @date 10.01.2024
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _STRUCT2JSON_H_
|
#ifndef _STRUCT2JSON_H_
|
||||||
@ -21,4 +21,6 @@ void generateJsonObject_LubeConfig(JsonObject& data);
|
|||||||
void generateJsonObject_PersistenceData(JsonObject& data);
|
void generateJsonObject_PersistenceData(JsonObject& data);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _STRUCT2JSON_H_ */
|
#endif /* _STRUCT2JSON_H_ */
|
||||||
|
|
||||||
|
// CODEGENERATOR_CHECKSUM: 9e8dd21170fd6ef8fbf8c4b156d9af751836a76081f811bf0e3ab2b1eb8ee48c
|
@ -3,10 +3,10 @@
|
|||||||
*
|
*
|
||||||
* @brief Implementation file for converting structs to JSON objects.
|
* @brief Implementation file for converting structs to JSON objects.
|
||||||
*
|
*
|
||||||
* @note This file is auto-generated by a script on 2024-01-09 20:41:57.
|
* @note This file is auto-generated by a script on 2024-01-10 18:01:52.
|
||||||
*
|
*
|
||||||
* @author Marcel Peterkau
|
* @author Marcel Peterkau
|
||||||
* @date 09.01.2024
|
* @date 10.01.2024
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -45,3 +45,6 @@ void generateJsonObject_PersistenceData(JsonObject& data)
|
|||||||
data["checksum"] = PersistenceData.checksum;
|
data["checksum"] = PersistenceData.checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// CODEGENERATOR_CHECKSUM: 9e8dd21170fd6ef8fbf8c4b156d9af751836a76081f811bf0e3ab2b1eb8ee48c
|
Loading…
x
Reference in New Issue
Block a user