From d98bbc772cb2a605786443d8cf12abce963a07f6 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Fri, 21 Jun 2019 18:54:56 -0400 Subject: [PATCH] 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 --- klippy/mcu.py | 7 +++++-- klippy/serialhdl.py | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/klippy/mcu.py b/klippy/mcu.py index cb07658f..2facba0a 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -614,8 +614,11 @@ class MCU: and not os.path.exists(self._serialport)): # Try toggling usb power self._check_restart("enable power") - self._serial.connect() - self._clocksync.connect(self._serial) + try: + self._serial.connect() + self._clocksync.connect(self._serial) + except serialhdl.error as e: + raise error(str(e)) msgparser = self._serial.get_msgparser() name = self._name log_info = [ diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py index 0f182da2..6284fe4d 100644 --- a/klippy/serialhdl.py +++ b/klippy/serialhdl.py @@ -67,8 +67,11 @@ class SerialReader: def connect(self): # Initial connection logging.info("Starting serial connect") + start_time = self.reactor.monotonic() while 1: - starttime = self.reactor.monotonic() + connect_time = self.reactor.monotonic() + if connect_time > start_time + 150.: + raise error("Unable to connect") try: if self.baud: self.ser = serial.Serial( @@ -77,7 +80,7 @@ class SerialReader: self.ser = open(self.serialport, 'rb+') except (OSError, IOError, serial.SerialException) as e: logging.warn("Unable to open port: %s", e) - self.reactor.pause(starttime + 5.) + self.reactor.pause(connect_time + 5.) continue if self.baud: stk500v2_leave(self.ser, self.reactor) @@ -87,7 +90,7 @@ class SerialReader: self.background_thread.start() # Obtain and load the data dictionary from the firmware try: - identify_data = self._get_identify_data(starttime + 5.) + identify_data = self._get_identify_data(connect_time + 5.) except error as e: logging.exception("Timeout on serial connect") self.disconnect()