pull/28386/head
Shane Smiskol 3 years ago
parent 08962aad3b
commit bd7a0a2b53
  1. 32
      hkg_fuzzy_fp.py
  2. 39
      selfdrive/car/hyundai/values.py

@ -15,19 +15,37 @@ RADAR_REGEX = br'([A-Z]+[A-Z0-9]*)'
def get_platform_codes(car_fw): def get_platform_codes(car_fw):
codes = set() radar_codes = set()
camera_codes = set()
for fw in car_fw[(Ecu.fwdRadar, 0x7d0, None)]: for fw in car_fw[(Ecu.fwdRadar, 0x7d0, None)]:
start_idx = fw.index(b'\xf1\x00') start_idx = fw.index(b'\xf1\x00')
fw = fw[start_idx + 2:][:4] fw = fw[start_idx + 2:][:4]
code = re.match(RADAR_REGEX, fw).group(0) # TODO: check NONE, or have a test # 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_variant = fw[len(code):4].replace(b'_', b'').replace(b' ', b'')
codes.add((code, radar_code_variant)) radar_code = fw[:4].replace(b" ", b"").replace(b"_", b"")
return codes 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(): for car, car_fw in FW_VERSIONS.items():
codes = get_platform_codes(car_fw) radar_codes, camera_codes = get_platform_codes(car_fw)
print(f"{car:36}: {codes}")
print(f"{car:36}: radar: {radar_codes}, camera: {camera_codes}")

@ -320,41 +320,32 @@ FINGERPRINTS = {
} }
def get_platform_codes(fw_versions_dict): def get_platform_codes(fw_versions):
codes = set() codes = set()
key = (Ecu.fwdRadar, 0x7d0, None) if (Ecu.fwdRadar, 0x7d0, None) in fw_versions_dict else (0x7d0, None) platform_code_prefix = HYUNDAI_VERSION_REQUEST_LONG[1:]
# key = if from_db else (0x7d0, None)) for fw in fw_versions:
# for fw in fw_versions_dict[(Ecu.fwdRadar, 0x7d0, None)]: start_idx = fw.index(platform_code_prefix)
# for fw in fw_versions_dict[(0x7d0, None)]: # fwdRadar code = fw[start_idx + len(platform_code_prefix):][:4] # Hyundai platform code is max 4 bytes
for fw in fw_versions_dict[key]: # fwdRadar codes.add(code.replace(b" ", b"").replace(b"_", b""))
start_idx = fw.index(b'\xf1\x00')
fw = fw[start_idx + 2:][:4]
match = re.match(br'([A-Z]+[A-Z0-9]*)', fw)
if match is None:
return None
code = match.group(0)
radar_code_variant = fw[len(code):4].replace(b'_', b'').replace(b' ', b'')
codes.add((code, radar_code_variant))
return codes return codes
def match_fw_to_hyundai_fuzzy(fw_versions_dict): def match_fw_to_hyundai_fuzzy(fw_versions_dict):
platform_codes = get_platform_codes(fw_versions_dict) platform_codes_radar = get_platform_codes(fw_versions_dict[(0x7d0, None)])
if platform_codes is None or len(platform_codes) != 1: platform_codes_camera = get_platform_codes(fw_versions_dict[(0x7c4, None)])
if len(platform_codes_radar) != 1 or len(platform_codes_camera) != 1:
return set() return set()
platform_code = list(platform_codes)[0] platform_code_radar = list(platform_codes_radar)[0]
platform_codes_camera = list(platform_codes_camera)[0]
invalid = [] invalid = []
candidates = FW_VERSIONS candidates = FW_VERSIONS
for candidate, fws in candidates.items(): for candidate, fws in candidates.items():
candidate_platform_codes = get_platform_codes(fws) candidate_platform_codes_radar = get_platform_codes(fws[(Ecu.fwdRadar, 0x7d0, None)])
print(f"{candidate:36}", platform_code, candidate_platform_codes, platform_code in candidate_platform_codes) candidate_platform_codes_camera = get_platform_codes(fws[(Ecu.fwdCamera, 0x7c4, None)])
if platform_code not in candidate_platform_codes:
if not (platform_code_radar in candidate_platform_codes_radar and platform_codes_camera in candidate_platform_codes_camera):
invalid.append(candidate) invalid.append(candidate)
return set(candidates.keys()) - set(invalid) return set(candidates.keys()) - set(invalid)

Loading…
Cancel
Save