stepcompress: Store a reference to 'struct stepper_kinematics'

Support storing a reference to 'struct stepper_kinematics' in 'struct
stepcompress' and support globally generating steps via the
steppersync mechanism.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2025-08-05 17:51:59 -04:00
parent dd4cc8eb4c
commit 2919f37343
8 changed files with 67 additions and 29 deletions

View File

@@ -48,7 +48,6 @@ class MCU_stepper:
ffi_main, ffi_lib = chelper.get_ffi()
ffi_lib.stepcompress_set_invert_sdir(self._stepqueue, self._invert_dir)
self._stepper_kinematics = None
self._itersolve_generate_steps = ffi_lib.itersolve_generate_steps
self._itersolve_check_active = ffi_lib.itersolve_check_active
self._trapq = ffi_main.NULL
printer.register_event_handler('klippy:connect',
@@ -192,6 +191,8 @@ class MCU_stepper:
if old_sk is not None:
mcu_pos = self.get_mcu_position()
self._stepper_kinematics = sk
ffi_main, ffi_lib = chelper.get_ffi()
ffi_lib.stepcompress_set_stepper_kinematics(self._stepqueue, sk);
self.set_trapq(self._trapq)
self._set_mcu_position(mcu_pos)
return old_sk
@@ -253,12 +254,6 @@ class MCU_stepper:
# Invoke callbacks
for cb in cbs:
cb(ret)
def generate_steps(self, flush_time):
# Generate steps
sk = self._stepper_kinematics
ret = self._itersolve_generate_steps(sk, self._stepqueue, flush_time)
if ret:
raise error("Internal error in stepcompress")
def is_active_axis(self, axis):
ffi_main, ffi_lib = chelper.get_ffi()
a = axis.encode()
@@ -281,8 +276,7 @@ def PrinterStepper(config, units_in_radians=False):
rotation_dist, steps_per_rotation,
step_pulse_duration, units_in_radians)
# Register with helper modules
mods = ['stepper_enable', 'force_move', 'motion_report', 'motion_queuing']
for mname in mods:
for mname in ['stepper_enable', 'force_move', 'motion_report']:
m = printer.load_object(config, mname)
m.register_stepper(config, mcu_stepper)
return mcu_stepper