More advanced pause tweaks (#12356)

* Followup to LCD_TIMEOUT_TO_STATUS=0
* Make continuous purge screen fit 20x4
* Unify purge message modes
* Preserve last-set pause header mode
This commit is contained in:
Scott Lahteine 2018-11-06 19:25:57 -06:00 committed by GitHub
parent 5a470d4a49
commit e574f01568
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 108 additions and 98 deletions

View File

@ -369,7 +369,10 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) {
disable_e_steppers(); disable_e_steppers();
#endif #endif
#if HAS_LCD_MENU && ENABLED(AUTO_BED_LEVELING_UBL) #if HAS_LCD_MENU && ENABLED(AUTO_BED_LEVELING_UBL)
if (ubl.lcd_map_control) ubl.lcd_map_control = defer_return_to_status = false; if (ubl.lcd_map_control) {
ubl.lcd_map_control = false;
set_defer_return_to_status(false);
}
#endif #endif
} }
} }

View File

@ -92,7 +92,7 @@ fil_change_settings_t fc_settings[EXTRUDERS];
* *
* Returns 'true' if heating was completed, 'false' for abort * Returns 'true' if heating was completed, 'false' for abort
*/ */
static bool ensure_safe_temperature(const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_PAUSE_PRINT) { static bool ensure_safe_temperature(const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_SAME) {
#if ENABLED(PREVENT_COLD_EXTRUSION) #if ENABLED(PREVENT_COLD_EXTRUSION)
if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) { if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) {
@ -134,23 +134,16 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
const AdvancedPauseMode mode/*=ADVANCED_PAUSE_MODE_PAUSE_PRINT*/ const AdvancedPauseMode mode/*=ADVANCED_PAUSE_MODE_PAUSE_PRINT*/
DXC_ARGS DXC_ARGS
) { ) {
#if DISABLED(ULTIPANEL)
UNUSED(show_lcd);
#endif
if (!ensure_safe_temperature(mode)) { if (!ensure_safe_temperature(mode)) {
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) // Show status screen if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS, mode);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
#endif #endif
return false; return false;
} }
if (pause_for_user) { if (pause_for_user) {
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) // Show "insert filament" if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT, mode);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT, mode);
#endif #endif
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOLNPGM(MSG_FILAMENT_CHANGE_INSERT); SERIAL_ECHOLNPGM(MSG_FILAMENT_CHANGE_INSERT);
@ -173,8 +166,9 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
} }
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) // Show "wait for load" message if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD, mode);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD, mode); #else
UNUSED(show_lcd);
#endif #endif
#if ENABLED(DUAL_X_CARRIAGE) #if ENABLED(DUAL_X_CARRIAGE)
@ -210,8 +204,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE) #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE);
#endif #endif
wait_for_user = true; wait_for_user = true;
@ -225,8 +218,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
if (purge_length > 0) { if (purge_length > 0) {
// "Wait for filament purge" // "Wait for filament purge"
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode);
#endif #endif
// Extrude filament to get into hotend // Extrude filament to get into hotend
@ -238,7 +230,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
if (show_lcd) { if (show_lcd) {
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = false; wait_for_user = false;
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION, mode); lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION);
while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true); while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
KEEPALIVE_STATE(IN_HANDLER); KEEPALIVE_STATE(IN_HANDLER);
} }
@ -273,18 +265,16 @@ bool unload_filament(const float &unload_length, const bool show_lcd/*=false*/,
) { ) {
if (!ensure_safe_temperature(mode)) { if (!ensure_safe_temperature(mode)) {
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) // Show status screen if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
#endif #endif
return false; return false;
} }
#if DISABLED(ULTIPANEL) #if HAS_LCD_MENU
UNUSED(show_lcd); if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD, mode);
#else #else
if (show_lcd) UNUSED(show_lcd);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD, mode);
#endif #endif
// Retract filament // Retract filament
@ -343,8 +333,9 @@ bool pause_print(const float &retract, const point_t &park_point, const float &u
#endif #endif
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) // Show initial message if (show_lcd) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT, ADVANCED_PAUSE_MODE_PAUSE_PRINT);
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); #else
UNUSED(show_lcd);
#endif #endif
if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) { if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) {
@ -549,7 +540,7 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
load_filament(slow_load_length, fast_load_length, purge_length, max_beep_count, true, nozzle_timed_out, ADVANCED_PAUSE_MODE_PAUSE_PRINT DXC_PASS); load_filament(slow_load_length, fast_load_length, purge_length, max_beep_count, true, nozzle_timed_out, ADVANCED_PAUSE_MODE_PAUSE_PRINT DXC_PASS);
#if HAS_LCD_MENU #if HAS_LCD_MENU
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_RESUME); // "Wait for print to resume" lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_RESUME);
#endif #endif
// Intelligent resuming // Intelligent resuming
@ -577,7 +568,6 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
#endif #endif
#if HAS_LCD_MENU #if HAS_LCD_MENU
// Show status screen
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS); lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
#endif #endif

