Skip to content

Commit f2248f7

Browse files
authored
⚡️ Implement CALIBRATION_GCODE as endstop (#27204)
1 parent 60d843b commit f2248f7

19 files changed

+116
-30
lines changed

Marlin/Configuration_adv.h

-2
Original file line numberDiff line numberDiff line change
@@ -1331,8 +1331,6 @@
13311331
//#define CALIBRATION_SCRIPT_PRE "M117 Starting Auto-Calibration\nT0\nG28\nG12\nM117 Calibrating..."
13321332
//#define CALIBRATION_SCRIPT_POST "M500\nM117 Calibration data saved"
13331333

1334-
#define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm
1335-
13361334
#define CALIBRATION_FEEDRATE_SLOW 60 // mm/min
13371335
#define CALIBRATION_FEEDRATE_FAST 1200 // mm/min
13381336
#define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/min

Marlin/src/HAL/AVR/endstop_interrupts.h

+8
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,14 @@ void setup_endstop_interrupts() {
345345
pciSetup(Z_MIN_PROBE_PIN);
346346
#endif
347347
#endif
348+
#if USE_CALIBRATION
349+
#if (digitalPinToInterrupt(CALIBRATION_PIN) != NOT_AN_INTERRUPT)
350+
_ATTACH(CALIBRATION_PIN);
351+
#else
352+
static_assert(digitalPinHasPCICR(CALIBRATION_PIN), "CALIBRATION_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue.");
353+
pciSetup(CALIBRATION_PIN);
354+
#endif
355+
#endif
348356

349357
// If we arrive here without raising an assertion, each pin has either an EXT-interrupt or a PCI.
350358
}

Marlin/src/HAL/DUE/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void setup_endstop_interrupts() {
6464
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
6565
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
6666
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
67+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
6768
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
6869
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
6970
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/HAL/ESP32/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ void setup_endstop_interrupts() {
5959
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
6060
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
6161
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
62+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
6263
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
6364
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
6465
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/HAL/HC32/endstop_interrupts.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,14 @@ void setup_endstop_interrupts() {
101101

102102
SETUP(Z_MIN_PROBE);
103103

104+
SETUP(CALIBRATION);
105+
104106
#undef SETUP
105107
}
106108

107109
// Ensure 1 - 10 IRQs are registered
108110
// Disable some endstops if you encounter this error
109-
#define ENDSTOPS_INTERRUPTS_COUNT COUNT_ENABLED(USE_X_MAX, USE_X_MIN, USE_X2_MAX, USE_X2_MIN, USE_Y_MAX, USE_Y_MIN, USE_Y2_MAX, USE_Y2_MIN, USE_Z_MAX, USE_Z_MIN, USE_Z2_MAX, USE_Z2_MIN, USE_Z3_MAX, USE_Z3_MIN, USE_Z4_MAX, USE_Z4_MIN, USE_Z_MIN_PROBE)
111+
#define ENDSTOPS_INTERRUPTS_COUNT COUNT_ENABLED(USE_X_MAX, USE_X_MIN, USE_X2_MAX, USE_X2_MIN, USE_Y_MAX, USE_Y_MIN, USE_Y2_MAX, USE_Y2_MIN, USE_Z_MAX, USE_Z_MIN, USE_Z2_MAX, USE_Z2_MIN, USE_Z3_MAX, USE_Z3_MIN, USE_Z4_MAX, USE_Z4_MIN, USE_Z_MIN_PROBE, USE_CALIBRATION)
110112
#if ENDSTOPS_INTERRUPTS_COUNT > 10
111113
#error "Too many endstop interrupts! HC32F460 only supports 10 endstop interrupts."
112114
#elif ENDSTOPS_INTERRUPTS_COUNT == 0

Marlin/src/HAL/LPC1768/endstop_interrupts.h

+6
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ void setup_endstop_interrupts() {
146146
#endif
147147
_ATTACH(Z_MIN_PROBE_PIN);
148148
#endif
149+
#if USE_CALIBRATION
150+
#if !LPC1768_PIN_INTERRUPT_M(CALIBRATION_PIN)
151+
#error "CALIBRATION_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
152+
#endif
153+
_ATTACH(CALIBRATION_PIN);
154+
#endif
149155
#if USE_I_MAX
150156
#if !LPC1768_PIN_INTERRUPT_M(I_MAX_PIN)
151157
#error "I_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."

Marlin/src/HAL/SAMD21/endstop_interrupts.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
#define MATCH_Z4_MAX_EILINE(P) TERN0(USE_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN))
8484
#define MATCH_Z4_MIN_EILINE(P) TERN0(USE_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN))
8585
#define MATCH_Z_MIN_PROBE_EILINE(P) TERN0(USE_Z_MIN_PROBE, DEFER4(MATCH_EILINE)(P, Z_MIN_PROBE_PIN))
86+
#define MATCH_CALIBRATION_EILINE(P) TERN0(USE_CALIBRATION, DEFER4(MATCH_EILINE)(P, CALIBRATION_PIN))
8687

8788
#define AVAILABLE_EILINE(P) ( PIN_TO_EILINE(P) != -1 \
8889
&& !MATCH_X_MAX_EILINE(P) && !MATCH_X_MIN_EILINE(P) \
@@ -99,7 +100,8 @@
99100
&& !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P) \
100101
&& !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P) \
101102
&& !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P) \
102-
&& !MATCH_Z_MIN_PROBE_EILINE(P) )
103+
&& !MATCH_Z_MIN_PROBE_EILINE(P) \
104+
&& !MATCH_CALIBRATION_EILINE(P) )
103105

