From 7b16f38ba3abe36ff92f163d4fc71ad275c4254a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 11 Mar 2016 11:16:27 +0100 Subject: [PATCH] Fetch timeouts for communication only once from settings --- src/octoprint/util/comm.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index abc78331..0db2e0a9 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -228,6 +228,12 @@ class MachineCom(object): self._connection_closing = False self._timeout = None + self._timeout_intervals = dict() + for key, value in settings().get(["serial", "timeout"], merged=True, asdict=True).items(): + try: + self._timeout_intervals[key] = float(value) + except: + pass self._hello_command = settings().get(["serial", "helloCommand"]) self._trigger_ok_for_m29 = settings().getBoolean(["serial", "triggerOkForM29"]) @@ -625,7 +631,7 @@ class MachineCom(object): self.sendCommand("M24") - self._sd_status_timer = RepeatedTimer(lambda: get_interval("sdStatus", default_value=1.0), self._poll_sd_status, run_first=True) + self._sd_status_timer = RepeatedTimer(self._timeout_intervals.get("sdStatus", 1.0), self._poll_sd_status, run_first=True) self._sd_status_timer.start() else: if pos is not None and isinstance(pos, int) and pos > 0: @@ -891,7 +897,7 @@ class MachineCom(object): self._changeState(self.STATE_CONNECTING) #Start monitoring the serial port. - self._timeout = get_new_timeout("communication") + self._timeout = get_new_timeout("communication", self._timeout_intervals) startSeen = False supportRepetierTargetTemp = settings().getBoolean(["feature", "repetierTargetTemp"]) @@ -910,7 +916,7 @@ class MachineCom(object): if line is None: break if line.strip() is not "": - self._timeout = get_new_timeout("communication") + self._timeout = get_new_timeout("communication", self._timeout_intervals) ##~~ debugging output handling if line.startswith("//"): @@ -1155,7 +1161,7 @@ class MachineCom(object): self._serial.timeout = connection_timeout self._log("Trying baudrate: %d" % (baudrate)) self._baudrateDetectRetry = 5 - self._timeout = get_new_timeout("communication") + self._timeout = get_new_timeout("communication", self._timeout_intervals) self._serial.write('\n') self.sayHello() except: @@ -1306,7 +1312,7 @@ class MachineCom(object): def _onConnected(self): self._serial.timeout = settings().getFloat(["serial", "timeout", "communication"]) - self._temperature_timer = RepeatedTimer(lambda: get_interval("temperature", default_value=4.0), self._poll_temperature, run_first=True) + self._temperature_timer = RepeatedTimer(self._timeout_intervals.get("temperature", 4.0), self._poll_temperature, run_first=True) self._temperature_timer.start() self._changeState(self.STATE_OPERATIONAL) @@ -2029,7 +2035,7 @@ class MachineCom(object): _timeout = float(p_match.group("value")) / 1000.0 elif s_match: _timeout = float(s_match.group("value")) - self._timeout = get_new_timeout("communication") + _timeout + self._timeout = get_new_timeout("communication", self._timeout_intervals) + _timeout ##~~ command phase handlers @@ -2297,21 +2303,11 @@ class TypeAlreadyInQueue(Exception): self.type = t -def get_new_timeout(type): +def get_new_timeout(type, intervals): now = time.time() - return now + get_interval(type) + return now + intervals.get(type, 0.0) -def get_interval(type, default_value=0.0): - if type not in default_settings["serial"]["timeout"]: - return default_value - else: - value = settings().getFloat(["serial", "timeout", type]) - if not value: - return default_value - else: - return value - _temp_command_regex = re.compile("^M(?P104|109|140|190)(\s+T(?P\d+)|\s+S(?P[-+]?\d*\.?\d*))+") def apply_temperature_offsets(line, offsets, current_tool=None):