From c5c78b42e3edb7a6faf35a53f1e4d8a341ea96ac Mon Sep 17 00:00:00 2001 From: "Mr.one" Date: Tue, 4 Aug 2026 12:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91pandad.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- selfdrive/pandad/pandad.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/selfdrive/pandad/pandad.py b/selfdrive/pandad/pandad.py index a0bca3f23..37b512634 100755 --- a/selfdrive/pandad/pandad.py +++ b/selfdrive/pandad/pandad.py @@ -16,12 +16,8 @@ from openpilot.sunnypilot.selfdrive.pandad.rivian_long_flasher import flash_rivi def get_expected_signature() -> bytes: - try: - fn = os.path.join(FW_PATH, McuType.H7.config.app_fn) - return Panda.get_signature_from_firmware(fn) - except Exception: - cloudlog.exception("Error computing expected signature") - return b"" + fn = os.path.join(FW_PATH, McuType.H7.config.app_fn) + return Panda.get_signature_from_firmware(fn) def flash_panda(panda_serial: str) -> Panda: try: @@ -103,13 +99,21 @@ def main() -> None: # Handle missing internal panda if no_internal_panda_count > 0: - if no_internal_panda_count == 3: - cloudlog.info("No pandas found, putting internal panda into DFU") - HARDWARE.recover_internal_panda() - else: - cloudlog.info("No pandas found, resetting internal panda") - HARDWARE.reset_internal_panda() - time.sleep(3) # wait to come back up + cloudlog.info("No pandas found, resetting internal panda") + HARDWARE.reset_internal_panda() + # The internal panda takes a few seconds to boot its app after a reset. + # Wait for it to come back in normal mode before deciding to flash. + panda_serials: list[str] = [] + for _ in range(16): + panda_serials = Panda.list() + if len(panda_serials) == 1: + try: + with Panda(panda_serials[0]) as p: + if not p.bootstub: + break + except Exception: + pass + time.sleep(0.5) # Flash all Pandas in DFU mode dfu_serials = PandaDFU.list()