|
@@ -352,25 +352,35 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
|
|
|
FORCE_INLINE void probe_specific_action(const bool deploy) {
|
|
|
DEBUG_SECTION(log_psa, "Probe::probe_specific_action", DEBUGGING(LEVELING));
|
|
|
#if ENABLED(PAUSE_BEFORE_DEPLOY_STOW)
|
|
|
- do {
|
|
|
- #if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)
|
|
|
- if (deploy != PROBE_TRIGGERED()) break;
|
|
|
- #endif
|
|
|
|
|
|
- OKAY_BUZZ();
|
|
|
+ // Start preheating before waiting for user confirmation that the probe is ready.
|
|
|
+ TERN_(PREHEAT_BEFORE_PROBING, if (deploy) probe.preheat_for_probing(0, PROBING_BED_TEMP, true));
|
|
|
+
|
|
|
+ FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW);
|
|
|
+ ui.return_to_status(); // To display the new status message
|
|
|
+ ui.set_status(ds_str, 99);
|
|
|
+ SERIAL_ECHOLNF(deploy ? GET_EN_TEXT_F(MSG_MANUAL_DEPLOY) : GET_EN_TEXT_F(MSG_MANUAL_STOW));
|
|
|
+
|
|
|
+ OKAY_BUZZ();
|
|
|
+
|
|
|
+ #if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)
|
|
|
+ // Wait for the probe to be attached or detached before asking for explicit user confirmation
|
|
|
+ // Allow the user to interrupt
|
|
|
+ {
|
|
|
+ KEEPALIVE_STATE(PAUSED_FOR_USER);
|
|
|
+ TERN_(HAS_RESUME_CONTINUE, wait_for_user = true);
|
|
|
+ while (deploy == PROBE_TRIGGERED() && TERN1(HAS_RESUME_CONTINUE, wait_for_user)) idle_no_sleep();
|
|
|
+ TERN_(HAS_RESUME_CONTINUE, wait_for_user = false);
|
|
|
+ OKAY_BUZZ();
|
|
|
+ }
|
|
|
+ #endif
|
|
|
|
|
|
- FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW);
|
|
|
- ui.return_to_status(); // To display the new status message
|
|
|
- ui.set_status(ds_str, 99);
|
|
|
- SERIAL_ECHOLNF(deploy ? GET_EN_TEXT_F(MSG_MANUAL_DEPLOY) : GET_EN_TEXT_F(MSG_MANUAL_STOW));
|
|
|
+ TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_str));
|
|
|
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_str));
|
|
|
+ TERN_(DWIN_LCD_PROUI, DWIN_Popup_Confirm(ICON_BLTouch, ds_str, FPSTR(CONTINUE_STR)));
|
|
|
+ TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
|
|
|
|
|
|
- TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_str));
|
|
|
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_str));
|
|
|
- TERN_(DWIN_LCD_PROUI, DWIN_Popup_Confirm(ICON_BLTouch, ds_str, FPSTR(CONTINUE_STR)));
|
|
|
- TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
|
|
|
- ui.reset_status();
|
|
|
-
|
|
|
- } while (ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED));
|
|
|
+ ui.reset_status();
|
|
|
|
|
|
#endif // PAUSE_BEFORE_DEPLOY_STOW
|
|
|
|
|
@@ -435,7 +445,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
|
|
|
* - If a preheat input is higher than the current target, raise the target temperature.
|
|
|
* - If a preheat input is higher than the current temperature, wait for stabilization.
|
|
|
*/
|
|
|
- void Probe::preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp) {
|
|
|
+ void Probe::preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp, const bool early/*=false*/) {
|
|
|
#if HAS_HOTEND && (PROBING_NOZZLE_TEMP || LEVELING_NOZZLE_TEMP)
|
|
|
#define WAIT_FOR_NOZZLE_HEAT
|
|
|
#endif
|
|
@@ -443,7 +453,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
|
|
|
#define WAIT_FOR_BED_HEAT
|
|
|
#endif
|
|
|
|
|
|
- LCD_MESSAGE(MSG_PREHEATING);
|
|
|
+ if (!early) LCD_MESSAGE(MSG_PREHEATING);
|
|
|
|
|
|
DEBUG_ECHOPGM("Preheating ");
|
|
|
|
|
@@ -453,14 +463,12 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
|
|
|
DEBUG_ECHOPGM("hotend (", hotendPreheat, ")");
|
|
|
thermalManager.setTargetHotend(hotendPreheat, 0);
|
|
|
}
|
|
|
- #elif ENABLED(WAIT_FOR_BED_HEAT)
|
|
|
- constexpr celsius_t hotendPreheat = 0;
|
|
|
#endif
|
|
|
|
|
|
#if ENABLED(WAIT_FOR_BED_HEAT)
|
|
|
const celsius_t bedPreheat = bed_temp > thermalManager.degTargetBed() ? bed_temp : 0;
|
|
|
if (bedPreheat) {
|
|
|
- if (hotendPreheat) DEBUG_ECHOPGM(" and ");
|
|
|
+ if (TERN0(WAIT_FOR_NOZZLE_HEAT, hotendPreheat)) DEBUG_ECHOPGM(" and ");
|
|
|
DEBUG_ECHOPGM("bed (", bedPreheat, ")");
|
|
|
thermalManager.setTargetBed(bedPreheat);
|
|
|
}
|
|
@@ -468,8 +476,10 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
|
|
|
|
|
|
DEBUG_EOL();
|
|
|
|
|
|
- TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0));
|
|
|
- TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating());
|
|
|
+ if (!early) {
|
|
|
+ TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0));
|
|
|
+ TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#endif
|