diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index 746f00c3e1..ecf37cd4c6 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -1138,7 +1138,6 @@ FW_VERSIONS = { (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5001 h32', b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5100 h32', - b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5100 h32', ], (Ecu.transmission, 0x7e1, None): [ b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', diff --git a/selfdrive/car/tests/test_fw_fingerprint.py b/selfdrive/car/tests/test_fw_fingerprint.py index 2a47c60bf3..8c27b9ca7f 100755 --- a/selfdrive/car/tests/test_fw_fingerprint.py +++ b/selfdrive/car/tests/test_fw_fingerprint.py @@ -45,19 +45,29 @@ class TestFwFingerprint(unittest.TestCase): self.assertFalse(len(duplicates), f"{car_model}: Duplicate FW versions: Ecu.{ECU_NAME[ecu[0]]}, {duplicates}") def test_blacklisted_ecus(self): - blacklisted_addrs = (0x7c4, 0x7d0) # includes A/C ecu and an unknown ecu + blacklisted_addrs = { + "subaru": (0x7c4, 0x7d0), # includes A/C ecu and an unknown ecu + } + blacklisted_ecus = { + "RAM HD 5TH GEN": (Ecu.transmission,), # Some HD trucks have a combined TCM and ECM + "KIA OPTIMA 2016": (Ecu.eps,), # eps fails to respond successfully to tester present + "KIA OPTIMA 2019": (Ecu.eps, Ecu.fwdRadar), # fwdRadar is spotty, skips iso-tp frames + } for car_model, ecus in FW_VERSIONS.items(): with self.subTest(car_model=car_model): CP = interfaces[car_model][0].get_params(car_model) - if CP.carName == 'subaru': - for ecu in ecus.keys(): - self.assertNotIn(ecu[1], blacklisted_addrs, f'{car_model}: Blacklisted ecu: (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])})') + for ecu in ecus.keys(): + with self.subTest(ecu=ecu): - elif CP.carName == "chrysler": - # Some HD trucks have a combined TCM and ECM - if CP.carFingerprint.startswith("RAM HD"): - for ecu in ecus.keys(): - self.assertNotEqual(ecu[0], Ecu.transmission, f"{car_model}: Blacklisted ecu: (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])})") + # Check for brand-wide blacklisted addresses + if CP.carName in blacklisted_addrs: + self.assertNotIn(ecu[1], blacklisted_addrs[CP.carName], + f'{car_model}: Blacklisted ecu: (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])})') + + # Check for single-car blacklisted ecus + if CP.carFingerprint in blacklisted_ecus: + self.assertNotIn(ecu[0], blacklisted_ecus[CP.carFingerprint], + f"{car_model}: Blacklisted ecu: (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])})") def test_fw_request_ecu_whitelist(self): for brand in set(r.brand for r in REQUESTS):