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 \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)