mirror of
https://github.com/3minbe/DBC_Converter.git
synced 2026-05-17 01:23:58 +09:00
77 lines
2.9 KiB
Python
77 lines
2.9 KiB
Python
import os
|
|
import sys
|
|
from DBC_Converter_Data_Parsing import load_dbc_file
|
|
|
|
def generate_structs(signals, output_file):
|
|
if not signals:
|
|
print("[WARNING] No signals to generate structs for.")
|
|
return
|
|
|
|
# Ensure the output directory exists
|
|
output_dir = os.path.dirname(output_file)
|
|
if not os.path.exists(output_dir):
|
|
os.makedirs(output_dir)
|
|
|
|
with open(output_file, 'w') as f:
|
|
f.write("#ifndef GENERATED_STRUCTS_H\n")
|
|
f.write("#define GENERATED_STRUCTS_H\n\n")
|
|
f.write("#include <stdint.h>\n\n")
|
|
|
|
tx_structs = {}
|
|
rx_structs = {}
|
|
|
|
for message_name, message_info in signals.items():
|
|
hex_id = message_info["ID"]
|
|
|
|
if message_info["TX ECU name"] == "VCU":
|
|
struct_name = f"{message_name}_{hex_id}"
|
|
tx_structs[struct_name] = []
|
|
for signal in message_info["Signals"]:
|
|
if signal["Length"] <= 32:
|
|
tx_structs[struct_name].append(f" uint32_t {signal['Signal name']} : {signal['Length']};")
|
|
else:
|
|
tx_structs[struct_name].append(f" float {signal['Signal name']};")
|
|
|
|
for signal in message_info["Signals"]:
|
|
if signal["RX ECU name"] == "VCU":
|
|
struct_name = f"{message_name}_{hex_id}"
|
|
if struct_name not in rx_structs:
|
|
rx_structs[struct_name] = []
|
|
if signal["Length"] <= 32:
|
|
rx_structs[struct_name].append(f" uint32_t {signal['Signal name']} : {signal['Length']};")
|
|
else:
|
|
rx_structs[struct_name].append(f" float {signal['Signal name']};")
|
|
|
|
f.write("typedef struct {\n")
|
|
f.write(" typedef struct {\n")
|
|
for struct_name, fields in tx_structs.items():
|
|
f.write(f" typedef struct {{\n")
|
|
for field in fields:
|
|
f.write(f" {field}\n")
|
|
f.write(f" }} {struct_name};\n\n")
|
|
f.write(" } TX;\n\n")
|
|
|
|
f.write(" typedef struct {\n")
|
|
for struct_name, fields in rx_structs.items():
|
|
f.write(f" typedef struct {{\n")
|
|
for field in fields:
|
|
f.write(f" {field}\n")
|
|
f.write(f" }} {struct_name};\n\n")
|
|
f.write(" } RX;\n")
|
|
f.write("} VCU;\n\n")
|
|
|
|
f.write("#endif // GENERATED_STRUCTS_H\n")
|
|
print(f"[INFO] Structs written to {output_file}")
|
|
|
|
if __name__ == "__main__":
|
|
dbc_file_path = sys.argv[1]
|
|
output_dir = sys.argv[2]
|
|
|
|
output_structs_file = f"{output_dir}/generated_structs.h"
|
|
|
|
signals = load_dbc_file(dbc_file_path)
|
|
if signals is None:
|
|
print(f"[ERROR] Failed to load DBC file: {dbc_file_path}")
|
|
sys.exit(1)
|
|
|
|
generate_structs(signals, output_structs_file) |