#!/usr/bin/env python3 import re from cereal import car from selfdrive.car.hyundai.values import FW_VERSIONS Ecu = car.CarParams.Ecu platform_codes = set() # these ecus are available on all cars (even CAN FD with no OBD fingerprinting) fw_keys = [(Ecu.fwdCamera, 0x7c4, None), (Ecu.fwdRadar, 0x7d0, None)] RADAR_REGEX = br'([A-Z]+[A-Z0-9]*)' def get_platform_codes(car_fw): 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'') radar_code = fw[:4].replace(b" ", b"").replace(b"_", b"") 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(): radar_codes, camera_codes = get_platform_codes(car_fw) print(f"{car:36}: radar: {radar_codes}, camera: {camera_codes}")