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