- bdpressure_check.py accepted only extension version 1. The sensor now
runs firmware version 2 (bytes 54-65 unchanged, diagnostics added), so
every purge check reported bd_pressure as not answering. Accept 1 and 2.
- _LOAD_FOR_CHAMBER: the Blobifier only purges with the QGL applied, so
the load before the chamber soak skipped its purge (0.0 mm extruded).
Level the gantry and home Z first when the QGL is not applied.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The guard's timer read the sensor while G28 ran; bdpressure.py writes the
probe mode at every homing move, and Klipper allows only one I2C request
at a time per device: KeyError ('i2c_response', 1), Klipper shut down
during HOME. The guard now wraps the sensor's i2c in a reactor mutex at
connect; bdpressure and bdpressure_check (now looks up sensor.i2c at
every use) go through it too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bdpressure.py leaves the extruder at the last PA_CALIBRATE test value
(0.098) when it finds no result, and _PA_AFTER_CALIBRATE saved that as
the calibrated PA (lane1 after an AFC pause, lane5 after the sensor went
silent). A run is now rejected, with nothing cached or written to
Spoolman, when the PA is still at the end of the scan, the printer
paused during the test, or bd_pressure gave too few or too few different
readings. The previous valid PA (or fallback_pa) is applied instead.
bdpressure_check reports pa_points and pa_distinct from the bdpressure
module's last PA_CALIBRATE data for this.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Macros as they run on the printer (Voron 2.4 + AFC Box Turtle +
Blobifier + Beacon + bd_pressure + bdwidth + iHeater), the Klipper
modules they need (xy_drift, bdwidth_status, bdpressure_check), MCU
firmware update scripts, install.sh with Moonraker update manager
support, and READMEs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>