aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/serialhdl.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-06-21 20:46:44 -0400
committerKevin O'Connor <kevin@koconnor.net>2019-06-21 21:42:20 -0400
commit9feb05ce418a57127ac1f95f5f07e8ef4beae7f4 (patch)
tree2dfab2f92e5b8be8600973793b2c388dcd20ce34 /klippy/serialhdl.py
parente202a8802b31495622a47178459481540f314b7c (diff)
downloadkutter-9feb05ce418a57127ac1f95f5f07e8ef4beae7f4.tar.gz
kutter-9feb05ce418a57127ac1f95f5f07e8ef4beae7f4.tar.xz
kutter-9feb05ce418a57127ac1f95f5f07e8ef4beae7f4.zip
mcu: Support minclock in send_with_response() requests
Enhance send_with_response() so that it supports queries with a minclock. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/serialhdl.py')
-rw-r--r--klippy/serialhdl.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py
index 99fd5e94..1b4f1e13 100644
--- a/klippy/serialhdl.py
+++ b/klippy/serialhdl.py
@@ -152,7 +152,7 @@ class SerialReader:
self.raw_send(cmd, minclock, reqclock, self.default_cmd_queue)
def send_with_response(self, msg, response):
cmd = self.msgparser.create_command(msg)
- src = SerialRetryCommand(self, cmd, response)
+ src = SerialRetryCommand(self, [cmd], self.default_cmd_queue, response)
return src.get_response()
def alloc_command_queue(self):
return self.ffi_main.gc(self.ffi_lib.serialqueue_alloc_commandqueue(),
@@ -199,17 +199,22 @@ class SerialReader:
class SerialRetryCommand:
TIMEOUT_TIME = 5.0
RETRY_TIME = 0.500
- def __init__(self, serial, cmd, name, oid=None):
+ def __init__(self, serial, cmds, cmd_queue, name, oid=None,
+ minclock=0, minsystime=0.):
self.serial = serial
- self.cmd = cmd
+ self.cmds = cmds
+ self.cmd_queue = cmd_queue
self.name = name
self.oid = oid
+ self.minclock = minclock
self.response = None
reactor = self.serial.reactor
self.mutex = reactor.mutex(is_locked=True)
self.min_query_time = self.serial.reactor.monotonic()
+ self.first_query_time = max(self.min_query_time, minsystime)
self.serial.register_response(self.handle_callback, self.name, self.oid)
- retry_time = self.send_event(self.min_query_time)
+ self.send_event(self.min_query_time)
+ retry_time = self.first_query_time + self.RETRY_TIME
self.send_timer = reactor.register_timer(self.send_event, retry_time)
def unregister(self):
self.serial.unregister_response(self.name, self.oid)
@@ -217,12 +222,14 @@ class SerialRetryCommand:
def send_event(self, eventtime):
if self.response is not None:
return self.serial.reactor.NEVER
- if eventtime > self.min_query_time + self.TIMEOUT_TIME:
+ if eventtime > self.first_query_time + self.TIMEOUT_TIME:
self.unregister()
if self.response is None:
self.mutex.unlock()
return self.serial.reactor.NEVER
- self.serial.raw_send(self.cmd, 0, 0, self.serial.default_cmd_queue)
+ for cmd in self.cmds:
+ self.serial.raw_send(cmd, self.minclock, self.minclock,
+ self.cmd_queue)
return eventtime + self.RETRY_TIME
def handle_callback(self, params):
last_sent_time = params['#sent_time']