From accabf088ac025bfbc31a3b28162a4a5b5693d8f Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Sat, 29 Oct 2016 01:54:02 -0500
Subject: [PATCH 1/3] Add support for Z2 min endstop to M119

---
 Marlin/endstops.cpp | 4 ++++
 Marlin/language.h   | 1 +
 2 files changed, 5 insertions(+)

diff --git a/Marlin/endstops.cpp b/Marlin/endstops.cpp
index 7c0c9dbac6c..c6c94b87c1d 100644
--- a/Marlin/endstops.cpp
+++ b/Marlin/endstops.cpp
@@ -201,6 +201,10 @@ void Endstops::M119() {
     SERIAL_PROTOCOLPGM(MSG_Z_MIN);
     SERIAL_PROTOCOLLN(((READ(Z_MIN_PIN)^Z_MIN_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
   #endif
+  #if HAS_Z2_MIN
+    SERIAL_PROTOCOLPGM(MSG_Z2_MIN);
+    SERIAL_PROTOCOLLN(((READ(Z2_MIN_PIN)^Z2_MIN_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
+  #endif
   #if HAS_Z_MAX
     SERIAL_PROTOCOLPGM(MSG_Z_MAX);
     SERIAL_PROTOCOLLN(((READ(Z_MAX_PIN)^Z_MAX_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
diff --git a/Marlin/language.h b/Marlin/language.h
index 0a9776494c9..96de163755a 100644
--- a/Marlin/language.h
+++ b/Marlin/language.h
@@ -145,6 +145,7 @@
 #define MSG_Y_MAX                           "y_max: "
 #define MSG_Z_MIN                           "z_min: "
 #define MSG_Z_MAX                           "z_max: "
+#define MSG_Z2_MIN                          "z2_min: "
 #define MSG_Z2_MAX                          "z2_max: "
 #define MSG_Z_PROBE                         "z_probe: "
 #define MSG_ERR_MATERIAL_INDEX              "M145 S<index> out of range (0-1)"

From 8cebd2a7dbc5746ea162863ba06b2bb5ef8860f3 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Sat, 29 Oct 2016 01:54:19 -0500
Subject: [PATCH 2/3] Arrange Z2 min before Z2 max

---
 Marlin/stepper.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp
index bacf22406c6..a23b67a7c84 100644
--- a/Marlin/stepper.cpp
+++ b/Marlin/stepper.cpp
@@ -162,14 +162,14 @@ volatile long Stepper::endstops_trigsteps[XYZ];
   #if ENABLED(Z_DUAL_ENDSTOPS)
     #define Z_APPLY_STEP(v,Q) \
     if (performing_homing) { \
-      if (Z_HOME_DIR > 0) {\
-        if (!(TEST(endstops.old_endstop_bits, Z_MAX) && (count_direction[Z_AXIS] > 0)) && !locked_z_motor) Z_STEP_WRITE(v); \
-        if (!(TEST(endstops.old_endstop_bits, Z2_MAX) && (count_direction[Z_AXIS] > 0)) && !locked_z2_motor) Z2_STEP_WRITE(v); \
-      } \
-      else { \
+      if (Z_HOME_DIR < 0) { \
         if (!(TEST(endstops.old_endstop_bits, Z_MIN) && (count_direction[Z_AXIS] < 0)) && !locked_z_motor) Z_STEP_WRITE(v); \
         if (!(TEST(endstops.old_endstop_bits, Z2_MIN) && (count_direction[Z_AXIS] < 0)) && !locked_z2_motor) Z2_STEP_WRITE(v); \
       } \
+      else { \
+        if (!(TEST(endstops.old_endstop_bits, Z_MAX) && (count_direction[Z_AXIS] > 0)) && !locked_z_motor) Z_STEP_WRITE(v); \
+        if (!(TEST(endstops.old_endstop_bits, Z2_MAX) && (count_direction[Z_AXIS] > 0)) && !locked_z2_motor) Z2_STEP_WRITE(v); \
+      } \
     } \
     else { \
       Z_STEP_WRITE(v); \

From f3720f4e816061d74710973efb032e2cdb6a94ae Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Sat, 29 Oct 2016 16:01:27 -0500
Subject: [PATCH 3/3] const arguments to test_dual_z_endstops

---
 Marlin/endstops.cpp | 2 +-
 Marlin/endstops.h   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Marlin/endstops.cpp b/Marlin/endstops.cpp
index c6c94b87c1d..53e8b209e5a 100644
--- a/Marlin/endstops.cpp
+++ b/Marlin/endstops.cpp
@@ -222,7 +222,7 @@ void Endstops::M119() {
 #if ENABLED(Z_DUAL_ENDSTOPS)
 
   // Pass the result of the endstop test
-  void Endstops::test_dual_z_endstops(EndstopEnum es1, EndstopEnum es2) {
+  void Endstops::test_dual_z_endstops(const EndstopEnum es1, const EndstopEnum es2) {
     byte z_test = TEST_ENDSTOP(es1) | (TEST_ENDSTOP(es2) << 1); // bit 0 for Z, bit 1 for Z2
     if (z_test && stepper.current_block->steps[Z_AXIS] > 0) {
       SBI(endstop_hit_bits, Z_MIN);
diff --git a/Marlin/endstops.h b/Marlin/endstops.h
index 22c2468b844..4f2ce9e5ddb 100644
--- a/Marlin/endstops.h
+++ b/Marlin/endstops.h
@@ -86,7 +86,7 @@ class Endstops {
   private:
 
     #if ENABLED(Z_DUAL_ENDSTOPS)
-      static void test_dual_z_endstops(EndstopEnum es1, EndstopEnum es2);
+      static void test_dual_z_endstops(const EndstopEnum es1, const EndstopEnum es2);
     #endif
 };