diff --git a/hkg_fuzzy_fp.py b/hkg_fuzzy_fp.py index 06a6f282a4..23e65bf432 100644 --- a/hkg_fuzzy_fp.py +++ b/hkg_fuzzy_fp.py @@ -15,19 +15,37 @@ RADAR_REGEX = br'([A-Z]+[A-Z0-9]*)' def get_platform_codes(car_fw): - codes = set() + radar_codes = set() + camera_codes = set() 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'') + # 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'') - 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(): - codes = get_platform_codes(car_fw) - print(f"{car:36}: {codes}") + radar_codes, camera_codes = get_platform_codes(car_fw) + + print(f"{car:36}: radar: {radar_codes}, camera: {camera_codes}") diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index df12a8d48b..7fd863a4f2 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -320,41 +320,32 @@ FINGERPRINTS = { } -def get_platform_codes(fw_versions_dict): +def get_platform_codes(fw_versions): codes = set() - key = (Ecu.fwdRadar, 0x7d0, None) if (Ecu.fwdRadar, 0x7d0, None) in fw_versions_dict else (0x7d0, None) - # key = if from_db else (0x7d0, None)) - # for fw in fw_versions_dict[(Ecu.fwdRadar, 0x7d0, None)]: - # for fw in fw_versions_dict[(0x7d0, None)]: # fwdRadar - for fw in fw_versions_dict[key]: # fwdRadar - 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)) - + platform_code_prefix = HYUNDAI_VERSION_REQUEST_LONG[1:] + for fw in fw_versions: + start_idx = fw.index(platform_code_prefix) + code = fw[start_idx + len(platform_code_prefix):][:4] # Hyundai platform code is max 4 bytes + codes.add(code.replace(b" ", b"").replace(b"_", b"")) return codes def match_fw_to_hyundai_fuzzy(fw_versions_dict): - platform_codes = get_platform_codes(fw_versions_dict) - if platform_codes is None or len(platform_codes) != 1: + platform_codes_radar = get_platform_codes(fw_versions_dict[(0x7d0, None)]) + 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() - platform_code = list(platform_codes)[0] + platform_code_radar = list(platform_codes_radar)[0] + platform_codes_camera = list(platform_codes_camera)[0] invalid = [] candidates = FW_VERSIONS for candidate, fws in candidates.items(): - candidate_platform_codes = get_platform_codes(fws) - print(f"{candidate:36}", platform_code, candidate_platform_codes, platform_code in candidate_platform_codes) - if platform_code not in candidate_platform_codes: + candidate_platform_codes_radar = get_platform_codes(fws[(Ecu.fwdRadar, 0x7d0, None)]) + candidate_platform_codes_camera = get_platform_codes(fws[(Ecu.fwdCamera, 0x7c4, None)]) + + if not (platform_code_radar in candidate_platform_codes_radar and platform_codes_camera in candidate_platform_codes_camera): invalid.append(candidate) return set(candidates.keys()) - set(invalid)