104106
// One ISR for all EXT-Interrupts
105107
void endstop_ISR() { endstops.update(); }
@@ -208,6 +210,12 @@ void setup_endstop_interrupts() {
208210
#endif
209211
_ATTACH(Z_MIN_PROBE_PIN);
210212
#endif
213+
#if USE_CALIBRATION
214+
#if !AVAILABLE_EILINE(CALIBRATION_PIN)
215+
#error "CALIBRATION_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
216+
#endif
217+
_ATTACH(CALIBRATION_PIN);
218+
#endif
211219
#if USE_I_MAX
212220
#if !AVAILABLE_EILINE(I_MAX_PIN)
213221
#error "I_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."

Marlin/src/HAL/SAMD51/endstop_interrupts.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
#define MATCH_Z4_MAX_EILINE(P) TERN0(USE_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN))
8383
#define MATCH_Z4_MIN_EILINE(P) TERN0(USE_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN))
8484
#define MATCH_Z_MIN_PROBE_EILINE(P) TERN0(USE_Z_MIN_PROBE, DEFER4(MATCH_EILINE)(P, Z_MIN_PROBE_PIN))
85+
#define MATCH_CALIBRATION_EILINE(P) TERN0(USE_CALIBRATION, DEFER4(MATCH_EILINE)(P, CALIBRATION_PIN))
8586

8687
#define AVAILABLE_EILINE(P) ( PIN_TO_EILINE(P) != -1 \
8788
&& !MATCH_X_MAX_EILINE(P) && !MATCH_X_MIN_EILINE(P) \
@@ -98,7 +99,8 @@
9899
&& !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P) \
99100
&& !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P) \
100101
&& !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P) \
101-
&& !MATCH_Z_MIN_PROBE_EILINE(P) )
102+
&& !MATCH_Z_MIN_PROBE_EILINE(P) \
103+
&& !MATCH_CALIBRATION_EILINE(P) )
102104

