diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-02-06 13:31:34 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-02-06 13:31:34 -0500 |
commit | 20d0936fa256e0caa41a18a79556c8ade3f8347f (patch) | |
tree | 230424417d2f1b0c148d677ecf3d1003dfd943ac /klippy/serialhdl.py | |
parent | c24b7a7ef96b6c9770fdf4c821f5719892732033 (diff) | |
download | kutter-20d0936fa256e0caa41a18a79556c8ade3f8347f.tar.gz kutter-20d0936fa256e0caa41a18a79556c8ade3f8347f.tar.xz kutter-20d0936fa256e0caa41a18a79556c8ade3f8347f.zip |
reactor: Use the system monotonic clock instead of the normal system clock
The normal system clock can have sudden jumps if the system clock is
changed. Use the system monotonic clock to avoid these sudden changes
in time.
It appears the Raspbian OS (which is used by OctoPi) is setup to
update the system clock upon network connectivity. This could cause
sudden system clock changes which could lead to Klippy processing
errors. Using the monotonic clock eliminates these issues.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/serialhdl.py')
-rw-r--r-- | klippy/serialhdl.py | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py index 143fd138..b943f2da 100644 --- a/klippy/serialhdl.py +++ b/klippy/serialhdl.py @@ -3,7 +3,7 @@ # Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net> # # This file may be distributed under the terms of the GNU GPLv3 license. -import time, logging, threading +import logging, threading import serial import msgproto, chelper, util @@ -60,7 +60,7 @@ class SerialReader: # Initial connection logging.info("Starting serial connect") while 1: - starttime = time.time() + starttime = self.reactor.monotonic() try: self.ser = serial.Serial(self.serialport, self.baud, timeout=0) except OSError, e: @@ -106,7 +106,7 @@ class SerialReader: est_clock = float(self.msgparser.config['CLOCK_FREQ']) self.serialqueue = self.ffi_lib.serialqueue_alloc(self.ser.fileno(), 1) self.est_clock = est_clock - self.last_ack_time = time.time() + self.last_ack_time = self.reactor.monotonic() self.last_ack_clock = 0 self.ffi_lib.serialqueue_set_clock_est( self.serialqueue, self.est_clock, self.last_ack_time @@ -232,7 +232,7 @@ class SerialRetryCommand: self.cmd = cmd self.name = name self.response = None - self.min_query_time = time.time() + self.min_query_time = self.serial.reactor.monotonic() self.serial.register_callback(self.handle_callback, self.name) self.send_timer = self.serial.reactor.register_timer( self.send_event, self.serial.reactor.NOW) @@ -246,7 +246,7 @@ class SerialRetryCommand: if last_sent_time >= self.min_query_time: self.response = params def get_response(self): - eventtime = time.time() + eventtime = self.serial.reactor.monotonic() while self.response is None: eventtime = self.serial.reactor.pause(eventtime + 0.05) self.serial.unregister_callback(self.name) @@ -267,7 +267,7 @@ class SerialBootStrap: self.send_timer = self.serial.reactor.register_timer( self.send_event, self.serial.reactor.NOW) def get_identify_data(self, timeout): - eventtime = time.time() + eventtime = self.serial.reactor.monotonic() while not self.is_done and eventtime <= timeout: eventtime = self.serial.reactor.pause(eventtime + 0.05) self.serial.unregister_callback('identify_response') @@ -305,10 +305,10 @@ def stk500v2_leave(ser, reactor): ser.read(1) # Send stk500v2 leave programmer sequence ser.baudrate = 115200 - reactor.pause(time.time() + 0.100) + reactor.pause(reactor.monotonic() + 0.100) ser.read(4096) ser.write('\x1b\x01\x00\x01\x0e\x11\x04') - reactor.pause(time.time() + 0.050) + reactor.pause(reactor.monotonic() + 0.050) res = ser.read(4096) logging.debug("Got %s from stk500v2" % (repr(res),)) ser.baudrate = origbaud |