diff options
Diffstat (limited to 'klippy/chelper')
-rw-r--r-- | klippy/chelper/__init__.py | 1 | ||||
-rw-r--r-- | klippy/chelper/kin_cartesian.c | 39 |
2 files changed, 40 insertions, 0 deletions
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; +} |