Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛 Apply INVERT_*_DIR to FT_MOTION #25637

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Marlin/src/feature/bedlevel/bdl/bdl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void BDS_Leveling::process() {
#endif
}
else {
babystep.set_mm(Z_AXIS, 0); //if (old_cur_z <= cur_z) Z_DIR_WRITE(!INVERT_Z_DIR);
babystep.set_mm(Z_AXIS, 0); //if (old_cur_z <= cur_z) Z_DIR_WRITE(INVERT_DIR(Z, HIGH));
stepper.set_directions();
}
#endif
Expand Down
36 changes: 18 additions & 18 deletions Marlin/src/module/motion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1952,72 +1952,72 @@ void prepare_line_to_destination() {
case X_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(X);
phaseCurrent = stepperX.get_microstep_counter();
effectorBackoutDir = -X_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_X_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(X_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_X_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef Y_MICROSTEPS
case Y_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(Y);
phaseCurrent = stepperY.get_microstep_counter();
effectorBackoutDir = -Y_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_Y_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(Y_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_Y_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef Z_MICROSTEPS
case Z_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(Z);
phaseCurrent = stepperZ.get_microstep_counter();
effectorBackoutDir = -Z_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_Z_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(Z_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_Z_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef I_MICROSTEPS
case I_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(I);
phaseCurrent = stepperI.get_microstep_counter();
effectorBackoutDir = -I_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_I_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(I_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_I_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef J_MICROSTEPS
case J_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(J);
phaseCurrent = stepperJ.get_microstep_counter();
effectorBackoutDir = -J_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_J_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(J_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_J_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef K_MICROSTEPS
case K_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(K);
phaseCurrent = stepperK.get_microstep_counter();
effectorBackoutDir = -K_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_K_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(K_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_K_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef U_MICROSTEPS
case U_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(U);
phaseCurrent = stepperU.get_microstep_counter();
effectorBackoutDir = -U_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_U_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(U_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_U_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef V_MICROSTEPS
case V_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(V);
phaseCurrent = stepperV.get_microstep_counter();
effectorBackoutDir = -V_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_V_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(V_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_V_DIR, -)(-effectorBackoutDir);
break;
#endif
#ifdef W_MICROSTEPS
case W_AXIS:
phasePerUStep = PHASE_PER_MICROSTEP(W);
phaseCurrent = stepperW.get_microstep_counter();
effectorBackoutDir = -W_HOME_DIR;
stepperBackoutDir = IF_DISABLED(INVERT_W_DIR, -)effectorBackoutDir;
effectorBackoutDir = -(W_HOME_DIR);
stepperBackoutDir = TERN_(INVERT_W_DIR, -)(-effectorBackoutDir);
break;
#endif
default: return;
Expand Down
73 changes: 40 additions & 33 deletions Marlin/src/module/stepper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ xyze_int8_t Stepper::count_direction{0};
}

#if HAS_DUAL_X_STEPPERS
#define X_APPLY_DIR(v,Q) do{ X_DIR_WRITE(v); X2_DIR_WRITE((v) ^ ENABLED(INVERT_X2_VS_X_DIR)); }while(0)
#define X_APPLY_DIR(v,Q) do{ X_DIR_WRITE(v); X2_DIR_WRITE(INVERT_DIR(X2_VS_X, v)); }while(0)
#if ENABLED(X_DUAL_ENDSTOPS)
#define X_APPLY_STEP(v,Q) DUAL_ENDSTOP_APPLY_STEP(X,v)
#else
Expand All @@ -403,7 +403,7 @@ xyze_int8_t Stepper::count_direction{0};
#endif

#if HAS_DUAL_Y_STEPPERS
#define Y_APPLY_DIR(v,Q) do{ Y_DIR_WRITE(v); Y2_DIR_WRITE((v) ^ ENABLED(INVERT_Y2_VS_Y_DIR)); }while(0)
#define Y_APPLY_DIR(v,Q) do{ Y_DIR_WRITE(v); Y2_DIR_WRITE(INVERT_DIR(Y2_VS_Y, v)); }while(0)
#if ENABLED(Y_DUAL_ENDSTOPS)
#define Y_APPLY_STEP(v,Q) DUAL_ENDSTOP_APPLY_STEP(Y,v)
#else
Expand All @@ -416,8 +416,8 @@ xyze_int8_t Stepper::count_direction{0};

#if NUM_Z_STEPPERS == 4
#define Z_APPLY_DIR(v,Q) do{ \
Z_DIR_WRITE(v); Z2_DIR_WRITE((v) ^ ENABLED(INVERT_Z2_VS_Z_DIR)); \
Z3_DIR_WRITE((v) ^ ENABLED(INVERT_Z3_VS_Z_DIR)); Z4_DIR_WRITE((v) ^ ENABLED(INVERT_Z4_VS_Z_DIR)); \
Z_DIR_WRITE(v); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, v)); \
Z3_DIR_WRITE(INVERT_DIR(Z3_VS_Z, v)); Z4_DIR_WRITE(INVERT_DIR(Z4_VS_Z, v)); \
}while(0)
#if ENABLED(Z_MULTI_ENDSTOPS)
#define Z_APPLY_STEP(v,Q) QUAD_ENDSTOP_APPLY_STEP(Z,v)
Expand All @@ -428,7 +428,7 @@ xyze_int8_t Stepper::count_direction{0};
#endif
#elif NUM_Z_STEPPERS == 3
#define Z_APPLY_DIR(v,Q) do{ \
Z_DIR_WRITE(v); Z2_DIR_WRITE((v) ^ ENABLED(INVERT_Z2_VS_Z_DIR)); Z3_DIR_WRITE((v) ^ ENABLED(INVERT_Z3_VS_Z_DIR)); \
Z_DIR_WRITE(v); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, v)); Z3_DIR_WRITE(INVERT_DIR(Z3_VS_Z, v)); \
}while(0)
#if ENABLED(Z_MULTI_ENDSTOPS)
#define Z_APPLY_STEP(v,Q) TRIPLE_ENDSTOP_APPLY_STEP(Z,v)
Expand All @@ -438,7 +438,7 @@ xyze_int8_t Stepper::count_direction{0};
#define Z_APPLY_STEP(v,Q) do{ Z_STEP_WRITE(v); Z2_STEP_WRITE(v); Z3_STEP_WRITE(v); }while(0)
#endif
#elif NUM_Z_STEPPERS == 2
#define Z_APPLY_DIR(v,Q) do{ Z_DIR_WRITE(v); Z2_DIR_WRITE((v) ^ ENABLED(INVERT_Z2_VS_Z_DIR)); }while(0)
#define Z_APPLY_DIR(v,Q) do{ Z_DIR_WRITE(v); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, v)); }while(0)
#if ENABLED(Z_MULTI_ENDSTOPS)
#define Z_APPLY_STEP(v,Q) DUAL_ENDSTOP_APPLY_STEP(Z,v)
#elif ENABLED(Z_STEPPER_AUTO_ALIGN)
Expand Down Expand Up @@ -3470,14 +3470,14 @@ void Stepper::report_positions() {
#endif

if (applyDir) {
X_DIR_WRITE(TEST(command, FT_BIT_DIR_X));
TERN_(HAS_Y_AXIS, Y_DIR_WRITE(TEST(command, FT_BIT_DIR_Y)));
TERN_(HAS_Z_AXIS, Z_DIR_WRITE(z_dir));
TERN_(HAS_EXTRUDERS, E0_DIR_WRITE(TEST(command, FT_BIT_DIR_E)));
TERN_(HAS_X_AXIS, X_DIR_WRITE(INVERT_DIR(X, TEST(command, FT_BIT_DIR_X))));
TERN_(HAS_Y_AXIS, Y_DIR_WRITE(INVERT_DIR(Y, TEST(command, FT_BIT_DIR_Y))));
TERN_(HAS_Z_AXIS, Z_DIR_WRITE(INVERT_DIR(Z, z_dir)));
TERN_(HAS_EXTRUDERS, E0_DIR_WRITE(INVERT_DIR(E0, TEST(command, FT_BIT_DIR_E))));
DIR_WAIT_AFTER();
}

X_STEP_WRITE(TEST(command, FT_BIT_STEP_X));
TERN_(HAS_X_AXIS, X_STEP_WRITE(TEST(command, FT_BIT_STEP_X)));
TERN_(HAS_Y_AXIS, Y_STEP_WRITE(TEST(command, FT_BIT_STEP_Y)));
TERN_(HAS_Z_AXIS, Z_STEP_WRITE(z_step));
TERN_(HAS_EXTRUDERS, E0_STEP_WRITE(TEST(command, FT_BIT_STEP_E)));
Expand Down Expand Up @@ -3580,7 +3580,6 @@ void Stepper::report_positions() {

#define _ENABLE_AXIS(A) enable_axis(_AXIS(A))
#define _READ_DIR(AXIS) AXIS ##_DIR_READ()
#define _INVERT_DIR(AXIS) ENABLED(INVERT_## AXIS ##_DIR)
#define _APPLY_DIR(AXIS, INVERT) AXIS ##_APPLY_DIR(INVERT, true)

#if MINIMUM_STEPPER_PULSE
Expand Down Expand Up @@ -3627,19 +3626,19 @@ void Stepper::report_positions() {

#if DISABLED(DELTA)

#define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \
const uint8_t old_dir = _READ_DIR(AXIS); \
_ENABLE_AXIS(AXIS); \
DIR_WAIT_BEFORE(); \
_APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^DIR^INV); \
DIR_WAIT_AFTER(); \
_SAVE_START(); \
_APPLY_STEP(AXIS, _STEP_STATE(AXIS), true); \
_PULSE_WAIT(); \
_APPLY_STEP(AXIS, !_STEP_STATE(AXIS), true); \
EXTRA_DIR_WAIT_BEFORE(); \
_APPLY_DIR(AXIS, old_dir); \
EXTRA_DIR_WAIT_AFTER(); \
#define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \
const uint8_t old_dir = _READ_DIR(AXIS); \
_ENABLE_AXIS(AXIS); \
DIR_WAIT_BEFORE(); \
_APPLY_DIR(AXIS, INVERT_DIR(AXIS, (DIR)^(INV))); \
DIR_WAIT_AFTER(); \
_SAVE_START(); \
_APPLY_STEP(AXIS, _STEP_STATE(AXIS), true); \
_PULSE_WAIT(); \
_APPLY_STEP(AXIS, !_STEP_STATE(AXIS), true); \
EXTRA_DIR_WAIT_BEFORE(); \
_APPLY_DIR(AXIS, old_dir); \
EXTRA_DIR_WAIT_AFTER(); \
}while(0)

#endif
Expand All @@ -3650,8 +3649,8 @@ void Stepper::report_positions() {
const xy_byte_t old_dir = { _READ_DIR(A), _READ_DIR(B) }; \
_ENABLE_AXIS(A); _ENABLE_AXIS(B); \
DIR_WAIT_BEFORE(); \
_APPLY_DIR(A, _INVERT_DIR(A)^DIR^INV); \
_APPLY_DIR(B, _INVERT_DIR(B)^DIR^INV^ALT); \
_APPLY_DIR(A, INVERT_DIR(A, (DIR)^(INV)); \
_APPLY_DIR(B, INVERT_DIR(B, (DIR)^(INV)^(ALT)); \
DIR_WAIT_AFTER(); \
_SAVE_START(); \
_APPLY_STEP(A, _STEP_STATE(A), true); \
Expand Down Expand Up @@ -3725,19 +3724,23 @@ void Stepper::report_positions() {
U_DIR_READ(), V_DIR_READ(), W_DIR_READ()
);

X_DIR_WRITE(ENABLED(INVERT_X_DIR) ^ z_direction);
#ifdef X_DIR_WRITE
X_DIR_WRITE(INVERT_DIR(X, z_direction));
#endif
#ifdef Y_DIR_WRITE
Y_DIR_WRITE(ENABLED(INVERT_Y_DIR) ^ z_direction);
Y_DIR_WRITE(INVERT_DIR(Y, z_direction));
#endif
#ifdef Z_DIR_WRITE
Z_DIR_WRITE(ENABLED(INVERT_Z_DIR) ^ z_direction);
Z_DIR_WRITE(INVERT_DIR(Z, z_direction));
#endif

DIR_WAIT_AFTER();

_SAVE_START();

X_STEP_WRITE(STEP_STATE_X);
#ifdef X_STEP_WRITE
X_STEP_WRITE(STEP_STATE_X);
#endif
#ifdef Y_STEP_WRITE
Y_STEP_WRITE(STEP_STATE_Y);
#endif
Expand All @@ -3747,7 +3750,9 @@ void Stepper::report_positions() {

_PULSE_WAIT();

X_STEP_WRITE(!STEP_STATE_X);
#ifdef X_STEP_WRITE
X_STEP_WRITE(!STEP_STATE_X);
#endif
#ifdef Y_STEP_WRITE
Y_STEP_WRITE(!STEP_STATE_Y);
#endif
Expand All @@ -3758,7 +3763,9 @@ void Stepper::report_positions() {
// Restore direction bits
EXTRA_DIR_WAIT_BEFORE();

X_DIR_WRITE(old_dir.x);
#ifdef X_DIR_WRITE
X_DIR_WRITE(old_dir.x);
#endif
#ifdef Y_DIR_WRITE
Y_DIR_WRITE(old_dir.y);
#endif
Expand Down
Loading