aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/stepper.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2022-01-29 19:13:31 -0500
committerKevin O'Connor <kevin@koconnor.net>2022-02-10 13:24:21 -0500
commit9ec97424844c76bbc0c5604e15aa195282b6c955 (patch)
treeff05667b33edfff52b86768ed962e5c0f4e597df /klippy/stepper.py
parent189188e3ca3e40d8272fb4ad48316e329f8ec453 (diff)
downloadkutter-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.py17
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(