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):
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}")

@ -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)

Loading…
Cancel
Save