aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/bltouch.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/extras/bltouch.py')
-rw-r--r--klippy/extras/bltouch.py33
1 files changed, 24 insertions, 9 deletions
diff --git a/klippy/extras/bltouch.py b/klippy/extras/bltouch.py
index eabb2f2c..2d0be3d8 100644
--- a/klippy/extras/bltouch.py
+++ b/klippy/extras/bltouch.py
@@ -38,7 +38,9 @@ class BLTouchEndstopWrapper:
self.mcu_pwm = ppins.setup_pin('pwm', config.get('control_pin'))
self.mcu_pwm.setup_max_duration(0.)
self.mcu_pwm.setup_cycle_time(SIGNAL_PERIOD)
+ # Command timing
self.next_cmd_time = self.action_end_time = 0.
+ self.finish_home_complete = self.wait_trigger_complete = None
# Create an "endstop" object to handle the sensor pin
pin = config.get('sensor_pin')
pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True)
@@ -82,6 +84,7 @@ class BLTouchEndstopWrapper:
self.set_output_mode(self.output_mode)
try:
self.raise_probe()
+ self.verify_raise_probe()
except self.printer.command_error as e:
logging.warning("BLTouch raise probe error: %s", str(e))
def sync_mcu_print_time(self):
@@ -117,12 +120,13 @@ class BLTouchEndstopWrapper:
def raise_probe(self):
self.sync_mcu_print_time()
if not self.pin_up_not_triggered:
- # No way to verify raise attempt - just issue commands
self.send_cmd('reset')
- self.send_cmd('pin_up', duration=self.pin_move_time)
+ self.send_cmd('pin_up', duration=self.pin_move_time)
+ def verify_raise_probe(self):
+ if not self.pin_up_not_triggered:
+ # No way to verify raise attempt
return
for retry in range(3):
- self.send_cmd('pin_up', duration=self.pin_move_time)
success = self.verify_state(False)
if success:
# The "probe raised" test completed successfully
@@ -134,6 +138,7 @@ class BLTouchEndstopWrapper:
self.gcode.respond_info(msg)
self.sync_mcu_print_time()
self.send_cmd('reset', duration=RETRY_RESET_TIME)
+ self.send_cmd('pin_up', duration=self.pin_move_time)
def lower_probe(self):
self.test_sensor()
self.sync_print_time()
@@ -174,6 +179,7 @@ class BLTouchEndstopWrapper:
return
self.sync_print_time()
self.raise_probe()
+ self.verify_raise_probe()
self.sync_print_time()
self.multi = 'OFF'
def probe_prepare(self, hmove):
@@ -182,17 +188,26 @@ class BLTouchEndstopWrapper:
if self.multi == 'FIRST':
self.multi = 'ON'
self.sync_print_time()
- def probe_finish(self, hmove):
+ def home_start(self, print_time, sample_time, sample_count, rest_time,
+ triggered=True):
+ rest_time = min(rest_time, ENDSTOP_REST_TIME)
+ self.finish_home_complete = self.mcu_endstop.home_start(
+ print_time, sample_time, sample_count, rest_time, triggered)
+ # Schedule wait_for_trigger callback
+ r = self.printer.get_reactor()
+ self.wait_trigger_complete = r.register_callback(self.wait_for_trigger)
+ return self.finish_home_complete
+ def wait_for_trigger(self, eventtime):
+ self.finish_home_complete.wait()
if self.multi == 'OFF':
self.raise_probe()
+ def probe_finish(self, hmove):
+ self.wait_trigger_complete.wait()
+ if self.multi == 'OFF':
+ self.verify_raise_probe()
self.sync_print_time()
if hmove.check_no_movement() is not None:
raise self.printer.command_error("BLTouch failed to deploy")
- def home_start(self, print_time, sample_time, sample_count, rest_time,
- triggered=True):
- rest_time = min(rest_time, ENDSTOP_REST_TIME)
- return self.mcu_endstop.home_start(print_time, sample_time,
- sample_count, rest_time, triggered)
def get_position_endstop(self):
return self.position_endstop
def set_output_mode(self, mode):