File tree Expand file tree Collapse file tree 1 file changed +46
-1
lines changed
pytest-embedded-serial/pytest_embedded_serial Expand file tree Collapse file tree 1 file changed +46
-1
lines changed Original file line number Diff line number Diff 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.\n Recommend 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 (
You can’t perform that action at this time.
0 commit comments