aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/chelper
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/chelper')
-rw-r--r--klippy/chelper/__init__.py1
-rw-r--r--klippy/chelper/kin_cartesian.c39
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;
+}