From f45ad6bab9c008ec14f4c2ff5ee3267a7368f634 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sun, 10 Aug 2025 02:52:02 -0400 Subject: [PATCH] panda: skip flash and firmware check if deprecated panda is detected (#1117) * flash: skip if deprecated panda is detected * skip firmware checks * wrong * typing * fix * revert --- selfdrive/pandad/pandad.cc | 9 +++++++++ selfdrive/pandad/pandad.h | 11 +++++++++++ selfdrive/pandad/pandad.py | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/selfdrive/pandad/pandad.cc b/selfdrive/pandad/pandad.cc index 3dbfbcf08..26f42add6 100644 --- a/selfdrive/pandad/pandad.cc +++ b/selfdrive/pandad/pandad.cc @@ -84,6 +84,15 @@ Panda *connect(std::string serial="", uint32_t index=0) { panda->set_can_fd_auto(i, true); } + bool is_deprecated_panda = std::find(DEPRECATED_PANDA_TYPES.begin(), + DEPRECATED_PANDA_TYPES.end(), + panda->hw_type) != DEPRECATED_PANDA_TYPES.end(); + + if (is_deprecated_panda) { + LOGW("panda %s is deprecated (hw_type: %i), skipping firmware check...", panda->hw_serial().c_str(), static_cast(panda->hw_type)); + return panda.release(); + } + if (!panda->up_to_date() && !getenv("BOARDD_SKIP_FW_CHECK")) { throw std::runtime_error("Panda firmware out of date. Run pandad.py to update."); } diff --git a/selfdrive/pandad/pandad.h b/selfdrive/pandad/pandad.h index cda6a16a4..cdacdc894 100644 --- a/selfdrive/pandad/pandad.h +++ b/selfdrive/pandad/pandad.h @@ -8,6 +8,17 @@ void pandad_main_thread(std::vector serials); +// deprecated devices +static const std::vector DEPRECATED_PANDA_TYPES = { + cereal::PandaState::PandaType::WHITE_PANDA, + cereal::PandaState::PandaType::GREY_PANDA, + cereal::PandaState::PandaType::BLACK_PANDA, + cereal::PandaState::PandaType::PEDAL, + cereal::PandaState::PandaType::UNO, + cereal::PandaState::PandaType::RED_PANDA_V2 +}; + + class PandaSafety { public: PandaSafety(const std::vector &pandas) : pandas_(pandas) {} diff --git a/selfdrive/pandad/pandad.py b/selfdrive/pandad/pandad.py index b33ffb647..9822a74f9 100755 --- a/selfdrive/pandad/pandad.py +++ b/selfdrive/pandad/pandad.py @@ -36,6 +36,12 @@ def flash_panda(panda_serial: str) -> Panda: panda_signature = b"" if panda.bootstub else panda.get_signature() cloudlog.warning(f"Panda {panda_serial} connected, version: {panda_version}, signature {panda_signature.hex()[:16]}, expected {fw_signature.hex()[:16]}") + # skip flashing if the detected device is deprecated from upstream + hw_type = panda.get_type() + if hw_type in Panda.DEPRECATED_DEVICES: + cloudlog.warning(f"Panda {panda_serial} is deprecated (hw_type: {hw_type}), skipping flash...") + return panda + if panda.bootstub or panda_signature != fw_signature: cloudlog.info("Panda firmware out of date, update required") panda.flash()