aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-04-02 13:42:25 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-06-09 18:58:35 -0400
commitbc29ee1c6d1fbd99a9d0c6db6b4419bbc8f8a7c3 (patch)
treecf0ead51fffdf6bb7d5d70fbfcb0749ce84f0a50 /klippy
parent983951443cf14fe2985585c2c2eb20efe526411d (diff)
downloadkutter-bc29ee1c6d1fbd99a9d0c6db6b4419bbc8f8a7c3.tar.gz
kutter-bc29ee1c6d1fbd99a9d0c6db6b4419bbc8f8a7c3.tar.xz
kutter-bc29ee1c6d1fbd99a9d0c6db6b4419bbc8f8a7c3.zip
homing: Check for failures during multi-endstop homing
If any endstop reports a failure, then stop homing on all endstops. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/extras/homing.py9
-rw-r--r--klippy/mcu.py4
2 files changed, 10 insertions, 3 deletions
diff --git a/klippy/extras/homing.py b/klippy/extras/homing.py
index f6dead84..1d7e1948 100644
--- a/klippy/extras/homing.py
+++ b/klippy/extras/homing.py
@@ -13,8 +13,13 @@ ENDSTOP_SAMPLE_COUNT = 4
def multi_complete(printer, completions):
if len(completions) == 1:
return completions[0]
- cb = (lambda e: all([c.wait() for c in completions]))
- return printer.get_reactor().register_callback(cb)
+ # Build completion that waits for all completions
+ reactor = printer.get_reactor()
+ cp = reactor.register_callback(lambda e: [c.wait() for c in completions])
+ # If any completion indicates an error, then exit main completion early
+ for c in completions:
+ reactor.register_callback(lambda e: cp.complete(1) if c.wait() else 0)
+ return cp
# Implementation of homing/probing moves
class HomingMove:
diff --git a/klippy/mcu.py b/klippy/mcu.py
index bd7267ad..1b77aff7 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -84,7 +84,9 @@ class MCU_trsync:
tc = self._trigger_completion
if tc is not None:
self._trigger_completion = None
- self._reactor.async_complete(tc, True)
+ reason = params['trigger_reason']
+ is_failure = (reason == self.REASON_COMMS_TIMEOUT)
+ self._reactor.async_complete(tc, is_failure)
elif self._home_end_clock is not None:
clock = self._mcu.clock32_to_clock64(params['clock'])
if clock >= self._home_end_clock: