set up for quick test

pull/32626/head
Shane Smiskol 11 months ago
parent e494d98960
commit aa6af2ff83
  1. 16
      selfdrive/car/fw_versions.py

@ -53,7 +53,8 @@ class MatchFwToCar(Protocol):
... ...
def match_fw_to_car_fuzzy(live_fw_versions: LiveFwVersions, match_brand: str = None, log: bool = True, exclude: str = None) -> set[str]: def match_fw_to_car_fuzzy(live_fw_versions: LiveFwVersions, match_brand: str = None, log: bool = True, exclude: str = None,
ignore_pgfi: bool = False) -> set[str]:
"""Do a fuzzy FW match. This function will return a match, and the number of firmware version """Do a fuzzy FW match. This function will return a match, and the number of firmware version
that were matched uniquely to that specific car. If multiple ECUs uniquely match to different cars that were matched uniquely to that specific car. If multiple ECUs uniquely match to different cars
the match is rejected.""" the match is rejected."""
@ -72,7 +73,7 @@ def match_fw_to_car_fuzzy(live_fw_versions: LiveFwVersions, match_brand: str = N
# Getting this exactly right isn't crucial, but excluding camera and radar makes it almost # Getting this exactly right isn't crucial, but excluding camera and radar makes it almost
# impossible to get 3 matching versions, even if two models with shared parts are released at the same # impossible to get 3 matching versions, even if two models with shared parts are released at the same
# time and only one is in our database. # time and only one is in our database.
if addr[0] in FUZZY_EXCLUDE_ECUS: if addr[0] in FUZZY_EXCLUDE_ECUS or (addr[0] == Ecu.programmedFuelInjection and ignore_pgfi):
continue continue
for f in fws: for f in fws:
all_fw_versions[(addr[1], addr[2], f)].append(candidate) all_fw_versions[(addr[1], addr[2], f)].append(candidate)
@ -103,7 +104,8 @@ def match_fw_to_car_fuzzy(live_fw_versions: LiveFwVersions, match_brand: str = N
return set() return set()
def match_fw_to_car_exact(live_fw_versions: LiveFwVersions, match_brand: str = None, log: bool = True, extra_fw_versions: dict = None) -> set[str]: def match_fw_to_car_exact(live_fw_versions: LiveFwVersions, match_brand: str = None, log: bool = True, extra_fw_versions: dict = None,
ignore_pgfi: bool = False) -> set[str]:
"""Do an exact FW match. Returns all cars that match the given """Do an exact FW match. Returns all cars that match the given
FW versions for a list of "essential" ECUs. If an ECU is not considered FW versions for a list of "essential" ECUs. If an ECU is not considered
essential the FW version can be missing to get a fingerprint, but if it's present it essential the FW version can be missing to get a fingerprint, but if it's present it
@ -122,6 +124,9 @@ def match_fw_to_car_exact(live_fw_versions: LiveFwVersions, match_brand: str = N
ecu_type = ecu[0] ecu_type = ecu[0]
addr = ecu[1:] addr = ecu[1:]
if ecu_type == Ecu.programmedFuelInjection and ignore_pgfi:
continue
found_versions = live_fw_versions.get(addr, set()) found_versions = live_fw_versions.get(addr, set())
if not len(found_versions): if not len(found_versions):
# Some models can sometimes miss an ecu, or show on two different addresses # Some models can sometimes miss an ecu, or show on two different addresses
@ -145,7 +150,8 @@ def match_fw_to_car_exact(live_fw_versions: LiveFwVersions, match_brand: str = N
def match_fw_to_car(fw_versions: list[capnp.lib.capnp._DynamicStructBuilder], vin: str, def match_fw_to_car(fw_versions: list[capnp.lib.capnp._DynamicStructBuilder], vin: str,
allow_exact: bool = True, allow_fuzzy: bool = True, log: bool = True) -> tuple[bool, set[str]]: allow_exact: bool = True, allow_fuzzy: bool = True, log: bool = True,
ignore_pgfi: bool = False) -> tuple[bool, set[str]]:
# Try exact matching first # Try exact matching first
exact_matches: list[tuple[bool, MatchFwToCar]] = [] exact_matches: list[tuple[bool, MatchFwToCar]] = []
if allow_exact: if allow_exact:
@ -153,6 +159,8 @@ def match_fw_to_car(fw_versions: list[capnp.lib.capnp._DynamicStructBuilder], vi
if allow_fuzzy: if allow_fuzzy:
exact_matches.append((False, match_fw_to_car_fuzzy)) exact_matches.append((False, match_fw_to_car_fuzzy))
fw_versions = [fw for fw in fw_versions if fw.ecu != Ecu.programmedFuelInjection or not ignore_pgfi]
for exact_match, match_func in exact_matches: for exact_match, match_func in exact_matches:
# For each brand, attempt to fingerprint using all FW returned from its queries # For each brand, attempt to fingerprint using all FW returned from its queries
matches: set[str] = set() matches: set[str] = set()

Loading…
Cancel
Save