Now that trapq_extract_old() can return upcoming moves, it's possible
for homing to cause confusing results (as these moves can end early).
Avoid this by delaying query responses until after homing completes.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Batch reading of 8 samples (48 bytes) at a time from the sensor. This
reduces the number of transactions - which can notably improve
performance on i2c.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
During normal printing the host software would attempt to stay ahead
of the micro-controller by 2 full seconds. Change that time to 1
second. This should make the software more responsive to user
requests (such as pause requests).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The current code is likely to perform a lazy flush of the lookahead
queue around 4 times a second. Increase that to around 6-7 times a
second. This change may slightly improve the responsiveness to user
requests mid-print (eg, changing extrusion ratio) and may make a
"print stall" less likely in some corner cases.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Normally the toolhead code will flush the lookahead buffer every
~250ms and will briefly pause to avoid buffering too much data. That
pause allows other tasks to run. Make sure to periodically yield to
other tasks on each lookahead buffer flush even if a delay isn't
needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Fix inverted check for fifo empty. The fifo is empty when the number
of entries in the fifo is zero.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support extracting moves from both the "live" trapq->moves as well as
the "history" from trapq->history storage. Now that moves are flushed
separately from the lookahead queue, there is a good chance that the
current move being processed on the mcus will still be in the active
trapq list.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
After a toolhead dwell, there is no reason to enter the priming state
and to create the priming exiration timer.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow the step compress code to perform regular step+dir+step
filtering even during probing and homing actions.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Currently, the LEDHelper() and GCodeRequestQueue() helper classes
require that their callbacks do not block. As a result, the pca9533,
pca9632, and sx1509 devices need to use non-blocking i2c write calls.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit b60804bb changed the trapq head sentinel to store
print_time=-1. However, it failed to update trapq_add_move() that
relied on that value to detect the head sentinel. As a result,
numerical stability issues could lead to stepcompress errors.
Fix by changing trapq_add_move() to detect the head sentinel even with
a negative print_time.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Numerically optimized versions of *EI shapers have been tuned
for specific ranges of damping ratios and will show poor stability
outside of these designated ranges.
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
The change removes the shapers defined there in favor of the
standard ones and makes the script a lot more configurable
via command-line arguments.
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
The code currently adds an additional 100ms to BUFFER_TIME_HIGH in
_check_pause() to reduce the number of calls to _check_pause().
However, LOOKAHEAD_FLUSH_TIME should already provide sufficient
batching so adding more is not necessary. This change should
hopefully make configuring BUFFER_TIME_HIGH a little more transparent.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Due to differences in mcu clock vs system clock it's possible to
repeatedly underestimate a system delay needed to bring about a
sufficient mcu time - which just wastes cpu cycles retrying a pause.
It's okay to sleep a slightly longer time to avoid the issue.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Previously the code would always keep at least 2 items on the
lookahead queue after a "lazy" flush. In most cases it's okay to
leave only a single item. Update the code to better handle flushing
of items that are fully ready.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Replace "delayed" storage with a full pass through the queue. This
simplifies the lookahead processing logic.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Avoid using "smoothed" and "accel_to_decel" for variables associated
with minimum_cruise_ratio. Instead introduce the prefix "mcr" for use
with these variables.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>