diff --git a/python/__init__.py b/python/__init__.py index 2e44b3db..59fe2e0d 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -224,7 +224,7 @@ class Panda: FLAG_GM_HW_CAM_LONG = 2 def __init__(self, serial: Optional[str] = None, claim: bool = True, disable_checks: bool = True): - self._serial = serial + self._connect_serial = serial self._disable_checks = disable_checks self._handle = None @@ -252,9 +252,9 @@ class Panda: self._handle = None # try USB first, then SPI - self._handle, serial, self.bootstub, bcd = self.usb_connect(self._serial, claim=claim, wait=wait) + self._handle, serial, self.bootstub, bcd = self.usb_connect(self._connect_serial, claim=claim, wait=wait) if self._handle is None: - self._handle, serial, self.bootstub, bcd = self.spi_connect(self._serial) + self._handle, serial, self.bootstub, bcd = self.spi_connect(self._connect_serial) if self._handle is None: raise Exception("failed to connect to panda") @@ -277,6 +277,7 @@ class Panda: self._assume_f4_mcu = (self._bcd_hw_type is None) and missing_hw_type_endpoint self._serial = serial + self._connect_serial = serial self._mcu_type = self.get_mcu_type() self.health_version, self.can_version, self.can_health_version = self.get_packets_versions() logging.debug("connected") diff --git a/python/dfu.py b/python/dfu.py index dfdec1fd..86c48839 100644 --- a/python/dfu.py +++ b/python/dfu.py @@ -46,7 +46,7 @@ class PandaDFU: return dfu_serials @staticmethod - def st_serial_to_dfu_serial(st, mcu_type=McuType.F4): + def st_serial_to_dfu_serial(st: str, mcu_type: McuType = McuType.F4): if st is None or st == "none": return None uid_base = struct.unpack("H" * 6, bytes.fromhex(st)) diff --git a/tests/hitl/0_dfu.py b/tests/hitl/0_dfu.py new file mode 100644 index 00000000..990823ac --- /dev/null +++ b/tests/hitl/0_dfu.py @@ -0,0 +1,21 @@ +from panda import Panda, PandaDFU +from .helpers import test_all_pandas, panda_connect_and_init + +@test_all_pandas +@panda_connect_and_init +def test_dfu(p): + app_mcu_type = p.get_mcu_type() + dfu_serial = PandaDFU.st_serial_to_dfu_serial(p.get_usb_serial(), p.get_mcu_type()) + + p.reset(enter_bootstub=True) + p.reset(enter_bootloader=True) + assert Panda.wait_for_dfu(dfu_serial, timeout=20), "failed to enter DFU" + + dfu = PandaDFU(dfu_serial) + assert dfu._mcu_type == app_mcu_type + + assert dfu_serial in PandaDFU.list() + + dfu.clear_status() + dfu.reset() + p.reconnect()