aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-07-23 12:46:14 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-07-29 16:35:30 -0400
commit07f0ecb4d059f653322db54064b36c9fc79bbb95 (patch)
treef3e3771e1713821a017a9d805831a70fb4fb6360
parent45c232b2c724136aa9ef54b2858712640baacb3d (diff)
downloadkutter-07f0ecb4d059f653322db54064b36c9fc79bbb95.tar.gz
kutter-07f0ecb4d059f653322db54064b36c9fc79bbb95.tar.xz
kutter-07f0ecb4d059f653322db54064b36c9fc79bbb95.zip
trapq: Store toolhead.set_position() updates in trapq history
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--klippy/chelper/__init__.py2
-rw-r--r--klippy/chelper/trapq.c17
-rw-r--r--klippy/chelper/trapq.h2
-rw-r--r--klippy/toolhead.py4
4 files changed, 24 insertions, 1 deletions
diff --git a/klippy/chelper/__init__.py b/klippy/chelper/__init__.py
index 97493355..c2ad802a 100644
--- a/klippy/chelper/__init__.py
+++ b/klippy/chelper/__init__.py
@@ -83,6 +83,8 @@ defs_trapq = """
struct trapq *trapq_alloc(void);
void trapq_free(struct trapq *tq);
void trapq_finalize_moves(struct trapq *tq, double print_time);
+ void trapq_set_position(struct trapq *tq, double print_time
+ , double pos_x, double pos_y, double pos_z);
int trapq_extract_old(struct trapq *tq, struct pull_move *p, int max
, double start_time, double end_time);
"""
diff --git a/klippy/chelper/trapq.c b/klippy/chelper/trapq.c
index eaeb5949..2d4c2093 100644
--- a/klippy/chelper/trapq.c
+++ b/klippy/chelper/trapq.c
@@ -197,6 +197,23 @@ trapq_finalize_moves(struct trapq *tq, double print_time)
}
}
+// Note a position change in the trapq history
+void __visible
+trapq_set_position(struct trapq *tq, double print_time
+ , double pos_x, double pos_y, double pos_z)
+{
+ // Flush all moves from trapq
+ trapq_finalize_moves(tq, NEVER_TIME);
+
+ // Add a marker to the trapq history
+ struct move *m = move_alloc();
+ m->print_time = print_time;
+ m->start_pos.x = pos_x;
+ m->start_pos.y = pos_y;
+ m->start_pos.z = pos_z;
+ list_add_head(&m->node, &tq->history);
+}
+
// Return history of movement queue
int __visible
trapq_extract_old(struct trapq *tq, struct pull_move *p, int max
diff --git a/klippy/chelper/trapq.h b/klippy/chelper/trapq.h
index 154fe04d..dbde8d3e 100644
--- a/klippy/chelper/trapq.h
+++ b/klippy/chelper/trapq.h
@@ -44,6 +44,8 @@ void trapq_free(struct trapq *tq);
void trapq_check_sentinels(struct trapq *tq);
void trapq_add_move(struct trapq *tq, struct move *m);
void trapq_finalize_moves(struct trapq *tq, double print_time);
+void trapq_set_position(struct trapq *tq, double print_time
+ , double pos_x, double pos_y, double pos_z);
int trapq_extract_old(struct trapq *tq, struct pull_move *p, int max
, double start_time, double end_time);
diff --git a/klippy/toolhead.py b/klippy/toolhead.py
index 3097c7dc..155848be 100644
--- a/klippy/toolhead.py
+++ b/klippy/toolhead.py
@@ -401,7 +401,9 @@ class ToolHead:
return list(self.commanded_pos)
def set_position(self, newpos, homing_axes=()):
self.flush_step_generation()
- self.trapq_finalize_moves(self.trapq, self.reactor.NEVER)
+ ffi_main, ffi_lib = chelper.get_ffi()
+ ffi_lib.trapq_set_position(self.trapq, self.print_time,
+ newpos[0], newpos[1], newpos[2])
self.commanded_pos[:] = newpos
self.kin.set_position(newpos, homing_axes)
self.printer.send_event("toolhead:set_position")