@@ -11,7 +11,9 @@ def dbc_to_h(dbc_file, h_file):
1111 with open (h_file , 'w' ) as file :
1212 file .write ("// Signals\n " )
1313 for message in db .messages :
14+ multiplexor_signal = ""
1415 signals = []
16+
1517 for signal in message .signals :
1618 signalString = ""
1719 if (signal .choices != None ):
@@ -26,13 +28,39 @@ def dbc_to_h(dbc_file, h_file):
2628 byteOrder = ""
2729 endian = ""
2830 signalType = "Signed" if signal .is_signed else "Unsigned"
29- signalString += "Make" + byteOrder + signalType + "CANSignal(" + ("data_type_placeholder" if signal .choices == None else signal .name + "_Enum" ) + "," + str (signal .start ) + "," + str (signal .length ) + "," + str (signal .scale ) + "," + str (signal .offset ) + endian + ") " + signal .name + "_Signal{};\n "
31+ signalString += "Make" + byteOrder + signalType + "CANSignal(" + ("data_type_placeholder" if signal .choices == None else signal .name + "_Enum" ) + "," + str (signal .start ) + "," + str (signal .length ) + "," + str (signal .scale ) + ( "" if isinstance ( signal . scale , int ) else "f" ) + "," + str (signal .offset ) + endian + ") " + signal .name + "_Signal{};\n "
3032 with open (h_file , 'a' ) as file :
3133 file .write (signalString )
32- signals .append (signal .name + "_Signal" )
33- rx_message = "CANRXMessage<" + str (len (signals )) + "> " + message .name + "_RX_Message{can_bus, 0x" + format (message .frame_id , 'x' ) + ", " + ', ' .join (signals ) + "};\n "
34+ if message .is_multiplexed ():
35+ if (signal .is_multiplexer ):
36+ multiplexor_signal = signal .name + "_Signal_"
37+ continue
38+
39+ found = False
40+ for i in range (len (signals )):
41+ if signals [i ][0 ] == signal .multiplexer_ids [0 ]:
42+ signals [i ].append (signal .name + "_Signal_" )
43+ found = True
44+ continue
45+ if not found :
46+ signals .append ([signal .multiplexer_ids [0 ], signal .name + "_Signal_" ])
47+ else :
48+ signals .append (signal .name + "_Signal_" )
49+ print (signals )
50+ if message .is_multiplexed ():
51+ signal_groups_str = ""
52+ signal_groups = []
53+ for i in range (len (signals )):
54+ signal_groups_str += "MultiplexedSignalGroup<" + str (len (signals [i ]) - 1 ) + "> " + message .name + "_SignalGroup_" + str (i ) + "_{" + ', ' .join (str (s ) for s in signals [i ]) + "};\n "
55+ signal_groups .append (message .name + "_SignalGroup_" + str (i ) + "_" )
56+ #MultiplexedCANTXMessage<2, uint8_t> tx_msg{can, 100, 8, 100, tx_multiplexor, tx_signals_0, tx_signals_1};
57+ rx_message = signal_groups_str
58+ rx_message += "MultiplexedCANRXMessage<" + str (len (signal_groups )) + ", " + "data_type_placeholder" + "> " + message .name + "_RX_Message_{can_bus, 0x" + format (message .frame_id , 'x' ) + ", " + multiplexor_signal + ", " + ', ' .join (signal_groups ) + "};\n "
59+ tx_message = "MultiplexedCANTXMessage<" + str (len (signal_groups )) + ", " + "data_type_placeholder" + "> " + message .name + "_TX_Message_{can_bus, 0x" + format (message .frame_id , 'x' ) + ", " + ("true, " if message .is_extended_frame else "" ) + str (message .length ) + ", freq_placeholder, timer_group, " + multiplexor_signal + ", " + ', ' .join (signal_groups ) + "};\n "
60+ else :
61+ rx_message = "CANRXMessage<" + str (len (signals )) + "> " + message .name + "_RX_Message_{can_bus, 0x" + format (message .frame_id , 'x' ) + ", " + ', ' .join (signals ) + "};\n "
62+ tx_message = "CANTXMessage<" + str (len (signals )) + "> " + message .name + "_TX_Message_{can_bus, 0x" + format (message .frame_id , 'x' ) + ", " + ("true, " if message .is_extended_frame else "" ) + str (message .length ) + ", freq_placeholder, timer_group, " + ', ' .join (signals ) + "};\n "
3463 rx_messages += rx_message
35- tx_message = "CANTXMessage<" + str (len (signals )) + "> " + message .name + "_TX_Message{can_bus, 0x" + format (message .frame_id , 'x' ) + ", " + str (message .length ) + ", freq_placeholder, timer_group, " + ', ' .join (signals ) + "};\n "
3664 tx_messages += tx_message
3765 with open (h_file , 'a' ) as file :
3866 file .write ("\n // RX Messages\n " )
0 commit comments