You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.6 KiB
45 lines
1.6 KiB
#!/usr/bin/env python3
|
|
import random
|
|
import unittest
|
|
from collections import defaultdict
|
|
from parameterized import parameterized
|
|
|
|
from cereal import car
|
|
from selfdrive.car.car_helpers import get_interface_attr, interfaces
|
|
from selfdrive.car.fingerprints import FW_VERSIONS
|
|
from selfdrive.car.fw_versions import FW_QUERY_CONFIGS, VERSIONS, match_fw_to_car
|
|
|
|
CarFw = car.CarParams.CarFw
|
|
Ecu = car.CarParams.Ecu
|
|
|
|
ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()}
|
|
|
|
|
|
class TestFwFingerprint(unittest.TestCase):
|
|
# TODO: test multiple pandas
|
|
@parameterized.expand([(1,), (2,)])
|
|
def test_fw_query_metrics(self, num_pandas):
|
|
for brand, config in FW_QUERY_CONFIGS.items():
|
|
with self.subTest(brand=brand, num_pandas=num_pandas):
|
|
requests = [r for r in config.requests if r.bus <= num_pandas * 4 - 1]
|
|
multi_panda_requests = [r for r in config.requests if r.bus > 3]
|
|
|
|
if not len(multi_panda_requests) and num_pandas > 1:
|
|
raise unittest.SkipTest("No multi-panda FW queries")
|
|
|
|
total_time = 0
|
|
obd_multiplexing = config.requests[0].obd_multiplexing # only count OBD multiplexing transitions
|
|
for r in requests:
|
|
total_time += 0.1
|
|
|
|
if r.obd_multiplexing != obd_multiplexing and r.bus % 4 == 1:
|
|
obd_multiplexing = r.obd_multiplexing
|
|
total_time += 0.1
|
|
|
|
total_time = round(total_time, 2)
|
|
self.assertLessEqual(total_time, 1.1)
|
|
print(f'{brand=}, {num_pandas=}, {len(requests)=}, total FW query time={total_time} seconds')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
|