From 9ad8153d331273259d584efc72145acd71a8485a Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Mon, 14 Nov 2016 13:10:14 -0500 Subject: [PATCH] stepper: Reset the next step time on a stepper stop Automatically reset the next step time to zero on a stepper_stop() call. This makes the host code simpler as it no longer needs to schedule an explicit reset_step_clock command on the step after a homing operation. Signed-off-by: Kevin O'Connor --- klippy/mcu.py | 10 +++------- klippy/stepper.py | 2 +- src/stepper.c | 1 + 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/klippy/mcu.py b/klippy/mcu.py index 2c1e518b..070bc7d2 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -22,7 +22,6 @@ class MCU_stepper: self._oid = mcu.create_oid() step_pin, pullup, invert_step = parse_pin_extras(step_pin) dir_pin, pullup, self._invert_dir = parse_pin_extras(dir_pin) - self._need_reset = True self._mcu_freq = mcu.get_mcu_freq() min_stop_interval = int(min_stop_interval * self._mcu_freq) max_error = int(max_error * self._mcu_freq) @@ -47,11 +46,8 @@ class MCU_stepper: def get_invert_dir(self): return self._invert_dir def note_stepper_stop(self): - self._need_reset = True - def check_reset(self, mcu_time): - if not self._need_reset: - return - self._need_reset = False + self.ffi_lib.stepcompress_reset(self._stepqueue, 0) + def reset_step_clock(self, mcu_time): clock = int(mcu_time * self._mcu_freq) self.ffi_lib.stepcompress_reset(self._stepqueue, clock) data = (self._reset_cmd.msgid, self._oid, clock & 0xffffffff) @@ -486,7 +482,7 @@ class Dummy_MCU_stepper: self._stepid, dirstr, countstr, addstr, interval)) def set_next_step_dir(self, dir): self._sdir = dir - def check_reset(self, clock): + def reset_step_clock(self, clock): self._mcu.outfile.write("G6S%dT%d\n" % (self._stepid, clock)) def print_to_mcu_time(self, print_time): return self._mcu.print_to_mcu_time(print_time) diff --git a/klippy/stepper.py b/klippy/stepper.py index 57a5e9ae..8324eebc 100644 --- a/klippy/stepper.py +++ b/klippy/stepper.py @@ -71,8 +71,8 @@ class PrinterStepper: self.need_motor_enable = True def prep_move(self, move_time): mcu_time = self.mcu_stepper.print_to_mcu_time(move_time) - self.mcu_stepper.check_reset(mcu_time) if self.need_motor_enable: + self.mcu_stepper.reset_step_clock(mcu_time) self.motor_enable(move_time, 1) self.need_motor_enable = False return (mcu_time, self.mcu_stepper) diff --git a/src/stepper.c b/src/stepper.c index 57b0dd93..8da71e84 100644 --- a/src/stepper.c +++ b/src/stepper.c @@ -238,6 +238,7 @@ void stepper_stop(struct stepper *s) { sched_del_timer(&s->time); + s->next_step_time = 0; s->position = -stepper_get_position(s); s->count = 0; s->flags &= SF_INVERT_STEP;