From 7fe871310626d0d512a6b2c205af5346789a0d24 Mon Sep 17 00:00:00 2001 From: 3minbe Date: Thu, 20 Feb 2025 11:12:10 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B1=84=EB=84=90=20=EB=A7=A4=EA=B0=9C?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EC=97=AC=20RX=20=EB=B0=8F=20TX=20=ED=95=A8=EC=88=98=EC=97=90?= =?UTF-8?q?=EC=84=9C=20CAN=20=EC=B1=84=EB=84=90=EC=9D=84=20=EB=8F=99?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=B2=98=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DBC_Converter_RX.py | 51 +++++++++++----- DBC_Converter_TX.py | 56 ++++++++++++------ __pycache__/Console_output.cpython-313.pyc | Bin 0 -> 1124 bytes ...DBC_Converter_Data_Parsing.cpython-313.pyc | Bin 3324 -> 3377 bytes 4 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 __pycache__/Console_output.cpython-313.pyc diff --git a/DBC_Converter_RX.py b/DBC_Converter_RX.py index 09f4bea..81d423e 100644 --- a/DBC_Converter_RX.py +++ b/DBC_Converter_RX.py @@ -1,4 +1,5 @@ import sys +import json from DBC_Converter_Data_Parsing import load_dbc_file #============================== Generate Globals ==============================# @@ -31,7 +32,7 @@ def generate_globals(signals, C_file, header_file): print(f"[INFO] Globals and extern declarations written to {C_file} and {header_file}") #============================== Generate VCU RX Function ==============================# -def generate_vcu_rx_function_with_factors(signals, output_file): +def generate_vcu_rx_function_with_factors(signals, channel, output_file): if not signals: print("[ERROR] No signals to generate VCU RX functions for.") return @@ -101,28 +102,28 @@ void Receive_{message_name}_{message_info['ID']}(void) lsb = signal["msb"] + 8*(signal_length // 8) - (signal_length % 8 - 1) if signal_length > 8: # Handle multi-byte signals - shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] << shift{7 - start_bit})" + shift_expr = f"(CAN_ch[{channel}].rx.buf[{start_byte}] << shift{7 - start_bit})" multi_byte_expr = [] for i in range((signal_length + 7) // 8): byte_shift = (7 - start_bit) + (i * 8) if i == 0: - multi_byte_expr.append(f"(CAN_ch[0].rx.buf[{start_byte + i}] << shift{7 - start_bit})") + multi_byte_expr.append(f"(CAN_ch[{channel}].rx.buf[{start_byte + i}] << shift{7 - start_bit})") else: - multi_byte_expr.append(f"(CAN_ch[0].rx.buf[{start_byte + i}] >> shift{byte_shift})") + multi_byte_expr.append(f"(CAN_ch[{channel}].rx.buf[{start_byte + i}] >> shift{byte_shift})") shift_expr = " | ".join(multi_byte_expr) else : - shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] >> shift{lsb % 8})" + shift_expr = f"(CAN_ch[{channel}].rx.buf[{start_byte}] >> shift{lsb % 8})" else: # Intel (Little Endian) - shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] >> shift{start_bit})" + shift_expr = f"(CAN_ch[{channel}].rx.buf[{start_byte}] >> shift{start_bit})" if signal_length > 8: # Handle multi-byte signals multi_byte_expr = [] for i in range((signal_length + 7) // 8): byte_shift = i * 8 if i == 0: - multi_byte_expr.append(f"(CAN_ch[0].rx.buf[{start_byte + i}] >> shift{start_bit})") + multi_byte_expr.append(f"(CAN_ch[{channel}].rx.buf[{start_byte + i}] >> shift{start_bit})") else: - multi_byte_expr.append(f"(CAN_ch[0].rx.buf[{start_byte + i}] << shift{byte_shift})") + multi_byte_expr.append(f"(CAN_ch[{channel}].rx.buf[{start_byte + i}] << shift{byte_shift})") shift_expr = " | ".join(multi_byte_expr) c_file_content += f" {temp_struct_name}.{signal['Signal name']}_temp = ({shift_expr}) & _{signal_length}bit;\n" @@ -147,7 +148,7 @@ void Receive_{message_name}_{message_info['ID']}(void) print(f"Generated RX function C file with Factors and Offsets: {output_file}") #============================== Generate Input Function ==============================# -def generate_input_functions(signals, output_file): +def generate_input_functions(signals, channel, output_file): if not signals: print("[WARNING] No signals to generate Input functions for.") return @@ -155,15 +156,15 @@ def generate_input_functions(signals, output_file): with open(output_file, 'w') as f: for message_name, message_info in signals.items(): hex_id = message_info["ID"] - function_name = f"void Input_Data_Set_{message_name}_CH0_{hex_id}(void)" + function_name = f"void Input_Data_Set_{message_name}_CH{channel}_{hex_id}(void)" f.write(f"{function_name}\n{{\n") for signal in message_info["Signals"]: - f.write(f" GV_{signal['Signal name']} = VCU.RX.CH0_RX_{message_name}_{hex_id}.{signal['Signal name']};\n") + f.write(f" GV_{signal['Signal name']} = VCU.RX.CH{channel}_RX_{message_name}_{hex_id}.{signal['Signal name']};\n") f.write("}\n\n") print(f"[INFO] Input functions written to {output_file}") #============================== Generate Initialization ==============================# -def generate_initialization(signals, output_file): +def generate_initialization(signals, channel, output_file): if not signals: print("[WARNING] No signals to generate initialization for.") return @@ -172,7 +173,7 @@ def generate_initialization(signals, output_file): f.write("void VCU_Data_Init(void)\n{\n") for message_name, message_info in signals.items(): hex_id = message_info["ID"] - struct_prefix = f"VCU.RX.CH0_RX_{message_name}_{hex_id}" + struct_prefix = f"VCU.RX.CH{channel}_RX_{message_name}_{hex_id}" for signal in message_info["Signals"]: if signal["Offset"] != 0.0: if signal["Length"] <= 32: @@ -192,6 +193,24 @@ def generate_initialization(signals, output_file): if __name__ == "__main__": dbc_file_path = sys.argv[1] output_dir = sys.argv[2] + channel = sys.argv[3] + + channel = json.loads(channel) + + if list(channel.values())[-1] == "CH0": + channel = 0 + elif list(channel.values())[-1] == "CH1": + channel = 1 + elif list(channel.values())[-1] == "CH2": + channel = 2 + elif list(channel.values())[-1] == "CH3": + channel = 3 + elif list(channel.values())[-1] == "CH4": + channel = 4 + elif list(channel.values())[-1] == "CH5": + channel = 5 + else: + print("[ERROR] Invalid channel specified. Must be one of CH0, CH1, CH2, CH3, CH4, or CH5.") output_globals_C_file = f"{output_dir}/generated_RX_globals.c" output_globals_header_file = f"{output_dir}/generated_RX_globals.h" @@ -202,6 +221,6 @@ if __name__ == "__main__": signals = load_dbc_file(dbc_file_path) generate_globals(signals, output_globals_C_file, output_globals_header_file) - generate_vcu_rx_function_with_factors(signals, output_c_file) - generate_input_functions(signals, output_input_file) - generate_initialization(signals, output_initialization_file) \ No newline at end of file + generate_vcu_rx_function_with_factors(signals, channel, output_c_file) + generate_input_functions(signals, channel, output_input_file) + generate_initialization(signals, channel, output_initialization_file) \ No newline at end of file diff --git a/DBC_Converter_TX.py b/DBC_Converter_TX.py index 5850e0b..88ce949 100644 --- a/DBC_Converter_TX.py +++ b/DBC_Converter_TX.py @@ -1,8 +1,8 @@ import sys +import json from DBC_Converter_Data_Parsing import load_dbc_file - #============================== Generate TX Globals ==============================# def generate_tx_globals(signals, output_file, header_file): if not signals: @@ -32,7 +32,7 @@ def generate_tx_globals(signals, output_file, header_file): #============================== Generate TX Functions ==============================# -def generate_tx_functions(signals, output_file): +def generate_tx_functions(signals, channel, output_file): if not signals: print("[WARNING] No signals to generate TX functions for.") return @@ -40,14 +40,14 @@ def generate_tx_functions(signals, output_file): with open(output_file, 'w') as f: for message_name, message_info in signals.items(): hex_id = message_info["ID"] - function_name = f"void Output_Data_Set_{message_name}_CH0_{hex_id}(void)" + function_name = f"void Output_Data_Set_{message_name}_CH{channel}_{hex_id}(void)" f.write(f"{function_name}\n{{\n") for signal in message_info["Signals"]: factor_str = f"/ {signal['Factor']}" if signal["Factor"] != 1.0 else "" offset_str = f"- {signal['Offset']}" if signal["Offset"] != 0.0 else "" mask = f"_{signal['Length']}bit" f.write( - f" VCU.TX.CH0_{message_name}_{hex_id}.{signal['Signal name']} = " + f" VCU.TX.CH{channel}_{message_name}_{hex_id}.{signal['Signal name']} = " f"(int)((GV_{signal['Signal name']} {offset_str}) {factor_str}) & {mask};\n" ) f.write("}\n\n") @@ -55,7 +55,7 @@ def generate_tx_functions(signals, output_file): #============================== Generate TX Initialization ==============================# -def generate_tx_initialization(signals, output_file): +def generate_tx_initialization(signals, channel, output_file): if not signals: print("[WARNING] No TX signals found for initialization generation.") return @@ -66,14 +66,14 @@ def generate_tx_initialization(signals, output_file): hex_id = message_info["ID"] f.write(f" // {message_name} ({hex_id})\n") for signal in message_info["Signals"]: - f.write(f" VCU.TX.CH0_{message_name}_{hex_id}.{signal['Signal name']} = 0;\n") + f.write(f" VCU.TX.CH{channel}_{message_name}_{hex_id}.{signal['Signal name']} = 0;\n") f.write("\n") f.write("}\n") print(f"[INFO] TX initialization function written to {output_file}") #============================== Generate TX Enum ==============================# -def generate_tx_enum(signals, output_file, cycle): +def generate_tx_enum(signals, channel, output_file, cycle): if not signals: print("[WARNING] No TX messages found for enum generation.") return @@ -81,15 +81,15 @@ def generate_tx_enum(signals, output_file, cycle): with open(output_file, 'w') as f: f.write("typedef enum {\n") for idx, message_name in enumerate(signals.keys()): - enum_name = f"VCU_CH0_TX_{message_name}_{cycle}" + enum_name = f"VCU_CH{channel}_TX_{message_name}_{cycle}" f.write(f" {enum_name} = {idx},\n") - f.write(" NUMBER_OF_VCU_CH0_TX_MESSAGE,\n") - f.write("} VCU_CH0_TX;\n") + f.write(f" NUMBER_OF_VCU_CH{channel}_TX_MESSAGE,\n") + f.write(f"} VCU_CH{channel}_TX;\n") print(f"[INFO] TX enum written to {output_file}") #============================== Generate TX C File ==============================# -def generate_vcu_can_transmit_single_c_file(signals, output_file): +def generate_vcu_can_transmit_single_c_file(signals, channel, output_file): if not signals: print("[ERROR] No signals to generate VCU CAN transmit functions for.") return @@ -108,7 +108,7 @@ def generate_vcu_can_transmit_single_c_file(signals, output_file): # Add the function definition for the message c_file_content += f""" -void Transmit_{message_name}_CH0_{message_info['ID']}(void) +void Transmit_{message_name}_CH{channel}_{message_info['ID']}(void) {{ """ @@ -118,7 +118,7 @@ void Transmit_{message_name}_CH0_{message_info['ID']}(void) start_byte = signal["msb"] // 8 start_bit = signal["msb"] % 8 signal_length = signal["Length"] - signal_name = f"VCU.TX.CH0_{message_name}_{message_info['ID']}.{signal['Signal name']}" + signal_name = f"VCU.TX.CH{channel}_{message_name}_{message_info['ID']}.{signal['Signal name']}" # Handle 8-bit chunks while signal_length > 0: @@ -152,11 +152,11 @@ void Transmit_{message_name}_CH0_{message_info['ID']}(void) # Write buffer assignments to the function for i, assignment in enumerate(buffer_assignments): if assignment: - c_file_content += f" CAN_ch[0].tx.buf[{i}] = ({assignment}) & _8bit;\n" + c_file_content += f" CAN_ch[{channel}].tx.buf[{i}] = ({assignment}) & _8bit;\n" # Add the send function call c_file_content += f""" - can_send_config(CAN_INST_0, g_messageObjectConf_VCU_0ch_TX[VCU_CH0_TX_{message_name}_10ms]); + can_send_config(CAN_INST_0, g_messageObjectConf_VCU_{channel}ch_TX[VCU_CH{channel}_TX_{message_name}_10ms]); }} """ @@ -170,6 +170,24 @@ void Transmit_{message_name}_CH0_{message_info['ID']}(void) if __name__ == "__main__": dbc_file_path = sys.argv[1] output_dir = sys.argv[2] + channel = sys.argv[3] + + channel = json.loads(channel) + + if list(channel.values())[-1] == "CH0": + channel = 0 + elif list(channel.values())[-1] == "CH1": + channel = 1 + elif list(channel.values())[-1] == "CH2": + channel = 2 + elif list(channel.values())[-1] == "CH3": + channel = 3 + elif list(channel.values())[-1] == "CH4": + channel = 4 + elif list(channel.values())[-1] == "CH5": + channel = 5 + else: + print("[ERROR] Invalid channel specified. Must be one of CH0, CH1, CH2, CH3, CH4, or CH5.") output_structs_file = f"{output_dir}/generated_TX_structs.h" output_globals_file = f"{output_dir}/generated_TX_globals.c" @@ -186,7 +204,7 @@ if __name__ == "__main__": sys.exit(1) generate_tx_globals(signals, output_globals_file, output_globals_header) - generate_tx_functions(signals, output_tx_functions_file) - generate_tx_initialization(signals, output_tx_initialization) - generate_tx_enum(signals, output_enum_file, cycle_time) - generate_vcu_can_transmit_single_c_file(signals, output_c_file) \ No newline at end of file + generate_tx_functions(signals, channel, output_tx_functions_file) + generate_tx_initialization(signals, channel, output_tx_initialization) + generate_tx_enum(signals, channel, output_enum_file, cycle_time) + generate_vcu_can_transmit_single_c_file(signals, channel, output_c_file) \ No newline at end of file diff --git a/__pycache__/Console_output.cpython-313.pyc b/__pycache__/Console_output.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc63fb4ba3a165dbab0a4451c5b5ee3178eac00a GIT binary patch literal 1124 zcmZ8gO>fgc5Z$%o#BH6n2>MCYroDgx_0|ijkf6PAAV@V494uC@yLBxbJM6CcxN$;7 zqUtGkuKff24-SaRS5DljM2IUh8>gzfQYN!Avor6#Ooq+oB!Tnz_{c_vuPtAVY1 z7TAVY7k1Qe?V`Dpr7}zS^IY|E^#@ypYBtefG#>4cWIUTh#5LM4 zT%(v!{DWfrAXY_#r@?;04A%dx z8?P6H+>c`A?>^aK0P!6ciVMF4%QB62v-h#E8H>|cF;>i1m~4*YI89E2`9#i_Hoi`u zFWf$^oj5~?RGA`6&Ga=mebOO&SaR*$E$_h!!HTO&m6<*3+7q~T=vJvy3v`Oe8Ew0! zXh23QQq+T9kEbA$upw47x?IX2;-ykz0)y6j5i4HYtg_TWt!fL3fa285>GtXNxifp( z{?h*Ctp9M$xS+2|T|haw5z_IZ6ezUtvEbIqcMEn~J5X23Jx|=pnHY09jZ) z89{-jmr}Rg30#>p=yF(@NyfU_L7t%RF!nYNk}@;H*kLTBO5&8K8Djz|iW_L=(BQwb zm}5+;K*b>oloIiNuDFEKTUdZfYuyAA*9Nte^I$%cfniuH1KY6f4{T~R|JJFsHhO~9 kZBRqMs&*>u?Gf5XVhyTvyBTmUOiJlLqe<5W1dQ(UAMPXOjsO4v literal 0 HcmV?d00001 diff --git a/__pycache__/DBC_Converter_Data_Parsing.cpython-313.pyc b/__pycache__/DBC_Converter_Data_Parsing.cpython-313.pyc index f9d1021668c8da0de87bbbf69038a3739a4d54de..116aceb338b4e25c0b812872e9b38f9e95427fa6 100644 GIT binary patch delta 497 zcmY+AJxc>Y5Qb;(BiZC`FG$4CCJ2h6ji^n~6lxI_6uib_@i_Dhf#go+67dV{?8D)Y zu!}^j#2<1X)^>uH7S0+4onq&mcV?eq_jB}aOuP$`2a1F1huTL+j9xhm;09c9*%n|w zGh|e2TiT|MdI?;84A79KYn1l@{18C0U0Xr^hijT-U{)FvAhS!vRe@ac>AnPihwk#- z;!mkkVrc{W)iOX^quD%K(w+b}Bl8ZpS!uakF-hl0=l^J{uNV05o)XZ6t=uA19b$=Z zl8_?dY;weTRok{_SSr?{Fpe6*PP=v7ZuJ(~g~ywY|vh-1GNc=hlo!bxRi;(9Ig8@KRI72t~U_;NEkY&U`mZom+L`sDbD UjyIh#_5#i`OegF1y-_9a3!^Gw-2eap delta 420 zcmYk2ze)o^5XNWsvX{NwABzMeLE#7nR8k0H6QW?F0YNd>SS%g~o<|^efjuK?3ZEey z7Gh^-VWBDY74iaUtnI{rm4&kg!6{~c^X)g^!ah~L%l6c^3xM@?_ZZy|?Q)$GfE)0@ zBYPlcCy~UX6_8YDp4K=52oeB6+C1CViYqyW>yimt1;I9OTb0y>zC1$+4$!T)=dwk* zaNKGD^eGy+G(@2a9uwRFPZx%lS3$@e+4#qW8L#uda2L>FDzykL2eZuIBukiCiPZA; zyLxzkbVvq_IHR#XB&3-6{FQB@u8mydf)bY9nr_KN;fmH>X(32kH76UJ^VgQF;4snB z%T%hZ3HSXZh(q6>