From e747bae2dc41737dae819f116ddd6df9b643f28e Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Fri, 5 Dec 2025 14:37:02 +0000 Subject: [PATCH 1/2] add ftdi rest fix --- pylabrobot/io/serial.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pylabrobot/io/serial.py b/pylabrobot/io/serial.py index 80d11b1960..bc0371fc23 100644 --- a/pylabrobot/io/serial.py +++ b/pylabrobot/io/serial.py @@ -183,6 +183,20 @@ def _open_serial() -> serial.Serial: self._executor = None raise e + # --- FIX: Prevent FTDI reset on open/close (critical for Inheco on Raspberry Pi) --- + try: + # Some pyserial versions require direct attribute access: + self._ser.dtr = False + self._ser.rts = False + + # Others only respect the explicit setter: + self._ser.setDTR(False) + self._ser.setRTS(False) + + logger.info(f"[{candidate_port}] Disabled FTDI DTR/RTS (prevent USB disconnect).") + except Exception as e: + logger.warning(f"[{candidate_port}] Could not disable DTR/RTS: {e}") + self._port = candidate_port async def stop(self): From b5cbdbfbae319806a4152100c973cbaa524a5c01 Mon Sep 17 00:00:00 2001 From: Camillo Moschner Date: Fri, 5 Dec 2025 14:57:02 +0000 Subject: [PATCH 2/2] fix type checking --- pylabrobot/io/serial.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pylabrobot/io/serial.py b/pylabrobot/io/serial.py index bc0371fc23..67524a57c3 100644 --- a/pylabrobot/io/serial.py +++ b/pylabrobot/io/serial.py @@ -183,6 +183,8 @@ def _open_serial() -> serial.Serial: self._executor = None raise e + assert self._ser is not None + # --- FIX: Prevent FTDI reset on open/close (critical for Inheco on Raspberry Pi) --- try: # Some pyserial versions require direct attribute access: