diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index 2cea2d2a..6bea89a9 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -887,25 +887,10 @@ class MachineCom(object): connection_timeout = settings().getFloat(["serial", "timeout", "connection"]) detection_timeout = settings().getFloat(["serial", "timeout", "detection"]) - # M110 polling during connection phase + # enqueue an M105 first thing if try_hello: - # we do this repeatedly since depending on firmware/bootloader/cable it might happen - # that stuff gets lost during connection initialization, and if that stuff happens - # to be an "ok", we'll get stuck - # - # so let's make things a bit more robust here and just have it send an M110 every second - # while in "connecting" state so that we can retrigger an M110 processing if the "ok" - # for the first one gets lost - - def poll_connection(): - self._logger.debug("Performing M110 poll") - self._sendCommand("M110") - self._clear_to_send.set() - connection_poller = RepeatedTimer(1, poll_connection, - run_first=True, - condition=lambda: self._state == self.STATE_CONNECTING, - on_finish=lambda: self._logger.debug("Stopping M110 poll, no longer connecting")) - connection_poller.start() + self._sendCommand("M110") + self._clear_to_send.set() while self._monitoring_active: try: @@ -1131,10 +1116,6 @@ class MachineCom(object): ### Baudrate detection if self._state == self.STATE_DETECT_BAUDRATE: - # TODO this needs to be rewritten to make use of a repeated timer and to move it outside of the monitor thread - # makes way more sense to have it as a separate function that is part of the connection attempt, not of - # the protocol implementation - # that whole _monitor loop is soooo ugly... if line == '' or time.time() > self._timeout: if self._baudrateDetectRetry > 0: self._serial.timeout = detection_timeout @@ -1170,6 +1151,8 @@ class MachineCom(object): elif self._state == self.STATE_CONNECTING: if "start" in line and not startSeen: startSeen = True + self._sendCommand("M110") + self._clear_to_send.set() elif line.startswith("ok"): self._onConnected() elif time.time() > self._timeout: