diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-09-27 09:10:41 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-09-27 09:10:41 -0400 |
commit | f37fc775e539313a649bcc035c385c6d36fb06c2 (patch) | |
tree | d6fa105e3ba653dbefcddf89ab930c13434f4969 /klippy/clocksync.py | |
parent | ead99cf647d72127b4e7f48d91f9e0fc41b501b6 (diff) | |
download | kutter-f37fc775e539313a649bcc035c385c6d36fb06c2.tar.gz kutter-f37fc775e539313a649bcc035c385c6d36fb06c2.tar.xz kutter-f37fc775e539313a649bcc035c385c6d36fb06c2.zip |
clocksync: Be conservative when setting serialqueue.set_clock_est()
Accuracy is not as important as ensuring a message is never sent
before it can be received in the serialqueue code. So, use the
smallest frequency ever seen and add the minimum rtt time when setting
set_clock_est().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/clocksync.py')
-rw-r--r-- | klippy/clocksync.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/klippy/clocksync.py b/klippy/clocksync.py index 404c5e6a..87cae7b5 100644 --- a/klippy/clocksync.py +++ b/klippy/clocksync.py @@ -19,6 +19,7 @@ class ClockSync: self.min_half_rtt = 999999999.9 self.min_half_rtt_time = 0. self.clock_est = self.prev_est = (0., 0, 0.) + self.min_freq = 0. self.last_clock_fast = False def connect(self, serial): self.serial = serial @@ -30,6 +31,7 @@ class ClockSync: self.last_clock = clock = (params['high'] << 32) | params['clock'] new_time = .5 * (params['#sent_time'] + params['#receive_time']) self.clock_est = self.prev_est = (new_time, clock, self.mcu_freq) + self.min_freq = self.mcu_freq # Enable periodic get_status timer self.status_cmd = msgparser.create_command('get_status') for i in range(8): @@ -85,7 +87,9 @@ class ClockSync: self.prev_est = self.clock_est self.last_clock_fast = clock_fast new_freq = (self.prev_est[1] - clock) / (self.prev_est[0] - new_time) - self.serial.set_clock_est(new_freq, new_time + 0.001, clock) + self.min_freq = min(self.min_freq, new_freq) + self.serial.set_clock_est( + self.min_freq, new_time + self.min_half_rtt + 0.001, clock) self.clock_est = (new_time, clock, new_freq) # clock frequency conversions def print_time_to_clock(self, print_time): |