pull/27656/head
Shane Smiskol 2 years ago
parent 1cccef80d4
commit 87d725ae93
  1. 24
      selfdrive/car/fw_versions.py

@ -206,10 +206,9 @@ def get_present_ecus_original(logcan, sendcan, num_pandas=1) -> Set[Tuple[int, O
def get_present_ecus(logcan, sendcan, num_pandas=1) -> Set[Tuple[int, Optional[int], int]]: def get_present_ecus(logcan, sendcan, num_pandas=1) -> Set[Tuple[int, Optional[int], int]]:
# TODO: batch requests by multiplexed OBD
params = Params() params = Params()
queries = {"obd": [], "non_obd": []} # list() queries = defaultdict(list)
parallel_queries = {"obd": [], "non_obd": []} # list() parallel_queries = defaultdict(list)
responses = set() responses = set()
for brand, r in REQUESTS: for brand, r in REQUESTS:
@ -224,25 +223,24 @@ def get_present_ecus(logcan, sendcan, num_pandas=1) -> Set[Tuple[int, Optional[i
a = (addr, sub_addr, r.bus) a = (addr, sub_addr, r.bus)
print((a, r.non_obd)) print((a, r.non_obd))
# Build set of queries # Build set of queries
multiplexed_key = "non_obd" if r.non_obd else "obd"
if sub_addr is None: if sub_addr is None:
if a not in parallel_queries[multiplexed_key]: if a not in parallel_queries[r.non_obd]:
parallel_queries[multiplexed_key].append(a) parallel_queries[r.non_obd].append(a)
else: # subaddresses must be queried one by one else: # subaddresses must be queried one by one
if [a] not in queries[multiplexed_key]: if [a] not in queries[r.non_obd]:
queries[multiplexed_key].append([a]) queries[r.non_obd].append([a])
# Build set of expected responses to filter # Build set of expected responses to filter
response_addr = uds.get_rx_addr_for_tx_addr(addr, r.rx_offset) response_addr = uds.get_rx_addr_for_tx_addr(addr, r.rx_offset)
responses.add((response_addr, sub_addr, r.bus)) responses.add((response_addr, sub_addr, r.bus))
for multiplexed_key in queries: for non_obd in queries:
queries[multiplexed_key].insert(0, parallel_queries[multiplexed_key]) queries[non_obd].insert(0, parallel_queries[non_obd])
ecu_responses = set() ecu_responses = set()
for multiplexed_key in queries: for non_obd in queries:
set_obd_multiplexing(params, multiplexed_key == 'obd') set_obd_multiplexing(params, not non_obd)
for query in queries[multiplexed_key]: for query in queries[non_obd]:
ecu_responses.update(get_ecu_addrs(logcan, sendcan, set(query), responses, timeout=0.1)) ecu_responses.update(get_ecu_addrs(logcan, sendcan, set(query), responses, timeout=0.1))
return ecu_responses return ecu_responses

Loading…
Cancel
Save