Skip to content

Commit bc72429

Browse files
authored
Merge pull request #384 from horw/release/v1.x
fix: reconnect for serial (backport)
2 parents 5335b50 + 618cd37 commit bc72429

File tree

1 file changed

+46
-1
lines changed
  • pytest-embedded-serial/pytest_embedded_serial

1 file changed

+46
-1
lines changed

pytest-embedded-serial/pytest_embedded_serial/serial.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,53 @@ def _event_loop(self):
193193

194194
try:
195195
s = self._s.read_all()
196+
except OSError as e:
197+
logging.error(f'OSError detected: {e}. Serial connection may be lost.')
198+
if self._s.closed:
199+
logging.error('Serial port is already closed. Exiting event loop.')
200+
return
201+
202+
port = self._s.port
203+
port_config = {
204+
'baudrate': self._s.baudrate,
205+
'bytesize': self._s.bytesize,
206+
'parity': self._s.parity,
207+
'stopbits': self._s.stopbits,
208+
'timeout': self._s.timeout,
209+
'xonxoff': self._s.xonxoff,
210+
'rtscts': self._s.rtscts,
211+
}
212+
for attempt in range(1, 4):
213+
delay = attempt * 1.5
214+
logging.warning(
215+
f'Attempting to reconnect to serial port {port} (try {attempt}/3) after {delay}s...'
216+
)
217+
time.sleep(delay)
218+
try:
219+
self._s.close()
220+
self._s = pyserial.serial_for_url(port, **port_config)
221+
logging.info(f'Successfully reconnected to serial port {port}.')
222+
break
223+
except Exception as e:
224+
logging.warning(f'Reconnection attempt {attempt} failed: {e}')
225+
else:
226+
logging.error(
227+
f'Failed to reconnect to serial port {port} after 3 attempts. Exiting event loop.'
228+
)
229+
return
230+
231+
continue
232+
233+
except Exception as e:
234+
logging.warning(
235+
'unknown error: %s.\nRecommend to close the serial process by `dut.serial.close()`', str(e)
236+
)
237+
return
238+
239+
try:
196240
self._q.put(s)
197-
except OSError:
241+
except OSError as e:
242+
logging.warning(f'OSError. Error msg: {e}')
198243
return
199244
except Exception as e:
200245
logging.warning(

0 commit comments

Comments
 (0)