The previous code calculates each step time via an "exponential
search" followed by a "false position with Illinois algorithm" search.
Replace with a "secant method" with "bounds check" search. This
simplifies the code, improves the performance, and does a better job
of finding steps near a direction change.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When in debug output mode, make sure to register the fd correctly.
Otherwise, the poll() call will use the 0 fd which could cause random
results.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the mcu config section is omitted, it leads to confusing error
messages. Don't default the serial config option to /dev/ttyS0 to
improve the error reporting.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It is only valid to call raise_probe() when the toolhead is not
moving. Make sure to call sync_print_time() from multi_probe_end() to
ensure that. This fixes a bug that could cause the Z axis steppers to
lose their position when "stow_on_each_sample=False".
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Avoid using the absolute E position when calculating pressure advance
as that position can grow arbitrarily large, which can result in
"numerical stability" problems. That instability could eventually
lead to internal errors during step compression.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Some RPi0 users were reporting "timer too close" errors due to pwm pin
resets - increase the time the host has to complete the startup to
avoid this.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
On a reset, the mcu.py code may have sent an initialization message to
the bltouch, which needs time to complete. Add additional time during
the bltouch setup to avoid a race with these two times. This avoids
some "timer too close" errors that users of fast host machines were
reporting.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The M117 command parser discards the last character of the message
whenever the M117 command does not begin the line and there is no *xx
checksum, e.g.
N0 M117 Look at me
causes the banner area of the printer screen to display "Look at m".
This patch only trims the checksum when one is found to trim.
Signed-Off-By: Jonathan Pickard <jhp@adjustablelabs.info>
Add support for performing Python gc work only from the main reactor
thread and only when it appears the main thread is idle.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Explicitly run the python garbage collector on a restart. This cleans
up memory from the previous session.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure to terminate any greenlets that are in a pause() state.
This is necessary to ensure the reactor can be deallocated.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The existence of a __del__() method prevents deallocation on python2
if there are circular references. Replace the __del__() method with a
new finalize() call and arrange for it to be called when the main
reactor is released.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The existence of a __del__() method prevents deallocation on python2
if there are circular references. Just remove the method as
disconnect() should already be called directly.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The existence of a __del__() method prevents deallocation on python2
if there are circular references. Just remove the method as
disconnect() should already be called directly.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The default on X86 32bit machines is to use 80bit floating point math
(as found in the ancient "387 coprocessor"). This can cause numerical
stability problems. Set the compiler flags to make sure the newer SSE
math is always used on X86.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add get_status wrapper with last_query status for macros It is sometimes useful to determine the state of the probe from a macro. If the probe is connected to an endstop pin, the results can be obtained via QUERY_ENDSTOPS but if a physical endstop is in use in addition to the probe the probe state cannot be obtained. This change allows one to use QUERY_PROBE and then access the printer.probe.last_query object to obtain the state.
Signed-off-by: Paul McGowan <mental405@gmail.com>
Some mcu implementations don't like it when the pwm pin is configured
twice, so use the normal schedule_pwm_out implementation to update on
a restart.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Try to invoke a shutdown on an unhandled exception from reactor.run().
If that fails, try to do a clean exit.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>