mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-10-01 03:43:42 +08:00
FW fingerprinting: log all FW versions (#25042)
* get_fw_versions returns all fw versions with request's brand * keep track of everything received * debug * need to regen or write a hack in build_fw_dict * to be safe, still replace old responses within same brands (hyundai responds to two queries, can fix later) to be safe, still replace old responses within same brands (hyundai responds to two queries, can fix later) * update test_fw_query_on_routes * clean up * better name * slightly cleaner * fix test_startup unit test del * fix imports * fix test_fw_fingerprint fix test_fw_fingerprint fix * fingerprint on all FW_VERSIONS, not just brands with requests * support old routes in test_fw_query_on_routes * regen and update refs * similar function style to before * better comment * space switch name * try to exact match first * useless else * fix debug script * simpler dictionary * bump cereal to master
This commit is contained in:
@@ -8,24 +8,15 @@ import traceback
|
||||
from tqdm import tqdm
|
||||
from tools.lib.logreader import LogReader
|
||||
from tools.lib.route import Route
|
||||
from selfdrive.car.interfaces import get_interface_attr
|
||||
from selfdrive.car.car_helpers import interface_names
|
||||
from selfdrive.car.fw_versions import match_fw_to_car_exact, match_fw_to_car_fuzzy, build_fw_dict
|
||||
from selfdrive.car.toyota.values import FW_VERSIONS as TOYOTA_FW_VERSIONS
|
||||
from selfdrive.car.honda.values import FW_VERSIONS as HONDA_FW_VERSIONS
|
||||
from selfdrive.car.hyundai.values import FW_VERSIONS as HYUNDAI_FW_VERSIONS
|
||||
from selfdrive.car.volkswagen.values import FW_VERSIONS as VW_FW_VERSIONS
|
||||
from selfdrive.car.mazda.values import FW_VERSIONS as MAZDA_FW_VERSIONS
|
||||
from selfdrive.car.subaru.values import FW_VERSIONS as SUBARU_FW_VERSIONS
|
||||
|
||||
|
||||
NO_API = "NO_API" in os.environ
|
||||
SUPPORTED_CARS = set(interface_names['toyota'])
|
||||
SUPPORTED_CARS |= set(interface_names['honda'])
|
||||
SUPPORTED_CARS |= set(interface_names['hyundai'])
|
||||
SUPPORTED_CARS |= set(interface_names['volkswagen'])
|
||||
SUPPORTED_CARS |= set(interface_names['mazda'])
|
||||
SUPPORTED_CARS |= set(interface_names['subaru'])
|
||||
SUPPORTED_CARS |= set(interface_names['nissan'])
|
||||
VERSIONS = get_interface_attr('FW_VERSIONS', ignore_none=True)
|
||||
SUPPORTED_BRANDS = VERSIONS.keys()
|
||||
SUPPORTED_CARS = [brand for brand in SUPPORTED_BRANDS for brand in interface_names[brand]]
|
||||
|
||||
try:
|
||||
from xx.pipeline.c.CarState import migration
|
||||
@@ -97,9 +88,24 @@ if __name__ == "__main__":
|
||||
print("not in supported cars")
|
||||
break
|
||||
|
||||
fw_versions_dict = build_fw_dict(car_fw)
|
||||
exact_matches = match_fw_to_car_exact(fw_versions_dict)
|
||||
fuzzy_matches = match_fw_to_car_fuzzy(fw_versions_dict)
|
||||
# Older routes only have carFw from their brand
|
||||
old_route = not any([len(fw.brand) for fw in car_fw])
|
||||
brands = SUPPORTED_BRANDS if not old_route else [None]
|
||||
|
||||
# Exact match
|
||||
exact_matches, fuzzy_matches = [], []
|
||||
for brand in brands:
|
||||
fw_versions_dict = build_fw_dict(car_fw, filter_brand=brand)
|
||||
exact_matches = match_fw_to_car_exact(fw_versions_dict)
|
||||
if len(exact_matches) == 1:
|
||||
break
|
||||
|
||||
# Fuzzy match
|
||||
for brand in brands:
|
||||
fw_versions_dict = build_fw_dict(car_fw, filter_brand=brand)
|
||||
fuzzy_matches = match_fw_to_car_fuzzy(fw_versions_dict)
|
||||
if len(fuzzy_matches) == 1:
|
||||
break
|
||||
|
||||
if (len(exact_matches) == 1) and (list(exact_matches)[0] == live_fingerprint):
|
||||
good_exact += 1
|
||||
@@ -126,12 +132,15 @@ if __name__ == "__main__":
|
||||
|
||||
print("Mismatches")
|
||||
found = False
|
||||
for car_fws in [TOYOTA_FW_VERSIONS, HONDA_FW_VERSIONS, HYUNDAI_FW_VERSIONS, VW_FW_VERSIONS, MAZDA_FW_VERSIONS, SUBARU_FW_VERSIONS]:
|
||||
for brand in SUPPORTED_BRANDS:
|
||||
car_fws = VERSIONS[brand]
|
||||
if live_fingerprint in car_fws:
|
||||
found = True
|
||||
expected = car_fws[live_fingerprint]
|
||||
for (_, expected_addr, expected_sub_addr), v in expected.items():
|
||||
for version in car_fw:
|
||||
if version.brand != brand and len(version.brand):
|
||||
continue
|
||||
sub_addr = None if version.subAddress == 0 else version.subAddress
|
||||
addr = version.address
|
||||
|
||||
|
||||
Reference in New Issue
Block a user