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