aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/chelper/itersolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/chelper/itersolve.c')
-rw-r--r--klippy/chelper/itersolve.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/klippy/chelper/itersolve.c b/klippy/chelper/itersolve.c
index 5eafd2a7..84fd5f71 100644
--- a/klippy/chelper/itersolve.c
+++ b/klippy/chelper/itersolve.c
@@ -144,14 +144,12 @@ itersolve_generate_steps(struct stepper_kinematics *sk, double flush_time)
{
double last_flush_time = sk->last_flush_time;
sk->last_flush_time = flush_time;
- if (!sk->tq || list_empty(&sk->tq->moves))
+ if (!sk->tq)
return 0;
+ trapq_check_sentinels(sk->tq);
struct move *m = list_first_entry(&sk->tq->moves, struct move, node);
- while (last_flush_time >= m->print_time + m->move_t) {
- if (list_is_last(&m->node, &sk->tq->moves))
- return 0;
+ while (last_flush_time >= m->print_time + m->move_t)
m = list_next_entry(m, node);
- }
for (;;) {
double start = m->print_time, end = start + m->move_t;
if (start < last_flush_time)
@@ -166,7 +164,7 @@ itersolve_generate_steps(struct stepper_kinematics *sk, double flush_time)
return ret;
}
last_flush_time = end;
- if (list_is_last(&m->node, &sk->tq->moves))
+ if (flush_time <= m->print_time + m->move_t)
return 0;
m = list_next_entry(m, node);
}
@@ -176,22 +174,19 @@ itersolve_generate_steps(struct stepper_kinematics *sk, double flush_time)
double __visible
itersolve_check_active(struct stepper_kinematics *sk, double flush_time)
{
- if (!sk->tq || list_empty(&sk->tq->moves))
+ if (!sk->tq)
return 0.;
+ trapq_check_sentinels(sk->tq);
struct move *m = list_first_entry(&sk->tq->moves, struct move, node);
- while (sk->last_flush_time >= m->print_time + m->move_t) {
- if (list_is_last(&m->node, &sk->tq->moves))
- return 0.;
+ while (sk->last_flush_time >= m->print_time + m->move_t)
m = list_next_entry(m, node);
- }
- while (m->print_time < flush_time) {
+ for (;;) {
if (check_active(sk, m))
return m->print_time;
- if (list_is_last(&m->node, &sk->tq->moves))
+ if (flush_time <= m->print_time + m->move_t)
return 0.;
m = list_next_entry(m, node);
}
- return 0.;
}
void __visible