To support continuous belt printing, add nestable repeat
loop support via an `[sdcard_loop]` module.
Supported G-Code:
- SDCARD_LOOP_BEGIN COUNT=n ; Loop for N times, or infinitely if N is 0
- SDCARD_LOOP_END ; End of loop
- SDCARD_LOOP_DESIST ; Complete all loops without iterating
Marlin M808 compatibility example in `config/sample-macros.cfg`:
- M808 Ln ; Loop for N times, or infinitely if N is 0
- M808 ; End of loop
- M808 K ; Complete all loops without iterating
Added unit tests in test/klippy/sdcard_loop.test
See https://reprap.org/wiki/G-code#M808:_Set_or_Goto_Repeat_Marker
Signed-off-by: Jason S. McMullan <jason.mcmullan@gmail.com>
Allow a larger velocity, accel, and square_corner_velocity than what
is specified in the config file.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The min_stop_interval safety check is fragile and leads to a notable
amount of complexity. Avoid these issues by not programming this
safety check.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
On some kinematics it's possible for the XY position to change
slightly during a probing move. Return back to the original XY
position on a probe lift so each probe attempt starts at the same
nominal position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This is useful when a saved bed mesh is used to ensure that the bed level
has not drifted too far from where it was when the mesh was created.
Signed-off-by: Johannes Stuettgen <johannes.stuettgen@gmail.com>
Users may define "faulty regions", locations within the mesh where a probed value is unreliable. When bed mesh generates points it will substitute points in faulty regions with up to 4 points nearest to the region. After calibration is complete the Z values at these points will be averaged and assigned to the original value inside the faulty region.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
If a negative number is specified for the RELATIVE_REFERENCE_INDEX parameter clear the internal relative_reference_index.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Start the raise sequence once the endstop notification arrives. This
can reduce the response time as it does not require waiting for the
homing sequence to fully finalize.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If reset_last_position() is invoked prior to the printer being
"ready", then the transform may not be properly accounted for. Handle
this by calling reset_last_position() when the printer becomes
"ready".
This should fix some "must home first" errors on extrude-only moves.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a dwell() to the start of drip_move() to ensure that input_shaper
movements scheduled in advance of the nominal move time aren't
scheduled prior to the homing start. (Otherwise the stepper may move
prior to endstop checking, which can corrupt the "no movement"
checks.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Only set resend_interval if a mcu_duration is specified. This fixes a
bug introduced in commit 861144d8.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Times longer than 5 seconds may result in a 32bit ticks overflow in
the micro-controller (for fast micro-controllers).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Module which bring support for P2 devices running in connected mode. This enables using a Palette2 directly with Klippy without Octoprint, or without Palette2 plugins for Octoprint which are not functional out of the box with Klipper.
Signed-off-by: Clifford Roche <clifford.roche@gmail.com>
The input shaper can only reduce vibrations by 20x. Therefore,
the best-case achievable vibrations level is max(psd) / 20.
Any vibrations below that level can be ignored for the prupose
of input shaper scoring. This allows tuning script to ignore
wide tails of resonances, because it is not helpful to try to
reduce them with input shaping.
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
In practice, these errors are usually due to problems on the host
computer instead of problems with communication.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
HTU21D sensor class lacked the method `get_report_time_delta` invoked
during watermark control loops. This short fix simply adds that method
in, calling the `self.report_time` attribute created during class
construction.
Signed-off-by: Jon Sanders <jonsan@gmail.com>
This adds support for BMP280 and BME680 sensor ICs,
along with fixing calibration data readout for BME280.
Gas sensor readout for the BME680 is just the raw compensated value.
To get actual meaningful values, more research is needed.
Signed-off-by: Michael Kurz <michi.kurz@gmail.com>
The tmc2660 spec has an ambiguous "SG" field that sometimes refers to
the "stallGuard" flag and sometimes refers to the "SG_RESULT" field.
The tmc2130 and tmc5160 have similar fields that are not ambiguous, so
adopt that naming strategy.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add functionality to support a Filament Motion Sensor for detecting extruder jams as well as runouts. Works by an encoder toggling the switch_pin 0/1 as the filament is pulled through the sensor.
Signed-off-by: Joshua Wherrett <thejoshw.code@gmail.com>
Temporarily postpone loading the CAN module so that moonraker (and
similar) can improve upgrade scripts.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The tmcuart_send command increases cpu usage on the micro-controller.
Should multiple tmcuart_send commands be issued at the same time to a
single AVR micro-controller, it could increase the load to the point
that it introduces a failure. It could also lead to tmcuart_send
transmission errors, which would cause retransmission requests, which
further increase the load.
Track and share mutexes so that only one tmcuart_send command can be
active on a single mcu at a time.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The tmc2130 (and tmc5160) will respond back with the value written
during the next SPI command. Use this feature to verify that the
value written matches the value sent.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
None of the other TMC driver enable SFILT by default and it seems
enabling SFILT may not be ideal for sensorless homing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Machines that have no heaters produce an error when the idle timeout occurs. This commit fixes this by checking if there are any heaters to turn off.
Signed-off-by: Florian Heinze <florian@heinze.at>
Introduce a heaters.set_temperature() command and call that from
commands that set a heater temperature. This new function calls
toolhead.register_lookahead_callback() so that the idle_timeout gets
notification that activity has occurred.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make the baud rate an optional parameter to the console.py tool. When
not present, it will default to 250000.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't try to detect a "real serial port" in serialhdl.py. Instead,
have the callers invoke either connect_uart(), connect_file(), or
connect_pipe().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add new fields to Command_Templates.md.
Remove unused self.rpm variable.
Use an explicit get_frequency() method in keeping with Klipper's
convention of not "peeking into member variables".
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This adds new config options for fans: 'tachometer_pin' to specify the
GPIO pin, and 'tachometer_ppr' (default 2) to specify the number of
signal pulses per revolution. The rpm is also exposed by get_status for
command templates and the API server. For fast fans (at least 10000
RPM), the polling interval can be shortened using the
'tachometer_poll_interval' option.
There is a new mcu object for a generic edge counter, which repeatedly
polls a GPIO pin and periodically reports the count to the host.
Signed-off-by: Adrian Keet <arkeet@gmail.com>
If `klippy` loses connection to a device, the next `read()` from the
device file descriptor will result in a zero-byte result, i.e. an `EOF`.
Right now this gives a confusing error message, so this simply handles
the special case of `EOF` and outputs a better log message.
Signed-off-by: Lasse Dalegaard <dalegaard@gmail.com>
When `serialhdl` opens a terminal device it must prevent the device from
becoming the controlling terminal of `klippy`, as such a terminal will
send additional messages to the session leader, e.g. a SIGHUP, which
would kill `klippy`. See e.g. #3981.
pySerial already does this, but for e.g. `klipper_mcu` we were not doing
this ourselves.
On Linux a process must set `O_NOCTTY` when opening any file that could
potentially be a terminal device, to avoid this.
Earlier process daemonization tools prevent this from being an issue by
double forking, but under `systemd` a process must take steps to avoid
opening a controlling terminal.
Signed-off-by: Lasse Dalegaard <dalegaard@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
With commit 53b10d3a the setup of sensorless homing could occur before
the driver was enabled which would cause the reinitialization of the
driver settings to undo the sensorless homing setup.
Use set_field() when setting the sensorless homing registers so that
it wont conflict with a driver init.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Check the status of all Trinamic stepper motor drivers once a second.
If the driver reports an error then invoke a shutdown. Also log any
serious warnings.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>