from openpilot.selfdrive.car.interfaces import get_interface_attr from openpilot.selfdrive.car.honda.values import CAR as HONDA from openpilot.selfdrive.car.hyundai.values import CAR as HYUNDAI from openpilot.selfdrive.car.toyota.values import CAR as TOYOTA from openpilot.selfdrive.car.volkswagen.values import CAR as VW 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: dict[int, int]): 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: # add alien debug address if is_valid_for_fingerprint(msg, fingerprint | _DEBUG_ADDRESS): 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()) # A dict that maps old platform strings to their latest representations MIGRATION = { "ACURA ILX 2016 ACURAWATCH PLUS": HONDA.ACURA_ILX, "ACURA RDX 2018 ACURAWATCH PLUS": HONDA.ACURA_RDX, "ACURA RDX 2020 TECH": HONDA.ACURA_RDX_3G, "AUDI A3": VW.AUDI_A3_MK3, "HONDA ACCORD 2018 HYBRID TOURING": HONDA.ACCORD, "HONDA ACCORD 1.5T 2018": HONDA.ACCORD, "HONDA ACCORD 2018 LX 1.5T": HONDA.ACCORD, "HONDA ACCORD 2018 SPORT 2T": HONDA.ACCORD, "HONDA ACCORD 2T 2018": HONDA.ACCORD, "HONDA ACCORD HYBRID 2018": HONDA.ACCORD, "HONDA CIVIC 2016 TOURING": HONDA.CIVIC, "HONDA CIVIC HATCHBACK 2017 SEDAN/COUPE 2019": HONDA.CIVIC_BOSCH, "HONDA CIVIC SEDAN 1.6 DIESEL": HONDA.CIVIC_BOSCH_DIESEL, "HONDA CR-V 2016 EXECUTIVE": HONDA.CRV_EU, "HONDA CR-V 2016 TOURING": HONDA.CRV, "HONDA CR-V 2017 EX": HONDA.CRV_5G, "HONDA CR-V 2019 HYBRID": HONDA.CRV_HYBRID, "HONDA FIT 2018 EX": HONDA.FIT, "HONDA HRV 2019 TOURING": HONDA.HRV, "HONDA INSIGHT 2019 TOURING": HONDA.INSIGHT, "HONDA ODYSSEY 2018 EX-L": HONDA.ODYSSEY, "HONDA ODYSSEY 2019 EXCLUSIVE CHN": HONDA.ODYSSEY_CHN, "HONDA PILOT 2017 TOURING": HONDA.PILOT, "HONDA PILOT 2019 ELITE": HONDA.PILOT, "HONDA PILOT 2019": HONDA.PILOT, "HONDA PASSPORT 2021": HONDA.PILOT, "HONDA RIDGELINE 2017 BLACK EDITION": HONDA.RIDGELINE, "HYUNDAI ELANTRA LIMITED ULTIMATE 2017": HYUNDAI.ELANTRA, "HYUNDAI SANTA FE LIMITED 2019": HYUNDAI.SANTA_FE, "HYUNDAI TUCSON DIESEL 2019": HYUNDAI.TUCSON, "KIA OPTIMA 2016": HYUNDAI.KIA_OPTIMA_G4, "KIA OPTIMA 2019": HYUNDAI.KIA_OPTIMA_G4_FL, "KIA OPTIMA SX 2019 & 2016": HYUNDAI.KIA_OPTIMA_G4_FL, "LEXUS CT 200H 2018": TOYOTA.LEXUS_CTH, "LEXUS ES 300H 2018": TOYOTA.LEXUS_ES, "LEXUS ES 300H 2019": TOYOTA.LEXUS_ES_TSS2, "LEXUS IS300 2018": TOYOTA.LEXUS_IS, "LEXUS NX300 2018": TOYOTA.LEXUS_NX, "LEXUS NX300H 2018": TOYOTA.LEXUS_NX, "LEXUS RX 350 2016": TOYOTA.LEXUS_RX, "LEXUS RX350 2020": TOYOTA.LEXUS_RX_TSS2, "LEXUS RX450 HYBRID 2020": TOYOTA.LEXUS_RX_TSS2, "TOYOTA SIENNA XLE 2018": TOYOTA.SIENNA, "TOYOTA C-HR HYBRID 2018": TOYOTA.CHR, "TOYOTA COROLLA HYBRID TSS2 2019": TOYOTA.COROLLA_TSS2, "TOYOTA RAV4 HYBRID 2019": TOYOTA.RAV4_TSS2, "LEXUS ES HYBRID 2019": TOYOTA.LEXUS_ES_TSS2, "LEXUS NX HYBRID 2018": TOYOTA.LEXUS_NX, "LEXUS NX HYBRID 2020": TOYOTA.LEXUS_NX_TSS2, "LEXUS RX HYBRID 2020": TOYOTA.LEXUS_RX_TSS2, "TOYOTA ALPHARD HYBRID 2021": TOYOTA.ALPHARD_TSS2, "TOYOTA AVALON HYBRID 2019": TOYOTA.AVALON_2019, "TOYOTA AVALON HYBRID 2022": TOYOTA.AVALON_TSS2, "TOYOTA CAMRY HYBRID 2018": TOYOTA.CAMRY, "TOYOTA CAMRY HYBRID 2021": TOYOTA.CAMRY_TSS2, "TOYOTA C-HR HYBRID 2022": TOYOTA.CHR_TSS2, "TOYOTA HIGHLANDER HYBRID 2020": TOYOTA.HIGHLANDER_TSS2, "TOYOTA RAV4 HYBRID 2022": TOYOTA.RAV4_TSS2_2022, "TOYOTA RAV4 HYBRID 2023": TOYOTA.RAV4_TSS2_2023, "TOYOTA HIGHLANDER HYBRID 2018": TOYOTA.HIGHLANDER, "LEXUS ES HYBRID 2018": TOYOTA.LEXUS_ES, "LEXUS RX HYBRID 2017": TOYOTA.LEXUS_RX, "HYUNDAI TUCSON HYBRID 4TH GEN": HYUNDAI.TUCSON_4TH_GEN, "KIA SPORTAGE HYBRID 5TH GEN": HYUNDAI.KIA_SPORTAGE_5TH_GEN, "KIA SORENTO PLUG-IN HYBRID 4TH GEN": HYUNDAI.KIA_SORENTO_HEV_4TH_GEN, }