From 77d43032c54d1f19679064eabaea84e93ef3169c Mon Sep 17 00:00:00 2001 From: Ryan V1 <55478432+V1EngineeringInc@users.noreply.github.com> Date: Tue, 24 Aug 2021 11:26:32 -0700 Subject: [PATCH 1/5] Triple Endstop bugfix Seems the triple endstop section was missing some information. I can't be certain I did this correctly, I don't fully understand what the added info does, but it compiles and works. I just used what was in the dual endstop section to fill in the missing info. I verified this on a SKR Pro, with actual hardware. --- Marlin/src/module/stepper.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 882f5efc3512..aca27a4e99f5 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -286,14 +286,14 @@ xyze_int8_t Stepper::count_direction{0}; #define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ if (separate_multi_axis) { \ if (ENABLED(A##_HOME_TO_MIN)) { \ - if (!(TEST(endstops.state(), A##_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor) A##_STEP_WRITE(V); \ - if (!(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor) A##2_STEP_WRITE(V); \ - if (!(TEST(endstops.state(), A##3_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor) A##3_STEP_WRITE(V); \ + if (TERN0(HAS_##A##_MIN, !(TEST(endstops.state(), A##_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MIN, !(TEST(endstops.state(), A##3_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ } \ else { \ - if (!(TEST(endstops.state(), A##_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##_motor) A##_STEP_WRITE(V); \ - if (!(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor) A##2_STEP_WRITE(V); \ - if (!(TEST(endstops.state(), A##3_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##3_motor) A##3_STEP_WRITE(V); \ + if (TERN0(HAS_##A##_MAX, !(TEST(endstops.state(), A##_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MAX, !(TEST(endstops.state(), A##3_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ } \ } \ else { \ From 6d08be82f861e0c8049fa360393e85f05044b10d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Aug 2021 17:22:23 -0500 Subject: [PATCH 2/5] Tweak formatting --- Marlin/src/module/stepper.cpp | 74 +++++++++++++++++------------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index aca27a4e99f5..c3a572912428 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -257,25 +257,25 @@ xyze_int8_t Stepper::count_direction{0}; }; #endif -#define DUAL_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (ENABLED(A##_HOME_TO_MIN)) { \ - if (TERN0(HAS_##A##_MIN, !(TEST(endstops.state(), A##_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \ +#define DUAL_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (ENABLED(A##_HOME_TO_MIN)) { \ + if (TERN0(HAS_##A## _MIN, !(TEST(endstops.state(), A## _MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - } \ - else { \ - if (TERN0(HAS_##A##_MAX, !(TEST(endstops.state(), A##_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \ + } \ + else { \ + if (TERN0(HAS_##A## _MAX, !(TEST(endstops.state(), A## _MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - } \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ + } \ + } \ + else { \ + A##_STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ } #define DUAL_SEPARATE_APPLY_STEP(A,V) \ if (separate_multi_axis) { \ - if (!locked_##A##_motor) A##_STEP_WRITE(V); \ + if (!locked_##A## _motor) A## _STEP_WRITE(V); \ if (!locked_##A##2_motor) A##2_STEP_WRITE(V); \ } \ else { \ @@ -283,49 +283,49 @@ xyze_int8_t Stepper::count_direction{0}; A##2_STEP_WRITE(V); \ } -#define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (ENABLED(A##_HOME_TO_MIN)) { \ - if (TERN0(HAS_##A##_MIN, !(TEST(endstops.state(), A##_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \ +#define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (ENABLED(A##_HOME_TO_MIN)) { \ + if (TERN0(HAS_##A## _MIN, !(TEST(endstops.state(), A## _MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ if (TERN0(HAS_##A##3_MIN, !(TEST(endstops.state(), A##3_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - } \ - else { \ - if (TERN0(HAS_##A##_MAX, !(TEST(endstops.state(), A##_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \ + } \ + else { \ + if (TERN0(HAS_##A## _MAX, !(TEST(endstops.state(), A## _MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ if (TERN0(HAS_##A##3_MAX, !(TEST(endstops.state(), A##3_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - } \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ + } \ + } \ + else { \ + A##_STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ } #define TRIPLE_SEPARATE_APPLY_STEP(A,V) \ if (separate_multi_axis) { \ - if (!locked_##A##_motor) A##_STEP_WRITE(V); \ + if (!locked_##A## _motor) A## _STEP_WRITE(V); \ if (!locked_##A##2_motor) A##2_STEP_WRITE(V); \ if (!locked_##A##3_motor) A##3_STEP_WRITE(V); \ } \ else { \ - A##_STEP_WRITE(V); \ + A## _STEP_WRITE(V); \ A##2_STEP_WRITE(V); \ A##3_STEP_WRITE(V); \ } -#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##_MIN, A##_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor) A##_STEP_WRITE(V); \ +#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A## _MIN, A## _MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor) A## _STEP_WRITE(V); \ if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##2_MIN, A##2_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor) A##2_STEP_WRITE(V); \ if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##3_MIN, A##3_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor) A##3_STEP_WRITE(V); \ if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##4_MIN, A##4_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##4_motor) A##4_STEP_WRITE(V); \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ - A##4_STEP_WRITE(V); \ + } \ + else { \ + A## _STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ + A##4_STEP_WRITE(V); \ } #define QUAD_SEPARATE_APPLY_STEP(A,V) \ From 1203cd7c0571db182c6a73ad267bd2b47c19949a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Aug 2021 17:32:38 -0500 Subject: [PATCH 3/5] Also fix quad --- Marlin/src/module/stepper.cpp | 36 +++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index c3a572912428..d580ed94eaa2 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -314,29 +314,37 @@ xyze_int8_t Stepper::count_direction{0}; A##3_STEP_WRITE(V); \ } -#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A## _MIN, A## _MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor) A## _STEP_WRITE(V); \ - if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##2_MIN, A##2_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor) A##2_STEP_WRITE(V); \ - if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##3_MIN, A##3_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor) A##3_STEP_WRITE(V); \ - if (!(TEST(endstops.state(), (TERN(A##_HOME_TO_MIN, A##4_MIN, A##4_MAX))) && count_direction[_AXIS(A)] < 0) && !locked_##A##4_motor) A##4_STEP_WRITE(V); \ - } \ - else { \ - A## _STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ - A##4_STEP_WRITE(V); \ +#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (ENABLED(A##_HOME_TO_MIN)) { \ + if (TERN0(HAS_##A## _MIN, !(TEST(endstops.state(), A## _MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MIN, !(TEST(endstops.state(), A##3_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ + if (TERN0(HAS_##A##4_MIN, !(TEST(endstops.state(), A##4_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ + } \ + else { \ + if (TERN0(HAS_##A## _MAX, !(TEST(endstops.state(), A## _MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MAX, !(TEST(endstops.state(), A##3_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ + if (TERN0(HAS_##A##4_MAX, !(TEST(endstops.state(), A##4_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ + } \ + } \ + else { \ + A## _STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ + A##4_STEP_WRITE(V); \ } #define QUAD_SEPARATE_APPLY_STEP(A,V) \ if (separate_multi_axis) { \ - if (!locked_##A##_motor) A##_STEP_WRITE(V); \ + if (!locked_##A## _motor) A## _STEP_WRITE(V); \ if (!locked_##A##2_motor) A##2_STEP_WRITE(V); \ if (!locked_##A##3_motor) A##3_STEP_WRITE(V); \ if (!locked_##A##4_motor) A##4_STEP_WRITE(V); \ } \ else { \ - A##_STEP_WRITE(V); \ + A## _STEP_WRITE(V); \ A##2_STEP_WRITE(V); \ A##3_STEP_WRITE(V); \ A##4_STEP_WRITE(V); \ From ad361d2897452553f863355bf10b4e07fc6ed861 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Aug 2021 17:47:05 -0500 Subject: [PATCH 4/5] Shorten a little --- Marlin/src/module/stepper.cpp | 102 +++++++++++++++++----------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index d580ed94eaa2..51a415120e7e 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -257,20 +257,20 @@ xyze_int8_t Stepper::count_direction{0}; }; #endif -#define DUAL_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (ENABLED(A##_HOME_TO_MIN)) { \ - if (TERN0(HAS_##A## _MIN, !(TEST(endstops.state(), A## _MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - } \ - else { \ - if (TERN0(HAS_##A## _MAX, !(TEST(endstops.state(), A## _MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - } \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ +#define DUAL_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (TERN0(A##_HOME_TO_MIN, count_direction[_AXIS(A)] < 0)) { \ + if (TERN0(HAS_##A## _MIN, !TEST(endstops.state(), A## _MIN) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MIN, !TEST(endstops.state(), A##2_MIN) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + } \ + else if (TERN0(A##_HOME_TO_MAX, count_direction[_AXIS(A)] > 0)) { \ + if (TERN0(HAS_##A## _MAX, !TEST(endstops.state(), A## _MAX) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MAX, !TEST(endstops.state(), A##2_MAX) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + } \ + } \ + else { \ + A##_STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ } #define DUAL_SEPARATE_APPLY_STEP(A,V) \ @@ -283,23 +283,23 @@ xyze_int8_t Stepper::count_direction{0}; A##2_STEP_WRITE(V); \ } -#define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (ENABLED(A##_HOME_TO_MIN)) { \ - if (TERN0(HAS_##A## _MIN, !(TEST(endstops.state(), A## _MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MIN, !(TEST(endstops.state(), A##3_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - } \ - else { \ - if (TERN0(HAS_##A## _MAX, !(TEST(endstops.state(), A## _MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MAX, !(TEST(endstops.state(), A##3_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - } \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ +#define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (TERN0(A##_HOME_TO_MIN, count_direction[_AXIS(A)] < 0)) { \ + if (TERN0(HAS_##A## _MIN, !TEST(endstops.state(), A## _MIN) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MIN, !TEST(endstops.state(), A##2_MIN) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MIN, !TEST(endstops.state(), A##3_MIN) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ + } \ + else if (TERN0(A##_HOME_TO_MAX, count_direction[_AXIS(A)] > 0)) { \ + if (TERN0(HAS_##A## _MAX, !TEST(endstops.state(), A## _MAX) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MAX, !TEST(endstops.state(), A##2_MAX) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MAX, !TEST(endstops.state(), A##3_MAX) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ + } \ + } \ + else { \ + A##_STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ } #define TRIPLE_SEPARATE_APPLY_STEP(A,V) \ @@ -314,26 +314,26 @@ xyze_int8_t Stepper::count_direction{0}; A##3_STEP_WRITE(V); \ } -#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (ENABLED(A##_HOME_TO_MIN)) { \ - if (TERN0(HAS_##A## _MIN, !(TEST(endstops.state(), A## _MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MIN, !(TEST(endstops.state(), A##2_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MIN, !(TEST(endstops.state(), A##3_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - if (TERN0(HAS_##A##4_MIN, !(TEST(endstops.state(), A##4_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ - } \ - else { \ - if (TERN0(HAS_##A## _MAX, !(TEST(endstops.state(), A## _MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MAX, !(TEST(endstops.state(), A##2_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MAX, !(TEST(endstops.state(), A##3_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - if (TERN0(HAS_##A##4_MAX, !(TEST(endstops.state(), A##4_MAX) && count_direction[_AXIS(A)] > 0) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ - } \ - } \ - else { \ - A## _STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ - A##4_STEP_WRITE(V); \ +#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (TERN0(A##_HOME_TO_MIN, count_direction[_AXIS(A)] < 0)) { \ + if (TERN0(HAS_##A## _MIN, !TEST(endstops.state(), A## _MIN) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MIN, !TEST(endstops.state(), A##2_MIN) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MIN, !TEST(endstops.state(), A##3_MIN) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ + if (TERN0(HAS_##A##4_MIN, !TEST(endstops.state(), A##4_MIN) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ + } \ + else if (TERN0(A##_HOME_TO_MAX, count_direction[_AXIS(A)] > 0)) { \ + if (TERN0(HAS_##A## _MAX, !TEST(endstops.state(), A## _MAX) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ + if (TERN0(HAS_##A##2_MAX, !TEST(endstops.state(), A##2_MAX) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ + if (TERN0(HAS_##A##3_MAX, !TEST(endstops.state(), A##3_MAX) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ + if (TERN0(HAS_##A##4_MAX, !TEST(endstops.state(), A##4_MAX) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ + } \ + } \ + else { \ + A## _STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ + A##4_STEP_WRITE(V); \ } #define QUAD_SEPARATE_APPLY_STEP(A,V) \ From d518ca6ccf5a1fe641ca07532924639c08472a26 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Aug 2021 21:46:56 -0500 Subject: [PATCH 5/5] Keep combined endstop + motion test --- Marlin/src/module/stepper.cpp | 107 ++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 51a415120e7e..86e469827d79 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -257,20 +257,25 @@ xyze_int8_t Stepper::count_direction{0}; }; #endif -#define DUAL_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (TERN0(A##_HOME_TO_MIN, count_direction[_AXIS(A)] < 0)) { \ - if (TERN0(HAS_##A## _MIN, !TEST(endstops.state(), A## _MIN) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MIN, !TEST(endstops.state(), A##2_MIN) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - } \ - else if (TERN0(A##_HOME_TO_MAX, count_direction[_AXIS(A)] > 0)) { \ - if (TERN0(HAS_##A## _MAX, !TEST(endstops.state(), A## _MAX) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MAX, !TEST(endstops.state(), A##2_MAX) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - } \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ +#define MINDIR(A) (count_direction[_AXIS(A)] < 0) +#define MAXDIR(A) (count_direction[_AXIS(A)] > 0) + +#define STEPTEST(A,M,I) TERN0(HAS_ ##A## ##I## _ ##M, !(TEST(endstops.state(), A## ##I## _ ##M) && M## DIR(A)) && !locked_ ##A## ##I## _motor) + +#define DUAL_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (ENABLED(A##_HOME_TO_MIN)) { \ + if (STEPTEST(A,MIN, )) A## _STEP_WRITE(V); \ + if (STEPTEST(A,MIN,2)) A##2_STEP_WRITE(V); \ + } \ + else if (ENABLED(A##_HOME_TO_MAX)) { \ + if (STEPTEST(A,MAX, )) A## _STEP_WRITE(V); \ + if (STEPTEST(A,MAX,2)) A##2_STEP_WRITE(V); \ + } \ + } \ + else { \ + A##_STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ } #define DUAL_SEPARATE_APPLY_STEP(A,V) \ @@ -283,23 +288,23 @@ xyze_int8_t Stepper::count_direction{0}; A##2_STEP_WRITE(V); \ } -#define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (TERN0(A##_HOME_TO_MIN, count_direction[_AXIS(A)] < 0)) { \ - if (TERN0(HAS_##A## _MIN, !TEST(endstops.state(), A## _MIN) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MIN, !TEST(endstops.state(), A##2_MIN) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MIN, !TEST(endstops.state(), A##3_MIN) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - } \ - else if (TERN0(A##_HOME_TO_MAX, count_direction[_AXIS(A)] > 0)) { \ - if (TERN0(HAS_##A## _MAX, !TEST(endstops.state(), A## _MAX) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MAX, !TEST(endstops.state(), A##2_MAX) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MAX, !TEST(endstops.state(), A##3_MAX) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - } \ - } \ - else { \ - A##_STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ +#define TRIPLE_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (ENABLED(A##_HOME_TO_MIN)) { \ + if (STEPTEST(A,MIN, )) A## _STEP_WRITE(V); \ + if (STEPTEST(A,MIN,2)) A##2_STEP_WRITE(V); \ + if (STEPTEST(A,MIN,3)) A##3_STEP_WRITE(V); \ + } \ + else if (ENABLED(A##_HOME_TO_MAX)) { \ + if (STEPTEST(A,MAX, )) A## _STEP_WRITE(V); \ + if (STEPTEST(A,MAX,2)) A##2_STEP_WRITE(V); \ + if (STEPTEST(A,MAX,3)) A##3_STEP_WRITE(V); \ + } \ + } \ + else { \ + A##_STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ } #define TRIPLE_SEPARATE_APPLY_STEP(A,V) \ @@ -314,26 +319,26 @@ xyze_int8_t Stepper::count_direction{0}; A##3_STEP_WRITE(V); \ } -#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ - if (separate_multi_axis) { \ - if (TERN0(A##_HOME_TO_MIN, count_direction[_AXIS(A)] < 0)) { \ - if (TERN0(HAS_##A## _MIN, !TEST(endstops.state(), A## _MIN) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MIN, !TEST(endstops.state(), A##2_MIN) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MIN, !TEST(endstops.state(), A##3_MIN) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - if (TERN0(HAS_##A##4_MIN, !TEST(endstops.state(), A##4_MIN) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ - } \ - else if (TERN0(A##_HOME_TO_MAX, count_direction[_AXIS(A)] > 0)) { \ - if (TERN0(HAS_##A## _MAX, !TEST(endstops.state(), A## _MAX) && !locked_##A## _motor)) A## _STEP_WRITE(V); \ - if (TERN0(HAS_##A##2_MAX, !TEST(endstops.state(), A##2_MAX) && !locked_##A##2_motor)) A##2_STEP_WRITE(V); \ - if (TERN0(HAS_##A##3_MAX, !TEST(endstops.state(), A##3_MAX) && !locked_##A##3_motor)) A##3_STEP_WRITE(V); \ - if (TERN0(HAS_##A##4_MAX, !TEST(endstops.state(), A##4_MAX) && !locked_##A##4_motor)) A##4_STEP_WRITE(V); \ - } \ - } \ - else { \ - A## _STEP_WRITE(V); \ - A##2_STEP_WRITE(V); \ - A##3_STEP_WRITE(V); \ - A##4_STEP_WRITE(V); \ +#define QUAD_ENDSTOP_APPLY_STEP(A,V) \ + if (separate_multi_axis) { \ + if (ENABLED(A##_HOME_TO_MIN)) { \ + if (STEPTEST(A,MIN, )) A## _STEP_WRITE(V); \ + if (STEPTEST(A,MIN,2)) A##2_STEP_WRITE(V); \ + if (STEPTEST(A,MIN,3)) A##3_STEP_WRITE(V); \ + if (STEPTEST(A,MIN,4)) A##4_STEP_WRITE(V); \ + } \ + else if (ENABLED(A##_HOME_TO_MAX)) { \ + if (STEPTEST(A,MAX, )) A## _STEP_WRITE(V); \ + if (STEPTEST(A,MAX,2)) A##2_STEP_WRITE(V); \ + if (STEPTEST(A,MAX,3)) A##3_STEP_WRITE(V); \ + if (STEPTEST(A,MAX,4)) A##4_STEP_WRITE(V); \ + } \ + } \ + else { \ + A## _STEP_WRITE(V); \ + A##2_STEP_WRITE(V); \ + A##3_STEP_WRITE(V); \ + A##4_STEP_WRITE(V); \ } #define QUAD_SEPARATE_APPLY_STEP(A,V) \