123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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())
|