103105
// One ISR for all EXT-Interrupts
104106
void endstop_ISR() { endstops.update(); }
@@ -183,6 +185,12 @@ void setup_endstop_interrupts() {
183185
#endif
184186
_ATTACH(Z_MIN_PROBE_PIN);
185187
#endif
188+
#if USE_CALIBRATION
189+
#if !AVAILABLE_EILINE(CALIBRATION_PIN)
190+
#error "CALIBRATION_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
191+
#endif
192+
_ATTACH(CALIBRATION_PIN);
193+
#endif
186194
#if USE_I_MAX
187195
#if !AVAILABLE_EILINE(I_MAX_PIN)
188196
#error "I_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."

Marlin/src/HAL/STM32/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ void setup_endstop_interrupts() {
4545
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
4646
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
4747
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
48+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
4849
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
4950
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
5051
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/HAL/STM32F1/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ void setup_endstop_interrupts() {
7070
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
7171
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
7272
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
73+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
7374
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
7475
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
7576
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/HAL/TEENSY31_32/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void setup_endstop_interrupts() {
6464
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
6565
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
6666
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
67+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
6768
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
6869
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
6970
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ void setup_endstop_interrupts() {
6363
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
6464
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
6565
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
66+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
6667
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
6768
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
6869
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ void setup_endstop_interrupts() {
6363
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
6464
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
6565
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
66+
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
6667
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
6768
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
6869
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));

Marlin/src/core/language.h

+2
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,8 @@
355355
#define STR_PROBE_EN "probe_en"
356356
#define STR_FILAMENT "filament"
357357

358+
#define STR_CALIBRATION "calibration"
359+
358360
// General axis names
359361
#define STR_X "X"
360362
#define STR_Y "Y"

Marlin/src/gcode/calibrate/G425.cpp

+8-22
Original file line numberDiff line numberDiff line change
@@ -181,20 +181,6 @@ inline void park_above_object(measurements_t &m, const float uncertainty) {
181181

182182
#endif
183183

184-
#if !PIN_EXISTS(CALIBRATION)
185-
#include "../../module/probe.h"
186-
#endif
187-
188-
inline bool read_calibration_pin() {
189-
return (
190-
#if PIN_EXISTS(CALIBRATION)
191-
READ(CALIBRATION_PIN) != CALIBRATION_PIN_INVERTING
192-
#else
193-
PROBE_TRIGGERED()
194-
#endif
195-
);
196-
}
197-
198184
/**
199185
* Move along axis in the specified dir until the probe value becomes stop_state,
200186
* then return the axis value.
@@ -205,18 +191,18 @@ inline bool read_calibration_pin() {
205191
* fast in - Fast vs. precise measurement
206192
*/
207193
float measuring_movement(const AxisEnum axis, const int dir, const bool stop_state, const bool fast) {
208-
const float step = fast ? 0.25 : CALIBRATION_MEASUREMENT_RESOLUTION;
209194
const feedRate_t mms = fast ? MMM_TO_MMS(CALIBRATION_FEEDRATE_FAST) : MMM_TO_MMS(CALIBRATION_FEEDRATE_SLOW);
210195
const float limit = fast ? 50 : 5;
211196

212197
destination = current_position;
213-
for (float travel = 0; travel < limit; travel += step) {
214-
destination[axis] += dir * step;
215-
do_blocking_move_to((xyz_pos_t)destination, mms);
216-
planner.synchronize();
217-
if (read_calibration_pin() == stop_state) break;
218-
}
219-
return destination[axis];
198+
destination[axis] += dir * limit;
199+
endstops.enable_calibration_probe(true, stop_state);
200+
do_blocking_move_to((xyz_pos_t)destination, mms);
201+
endstops.enable_calibration_probe(false);
202+
endstops.hit_on_purpose();
203+
set_current_from_steppers_for_axis(axis);
204+
sync_plan_position();
205+
return current_position[axis];
220206
}
221207

222208
/**

Marlin/src/inc/Changes.h

+2
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,8 @@
697697
#error "Z_PROBE_END_SCRIPT is now EVENT_GCODE_AFTER_G29."
698698
#elif defined(WIFI_SERIAL)
699699
#error "WIFI_SERIAL is now WIFI_SERIAL_PORT."
700+
#elif defined(CALIBRATION_MEASUREMENT_RESOLUTION)
701+
#error "CALIBRATION_MEASUREMENT_RESOLUTION is no longer needed and should be removed."
700702
#endif
701703

702704
// Changes to Probe Temp Compensation (#17392)

Marlin/src/inc/Conditionals_post.h

+5
Original file line numberDiff line numberDiff line change
@@ -2200,6 +2200,11 @@
22002200
#define HAS_Z_PROBE_STATE 1
22012201
#endif
22022202

2203+
#if PIN_EXISTS(CALIBRATION)
2204+
#define USE_CALIBRATION 1
2205+
#define HAS_CALIBRATION_STATE 1
2206+
#endif
2207+
22032208
#undef _ANY_STOP
22042209
#undef _USE_STOP
22052210
#undef _HAS_STATE

Marlin/src/module/endstops.cpp

+45-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ Endstops::endstop_mask_t Endstops::live_state = 0;
8787
volatile bool Endstops::z_probe_enabled = false;
8888
#endif
8989

90+
#if ENABLED(CALIBRATION_GCODE)
91+
volatile bool Endstops::calibration_probe_enabled = false;
92+
volatile bool Endstops::calibration_stop_state;
93+
#endif
94+
9095
// Initialized by settings.load()
9196
#if ENABLED(X_DUAL_ENDSTOPS)
9297
float Endstops::x2_endstop_adj;
@@ -203,7 +208,7 @@ void Endstops::init() {
203208
_INIT_ENDSTOP(MAX,W,);
204209
#endif
205210

206-
#if PIN_EXISTS(CALIBRATION)
211+
#if USE_CALIBRATION
207212
#if ENABLED(CALIBRATION_PIN_PULLUP)
208213
SET_INPUT_PULLUP(CALIBRATION_PIN);
209214
#elif ENABLED(CALIBRATION_PIN_PULLDOWN)
@@ -283,6 +288,17 @@ void Endstops::not_homing() {
283288
}
284289
#endif
285290

291+
// Enable / disable calibration probe checking
292+
#if ENABLED(CALIBRATION_GCODE)
293+
void Endstops::enable_calibration_probe(const bool onoff, const bool stop_state) {
294+
// Avoid race condition by setting stop state first
295+
if (onoff) calibration_stop_state = stop_state;
296+
calibration_probe_enabled = onoff;
297+
298+
resync();
299+
}
300+
#endif
301+
286302
// Get the stable endstop states when enabled
287303
void Endstops::resync() {
288304
if (!abort_enabled()) return; // If endstops/probes are disabled the loop below can hang
@@ -485,6 +501,9 @@ void __O2 Endstops::report_states() {
485501
#if USE_Z_MIN_PROBE
486502
print_es_state(PROBE_TRIGGERED(), F(STR_Z_PROBE));
487503
#endif
504+
#if USE_CALIBRATION
505+
print_es_state(READ(CALIBRATION_PIN) != CALIBRATION_PIN_INVERTING, F(STR_CALIBRATION));
506+
#endif
488507
#if MULTI_FILAMENT_SENSOR
489508
#define _CASE_RUNOUT(N) case N: pin = FIL_RUNOUT##N##_PIN; state = FIL_RUNOUT##N##_STATE; break;
490509
for (uint8_t i = 1; i <= NUM_RUNOUT_SENSORS; ++i) {
@@ -530,6 +549,16 @@ void Endstops::update() {
530549
if (G38_move) UPDATE_LIVE_STATE(Z, TERN(USE_Z_MIN_PROBE, MIN_PROBE, MIN));
531550
#endif
532551

552+
#if ENABLED(CALIBRATION_GCODE)
553+
if (calibration_probe_enabled) {
554+
#if HAS_CALIBRATION_STATE
555+
SET_BIT_TO(live_state, CALIBRATION, READ(CALIBRATION_PIN) != CALIBRATION_PIN_INVERTING);
556+
#else
557+
UPDATE_LIVE_STATE(Z, TERN(USE_Z_MIN_PROBE, MIN_PROBE, MIN));
558+
#endif
559+
}
560+
#endif
561+
533562
// With Dual X, endstops are only checked in the homing direction for the active extruder
534563
#define X_MIN_TEST() TERN1(DUAL_X_CARRIAGE, stepper.last_moved_extruder == 0) // Check min for the left carriage
535564
#define X_MAX_TEST() TERN1(DUAL_X_CARRIAGE, stepper.last_moved_extruder != 0) // Check max for the right carriage
@@ -797,6 +826,15 @@ void Endstops::update() {
797826
}
798827
#endif
799828

829+
#if ENABLED(CALIBRATION_GCODE)
830+
if (calibration_probe_enabled) {
831+
#if HAS_CALIBRATION_STATE
832+
if (TEST(live_state, CALIBRATION) == calibration_stop_state) stepper.quick_stop();
833+
#else
834+
if (TEST(live_state, Z_MIN_PROBE) == calibration_stop_state) stepper.quick_stop();
835+
#endif
836+
}
837+
#endif
800838
// Signal, after validation, if an endstop limit is pressed or not
801839

802840
bool moving_neg;
@@ -1173,6 +1211,9 @@ void Endstops::update() {
11731211
#if USE_Z_MIN_PROBE
11741212
ES_GET_STATE(Z_MIN_PROBE);
11751213
#endif
1214+
#if USE_CALIBRATION
1215+
ES_GET_STATE(CALIBRATION);
1216+
#endif
11761217
#if USE_X2_MIN
11771218
ES_GET_STATE(X2_MIN);
11781219
#endif
@@ -1265,6 +1306,9 @@ void Endstops::update() {
12651306
#if USE_Z_MIN_PROBE
12661307
ES_REPORT_CHANGE(Z_MIN_PROBE);
12671308
#endif
1309+
#if USE_CALIBRATION
1310+
ES_REPORT_STATE(CALIBRATION);
1311+
#endif
12681312
#if USE_X2_MIN
12691313
ES_REPORT_CHANGE(X2_MIN);
12701314
#endif

Marlin/src/module/endstops.h

+12-2
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ enum EndstopEnum : char {
6666
// Extra Endstops for XYZ
6767
ES_MINMAX(X2) ES_MINMAX(Y2) ES_MINMAX(Z2) ES_MINMAX(Z3) ES_MINMAX(Z4)
6868

69+
// Calibration pin state
70+
ES_ITEM(HAS_CALIBRATION_STATE, CALIBRATION)
71+
6972
// Bed Probe state is distinct or shared with Z_MIN (i.e., when the probe is the only Z endstop)
7073
ES_ITEM(HAS_Z_PROBE_STATE, Z_MIN_PROBE IF_DISABLED(USE_Z_MIN_PROBE, = Z_MIN))
7174

@@ -165,10 +168,10 @@ class Endstops {
165168
static void init();
166169

167170
/**
168-
* Are endstops or the probe set to abort the move?
171+
* Are endstops or the Z min probe or the CALIBRATION probe set to abort the move?
169172
*/
170173
FORCE_INLINE static bool abort_enabled() {
171-
return enabled || TERN0(HAS_BED_PROBE, z_probe_enabled);
174+
return enabled || TERN0(HAS_BED_PROBE, z_probe_enabled) || TERN0(CALIBRATION_GCODE, calibration_probe_enabled);
172175
}
173176

174177
static bool global_enabled() { return enabled_globally; }
@@ -251,6 +254,13 @@ class Endstops {
251254
static void enable_z_probe(const bool onoff=true);
252255
#endif
253256

257+
// Enable / disable calibration probe checking
258+
#if ENABLED(CALIBRATION_GCODE)
259+
static volatile bool calibration_probe_enabled;
260+
static volatile bool calibration_stop_state;
261+
static void enable_calibration_probe(const bool onoff,const bool stop_state = true);
262+
#endif
263+
254264
static void resync();
255265

256266
// Debugging of endstops

0 commit comments

Comments
 (0)