View File

@ -37,6 +37,7 @@ typedef struct {
#include "../libs/nozzle.h" #include "../libs/nozzle.h"
enum AdvancedPauseMode : char { enum AdvancedPauseMode : char {
ADVANCED_PAUSE_MODE_SAME,
ADVANCED_PAUSE_MODE_PAUSE_PRINT, ADVANCED_PAUSE_MODE_PAUSE_PRINT,
ADVANCED_PAUSE_MODE_LOAD_FILAMENT, ADVANCED_PAUSE_MODE_LOAD_FILAMENT,
ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT
@ -48,11 +49,7 @@ enum AdvancedPauseMessage : char {
ADVANCED_PAUSE_MESSAGE_UNLOAD, ADVANCED_PAUSE_MESSAGE_UNLOAD,
ADVANCED_PAUSE_MESSAGE_INSERT, ADVANCED_PAUSE_MESSAGE_INSERT,
ADVANCED_PAUSE_MESSAGE_LOAD, ADVANCED_PAUSE_MESSAGE_LOAD,
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE) ADVANCED_PAUSE_MESSAGE_PURGE,
ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE,
#else
ADVANCED_PAUSE_MESSAGE_PURGE,
#endif
ADVANCED_PAUSE_MESSAGE_OPTION, ADVANCED_PAUSE_MESSAGE_OPTION,
ADVANCED_PAUSE_MESSAGE_RESUME, ADVANCED_PAUSE_MESSAGE_RESUME,
ADVANCED_PAUSE_MESSAGE_STATUS, ADVANCED_PAUSE_MESSAGE_STATUS,

View File

@ -61,7 +61,10 @@ void GcodeSuite::M18_M84() {
} }
#if HAS_LCD_MENU && ENABLED(AUTO_BED_LEVELING_UBL) #if HAS_LCD_MENU && ENABLED(AUTO_BED_LEVELING_UBL)
if (ubl.lcd_map_control) ubl.lcd_map_control = defer_return_to_status = false; if (ubl.lcd_map_control) {
ubl.lcd_map_control = false;
set_defer_return_to_status(false);
}
#endif #endif
} }
} }

View File

@ -1115,8 +1115,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
* LCD_BED_LEVELING requirements * LCD_BED_LEVELING requirements
*/ */
#if ENABLED(LCD_BED_LEVELING) #if ENABLED(LCD_BED_LEVELING)
#if DISABLED(ULTIPANEL) #if !HAS_LCD_MENU
#error "LCD_BED_LEVELING requires an LCD controller." #error "LCD_BED_LEVELING requires a programmable LCD controller."
#elif !(ENABLED(MESH_BED_LEVELING) || OLDSCHOOL_ABL) #elif !(ENABLED(MESH_BED_LEVELING) || OLDSCHOOL_ABL)
#error "LCD_BED_LEVELING requires MESH_BED_LEVELING or AUTO_BED_LEVELING." #error "LCD_BED_LEVELING requires MESH_BED_LEVELING or AUTO_BED_LEVELING."
#endif #endif

View File

