mcu: Fix timing of endstop checking

Make sure to not query the given endstop until after the start of the
requested operation.  This ensures that the operation has started
prior to querying the status of that operation.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2019-01-10 12:27:56 -05:00
parent 0119e42d13
commit 32632c8226
1 changed files with 8 additions and 5 deletions

View File

@ -146,7 +146,8 @@ class MCU_endstop:
self._oid = self._home_cmd = self._query_cmd = None self._oid = self._home_cmd = self._query_cmd = None
self._mcu.register_config_callback(self._build_config) self._mcu.register_config_callback(self._build_config)
self._homing = False self._homing = False
self._min_query_time = self._next_query_time = 0. self._min_query_time = 0.
self._next_query_print_time = 0.
self._last_state = {} self._last_state = {}
def get_mcu(self): def get_mcu(self):
return self._mcu return self._mcu
@ -185,7 +186,7 @@ class MCU_endstop:
rest_ticks = int(rest_time * self._mcu.get_adjusted_freq()) rest_ticks = int(rest_time * self._mcu.get_adjusted_freq())
self._homing = True self._homing = True
self._min_query_time = self._mcu.monotonic() self._min_query_time = self._mcu.monotonic()
self._next_query_time = self._min_query_time + self.RETRY_QUERY self._next_query_print_time = print_time + self.RETRY_QUERY
self._home_cmd.send( self._home_cmd.send(
[self._oid, clock, self._mcu.seconds_to_clock(sample_time), [self._oid, clock, self._mcu.seconds_to_clock(sample_time),
sample_count, rest_ticks, 1 ^ self._invert], reqclock=clock) sample_count, rest_ticks, 1 ^ self._invert], reqclock=clock)
@ -222,13 +223,15 @@ class MCU_endstop:
raise self.TimeoutError("Timeout during endstop homing") raise self.TimeoutError("Timeout during endstop homing")
if self._mcu.is_shutdown(): if self._mcu.is_shutdown():
raise error("MCU is shutdown") raise error("MCU is shutdown")
if eventtime >= self._next_query_time: est_print_time = self._mcu.estimated_print_time(eventtime)
self._next_query_time = eventtime + self.RETRY_QUERY if est_print_time >= self._next_query_print_time:
self._next_query_print_time = est_print_time + self.RETRY_QUERY
self._query_cmd.send([self._oid]) self._query_cmd.send([self._oid])
return True return True
def query_endstop(self, print_time): def query_endstop(self, print_time):
self._homing = False self._homing = False
self._min_query_time = self._next_query_time = self._mcu.monotonic() self._min_query_time = self._mcu.monotonic()
self._next_query_print_time = print_time
def query_endstop_wait(self): def query_endstop_wait(self):
eventtime = self._mcu.monotonic() eventtime = self._mcu.monotonic()
while self._check_busy(eventtime): while self._check_busy(eventtime):