diff --git a/dda.c b/dda.c index 73e49e9..9a1498b 100644 --- a/dda.c +++ b/dda.c @@ -952,7 +952,7 @@ void update_current_position() { if (dda != NULL) { uint32_t axis_um; - axes_int32_t delta_um, um; + axes_int32_t delta_um; for (i = X; i < AXIS_COUNT; i++) { axis_um = muldiv(move_state.steps[i], @@ -962,11 +962,10 @@ void update_current_position() { delta_um[i] = (int32_t)get_direction(dda, i) * axis_um; } - delta_to_axes(delta_um, um); - um[E] = delta_um[E]; + delta_to_axes(delta_um); for (i = X; i < AXIS_COUNT; i++) { - current_position.axis[i] = dda->endpoint.axis[i] - um[i]; + current_position.axis[i] = dda->endpoint.axis[i] - delta_um[i]; } if (dda->endpoint.e_relative) { diff --git a/dda_kinematics.c b/dda_kinematics.c index ddcb180..43d2506 100644 --- a/dda_kinematics.c +++ b/dda_kinematics.c @@ -56,16 +56,15 @@ void axes_um_to_steps_corexy(const axes_int32_t um, axes_int32_t steps) { steps[Z] = um_to_steps(um[Z], Z); } -void delta_to_axes_cartesian(const axes_int32_t delta_um, axes_int32_t um) { - enum axis_e i; - - for (i = X; i < E; i++) { - um[i] = delta_um[i]; - } +void delta_to_axes_cartesian(axes_int32_t delta) { + // nothing to do for cartesian } -void delta_to_axes_corexy(const axes_int32_t delta_um, axes_int32_t um) { - um[X] = (delta_um[X] + delta_um[Y]) / 2; - um[Y] = (delta_um[X] - delta_um[Y]) / 2; - um[Z] = delta_um[Z]; +void delta_to_axes_corexy(axes_int32_t delta) { + // recalculate only dedicated axes + int32_t x_axis, y_axis; + x_axis = (delta[X] + delta[Y]) / 2; + y_axis = (delta[X] - delta[Y]) / 2; + delta[X] = x_axis; + delta[Y] = y_axis; } diff --git a/dda_kinematics.h b/dda_kinematics.h index 6203084..67870ef 100644 --- a/dda_kinematics.h +++ b/dda_kinematics.h @@ -52,17 +52,16 @@ inline void axes_um_to_steps(const axes_int32_t um, axes_int32_t steps) { #endif } -void delta_to_axes_cartesian(const axes_int32_t delta_um, axes_int32_t um); -void delta_to_axes_corexy(const axes_int32_t delta_um, axes_int32_t um); +void delta_to_axes_cartesian(axes_int32_t delta_um); +void delta_to_axes_corexy(axes_int32_t delta_um); // void delta_to_axes_scara(const axes_int32_t delta_um, axes_int32_t um); -static void delta_to_axes(const axes_int32_t, axes_int32_t) - __attribute__ ((always_inline)); -inline void delta_to_axes(const axes_int32_t delta_um, axes_int32_t um) { +static void delta_to_axes(axes_int32_t) __attribute__ ((always_inline)); +inline void delta_to_axes(axes_int32_t delta) { #if defined KINEMATICS_STRAIGHT - delta_to_axes_cartesian(delta_um, um); + delta_to_axes_cartesian(delta); #elif defined KINEMATICS_COREXY - delta_to_axes_corexy(delta_um, um); + delta_to_axes_corexy(delta); // #elif defined KINEMATICS_SCARA // delta_to_axes_scara(delta_um, um); #else