|
|
|
@ -231,15 +231,28 @@ 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 = {} |
|
|
|
|
# logging_addrs = defaultdict(list) |
|
|
|
|
|
|
|
|
|
for brand, brand_versions in versions.items(): |
|
|
|
|
for c in brand_versions.values(): |
|
|
|
|
for ecu_type, addr, sub_addr in c.keys(): |
|
|
|
|
# print(brand, brand_versions.keys()) |
|
|
|
|
# print(brand, brand_versions["debug"]) |
|
|
|
|
for candidate, ecu in brand_versions.items(): |
|
|
|
|
# if brand not in logging_addrs: |
|
|
|
|
# logging_addrs[brand] = [] |
|
|
|
|
# if car == "debug": |
|
|
|
|
# logging_addrs.append() [brand].append(ecu) |
|
|
|
|
# # logging_addrs[brand].append(ecu) |
|
|
|
|
|
|
|
|
|
for ecu_type, addr, sub_addr in ecu.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) |
|
|
|
@ -248,12 +261,14 @@ def get_fw_versions(logcan, sendcan, query_brand=None, extra=None, timeout=0.1, |
|
|
|
|
addrs.append([a]) |
|
|
|
|
|
|
|
|
|
addrs.insert(0, parallel_addrs) |
|
|
|
|
print('logging', logging_addrs) |
|
|
|
|
|
|
|
|
|
# Get versions and build capnp list to put into CarParams |
|
|
|
|
car_fw = [] |
|
|
|
|
requests = [(brand, r) for brand, r in REQUESTS if query_brand is None or brand == query_brand] |
|
|
|
|
for addr in tqdm(addrs, disable=not progress): |
|
|
|
|
for addr_chunk in chunks(addr): |
|
|
|
|
# print(addr_chunk) |
|
|
|
|
for brand, r in requests: |
|
|
|
|
# Skip query if no panda available |
|
|
|
|
if r.bus > num_pandas * 4 - 1: |
|
|
|
@ -268,14 +283,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 |
|
|
|
|
f.logging = r.logging or ecu_key in logging_addrs |
|
|
|
|
|
|
|
|
|
if sub_addr is not None: |
|
|
|
|
f.subAddress = sub_addr |
|
|
|
|