diff --git a/DBC_Converter_RX.py b/DBC_Converter_RX.py index 2a45b88..970a1ab 100644 --- a/DBC_Converter_RX.py +++ b/DBC_Converter_RX.py @@ -98,9 +98,10 @@ void Receive_{message_name}_{message_info['ID']}(void) start_bit = signal["msb"] % 8 signal_length = signal["Length"] if signal["Byte order"] == 0: # Motorola (Big Endian) - shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] << shift{7 - start_bit})" + 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})" multi_byte_expr = [] for i in range((signal_length + 7) // 8): byte_shift = (7 - start_bit) + (i * 8) @@ -109,6 +110,8 @@ void Receive_{message_name}_{message_info['ID']}(void) else: multi_byte_expr.append(f"(CAN_ch[0].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})" else: # Intel (Little Endian) shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] >> shift{start_bit})" if signal_length > 8: diff --git a/DBC_Converter_TX.py b/DBC_Converter_TX.py index 54ae71c..252d68d 100644 --- a/DBC_Converter_TX.py +++ b/DBC_Converter_TX.py @@ -102,7 +102,7 @@ def generate_vcu_can_transmit_single_c_file(signals, output_file): # Iterate through all messages in the signals for message_name, message_info in signals.items(): # Check if any signal in the message has RX ECU name as VCU - has_vcu_signal = any(signal["RX ECU name"] == "VCU" for signal in message_info["Signals"]) + has_vcu_signal = any(signal["RX ECU name"] != "VCU" for signal in message_info["Signals"]) if not has_vcu_signal: continue # Skip this message if no signal has RX ECU name as VCU @@ -124,7 +124,13 @@ void Transmit_{message_name}_CH0_{message_info['ID']}(void) while signal_length > 0: bits_in_byte = min(8 - start_bit, signal_length) shift_amount = (signal["Length"] - signal_length) - shift_expr = f"({signal_name} >> shift{shift_amount}) << shift{start_bit}" if start_bit > 0 else f"({signal_name} >> shift{shift_amount})" + if signal["Byte order"] == 0: # Motorola (Big Endian) + if bits_in_byte == 8: + shift_expr = f"({signal_name} >> shift{shift_amount})" + else: + shift_expr = f"({signal_name} << shift{start_bit})" if start_bit > 0 else f"({signal_name} >> shift{shift_amount})" + else: # Intel (Little Endian) + shift_expr = f"({signal_name} >> shift{shift_amount}) << shift{start_bit}" if start_bit > 0 else f"({signal_name} >> shift{shift_amount})" buffer_index = start_byte # Ensure buffer_index is within the range of buffer_assignments diff --git a/settings.json b/settings.json index 656cc45..3771384 100644 --- a/settings.json +++ b/settings.json @@ -2,6 +2,6 @@ "theme": "light", "default_save_path": "C:/Users/MSI/Desktop", "file_paths": [], - "last_opened_dir": "C:/Users/MSI/SynologyDrive/3min_be/한자연/!과제/초안전/#Debug/DBC", + "last_opened_dir": "C:/Users/MSI/Desktop/python/motorola_tx", "channel_info": {} } \ No newline at end of file