@ -1131,6 +1131,10 @@
#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Wait for") #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Wait for")
#define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("filament purge") #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("filament purge")
#endif #endif
#ifndef MSG_FILAMENT_CHANGE_CONT_PURGE_1
#define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Click to finish")
#define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("filament purge")
#endif
#ifndef MSG_FILAMENT_CHANGE_RESUME_1 #ifndef MSG_FILAMENT_CHANGE_RESUME_1
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print")
#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume...") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume...")
@ -1160,6 +1164,9 @@
#ifndef MSG_FILAMENT_CHANGE_PURGE_1 #ifndef MSG_FILAMENT_CHANGE_PURGE_1
#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purging...") #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purging...")
#endif #endif
#ifndef MSG_FILAMENT_CHANGE_CONT_PURGE_1
#define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Click to finish")
#endif
#ifndef MSG_FILAMENT_CHANGE_RESUME_1 #ifndef MSG_FILAMENT_CHANGE_RESUME_1
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...")
#endif #endif

View File

@ -59,7 +59,11 @@ typedef struct {
} menuPosition; } menuPosition;
menuPosition screen_history[6]; menuPosition screen_history[6];
uint8_t screen_history_depth = 0; uint8_t screen_history_depth = 0;
bool screen_changed, defer_return_to_status; bool screen_changed;
#if LCD_TIMEOUT_TO_STATUS
bool defer_return_to_status;
#endif
// Value Editing // Value Editing
PGM_P editLabel; PGM_P editLabel;
@ -97,10 +101,12 @@ void lcd_goto_previous_menu() {
lcd_return_to_status(); lcd_return_to_status();
} }
void lcd_goto_previous_menu_no_defer() { #if LCD_TIMEOUT_TO_STATUS
defer_return_to_status = false; void lcd_goto_previous_menu_no_defer() {
lcd_goto_previous_menu(); set_defer_return_to_status(false);
} lcd_goto_previous_menu();
}
#endif
//////////////////////////////////////////// ////////////////////////////////////////////
/////////// Common Menu Actions //////////// /////////// Common Menu Actions ////////////
@ -234,7 +240,7 @@ void lcd_goto_screen(screenFunc_t screen, const uint32_t encoder/*=0*/) {
currentScreen = screen; currentScreen = screen;
encoderPosition = encoder; encoderPosition = encoder;
if (screen == lcd_status_screen) { if (screen == lcd_status_screen) {
defer_return_to_status = false; set_defer_return_to_status(false);
#if ENABLED(AUTO_BED_LEVELING_UBL) #if ENABLED(AUTO_BED_LEVELING_UBL)
ubl.lcd_map_control = false; ubl.lcd_map_control = false;
#endif #endif
@ -343,7 +349,7 @@ void lcd_completion_feedback(const bool good/*=true*/) {
void lcd_babystep_zoffset() { void lcd_babystep_zoffset() {
if (use_click()) { return lcd_goto_previous_menu_no_defer(); } if (use_click()) { return lcd_goto_previous_menu_no_defer(); }
defer_return_to_status = true; set_defer_return_to_status(true);
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
const bool do_probe = (active_extruder == 0); const bool do_probe = (active_extruder == 0);
#else #else

View File

@ -35,9 +35,13 @@ void scroll_screen(const uint8_t limit, const bool is_menu);
bool use_click(); bool use_click();
bool printer_busy(); bool printer_busy();
void lcd_completion_feedback(const bool good=true); void lcd_completion_feedback(const bool good=true);
void lcd_goto_previous_menu();
void lcd_goto_previous_menu_no_defer();
void lcd_save_previous_screen(); void lcd_save_previous_screen();
void lcd_goto_previous_menu();
#if LCD_TIMEOUT_TO_STATUS
void lcd_goto_previous_menu_no_defer();
#else
#define lcd_goto_previous_menu_no_defer() lcd_goto_previous_menu()
#endif
//////////////////////////////////////////// ////////////////////////////////////////////
////////// Menu Item Numeric Types ///////// ////////// Menu Item Numeric Types /////////

View File

@ -91,7 +91,7 @@ void _lcd_level_bed_corners_homing() {
} }
void _lcd_level_bed_corners() { void _lcd_level_bed_corners() {
defer_return_to_status = true; set_defer_return_to_status(true);
if (!all_axes_known()) { if (!all_axes_known()) {
set_all_unhomed(); set_all_unhomed();
enqueue_and_echo_commands_P(PSTR("G28")); enqueue_and_echo_commands_P(PSTR("G28"));

View File

@ -191,7 +191,7 @@
// Step 2: Continue Bed Leveling... // Step 2: Continue Bed Leveling...
// //
void _lcd_level_bed_continue() { void _lcd_level_bed_continue() {
defer_return_to_status = true; set_defer_return_to_status(true);
set_all_unhomed(); set_all_unhomed();
lcd_goto_screen(_lcd_level_bed_homing); lcd_goto_screen(_lcd_level_bed_homing);
enqueue_and_echo_commands_P(PSTR("G28")); enqueue_and_echo_commands_P(PSTR("G28"));

View File

@ -50,7 +50,7 @@ void _man_probe_pt(const float &rx, const float &ry) {
float lcd_probe_pt(const float &rx, const float &ry) { float lcd_probe_pt(const float &rx, const float &ry) {
_man_probe_pt(rx, ry); _man_probe_pt(rx, ry);
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
defer_return_to_status = true; set_defer_return_to_status(true);
wait_for_user = true; wait_for_user = true;
while (wait_for_user) idle(); while (wait_for_user) idle();
KEEPALIVE_STATE(IN_HANDLER); KEEPALIVE_STATE(IN_HANDLER);

View File

@ -458,47 +458,40 @@ void lcd_advanced_pause_resume_message() {
} }
void lcd_advanced_pause_purge_message() { void lcd_advanced_pause_purge_message() {
START_SCREEN(); _lcd_advanced_pause_message(
STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_1); #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
#ifdef MSG_FILAMENT_CHANGE_PURGE_2 PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_1)
STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_2); #ifdef MSG_FILAMENT_CHANGE_CONT_PURGE_2
#ifdef MSG_FILAMENT_CHANGE_PURGE_3 , PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_2)
STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_3); #ifdef MSG_FILAMENT_CHANGE_CONT_PURGE_3
, PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_3)
#endif
#endif
#else
PSTR(MSG_FILAMENT_CHANGE_PURGE_1)
#ifdef MSG_FILAMENT_CHANGE_PURGE_2
, PSTR(MSG_FILAMENT_CHANGE_PURGE_2)
#ifdef MSG_FILAMENT_CHANGE_PURGE_3
, PSTR(MSG_FILAMENT_CHANGE_PURGE_3)
#endif
#endif
#endif #endif
#endif );
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
#define _PURGE_BASE 3
#else
#define _PURGE_BASE 2
#endif
#if (_PURGE_BASE + defined(MSG_FILAMENT_CHANGE_PURGE_2) + defined(MSG_FILAMENT_CHANGE_PURGE_3)) < LCD_HEIGHT - 1
STATIC_ITEM(" ");
#endif
HOTEND_STATUS_ITEM();
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
STATIC_ITEM(MSG_USERWAIT);
#endif
END_SCREEN();
} }
FORCE_INLINE screenFunc_t ap_message_screen(const AdvancedPauseMessage message) { FORCE_INLINE screenFunc_t ap_message_screen(const AdvancedPauseMessage message) {
switch (message) { switch (message) {
case ADVANCED_PAUSE_MESSAGE_INIT: return lcd_advanced_pause_init_message; case ADVANCED_PAUSE_MESSAGE_INIT: return lcd_advanced_pause_init_message;
case ADVANCED_PAUSE_MESSAGE_UNLOAD: return lcd_advanced_pause_unload_message; case ADVANCED_PAUSE_MESSAGE_UNLOAD: return lcd_advanced_pause_unload_message;
case ADVANCED_PAUSE_MESSAGE_WAITING: return lcd_advanced_pause_waiting_message; case ADVANCED_PAUSE_MESSAGE_WAITING: return lcd_advanced_pause_waiting_message;
case ADVANCED_PAUSE_MESSAGE_INSERT: return lcd_advanced_pause_insert_message; case ADVANCED_PAUSE_MESSAGE_INSERT: return lcd_advanced_pause_insert_message;
case ADVANCED_PAUSE_MESSAGE_LOAD: return lcd_advanced_pause_load_message; case ADVANCED_PAUSE_MESSAGE_LOAD: return lcd_advanced_pause_load_message;
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE) case ADVANCED_PAUSE_MESSAGE_PURGE: return lcd_advanced_pause_purge_message;
case ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE: case ADVANCED_PAUSE_MESSAGE_RESUME: return lcd_advanced_pause_resume_message;
#else case ADVANCED_PAUSE_MESSAGE_HEAT: return lcd_advanced_pause_heat_message;
case ADVANCED_PAUSE_MESSAGE_PURGE: case ADVANCED_PAUSE_MESSAGE_HEATING: return lcd_advanced_pause_heating_message;
#endif case ADVANCED_PAUSE_MESSAGE_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
return lcd_advanced_pause_purge_message; return menu_advanced_pause_option;
case ADVANCED_PAUSE_MESSAGE_RESUME: return lcd_advanced_pause_resume_message;
case ADVANCED_PAUSE_MESSAGE_HEAT: return lcd_advanced_pause_heat_message;
case ADVANCED_PAUSE_MESSAGE_HEATING: return lcd_advanced_pause_heating_message;
case ADVANCED_PAUSE_MESSAGE_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
return menu_advanced_pause_option;
case ADVANCED_PAUSE_MESSAGE_STATUS: case ADVANCED_PAUSE_MESSAGE_STATUS:
default: break; default: break;
} }
@ -507,14 +500,14 @@ FORCE_INLINE screenFunc_t ap_message_screen(const AdvancedPauseMessage message)
void lcd_advanced_pause_show_message( void lcd_advanced_pause_show_message(
const AdvancedPauseMessage message, const AdvancedPauseMessage message,
const AdvancedPauseMode mode/*=ADVANCED_PAUSE_MODE_PAUSE_PRINT*/, const AdvancedPauseMode mode/*=ADVANCED_PAUSE_MODE_SAME*/,
const uint8_t extruder/*=active_extruder*/ const uint8_t extruder/*=active_extruder*/
) { ) {
advanced_pause_mode = mode; if (mode != ADVANCED_PAUSE_MODE_SAME) advanced_pause_mode = mode;
hotend_status_extruder = extruder; hotend_status_extruder = extruder;
const screenFunc_t next_screen = ap_message_screen(message); const screenFunc_t next_screen = ap_message_screen(message);
if (next_screen) { if (next_screen) {
defer_return_to_status = true; set_defer_return_to_status(true);
lcd_goto_screen(next_screen); lcd_goto_screen(next_screen);
} }
else else

View File

@ -95,7 +95,7 @@ static void lcd_power_loss_recovery_cancel() {
} }
void menu_job_recovery() { void menu_job_recovery() {
defer_return_to_status = true; set_defer_return_to_status(true);
START_MENU(); START_MENU();
STATIC_ITEM(MSG_POWER_LOSS_RECOVERY); STATIC_ITEM(MSG_POWER_LOSS_RECOVERY);
MENU_ITEM(function, MSG_RESUME_PRINT, lcd_power_loss_recovery_resume); MENU_ITEM(function, MSG_RESUME_PRINT, lcd_power_loss_recovery_resume);

View File

@ -241,7 +241,7 @@ inline void lcd_move_e() { _lcd_move_e(); }
screenFunc_t _manual_move_func_ptr; screenFunc_t _manual_move_func_ptr;
void _goto_manual_move(const float scale) { void _goto_manual_move(const float scale) {
defer_return_to_status = true; set_defer_return_to_status(true);
move_menu_scale = scale; move_menu_scale = scale;
lcd_goto_screen(_manual_move_func_ptr); lcd_goto_screen(_manual_move_func_ptr);
} }

View File

@ -62,7 +62,7 @@ void lcd_sd_updir() {
#endif #endif
lcd_goto_screen(menu_sdcard, last_sdfile_encoderPosition); lcd_goto_screen(menu_sdcard, last_sdfile_encoderPosition);
defer_return_to_status = true; set_defer_return_to_status(true);
last_sdfile_encoderPosition = 0xFFFF; last_sdfile_encoderPosition = 0xFFFF;
#if HAS_GRAPHICAL_LCD #if HAS_GRAPHICAL_LCD

View File

@ -78,13 +78,13 @@ void _lcd_refresh_e_factor_0() { planner.refresh_e_factor(0); }
#if ENABLED(BABYSTEP_XY) #if ENABLED(BABYSTEP_XY)
void _lcd_babystep_x() { _lcd_babystep(X_AXIS, PSTR(MSG_BABYSTEP_X)); } void _lcd_babystep_x() { _lcd_babystep(X_AXIS, PSTR(MSG_BABYSTEP_X)); }
void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, PSTR(MSG_BABYSTEP_Y)); } void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, PSTR(MSG_BABYSTEP_Y)); }
void lcd_babystep_x() { lcd_goto_screen(_lcd_babystep_x); babysteps_done = 0; defer_return_to_status = true; } void lcd_babystep_x() { lcd_goto_screen(_lcd_babystep_x); babysteps_done = 0; set_defer_return_to_status(true); }
void lcd_babystep_y() { lcd_goto_screen(_lcd_babystep_y); babysteps_done = 0; defer_return_to_status = true; } void lcd_babystep_y() { lcd_goto_screen(_lcd_babystep_y); babysteps_done = 0; set_defer_return_to_status(true); }
#endif #endif
#if DISABLED(BABYSTEP_ZPROBE_OFFSET) #if DISABLED(BABYSTEP_ZPROBE_OFFSET)
void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEP_Z)); } void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEP_Z)); }
void lcd_babystep_z() { lcd_goto_screen(_lcd_babystep_z); babysteps_done = 0; defer_return_to_status = true; } void lcd_babystep_z() { lcd_goto_screen(_lcd_babystep_z); babysteps_done = 0; set_defer_return_to_status(true); }
#endif #endif
#endif // BABYSTEPPING #endif // BABYSTEPPING

View File

@ -51,7 +51,7 @@ float mesh_edit_value, mesh_edit_accumulator; // We round mesh_edit_value to 2.5
static int16_t ubl_encoderPosition = 0; static int16_t ubl_encoderPosition = 0;
static void _lcd_mesh_fine_tune(PGM_P msg) { static void _lcd_mesh_fine_tune(PGM_P msg) {
defer_return_to_status = true; set_defer_return_to_status(true);
if (ubl.encoder_diff) { if (ubl.encoder_diff) {
ubl_encoderPosition = (ubl.encoder_diff > 0) ? 1 : -1; ubl_encoderPosition = (ubl.encoder_diff > 0) ? 1 : -1;
ubl.encoder_diff = 0; ubl.encoder_diff = 0;
@ -74,7 +74,7 @@ static void _lcd_mesh_fine_tune(PGM_P msg) {
} }
void _lcd_mesh_edit_NOP() { void _lcd_mesh_edit_NOP() {
defer_return_to_status = true; set_defer_return_to_status(true);
} }
float lcd_mesh_edit() { float lcd_mesh_edit() {
@ -408,7 +408,7 @@ void _lcd_ubl_storage_mesh() {
void _lcd_ubl_output_map_lcd(); void _lcd_ubl_output_map_lcd();
void _lcd_ubl_map_homing() { void _lcd_ubl_map_homing() {
defer_return_to_status = true; set_defer_return_to_status(true);
_lcd_draw_homing(); _lcd_draw_homing();
if (all_axes_homed()) { if (all_axes_homed()) {
ubl.lcd_map_control = true; // Return to the map screen ubl.lcd_map_control = true; // Return to the map screen

View File

@ -281,7 +281,14 @@
extern screenFunc_t currentScreen; extern screenFunc_t currentScreen;
void lcd_goto_screen(const screenFunc_t screen, const uint32_t encoder=0); void lcd_goto_screen(const screenFunc_t screen, const uint32_t encoder=0);
extern bool lcd_clicked, defer_return_to_status; extern bool lcd_clicked;
#if LCD_TIMEOUT_TO_STATUS
extern bool defer_return_to_status;
inline void set_defer_return_to_status(const bool defer) { defer_return_to_status = defer; }
#else
constexpr bool defer_return_to_status = false;
#define set_defer_return_to_status(D) NOOP
#endif
extern int16_t lcd_preheat_hotend_temp[2], lcd_preheat_bed_temp[2]; extern int16_t lcd_preheat_hotend_temp[2], lcd_preheat_bed_temp[2];
extern uint8_t lcd_preheat_fan_speed[2]; extern uint8_t lcd_preheat_fan_speed[2];
@ -309,7 +316,7 @@
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void lcd_advanced_pause_show_message(const AdvancedPauseMessage message, void lcd_advanced_pause_show_message(const AdvancedPauseMessage message,
const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_PAUSE_PRINT, const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_SAME,
const uint8_t extruder=active_extruder); const uint8_t extruder=active_extruder);
#endif #endif