diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2022-01-29 19:13:31 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2022-02-10 13:24:21 -0500 |
commit | 9ec97424844c76bbc0c5604e15aa195282b6c955 (patch) | |
tree | ff05667b33edfff52b86768ed962e5c0f4e597df /klippy/stepper.py | |
parent | 189188e3ca3e40d8272fb4ad48316e329f8ec453 (diff) | |
download | kutter-9ec97424844c76bbc0c5604e15aa195282b6c955.tar.gz kutter-9ec97424844c76bbc0c5604e15aa195282b6c955.tar.xz kutter-9ec97424844c76bbc0c5604e15aa195282b6c955.zip |
extruder: Add support for reversing the direction of extruder stepper movement
Extend SET_EXTRUDER_ROTATION_DISTANCE to support reversing the
direction of extruder movement.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/stepper.py')
-rw-r--r-- | klippy/stepper.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/klippy/stepper.py b/klippy/stepper.py index 9ef3fcc4..e009d7b6 100644 --- a/klippy/stepper.py +++ b/klippy/stepper.py @@ -36,7 +36,7 @@ class MCU_stepper: raise self._mcu.get_printer().config_error( "Stepper dir pin must be on same mcu as step pin") self._dir_pin = dir_pin_params['pin'] - self._invert_dir = dir_pin_params['invert'] + self._invert_dir = self._orig_invert_dir = dir_pin_params['invert'] self._step_both_edge = self._req_step_both_edge = False self._mcu_position_offset = 0. self._reset_cmd_tag = self._get_position_cmd = None @@ -44,6 +44,7 @@ class MCU_stepper: ffi_main, ffi_lib = chelper.get_ffi() self._stepqueue = ffi_main.gc(ffi_lib.stepcompress_alloc(oid), ffi_lib.stepcompress_free) + ffi_lib.stepcompress_set_invert_sdir(self._stepqueue, self._invert_dir) self._mcu.register_stepqueue(self._stepqueue) self._stepper_kinematics = None self._itersolve_generate_steps = ffi_lib.itersolve_generate_steps @@ -101,7 +102,7 @@ class MCU_stepper: max_error_ticks = self._mcu.seconds_to_clock(max_error) ffi_main, ffi_lib = chelper.get_ffi() ffi_lib.stepcompress_fill(self._stepqueue, max_error_ticks, - self._invert_dir, step_cmd_tag, dir_cmd_tag) + step_cmd_tag, dir_cmd_tag) def get_oid(self): return self._oid def get_step_dist(self): @@ -114,8 +115,16 @@ class MCU_stepper: self._step_dist = rotation_dist / self._steps_per_rotation self.set_stepper_kinematics(self._stepper_kinematics) self._set_mcu_position(mcu_pos) - def is_dir_inverted(self): - return self._invert_dir + def get_dir_inverted(self): + return self._invert_dir, self._orig_invert_dir + def set_dir_inverted(self, invert_dir): + invert_dir = not not invert_dir + if invert_dir == self._invert_dir: + return + self._invert_dir = invert_dir + ffi_main, ffi_lib = chelper.get_ffi() + ffi_lib.stepcompress_set_invert_sdir(self._stepqueue, invert_dir) + self._mcu.get_printer().send_event("stepper:set_dir_inverted", self) def calc_position_from_coord(self, coord): ffi_main, ffi_lib = chelper.get_ffi() return ffi_lib.itersolve_calc_position_from_coord( |