From 5334a8f0ed9af2ad3c09ab492d6cd44119981bc5 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 15 Jul 2024 13:59:19 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20Fix=20UI=20behavior=20for=20G29?= =?UTF-8?q?=20with=20retry=20(#27146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/bedlevel/abl/G29.cpp | 15 +++++++++---- Marlin/src/gcode/gcode.cpp | 31 ++++++++++++++++----------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index d97fc48906..6ff09b3a7a 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -70,14 +70,21 @@ #endif #endif +/** + * @brief Do some things before returning from G29. + * @param retry : true if the G29 can and should be retried. false if the failure is too serious. + * @param did : true if the leveling procedure completed successfully. + */ static void pre_g29_return(const bool retry, const bool did) { if (!retry) { TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE, false)); } - if (did) { - TERN_(DWIN_CREALITY_LCD, dwinLevelingDone()); - TERN_(EXTENSIBLE_UI, ExtUI::onLevelingDone()); - } + #if DISABLED(G29_RETRY_AND_RECOVER) + if (!retry || did) { + TERN_(DWIN_CREALITY_LCD, dwinLevelingDone()); + TERN_(EXTENSIBLE_UI, ExtUI::onLevelingDone()); + } + #endif } #define G29_RETURN(retry, did) do{ \ diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 2a8bfa4e66..11b02ded68 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -289,22 +289,27 @@ void GcodeSuite::dwell(millis_t time) { void GcodeSuite::G29_with_retry() { uint8_t retries = G29_MAX_RETRIES; - while (G29()) { // G29 should return true for failed probes ONLY - if (retries) { - event_probe_recover(); - --retries; - } - else { - event_probe_failure(); - return; - } + bool fail = false; + for (;;) { + fail = G29(); // G29 should return true for failed probes ONLY + if (!fail || !retries) break; + event_probe_recover(); + --retries; } - TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_end()); + if (fail) { + event_probe_failure(); + TERN_(G29_HALT_ON_FAILURE, return); + } + else { + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_end()); + #ifdef G29_SUCCESS_COMMANDS + process_subcommands_now(F(G29_SUCCESS_COMMANDS)); + #endif + } - #ifdef G29_SUCCESS_COMMANDS - process_subcommands_now(F(G29_SUCCESS_COMMANDS)); - #endif + TERN_(HAS_DWIN_E3V2_BASIC, dwinLevelingDone()); + TERN_(EXTENSIBLE_UI, ExtUI::onLevelingDone()); } #endif // G29_RETRY_AND_RECOVER