diff --git a/selfdrive/car/volkswagen/tests/test_volkswagen.py b/selfdrive/car/volkswagen/tests/test_volkswagen.py new file mode 100755 index 00000000000000..e4548ab76c263b --- /dev/null +++ b/selfdrive/car/volkswagen/tests/test_volkswagen.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +import unittest + +from openpilot.selfdrive.car.volkswagen.values import SPARE_PART_FW_PATTERN +from openpilot.selfdrive.car.volkswagen.fingerprints import FW_VERSIONS + + +class TestVolkswagenPlatformConfigs(unittest.TestCase): + def test_spare_part_fw_pattern(self): + # Relied on for determining if a FW is likely VW + for platform, ecus in FW_VERSIONS.items(): + with self.subTest(platform=platform): + for fws in ecus.values(): + for fw in fws: + self.assertNotEqual(SPARE_PART_FW_PATTERN.match(fw), None, f"Bad FW: {fw}") + + +if __name__ == "__main__": + unittest.main() diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py index c4e037d9c5f013..42dc2869ca79b8 100644 --- a/selfdrive/car/volkswagen/values.py +++ b/selfdrive/car/volkswagen/values.py @@ -1,6 +1,7 @@ from collections import namedtuple from dataclasses import dataclass, field from enum import Enum, IntFlag +import re from cereal import car from panda.python import uds @@ -362,6 +363,9 @@ class CAR(Platforms): VOLKSWAGEN_RX_OFFSET = 0x6a +# TODO: determine the unknown groups +SPARE_PART_FW_PATTERN = re.compile(b'\xf1\x87(?P[0-9][0-9A-Z]{2})(?P[0-9][0-9A-Z][0-9])(?P[0-9A-Z]{2}[0-9])([A-Z0-9]| )') + FW_QUERY_CONFIG = FwQueryConfig( # TODO: add back whitelists after we gather enough data requests=[request for bus, obd_multiplexing in [(1, True), (1, False), (0, False)] for request in [