diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2023-10-21 15:45:47 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2023-10-21 15:46:08 -0400 |
commit | f7567a0db954eabe4c6b8da3f73ce68693698646 (patch) | |
tree | 0c3fdca33f47cae492cded24cd427ea37399f307 /klippy | |
parent | 6749985302fe002a9cb5672dab9badb11e4e3c36 (diff) | |
download | kutter-f7567a0db954eabe4c6b8da3f73ce68693698646.tar.gz kutter-f7567a0db954eabe4c6b8da3f73ce68693698646.tar.xz kutter-f7567a0db954eabe4c6b8da3f73ce68693698646.zip |
Revert "toolhead: Use dict for step generation flush times. (#6303)"
This reverts commit 6749985302fe002a9cb5672dab9badb11e4e3c36.
A defect was found in the above commit (the input shaper code calls
note_step_generateion_scan_time() for many steppers, so the
input_shaper class can't be used as the index).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/extras/input_shaper.py | 5 | ||||
-rw-r--r-- | klippy/kinematics/extruder.py | 6 | ||||
-rw-r--r-- | klippy/toolhead.py | 17 |
3 files changed, 17 insertions, 11 deletions
diff --git a/klippy/extras/input_shaper.py b/klippy/extras/input_shaper.py index 3edd8478..7f37d302 100644 --- a/klippy/extras/input_shaper.py +++ b/klippy/extras/input_shaper.py @@ -135,13 +135,16 @@ class InputShaper: is_sk = self._get_input_shaper_stepper_kinematics(s) if is_sk is None: continue + old_delay = ffi_lib.input_shaper_get_step_generation_window(is_sk) for shaper in self.shapers: if shaper in failed_shapers: continue if not shaper.set_shaper_kinematics(is_sk): failed_shapers.append(shaper) new_delay = ffi_lib.input_shaper_get_step_generation_window(is_sk) - self.toolhead.note_step_generation_scan_time(self, new_delay) + if old_delay != new_delay: + self.toolhead.note_step_generation_scan_time(new_delay, + old_delay) if failed_shapers: error = error or self.printer.command_error raise error("Failed to configure shaper(s) %s with given parameters" diff --git a/klippy/kinematics/extruder.py b/klippy/kinematics/extruder.py index 9c913bf1..ea422b6e 100644 --- a/klippy/kinematics/extruder.py +++ b/klippy/kinematics/extruder.py @@ -70,11 +70,15 @@ class ExtruderStepper: self.stepper.set_trapq(extruder.get_trapq()) self.motion_queue = extruder_name def _set_pressure_advance(self, pressure_advance, smooth_time): + old_smooth_time = self.pressure_advance_smooth_time + if not self.pressure_advance: + old_smooth_time = 0. new_smooth_time = smooth_time if not pressure_advance: new_smooth_time = 0. toolhead = self.printer.lookup_object("toolhead") - toolhead.note_step_generation_scan_time(self, new_smooth_time * .5) + toolhead.note_step_generation_scan_time(new_smooth_time * .5, + old_delay=old_smooth_time * .5) ffi_main, ffi_lib = chelper.get_ffi() espa = ffi_lib.extruder_set_pressure_advance espa(self.sk_extruder, pressure_advance, new_smooth_time) diff --git a/klippy/toolhead.py b/klippy/toolhead.py index 8334291e..d8b93825 100644 --- a/klippy/toolhead.py +++ b/klippy/toolhead.py @@ -239,8 +239,7 @@ class ToolHead: self.drip_completion = None # Kinematic step generation scan window time tracking self.kin_flush_delay = SDS_CHECK_TIME - # Map from requester to requested time - self.kin_flush_times = {self: SDS_CHECK_TIME} + self.kin_flush_times = [] self.force_flush_time = self.last_kin_move_time = 0. # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() @@ -527,15 +526,15 @@ class ToolHead: return self.trapq def register_step_generator(self, handler): self.step_generators.append(handler) - def note_step_generation_scan_time(self, requester, delay): + def note_step_generation_scan_time(self, delay, old_delay=0.): self.flush_step_generation() - if delay == self.kin_flush_times.get(requester, None): - return + cur_delay = self.kin_flush_delay + if old_delay: + self.kin_flush_times.pop(self.kin_flush_times.index(old_delay)) if delay: - self.kin_flush_times[requester] = delay - elif requester in self.kin_flush_times: - del self.kin_flush_times[requester] - self.kin_flush_delay = max(self.kin_flush_times.values()) + self.kin_flush_times.append(delay) + new_delay = max(self.kin_flush_times + [SDS_CHECK_TIME]) + self.kin_flush_delay = new_delay def register_lookahead_callback(self, callback): last_move = self.move_queue.get_last() if last_move is None: |