You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
from selfdrive.car.interfaces import get_interface_attr
|
|
|
|
|
|
FW_VERSIONS = get_interface_attr('FW_VERSIONS', combine_brands=True, ignore_none=True)
|
|
_FINGERPRINTS = get_interface_attr('FINGERPRINTS', combine_brands=True, ignore_none=True)
|
|
|
|
_DEBUG_ADDRESS = {1880: 8} # reserved for debug purposes
|
|
|
|
|
|
def is_valid_for_fingerprint(msg, car_fingerprint):
|
|
adr = msg.address
|
|
# ignore addresses that are more than 11 bits
|
|
return (adr in car_fingerprint and car_fingerprint[adr] == len(msg.dat)) or adr >= 0x800
|
|
|
|
|
|
def eliminate_incompatible_cars(msg, candidate_cars):
|
|
"""Removes cars that could not have sent msg.
|
|
|
|
Inputs:
|
|
msg: A cereal/log CanData message from the car.
|
|
candidate_cars: A list of cars to consider.
|
|
|
|
Returns:
|
|
A list containing the subset of candidate_cars that could have sent msg.
|
|
"""
|
|
compatible_cars = []
|
|
|
|
for car_name in candidate_cars:
|
|
car_fingerprints = _FINGERPRINTS[car_name]
|
|
|
|
for fingerprint in car_fingerprints:
|
|
fingerprint.update(_DEBUG_ADDRESS) # add alien debug address
|
|
|
|
if is_valid_for_fingerprint(msg, fingerprint):
|
|
compatible_cars.append(car_name)
|
|
break
|
|
|
|
return compatible_cars
|
|
|
|
|
|
def all_known_cars():
|
|
"""Returns a list of all known car strings."""
|
|
return list({*FW_VERSIONS.keys(), *_FINGERPRINTS.keys()})
|
|
|
|
|
|
def all_legacy_fingerprint_cars():
|
|
"""Returns a list of all known car strings, FPv1 only."""
|
|
return list(_FINGERPRINTS.keys())
|
|
|