Skip to content

Commit b34b6e7

Browse files
thinkyheadTracy Spiva
authored and
Tracy Spiva
committed
🐛 INVERT_*_DIR for FT_MOTION (MarlinFirmware#25637)
1 parent 5a8f69d commit b34b6e7

File tree

4 files changed

+151
-172
lines changed

4 files changed

+151
-172
lines changed

Marlin/src/feature/bedlevel/bdl/bdl.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void BDS_Leveling::process() {
109109
#endif
110110
}
111111
else {
112-
babystep.set_mm(Z_AXIS, 0); //if (old_cur_z <= cur_z) Z_DIR_WRITE(!INVERT_Z_DIR);
112+
babystep.set_mm(Z_AXIS, 0); //if (old_cur_z <= cur_z) Z_DIR_WRITE(INVERT_DIR(Z, HIGH));
113113
stepper.set_directions();
114114
}
115115
#endif

Marlin/src/module/motion.cpp

+18-18
Original file line numberDiff line numberDiff line change
@@ -1957,72 +1957,72 @@ void prepare_line_to_destination() {
19571957
case X_AXIS:
19581958
phasePerUStep = PHASE_PER_MICROSTEP(X);
19591959
phaseCurrent = stepperX.get_microstep_counter();
1960-
effectorBackoutDir = -X_HOME_DIR;
1961-
stepperBackoutDir = IF_DISABLED(INVERT_X_DIR, -)effectorBackoutDir;
1960+
effectorBackoutDir = -(X_HOME_DIR);
1961+
stepperBackoutDir = TERN_(INVERT_X_DIR, -)(-effectorBackoutDir);
19621962
break;
19631963
#endif
19641964
#ifdef Y_MICROSTEPS
19651965
case Y_AXIS:
19661966
phasePerUStep = PHASE_PER_MICROSTEP(Y);
19671967
phaseCurrent = stepperY.get_microstep_counter();
1968-
effectorBackoutDir = -Y_HOME_DIR;
1969-
stepperBackoutDir = IF_DISABLED(INVERT_Y_DIR, -)effectorBackoutDir;
1968+
effectorBackoutDir = -(Y_HOME_DIR);
1969+
stepperBackoutDir = TERN_(INVERT_Y_DIR, -)(-effectorBackoutDir);
19701970
break;
19711971
#endif
19721972
#ifdef Z_MICROSTEPS
19731973
case Z_AXIS:
19741974
phasePerUStep = PHASE_PER_MICROSTEP(Z);
19751975
phaseCurrent = stepperZ.get_microstep_counter();
1976-
effectorBackoutDir = -Z_HOME_DIR;
1977-
stepperBackoutDir = IF_DISABLED(INVERT_Z_DIR, -)effectorBackoutDir;
1976+
effectorBackoutDir = -(Z_HOME_DIR);
1977+
stepperBackoutDir = TERN_(INVERT_Z_DIR, -)(-effectorBackoutDir);
19781978
break;
19791979
#endif
19801980
#ifdef I_MICROSTEPS
19811981
case I_AXIS:
19821982
phasePerUStep = PHASE_PER_MICROSTEP(I);
19831983
phaseCurrent = stepperI.get_microstep_counter();
1984-
effectorBackoutDir = -I_HOME_DIR;
1985-
stepperBackoutDir = IF_DISABLED(INVERT_I_DIR, -)effectorBackoutDir;
1984+
effectorBackoutDir = -(I_HOME_DIR);
1985+
stepperBackoutDir = TERN_(INVERT_I_DIR, -)(-effectorBackoutDir);
19861986
break;
19871987
#endif
19881988
#ifdef J_MICROSTEPS
19891989
case J_AXIS:
19901990
phasePerUStep = PHASE_PER_MICROSTEP(J);
19911991
phaseCurrent = stepperJ.get_microstep_counter();
1992-
effectorBackoutDir = -J_HOME_DIR;
1993-
stepperBackoutDir = IF_DISABLED(INVERT_J_DIR, -)effectorBackoutDir;
1992+
effectorBackoutDir = -(J_HOME_DIR);
1993+
stepperBackoutDir = TERN_(INVERT_J_DIR, -)(-effectorBackoutDir);
19941994
break;
19951995
#endif
19961996
#ifdef K_MICROSTEPS
19971997
case K_AXIS:
19981998
phasePerUStep = PHASE_PER_MICROSTEP(K);
19991999
phaseCurrent = stepperK.get_microstep_counter();
2000-
effectorBackoutDir = -K_HOME_DIR;
2001-
stepperBackoutDir = IF_DISABLED(INVERT_K_DIR, -)effectorBackoutDir;
2000+
effectorBackoutDir = -(K_HOME_DIR);
2001+
stepperBackoutDir = TERN_(INVERT_K_DIR, -)(-effectorBackoutDir);
20022002
break;
20032003
#endif
20042004
#ifdef U_MICROSTEPS
20052005
case U_AXIS:
20062006
phasePerUStep = PHASE_PER_MICROSTEP(U);
20072007
phaseCurrent = stepperU.get_microstep_counter();
2008-
effectorBackoutDir = -U_HOME_DIR;
2009-
stepperBackoutDir = IF_DISABLED(INVERT_U_DIR, -)effectorBackoutDir;
2008+
effectorBackoutDir = -(U_HOME_DIR);
2009+
stepperBackoutDir = TERN_(INVERT_U_DIR, -)(-effectorBackoutDir);
20102010
break;
20112011
#endif
20122012
#ifdef V_MICROSTEPS
20132013
case V_AXIS:
20142014
phasePerUStep = PHASE_PER_MICROSTEP(V);
20152015
phaseCurrent = stepperV.get_microstep_counter();
2016-
effectorBackoutDir = -V_HOME_DIR;
2017-
stepperBackoutDir = IF_DISABLED(INVERT_V_DIR, -)effectorBackoutDir;
2016+
effectorBackoutDir = -(V_HOME_DIR);
2017+
stepperBackoutDir = TERN_(INVERT_V_DIR, -)(-effectorBackoutDir);
20182018
break;
20192019
#endif
20202020
#ifdef W_MICROSTEPS
20212021
case W_AXIS:
20222022
phasePerUStep = PHASE_PER_MICROSTEP(W);
20232023
phaseCurrent = stepperW.get_microstep_counter();
2024-
effectorBackoutDir = -W_HOME_DIR;
2025-
stepperBackoutDir = IF_DISABLED(INVERT_W_DIR, -)effectorBackoutDir;
2024+
effectorBackoutDir = -(W_HOME_DIR);
2025+
stepperBackoutDir = TERN_(INVERT_W_DIR, -)(-effectorBackoutDir);
20262026
break;
20272027
#endif
20282028
default: return;

Marlin/src/module/stepper.cpp

+40-33
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ xyze_int8_t Stepper::count_direction{0};
382382
}
383383

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

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

417417
#if NUM_Z_STEPPERS == 4
418418
#define Z_APPLY_DIR(v,Q) do{ \
419-
Z_DIR_WRITE(v); Z2_DIR_WRITE((v) ^ ENABLED(INVERT_Z2_VS_Z_DIR)); \
420-
Z3_DIR_WRITE((v) ^ ENABLED(INVERT_Z3_VS_Z_DIR)); Z4_DIR_WRITE((v) ^ ENABLED(INVERT_Z4_VS_Z_DIR)); \
419+
Z_DIR_WRITE(v); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, v)); \
420+
Z3_DIR_WRITE(INVERT_DIR(Z3_VS_Z, v)); Z4_DIR_WRITE(INVERT_DIR(Z4_VS_Z, v)); \
421421
}while(0)
422422
#if ENABLED(Z_MULTI_ENDSTOPS)
423423
#define Z_APPLY_STEP(v,Q) QUAD_ENDSTOP_APPLY_STEP(Z,v)
@@ -428,7 +428,7 @@ xyze_int8_t Stepper::count_direction{0};
428428
#endif
429429
#elif NUM_Z_STEPPERS == 3
430430
#define Z_APPLY_DIR(v,Q) do{ \
431-
Z_DIR_WRITE(v); Z2_DIR_WRITE((v) ^ ENABLED(INVERT_Z2_VS_Z_DIR)); Z3_DIR_WRITE((v) ^ ENABLED(INVERT_Z3_VS_Z_DIR)); \
431+
Z_DIR_WRITE(v); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, v)); Z3_DIR_WRITE(INVERT_DIR(Z3_VS_Z, v)); \
432432
}while(0)
433433
#if ENABLED(Z_MULTI_ENDSTOPS)
434434
#define Z_APPLY_STEP(v,Q) TRIPLE_ENDSTOP_APPLY_STEP(Z,v)
@@ -438,7 +438,7 @@ xyze_int8_t Stepper::count_direction{0};
438438
#define Z_APPLY_STEP(v,Q) do{ Z_STEP_WRITE(v); Z2_STEP_WRITE(v); Z3_STEP_WRITE(v); }while(0)
439439
#endif
440440
#elif NUM_Z_STEPPERS == 2
441-
#define Z_APPLY_DIR(v,Q) do{ Z_DIR_WRITE(v); Z2_DIR_WRITE((v) ^ ENABLED(INVERT_Z2_VS_Z_DIR)); }while(0)
441+
#define Z_APPLY_DIR(v,Q) do{ Z_DIR_WRITE(v); Z2_DIR_WRITE(INVERT_DIR(Z2_VS_Z, v)); }while(0)
442442
#if ENABLED(Z_MULTI_ENDSTOPS)
443443
#define Z_APPLY_STEP(v,Q) DUAL_ENDSTOP_APPLY_STEP(Z,v)
444444
#elif ENABLED(Z_STEPPER_AUTO_ALIGN)
@@ -3470,14 +3470,14 @@ void Stepper::report_positions() {
34703470
#endif
34713471

34723472
if (applyDir) {
3473-
X_DIR_WRITE(TEST(command, FT_BIT_DIR_X));
3474-
TERN_(HAS_Y_AXIS, Y_DIR_WRITE(TEST(command, FT_BIT_DIR_Y)));
3475-
TERN_(HAS_Z_AXIS, Z_DIR_WRITE(z_dir));
3476-
TERN_(HAS_EXTRUDERS, E0_DIR_WRITE(TEST(command, FT_BIT_DIR_E)));
3473+
TERN_(HAS_X_AXIS, X_DIR_WRITE(INVERT_DIR(X, TEST(command, FT_BIT_DIR_X))));
3474+
TERN_(HAS_Y_AXIS, Y_DIR_WRITE(INVERT_DIR(Y, TEST(command, FT_BIT_DIR_Y))));
3475+
TERN_(HAS_Z_AXIS, Z_DIR_WRITE(INVERT_DIR(Z, z_dir)));
3476+
TERN_(HAS_EXTRUDERS, E0_DIR_WRITE(INVERT_DIR(E0, TEST(command, FT_BIT_DIR_E))));
34773477
DIR_WAIT_AFTER();
34783478
}
34793479

3480-
X_STEP_WRITE(TEST(command, FT_BIT_STEP_X));
3480+
TERN_(HAS_X_AXIS, X_STEP_WRITE(TEST(command, FT_BIT_STEP_X)));
34813481
TERN_(HAS_Y_AXIS, Y_STEP_WRITE(TEST(command, FT_BIT_STEP_Y)));
34823482
TERN_(HAS_Z_AXIS, Z_STEP_WRITE(z_step));
34833483
TERN_(HAS_EXTRUDERS, E0_STEP_WRITE(TEST(command, FT_BIT_STEP_E)));
@@ -3580,7 +3580,6 @@ void Stepper::report_positions() {
35803580

35813581
#define _ENABLE_AXIS(A) enable_axis(_AXIS(A))
35823582
#define _READ_DIR(AXIS) AXIS ##_DIR_READ()
3583-
#define _INVERT_DIR(AXIS) ENABLED(INVERT_## AXIS ##_DIR)
35843583
#define _APPLY_DIR(AXIS, INVERT) AXIS ##_APPLY_DIR(INVERT, true)
35853584

35863585
#if MINIMUM_STEPPER_PULSE
@@ -3627,19 +3626,19 @@ void Stepper::report_positions() {
36273626

36283627
#if DISABLED(DELTA)
36293628

3630-
#define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \
3631-
const uint8_t old_dir = _READ_DIR(AXIS); \
3632-
_ENABLE_AXIS(AXIS); \
3633-
DIR_WAIT_BEFORE(); \
3634-
_APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^DIR^INV); \
3635-
DIR_WAIT_AFTER(); \
3636-
_SAVE_START(); \
3637-
_APPLY_STEP(AXIS, _STEP_STATE(AXIS), true); \
3638-
_PULSE_WAIT(); \
3639-
_APPLY_STEP(AXIS, !_STEP_STATE(AXIS), true); \
3640-
EXTRA_DIR_WAIT_BEFORE(); \
3641-
_APPLY_DIR(AXIS, old_dir); \
3642-
EXTRA_DIR_WAIT_AFTER(); \
3629+
#define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \
3630+
const uint8_t old_dir = _READ_DIR(AXIS); \
3631+
_ENABLE_AXIS(AXIS); \
3632+
DIR_WAIT_BEFORE(); \
3633+
_APPLY_DIR(AXIS, INVERT_DIR(AXIS, (DIR)^(INV))); \
3634+
DIR_WAIT_AFTER(); \
3635+
_SAVE_START(); \
3636+
_APPLY_STEP(AXIS, _STEP_STATE(AXIS), true); \
3637+
_PULSE_WAIT(); \
3638+
_APPLY_STEP(AXIS, !_STEP_STATE(AXIS), true); \
3639+
EXTRA_DIR_WAIT_BEFORE(); \
3640+
_APPLY_DIR(AXIS, old_dir); \
3641+
EXTRA_DIR_WAIT_AFTER(); \
36433642
}while(0)
36443643

36453644
#endif
@@ -3650,8 +3649,8 @@ void Stepper::report_positions() {
36503649
const xy_byte_t old_dir = { _READ_DIR(A), _READ_DIR(B) }; \
36513650
_ENABLE_AXIS(A); _ENABLE_AXIS(B); \
36523651
DIR_WAIT_BEFORE(); \
3653-
_APPLY_DIR(A, _INVERT_DIR(A)^DIR^INV); \
3654-
_APPLY_DIR(B, _INVERT_DIR(B)^DIR^INV^ALT); \
3652+
_APPLY_DIR(A, INVERT_DIR(A, (DIR)^(INV)); \
3653+
_APPLY_DIR(B, INVERT_DIR(B, (DIR)^(INV)^(ALT)); \
36553654
DIR_WAIT_AFTER(); \
36563655
_SAVE_START(); \
36573656
_APPLY_STEP(A, _STEP_STATE(A), true); \
@@ -3725,19 +3724,23 @@ void Stepper::report_positions() {
37253724
U_DIR_READ(), V_DIR_READ(), W_DIR_READ()
37263725
);
37273726

3728-
X_DIR_WRITE(ENABLED(INVERT_X_DIR) ^ z_direction);
3727+
#ifdef X_DIR_WRITE
3728+
X_DIR_WRITE(INVERT_DIR(X, z_direction));
3729+
#endif
37293730
#ifdef Y_DIR_WRITE
3730-
Y_DIR_WRITE(ENABLED(INVERT_Y_DIR) ^ z_direction);
3731+
Y_DIR_WRITE(INVERT_DIR(Y, z_direction));
37313732
#endif
37323733
#ifdef Z_DIR_WRITE
3733-
Z_DIR_WRITE(ENABLED(INVERT_Z_DIR) ^ z_direction);
3734+
Z_DIR_WRITE(INVERT_DIR(Z, z_direction));
37343735
#endif
37353736

37363737
DIR_WAIT_AFTER();
37373738

37383739
_SAVE_START();
37393740

3740-
X_STEP_WRITE(STEP_STATE_X);
3741+
#ifdef X_STEP_WRITE
3742+
X_STEP_WRITE(STEP_STATE_X);
3743+
#endif
37413744
#ifdef Y_STEP_WRITE
37423745
Y_STEP_WRITE(STEP_STATE_Y);
37433746
#endif
@@ -3747,7 +3750,9 @@ void Stepper::report_positions() {
37473750

37483751
_PULSE_WAIT();
37493752

3750-
X_STEP_WRITE(!STEP_STATE_X);
3753+
#ifdef X_STEP_WRITE
3754+
X_STEP_WRITE(!STEP_STATE_X);
3755+
#endif
37513756
#ifdef Y_STEP_WRITE
37523757
Y_STEP_WRITE(!STEP_STATE_Y);
37533758
#endif
@@ -3758,7 +3763,9 @@ void Stepper::report_positions() {
37583763
// Restore direction bits
37593764
EXTRA_DIR_WAIT_BEFORE();
37603765

3761-
X_DIR_WRITE(old_dir.x);
3766+
#ifdef X_DIR_WRITE
3767+
X_DIR_WRITE(old_dir.x);
3768+
#endif
37623769
#ifdef Y_DIR_WRITE
37633770
Y_DIR_WRITE(old_dir.y);
37643771
#endif

0 commit comments

Comments
 (0)