diff --git a/selfdrive/pandad/pandad.py b/selfdrive/pandad/pandad.py index a8300de321..f65c64259f 100755 --- a/selfdrive/pandad/pandad.py +++ b/selfdrive/pandad/pandad.py @@ -68,21 +68,20 @@ def flash_panda(panda_serial: str) -> Panda: return panda -def check_panda_support(panda_serials: list[str]) -> bool: - unsupported = [] +def check_panda_support(panda_serials: list[str]) -> list[str]: + spi_serials = set(Panda.spi_list()) + for serial in panda_serials: + if serial in spi_serials: + return [serial] + for serial in panda_serials: panda = Panda(serial) - hw_type = panda.get_type() + is_internal = panda.is_internal() panda.close() - if hw_type in Panda.SUPPORTED_DEVICES: - return True + if is_internal: + return [serial] - unsupported.append((serial, hw_type)) - - for serial, hw_type in unsupported: - cloudlog.warning(f"Panda {serial} is not supported (hw_type: {hw_type}), skipping...") - - return False + return [] def main() -> None: @@ -137,8 +136,9 @@ def main() -> None: # custom flasher for xnor's Rivian Longitudinal Upgrade Kit flash_rivian_long(panda_serials) - # skip flashing and health check if no supported panda is detected - if not check_panda_support(panda_serials): + # find the internal supported panda (e.g. skip external Black Panda) + panda_serials = check_panda_support(panda_serials) + if len(panda_serials) == 0: continue # Flash the first panda diff --git a/sunnypilot/selfdrive/pandad/rivian_long_flasher.py b/sunnypilot/selfdrive/pandad/rivian_long_flasher.py index 70ddb44358..305b994c78 100755 --- a/sunnypilot/selfdrive/pandad/rivian_long_flasher.py +++ b/sunnypilot/selfdrive/pandad/rivian_long_flasher.py @@ -84,7 +84,11 @@ def flash_rivian_long(panda_serials: list[str]) -> None: cloudlog.info("Not a Rivian, skipping longitudinal upgrade...") return + # only check USB connected pandas, internal panda uses SPI and is never an external panda + usb_serials = set(Panda.usb_list()) for serial in panda_serials: + if serial not in usb_serials: + continue panda = Panda(serial) # only flash external black pandas (HW_TYPE_BLACK = 0x03) if panda.get_type() == b'\x03' and not panda.is_internal():