From 2720fdf2a10ff09d697dedc544cbcf80136ce276 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 16 Jul 2023 21:33:24 -0700 Subject: [PATCH] pandad: check comms protocol version (#28983) * proto version check * bump panda * update bootstub * test * bump panda * fix that * bump panda * fix test case * more fix --------- Co-authored-by: Comma Device --- panda | 2 +- selfdrive/boardd/pandad.py | 15 ++++-- selfdrive/boardd/tests/bootstub.panda_h7.bin | Bin 16860 -> 17000 bytes .../boardd/tests/bootstub.panda_h7_spiv0.bin | Bin 0 -> 16860 bytes selfdrive/boardd/tests/test_pandad.py | 51 +++++++++++------- 5 files changed, 46 insertions(+), 22 deletions(-) create mode 100755 selfdrive/boardd/tests/bootstub.panda_h7_spiv0.bin diff --git a/panda b/panda index 0c33554624..5d873444b2 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit 0c3355462483cf3150b7d481c76cbf0659c16c7a +Subproject commit 5d873444b2cf801ba73f4a457993260df3a412b8 diff --git a/selfdrive/boardd/pandad.py b/selfdrive/boardd/pandad.py index 6ab6d05b08..4d9b4d8960 100755 --- a/selfdrive/boardd/pandad.py +++ b/selfdrive/boardd/pandad.py @@ -7,7 +7,7 @@ import subprocess from typing import List, NoReturn from functools import cmp_to_key -from panda import Panda, PandaDFU, FW_PATH +from panda import Panda, PandaDFU, PandaProtocolMismatch, FW_PATH from common.basedir import BASEDIR from common.params import Params from selfdrive.boardd.set_time import set_time @@ -25,7 +25,12 @@ def get_expected_signature(panda: Panda) -> bytes: def flash_panda(panda_serial: str) -> Panda: - panda = Panda(panda_serial) + try: + panda = Panda(panda_serial) + except PandaProtocolMismatch: + cloudlog.warning("detected protocol mismatch, reflashing panda") + HARDWARE.recover_internal_panda() + raise fw_signature = get_expected_signature(panda) internal_panda = panda.is_internal() @@ -42,10 +47,11 @@ def flash_panda(panda_serial: str) -> Panda: if panda.bootstub: bootstub_version = panda.get_version() cloudlog.info(f"Flashed firmware not booting, flashing development bootloader. {bootstub_version=}, {internal_panda=}") + if internal_panda: HARDWARE.recover_internal_panda() panda.recover(reset=(not internal_panda)) - cloudlog.info("Done flashing bootloader") + cloudlog.info("Done flashing bootstub") if panda.bootstub: cloudlog.info("Panda still not booting, exiting") @@ -152,6 +158,9 @@ def main() -> NoReturn: # a panda was disconnected while setting everything up. let's try again cloudlog.exception("Panda USB exception while setting up") continue + except PandaProtocolMismatch: + cloudlog.exception("pandad.protocol_mismatch") + continue except Exception: cloudlog.exception("pandad.uncaught_exception") continue diff --git a/selfdrive/boardd/tests/bootstub.panda_h7.bin b/selfdrive/boardd/tests/bootstub.panda_h7.bin index 5cf2fa45196484fdfeb8ca952ca2ab89ff951e22..56c562a080ceadf0f28dcb1b9a36af2a57e02141 100755 GIT binary patch delta 5764 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 E0dZ=`u>b%7 delta 5619 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 diff --git a/selfdrive/boardd/tests/bootstub.panda_h7_spiv0.bin b/selfdrive/boardd/tests/bootstub.panda_h7_spiv0.bin new file mode 100755 index 0000000000000000000000000000000000000000..5cf2fa45196484fdfeb8ca952ca2ab89ff951e22 GIT binary patch literal 16860 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 HPRRcNEoX1h literal 0 HcmV?d00001 diff --git a/selfdrive/boardd/tests/test_pandad.py b/selfdrive/boardd/tests/test_pandad.py index aa5c1329a6..c1f080efe5 100755 --- a/selfdrive/boardd/tests/test_pandad.py +++ b/selfdrive/boardd/tests/test_pandad.py @@ -6,7 +6,7 @@ import unittest import cereal.messaging as messaging from cereal import log from common.gpio import gpio_set, gpio_init -from panda import Panda, PandaDFU +from panda import Panda, PandaDFU, PandaProtocolMismatch from selfdrive.test.helpers import phone_only from selfdrive.manager.process_config import managed_processes from system.hardware import HARDWARE @@ -22,8 +22,8 @@ class TestPandad(unittest.TestCase): def _wait_for_boardd(self, timeout=30): sm = messaging.SubMaster(['peripheralState']) - for _ in range(timeout): - sm.update(1000) + for _ in range(timeout*10): + sm.update(100) if sm['peripheralState'].pandaType != log.PandaState.PandaType.unknown: break @@ -34,6 +34,27 @@ class TestPandad(unittest.TestCase): HARDWARE.recover_internal_panda() assert Panda.wait_for_dfu(None, 10) + def _flash_and_test(self, fn, expect_mismatch=False): + self._go_to_dfu() + pd = PandaDFU(None) + if fn is None: + fn = os.path.join(HERE, pd.get_mcu_type().config.bootstub_fn) + with open(fn, "rb") as f: + pd.program_bootstub(f.read()) + pd.reset() + HARDWARE.reset_internal_panda() + + assert Panda.wait_for_panda(None, 10) + if expect_mismatch: + with self.assertRaises(PandaProtocolMismatch): + Panda() + else: + with Panda() as p: + assert p.bootstub + + managed_processes['pandad'].start() + self._wait_for_boardd(45) + @phone_only def test_in_dfu(self): HARDWARE.recover_internal_panda() @@ -72,23 +93,17 @@ class TestPandad(unittest.TestCase): self._wait_for_boardd(8) @phone_only - def test_release_to_devel_bootstub(self): - # flash release bootstub - self._go_to_dfu() - pd = PandaDFU(None) - fn = os.path.join(HERE, pd.get_mcu_type().config.bootstub_fn) - with open(fn, "rb") as f: - pd.program_bootstub(f.read()) - pd.reset() - HARDWARE.reset_internal_panda() + def test_protocol_version_check(self): + if HARDWARE.get_device_type() == 'tici': + self.skipTest("") - assert Panda.wait_for_panda(None, 10) - with Panda() as p: - assert p.bootstub - - managed_processes['pandad'].start() - self._wait_for_boardd(45) + # flash old fw + fn = os.path.join(HERE, "bootstub.panda_h7_spiv0.bin") + self._flash_and_test(fn, expect_mismatch=True) + @phone_only + def test_release_to_devel_bootstub(self): + self._flash_and_test(None) if __name__ == "__main__": unittest.main()