From 4d559633e3a3f9e4aba585c30422c8f5772f2b46 Mon Sep 17 00:00:00 2001 From: Tircown <74233386+Tircown@users.noreply.github.com> Date: Mon, 28 Jun 2021 00:37:05 +0200 Subject: kinematics: Add dual_carriage to hybrid-corexyz (#4296) - Add dual_carriage abilities for hybrid-corexy and hybrid-corexz - Introduce the module idex_mode - Fix add_stepper to the correct rail in hybrid-corexy Signed-off-by: Fabrice GALLET --- klippy/chelper/__init__.py | 1 + klippy/chelper/kin_cartesian.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) (limited to 'klippy/chelper') diff --git a/klippy/chelper/__init__.py b/klippy/chelper/__init__.py index 7b20963d..e8760b54 100644 --- a/klippy/chelper/__init__.py +++ b/klippy/chelper/__init__.py @@ -80,6 +80,7 @@ defs_trapq = """ defs_kin_cartesian = """ struct stepper_kinematics *cartesian_stepper_alloc(char axis); + struct stepper_kinematics *cartesian_reverse_stepper_alloc(char axis); """ defs_kin_corexy = """ diff --git a/klippy/chelper/kin_cartesian.c b/klippy/chelper/kin_cartesian.c index 86569d4a..3b1c8cba 100644 --- a/klippy/chelper/kin_cartesian.c +++ b/klippy/chelper/kin_cartesian.c @@ -49,3 +49,42 @@ cartesian_stepper_alloc(char axis) } return sk; } + +static double +cart_reverse_stepper_x_calc_position(struct stepper_kinematics *sk + , struct move *m, double move_time) +{ + return -move_get_coord(m, move_time).x; +} + +static double +cart_reverse_stepper_y_calc_position(struct stepper_kinematics *sk + , struct move *m, double move_time) +{ + return -move_get_coord(m, move_time).y; +} + +static double +cart_reverse_stepper_z_calc_position(struct stepper_kinematics *sk + , struct move *m, double move_time) +{ + return -move_get_coord(m, move_time).z; +} + +struct stepper_kinematics * __visible +cartesian_reverse_stepper_alloc(char axis) +{ + struct stepper_kinematics *sk = malloc(sizeof(*sk)); + memset(sk, 0, sizeof(*sk)); + if (axis == 'x') { + sk->calc_position_cb = cart_reverse_stepper_x_calc_position; + sk->active_flags = AF_X; + } else if (axis == 'y') { + sk->calc_position_cb = cart_reverse_stepper_y_calc_position; + sk->active_flags = AF_Y; + } else if (axis == 'z') { + sk->calc_position_cb = cart_reverse_stepper_z_calc_position; + sk->active_flags = AF_Z; + } + return sk; +} -- cgit v1.2.3-70-g09d2