From e0027c3cba8060273e2f613dd85a55a8b701f56e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 23 Apr 2015 10:07:05 +0200 Subject: [PATCH] Made baudrate detection a bit more solid --- CHANGELOG.md | 1 + src/octoprint/util/comm.py | 18 ++++-------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e5f0227..bf044552 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -121,6 +121,7 @@ * Added support for rectangular printer beds with the origin in the center ([#682](https://github.com/foosel/OctoPrint/issues/682) and [#852](https://github.com/foosel/OctoPrint/pull/852)). Printer profiles now contain a new settings ``volume.origin`` which can either be ``lowerleft`` or ``center``. For circular beds only ``center`` is supported. +* Made baudrate detection a bit more solid, still can't perform wonders. ### Bug Fixes diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index 8147b39f..c2f16e84 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -1013,7 +1013,6 @@ class MachineCom(object): self._log("Baudrate test retry: %d" % (self._baudrateDetectRetry)) self._sendCommand("M105") self._clear_to_send.set() - self._testingBaudrate = True else: baudrate = self._baudrateDetectList.pop(0) try: @@ -1021,25 +1020,15 @@ class MachineCom(object): self._serial.timeout = settings().getFloat(["serial", "timeout", "detection"]) self._log("Trying baudrate: %d" % (baudrate)) self._baudrateDetectRetry = 5 - self._baudrateDetectTestOk = 0 self._timeout = get_new_timeout("communication") self._serial.write('\n') self._sendCommand("M105") self._clear_to_send.set() - self._testingBaudrate = True except: self._log("Unexpected error while setting baudrate: %d %s" % (baudrate, get_exception_string())) - elif 'ok' in line and 'T:' in line: - self._baudrateDetectTestOk += 1 - if self._baudrateDetectTestOk < 10: - self._log("Baudrate test ok: %d" % (self._baudrateDetectTestOk)) - self._sendCommand("M105") - else: - self._sendCommand("M999") - self._serial.timeout = settings().getFloat(["serial", "timeout", "connection"]) - self._onConnected() - else: - self._testingBaudrate = False + elif 'start' in line or ('ok' in line and 'T:' in line): + self._onConnected() + self._clear_to_send.set() ### Connection attempt elif self._state == self.STATE_CONNECTING: @@ -1158,6 +1147,7 @@ class MachineCom(object): self.sendCommand("M27", cmd_type="sd_status_poll") def _onConnected(self): + self._serial.timeout = settings().getFloat(["serial", "timeout", "communication"]) self._temperature_timer = RepeatedTimer(lambda: get_interval("temperature"), self._poll_temperature, run_first=True) self._temperature_timer.start()