serialhdl: Eventually timeout connect attempt

If the serial connection has not been successful after 2.5 minutes
then report an error.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2019-06-21 18:54:56 -04:00
parent ebb375fee9
commit d98bbc772c
2 changed files with 11 additions and 5 deletions

View File

@ -614,8 +614,11 @@ class MCU:
and not os.path.exists(self._serialport)): and not os.path.exists(self._serialport)):
# Try toggling usb power # Try toggling usb power
self._check_restart("enable power") self._check_restart("enable power")
try:
self._serial.connect() self._serial.connect()
self._clocksync.connect(self._serial) self._clocksync.connect(self._serial)
except serialhdl.error as e:
raise error(str(e))
msgparser = self._serial.get_msgparser() msgparser = self._serial.get_msgparser()
name = self._name name = self._name
log_info = [ log_info = [

View File

@ -67,8 +67,11 @@ class SerialReader:
def connect(self): def connect(self):
# Initial connection # Initial connection
logging.info("Starting serial connect") logging.info("Starting serial connect")
start_time = self.reactor.monotonic()
while 1: while 1:
starttime = self.reactor.monotonic() connect_time = self.reactor.monotonic()
if connect_time > start_time + 150.:
raise error("Unable to connect")
try: try:
if self.baud: if self.baud:
self.ser = serial.Serial( self.ser = serial.Serial(
@ -77,7 +80,7 @@ class SerialReader:
self.ser = open(self.serialport, 'rb+') self.ser = open(self.serialport, 'rb+')
except (OSError, IOError, serial.SerialException) as e: except (OSError, IOError, serial.SerialException) as e:
logging.warn("Unable to open port: %s", e) logging.warn("Unable to open port: %s", e)
self.reactor.pause(starttime + 5.) self.reactor.pause(connect_time + 5.)
continue continue
if self.baud: if self.baud:
stk500v2_leave(self.ser, self.reactor) stk500v2_leave(self.ser, self.reactor)
@ -87,7 +90,7 @@ class SerialReader:
self.background_thread.start() self.background_thread.start()
# Obtain and load the data dictionary from the firmware # Obtain and load the data dictionary from the firmware
try: try:
identify_data = self._get_identify_data(starttime + 5.) identify_data = self._get_identify_data(connect_time + 5.)
except error as e: except error as e:
logging.exception("Timeout on serial connect") logging.exception("Timeout on serial connect")
self.disconnect() self.disconnect()