diff --git a/klippy/mcu.py b/klippy/mcu.py index ca519198..702f981a 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -31,11 +31,13 @@ class RetryAsyncCommand: if self.need_response and params['#sent_time'] >= self.min_query_time: self.need_response = False self.reactor.async_complete(self.completion, params) - def get_response(self, cmds, cmd_queue, minclock=0, reqclock=0): + def get_response(self, cmds, cmd_queue, minclock=0, reqclock=0, retry=True): cmd, = cmds self.serial.raw_send_wait_ack(cmd, minclock, reqclock, cmd_queue) self.min_query_time = 0. first_query_time = query_time = self.reactor.monotonic() + if not retry: + self.TIMEOUT_TIME=.0 while 1: params = self.completion.wait(query_time + self.RETRY_TIME) if params is not None: @@ -64,19 +66,21 @@ class CommandQueryWrapper: if cmd_queue is None: cmd_queue = serial.get_default_command_queue() self._cmd_queue = cmd_queue - def _do_send(self, cmds, minclock, reqclock): + def _do_send(self, cmds, minclock, reqclock, retry): xh = self._xmit_helper(self._serial, self._response, self._oid) reqclock = max(minclock, reqclock) try: - return xh.get_response(cmds, self._cmd_queue, minclock, reqclock) + return xh.get_response(cmds, self._cmd_queue, minclock, reqclock, + retry) except serialhdl.error as e: raise self._error(str(e)) - def send(self, data=(), minclock=0, reqclock=0): - return self._do_send([self._cmd.encode(data)], minclock, reqclock) + def send(self, data=(), minclock=0, reqclock=0, retry=True): + return self._do_send([self._cmd.encode(data)], minclock, reqclock, + retry) def send_with_preface(self, preface_cmd, preface_data=(), data=(), - minclock=0, reqclock=0): + minclock=0, reqclock=0, retry=True): cmds = [preface_cmd._cmd.encode(preface_data), self._cmd.encode(data)] - return self._do_send(cmds, minclock, reqclock) + return self._do_send(cmds, minclock, reqclock, retry) # Wrapper around command sending class CommandWrapper: diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py index 30db6170..fc884638 100644 --- a/klippy/serialhdl.py +++ b/klippy/serialhdl.py @@ -310,9 +310,12 @@ class SerialRetryCommand: self.serial.register_response(self.handle_callback, name, oid) def handle_callback(self, params): self.last_params = params - def get_response(self, cmds, cmd_queue, minclock=0, reqclock=0): + def get_response(self, cmds, cmd_queue, minclock=0, reqclock=0, + retry=True): retries = 5 retry_delay = .010 + if not retry: + retries = 0 while 1: for cmd in cmds[:-1]: self.serial.raw_send(cmd, minclock, reqclock, cmd_queue)