From a9a0bb87fa472c470d5cbd4ffc78e1acb29a04c1 Mon Sep 17 00:00:00 2001
From: Kevin O'Connor <kevin@koconnor.net>
Date: Wed, 26 Sep 2018 15:57:22 -0400
Subject: [PATCH] probe: Verify the toolhead moves at least some distance on a
 probe

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
---
 klippy/extras/probe.py |  3 +--
 klippy/homing.py       | 34 ++++++++++++++++++----------------
 2 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/klippy/extras/probe.py b/klippy/extras/probe.py
index df5f92680..5b5036106 100644
--- a/klippy/extras/probe.py
+++ b/klippy/extras/probe.py
@@ -70,8 +70,7 @@ class PrinterProbe:
         pos = toolhead.get_position()
         pos[2] = self.z_position
         try:
-            homing_state.homing_move(
-                pos, [(self.mcu_probe, "probe")], self.speed, probe_pos=True)
+            homing_state.probing_move(pos, self.mcu_probe, self.speed)
         except homing.EndstopError as e:
             reason = str(e)
             if "Timeout during endstop homing" in reason:
diff --git a/klippy/homing.py b/klippy/homing.py
index 48144001f..b65c3124d 100644
--- a/klippy/homing.py
+++ b/klippy/homing.py
@@ -40,9 +40,12 @@ class Homing:
         dist_ticks = adjusted_freq * mcu_stepper.get_step_dist()
         ticks_per_step = math.ceil(dist_ticks / speed)
         return dist_ticks / ticks_per_step
-    def _homing_move(self, movepos, endstops, speed, probe_pos=False):
+    def _homing_move(self, movepos, endstops, speed,
+                     probe_pos=False, verify_movement=False):
         # Start endstop checking
         print_time = self.toolhead.get_last_move_time()
+        start_mcu_pos = [(s, name, s.get_mcu_position())
+                         for es, name in endstops for s in es.get_steppers()]
         for mcu_endstop, name in endstops:
             min_step_dist = min([s.get_step_dist()
                                  for s in mcu_endstop.get_steppers()])
@@ -74,10 +77,18 @@ class Homing:
             mcu_endstop.home_finalize()
         if error is not None:
             raise EndstopError(error)
-    def homing_move(self, movepos, endstops, speed, probe_pos=False):
-        for mcu_endstop, name in endstops:
-            mcu_endstop.home_prepare()
-        self._homing_move(movepos, endstops, speed, probe_pos)
+        # Check if some movement occurred
+        if verify_movement:
+            for s, name, pos in start_mcu_pos:
+                if s.get_mcu_position() == pos:
+                    if probe_pos:
+                        raise EndstopError("Probe triggered prior to movement")
+                    raise EndstopError(
+                        "Endstop %s still triggered after retract" % (name,))
+    def probing_move(self, movepos, mcu_probe, speed):
+        mcu_probe.home_prepare()
+        self._homing_move(movepos, [(mcu_probe, "probe")], speed,
+                          probe_pos=True, verify_movement=True)
     def home(self, forcepos, movepos, endstops, speed, second_home=False):
         if second_home and forcepos == movepos:
             return
@@ -96,18 +107,9 @@ class Homing:
                              for es, n in endstops for s in es.get_steppers()])
             self.toolhead.dwell(est_steps * HOMING_STEP_DELAY, check_stall=False)
             speed = self._get_homing_speed(speed, endstops)
-        # Setup for retract verification
-        self.toolhead.get_last_move_time()
-        start_mcu_pos = [(s, name, s.get_mcu_position())
-                         for es, name in endstops for s in es.get_steppers()]
         # Issue homing move
-        self._homing_move(movepos, endstops, speed)
-        # Verify retract led to some movement on second home
-        if second_home and self.verify_retract:
-            for s, name, pos in start_mcu_pos:
-                if s.get_mcu_position() == pos:
-                    raise EndstopError(
-                        "Endstop %s still triggered after retract" % (name,))
+        self._homing_move(movepos, endstops, speed,
+                          verify_movement=second_home and self.verify_retract)
     def home_axes(self, axes):
         self.changed_axes = axes
         try: