From 565861f680210ef6f3c13a375d3829ee7b319042 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Fri, 31 Mar 2017 20:48:29 -0400 Subject: [PATCH] reactor: Support pause() command even when the reactor is not running If the reactor isn't running then implement pause using the system sleep command. This simplifies the users of pause(). Signed-off-by: Kevin O'Connor --- klippy/reactor.py | 10 +++++++++- klippy/serialhdl.py | 8 ++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/klippy/reactor.py b/klippy/reactor.py index 1fd8426a..65536616 100644 --- a/klippy/reactor.py +++ b/klippy/reactor.py @@ -3,7 +3,7 @@ # Copyright (C) 2016 Kevin O'Connor # # This file may be distributed under the terms of the GNU GPLv3 license. -import select, math +import select, math, time import greenlet import chelper @@ -71,9 +71,17 @@ class SelectReactor: return 0. return min(1., max(.001, self._next_timer - self.monotonic())) # Greenlets + def _sys_pause(self, waketime): + # Pause using system sleep for when reactor not running + delay = waketime - self.monotonic() + if delay > 0.: + time.sleep(delay) + return self.monotonic() def pause(self, waketime): g = greenlet.getcurrent() if g is not self._g_dispatch: + if self._g_dispatch is None: + return self._sys_pause(waketime) return self._g_dispatch.switch(waketime) if self._greenlets: g_next = self._greenlets.pop() diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py index ef344381..35e2a135 100644 --- a/klippy/serialhdl.py +++ b/klippy/serialhdl.py @@ -3,7 +3,7 @@ # Copyright (C) 2016 Kevin O'Connor # # This file may be distributed under the terms of the GNU GPLv3 license. -import logging, threading, time +import logging, threading import serial import msgproto, chelper, util @@ -338,10 +338,10 @@ def arduino_reset(serialport, reactor): # First try opening the port at 1200 baud ser = serial.Serial(serialport, 1200, timeout=0) ser.read(1) - time.sleep(0.100) + reactor.pause(reactor.monotonic() + 0.100) # Then try toggling DTR ser.dtr = True - time.sleep(0.100) + reactor.pause(reactor.monotonic() + 0.100) ser.dtr = False - time.sleep(0.100) + reactor.pause(reactor.monotonic() + 0.100) ser.close()