Fixes G29_with_retry behavior (#11045)

* Fix G29 (ABL) retry behavior
This commit is contained in:
Colin Gilgenbach
2018-06-29 19:48:11 -06:00
committed by Scott Lahteine
parent c36efd3106
commit 0fff79c24b
4 changed files with 61 additions and 48 deletions

View File

@ -61,11 +61,6 @@ bool GcodeSuite::axis_relative_modes[] = AXIS_RELATIVE_MODES;
float GcodeSuite::coordinate_system[MAX_COORDINATE_SYSTEMS][XYZ];
#endif
#if HAS_LEVELING && ENABLED(G29_RETRY_AND_RECOVER)
#include "../feature/bedlevel/bedlevel.h"
#include "../module/planner.h"
#endif
/**
* Set target_extruder from the T parameter or the active_extruder
*
@ -136,34 +131,37 @@ void GcodeSuite::dwell(millis_t time) {
*/
#if HAS_LEVELING && ENABLED(G29_RETRY_AND_RECOVER)
#ifndef G29_MAX_RETRIES
#define G29_MAX_RETRIES 0
#endif
void GcodeSuite::G29_with_retry() {
set_bed_leveling_enabled(false);
for (uint8_t retries_left = G29_MAX_RETRIES;;) {
G29();
if (planner.leveling_active || !retries_left--) break;
#ifdef G29_ACTION_ON_RECOVER
SERIAL_ECHOLNPGM("//action:" G29_ACTION_ON_RECOVER);
#endif
#ifdef G29_RECOVER_COMMANDS
process_subcommands_now_P(PSTR(G29_RECOVER_COMMANDS));
#endif
}
if (planner.leveling_active) {
#ifdef G29_SUCCESS_COMMANDS
process_subcommands_now_P(PSTR(G29_SUCCESS_COMMANDS));
#endif
}
else {
#ifdef G29_FAILURE_COMMANDS
process_subcommands_now_P(PSTR(G29_FAILURE_COMMANDS));
#endif
#ifdef G29_ACTION_ON_FAILURE
SERIAL_ECHOLNPGM("//action:" G29_ACTION_ON_FAILURE);
#endif
#if ENABLED(G29_HALT_ON_FAILURE)
kill(PSTR(MSG_ERR_PROBING_FAILED));
#endif
uint8_t retries = G29_MAX_RETRIES;
while (G29()) { // G29 should return true for failed probes ONLY
if (retries--) {
#ifdef G29_ACTION_ON_RECOVER
SERIAL_ECHOLNPGM("//action:" G29_ACTION_ON_RECOVER);
#endif
#ifdef G29_RECOVER_COMMANDS
process_subcommands_now_P(PSTR(G29_RECOVER_COMMANDS));
#endif
}
else {
#ifdef G29_FAILURE_COMMANDS
process_subcommands_now_P(PSTR(G29_FAILURE_COMMANDS));
#endif
#ifdef G29_ACTION_ON_FAILURE
SERIAL_ECHOLNPGM("//action:" G29_ACTION_ON_FAILURE);
#endif
#if ENABLED(G29_HALT_ON_FAILURE)
kill(PSTR(MSG_ERR_PROBING_FAILED));
#endif
return;
}
}
#ifdef G29_SUCCESS_COMMANDS
process_subcommands_now_P(PSTR(G29_SUCCESS_COMMANDS));
#endif
}
#endif // HAS_LEVELING && G29_RETRY_AND_RECOVER