From b91139055d7d1802c1eb726504798c156a183c9c Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Mon, 12 Jun 2023 20:51:22 -0700 Subject: [PATCH] different method first draft --- selfdrive/car/hyundai/values.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index dda327804b..0db9850b76 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -1,10 +1,11 @@ import re +from collections import defaultdict from datetime import datetime from dateutil import rrule -from collections import defaultdict from dataclasses import dataclass from enum import Enum, IntFlag -from typing import DefaultDict, Dict, List, Optional, Set, Union +import functools +from typing import DefaultDict, Dict, List, Optional, Set, Tuple, Union from cereal import car from panda.python import uds @@ -348,6 +349,29 @@ FINGERPRINTS = { } +@functools.cache +def parse_platform_code(fw_version: bytes) -> Tuple[Optional[bytes], Optional[bytes]]: + match = PLATFORM_CODE_PATTERN.search(fw_version) + code, date = None, None + if match is not None: + code, date = match.groups() + return code, date + + +def hyundai_fuzzy(fw_versions_dict) -> Set[str]: + all_platform_codes = defaultdict(set) + for candidate, fw_by_addr in FW_VERSIONS.items(): + for addr, fws in fw_by_addr.items(): + if addr[0] not in FW_QUERY_CONFIG.platform_code_ecus: + continue + + for fw in fws: + code, date = parse_platform_code(fw) + if code is not None: + all_platform_codes[(addr[1], addr[2], code)].add(candidate) + + + def get_platform_codes(fw_versions: List[bytes]) -> Set[bytes]: codes: DefaultDict[bytes, Set[bytes]] = defaultdict(set) for fw in fw_versions: