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.
78 lines
2.3 KiB
78 lines
2.3 KiB
#!/usr/bin/env python3
|
|
import re
|
|
import random
|
|
|
|
from cereal import car
|
|
from selfdrive.car.hyundai.values import FW_VERSIONS, match_fw_to_hyundai_fuzzy
|
|
|
|
Ecu = car.CarParams.Ecu
|
|
|
|
platform_codes = set()
|
|
|
|
# these ecus are available on all cars (even CAN FD with no OBD fingerprinting)
|
|
fw_keys = [(Ecu.fwdCamera, 0x7c4, None), (Ecu.fwdRadar, 0x7d0, None)]
|
|
|
|
RADAR_REGEX = br'([A-Z]+[A-Z0-9]*)'
|
|
|
|
|
|
def get_platform_codes(car_fw):
|
|
radar_codes = set()
|
|
camera_codes = set()
|
|
if (Ecu.fwdRadar, 0x7d0, None) in car_fw:
|
|
for fw in car_fw[(Ecu.fwdRadar, 0x7d0, None)]:
|
|
start_idx = fw.index(b'\xf1\x00')
|
|
fw = fw[start_idx + 2:][:4]
|
|
|
|
# code = re.match(RADAR_REGEX, fw).group(0) # TODO: check NONE, or have a test
|
|
# radar_code_variant = fw[len(code):4].replace(b'_', b'').replace(b' ', b'')
|
|
|
|
radar_code = fw[:4].replace(b" ", b"").replace(b"_", b"")
|
|
|
|
radar_codes.add(radar_code)
|
|
# codes.add((code, radar_code_variant))
|
|
|
|
for fw in car_fw[(Ecu.fwdCamera, 0x7c4, None)]:
|
|
start_idx = fw.index(b'\xf1\x00')
|
|
fw = fw[start_idx + 2:][:4]
|
|
|
|
# code = re.match(RADAR_REGEX, fw).group(0) # TODO: check NONE, or have a test
|
|
# radar_code_variant = fw[len(code):4].replace(b'_', b'').replace(b' ', b'')
|
|
|
|
radar_code = fw[:4].replace(b" ", b"").replace(b"_", b"")
|
|
|
|
camera_codes.add(radar_code)
|
|
# codes.add((code, radar_code_variant))
|
|
|
|
return radar_codes, camera_codes
|
|
# return codes
|
|
|
|
|
|
for car, car_fw in FW_VERSIONS.items():
|
|
radar_codes, camera_codes = get_platform_codes(car_fw)
|
|
|
|
print(f"{car:36}: radar: {radar_codes}, camera: {camera_codes}")
|
|
|
|
|
|
issue = set()
|
|
for i in range(200):
|
|
for car, versions in FW_VERSIONS.items():
|
|
if 'HYUNDAI GENESIS' in car:
|
|
continue
|
|
versions = {(ecu[1], ecu[2]): [random.choice(fws)] for ecu, fws in versions.items()}
|
|
# print(versions)
|
|
|
|
ret = match_fw_to_hyundai_fuzzy(versions)
|
|
# is_exact, ret = match_fw_to_car(versions, allow_exact=False)
|
|
# ret = match_fw_to_car_fuzzy(versions, config=None)
|
|
if len(ret) != 1:
|
|
print(f'Not one match! {car=}: {ret=}')
|
|
issue.add(car)
|
|
elif list(ret)[0] != car:
|
|
print(f'Matched to wrong car! real: {car}, match: {ret}')
|
|
issue.add(car)
|
|
|
|
print()
|
|
print('bad:', issue)
|
|
print()
|
|
print('good:', set(FW_VERSIONS) - issue)
|
|
# raise Exception
|
|
|