@ -29,10 +29,9 @@ def chunks(l, n=128):
def build_fw_dict ( fw_versions , filter_brand = None ) :
fw_versions_dict = defaultdict ( set )
for fw in fw_versions :
if filter_brand is None or fw . brand == filter_brand :
addr = fw . address
if ( filter_brand is None or fw . brand == filter_brand ) and not fw . logging :
sub_addr = fw . subAddress if fw . subAddress != 0 else None
fw_versions_dict [ ( addr , sub_addr ) ] . add ( fw . fwVersion )
fw_versions_dict [ ( fw . address , sub_addr ) ] . add ( fw . fwVersion )
return dict ( fw_versions_dict )
@ -232,15 +231,19 @@ def get_fw_versions(logcan, sendcan, query_brand=None, extra=None, timeout=0.1,
# ECUs using a subaddress need be queried one by one, the rest can be done in parallel
addrs = [ ]
parallel_addrs = [ ]
logging_addrs = [ ]
ecu_types = { }
for brand , brand_versions in versions . items ( ) :
for c in brand_versions . value s( ) :
for ecu_type , addr , sub_addr in c . keys ( ) :
for candidate , ecu in brand_versions . item s( ) :
for ecu_type , addr , sub_addr in e cu . keys ( ) :
a = ( brand , addr , sub_addr )
if a not in ecu_types :
ecu_types [ a ] = ecu_type
if a not in logging_addrs and candidate == " debug " :
logging_addrs . append ( a )
if sub_addr is None :
if a not in parallel_addrs :
parallel_addrs . append ( a )
@ -269,13 +272,15 @@ def get_fw_versions(logcan, sendcan, query_brand=None, extra=None, timeout=0.1,
for ( tx_addr , sub_addr ) , version in query . get_data ( timeout ) . items ( ) :
f = car . CarParams . CarFw . new_message ( )
f . ecu = ecu_types . get ( ( brand , tx_addr , sub_addr ) , Ecu . unknown )
ecu_key = ( brand , tx_addr , sub_addr )
f . ecu = ecu_types . get ( ecu_key , Ecu . unknown )
f . fwVersion = version
f . address = tx_addr
f . responseAddress = uds . get_rx_addr_for_tx_addr ( tx_addr , r . rx_offset )
f . request = r . request
f . brand = brand
f . bus = r . bus
f . logging = r . logging or ecu_key in logging_addrs
if sub_addr is not None :
f . subAddress = sub_addr