aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-04-02 12:18:05 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-08-06 13:12:49 -0400
commit24586f0c31d9f56a16f4c2434e8a7bcb98adc802 (patch)
tree45b76683a516aa897eb75c8f84e779de0dd099d7
parent33dcb3829717102f5243ad805f3ee09d52c0c9cf (diff)
downloadkutter-24586f0c31d9f56a16f4c2434e8a7bcb98adc802.tar.gz
kutter-24586f0c31d9f56a16f4c2434e8a7bcb98adc802.tar.xz
kutter-24586f0c31d9f56a16f4c2434e8a7bcb98adc802.zip
stepper: Query the stepper mcu position during startup
Try to keep the host mcu_position synchronized with the micro-controller by querying during startup and after every homing event. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--docs/Code_Overview.md9
-rw-r--r--klippy/mcu.py2
-rw-r--r--klippy/stepper.py9
3 files changed, 12 insertions, 8 deletions
diff --git a/docs/Code_Overview.md b/docs/Code_Overview.md
index 2e9dcf04..f6a73247 100644
--- a/docs/Code_Overview.md
+++ b/docs/Code_Overview.md
@@ -424,11 +424,10 @@ Recv: // gcode homing: X:0.000000 Y:0.000000 Z:0.000000
The "mcu" position (`stepper.get_mcu_position()` in the code) is the
total number of steps the micro-controller has issued in a positive
direction minus the number of steps issued in a negative direction
-since the micro-controller was last reset. The value reported is only
-valid after the stepper has been homed. If the robot is in motion when
-the query is issued then the reported value includes moves buffered on
-the micro-controller, but does not include moves on the look-ahead
-queue.
+since the micro-controller was last reset. If the robot is in motion
+when the query is issued then the reported value includes moves
+buffered on the micro-controller, but does not include moves on the
+look-ahead queue.
The "stepper" position (`stepper.get_commanded_position()`) is the
position of the given stepper as tracked by the kinematics code. This
diff --git a/klippy/mcu.py b/klippy/mcu.py
index 1e3aa3b4..83143837 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -122,7 +122,7 @@ class MCU_trsync:
params = self._trsync_query_cmd.send([self._oid,
self.REASON_HOST_REQUEST])
for s in self._steppers:
- s.note_homing_end(did_trigger=True) # XXX
+ s.note_homing_end()
return params['trigger_reason']
class MCU_endstop:
diff --git a/klippy/stepper.py b/klippy/stepper.py
index ca7df28f..8feb72b5 100644
--- a/klippy/stepper.py
+++ b/klippy/stepper.py
@@ -42,6 +42,8 @@ class MCU_stepper:
self._itersolve_generate_steps = ffi_lib.itersolve_generate_steps
self._itersolve_check_active = ffi_lib.itersolve_check_active
self._trapq = ffi_main.NULL
+ self._mcu.get_printer().register_event_handler('klippy:connect',
+ self._query_mcu_position)
def get_mcu(self):
return self._mcu
def get_name(self, short=False):
@@ -136,7 +138,7 @@ class MCU_stepper:
self.set_trapq(self._trapq)
self._set_mcu_position(mcu_pos)
return old_sk
- def note_homing_end(self, did_trigger=False):
+ def note_homing_end(self):
ffi_main, ffi_lib = chelper.get_ffi()
ret = ffi_lib.stepcompress_reset(self._stepqueue, 0)
if ret:
@@ -145,7 +147,9 @@ class MCU_stepper:
ret = ffi_lib.stepcompress_queue_msg(self._stepqueue, data, len(data))
if ret:
raise error("Internal error in stepcompress")
- if not did_trigger or self._mcu.is_fileoutput():
+ self._query_mcu_position()
+ def _query_mcu_position(self):
+ if self._mcu.is_fileoutput():
return
params = self._get_position_cmd.send([self._oid])
last_pos = params['pos']
@@ -153,6 +157,7 @@ class MCU_stepper:
last_pos = -last_pos
print_time = self._mcu.estimated_print_time(params['#receive_time'])
clock = self._mcu.print_time_to_clock(print_time)
+ ffi_main, ffi_lib = chelper.get_ffi()
ret = ffi_lib.stepcompress_set_last_position(self._stepqueue, clock,
last_pos)
if ret: