Merge pull request #4156 from leptun/lcd_status_screen_block
Fix `M0` click not consumed
This commit is contained in:
commit
e516d8a0c4
|
|
@ -5221,18 +5221,13 @@ void process_commands()
|
||||||
case 1: {
|
case 1: {
|
||||||
const char *src = strchr_pointer + 2;
|
const char *src = strchr_pointer + 2;
|
||||||
codenum = 0;
|
codenum = 0;
|
||||||
bool hasP = false, hasS = false;
|
if (code_seen('P')) codenum = code_value_long(); // milliseconds to wait
|
||||||
if (code_seen('P')) {
|
if (code_seen('S')) codenum = code_value_long() * 1000; // seconds to wait
|
||||||
codenum = code_value_long(); // milliseconds to wait
|
bool expiration_time_set = bool(codenum);
|
||||||
hasP = codenum > 0;
|
|
||||||
}
|
|
||||||
if (code_seen('S')) {
|
|
||||||
codenum = code_value_long() * 1000; // seconds to wait
|
|
||||||
hasS = codenum > 0;
|
|
||||||
}
|
|
||||||
while (*src == ' ') ++src;
|
while (*src == ' ') ++src;
|
||||||
custom_message_type = CustomMsg::M0Wait;
|
custom_message_type = CustomMsg::M0Wait;
|
||||||
if (!hasP && !hasS && *src != '\0') {
|
if (!expiration_time_set && *src != '\0') {
|
||||||
lcd_setstatus(src);
|
lcd_setstatus(src);
|
||||||
} else {
|
} else {
|
||||||
// farmers want to abuse a bug from the previous firmware releases
|
// farmers want to abuse a bug from the previous firmware releases
|
||||||
|
|
@ -5244,20 +5239,20 @@ void process_commands()
|
||||||
custom_message_type = CustomMsg::Status; // let the lcd display the name of the printed G-code file in farm mode
|
custom_message_type = CustomMsg::Status; // let the lcd display the name of the printed G-code file in farm mode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lcd_ignore_click(); //call lcd_ignore_click also for else ???
|
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
|
menu_set_block(MENU_BLOCK_STATUS_SCREEN_M0);
|
||||||
previous_millis_cmd.start();
|
previous_millis_cmd.start();
|
||||||
if (codenum > 0 ) {
|
if (expiration_time_set) {
|
||||||
codenum += _millis(); // keep track of when we started waiting
|
codenum += _millis(); // keep track of when we started waiting
|
||||||
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
||||||
while(_millis() < codenum && !lcd_clicked()) {
|
while(_millis() < codenum && !lcd_clicked()) {
|
||||||
delay_keep_alive(0);
|
delay_keep_alive(0);
|
||||||
}
|
}
|
||||||
KEEPALIVE_STATE(IN_HANDLER);
|
KEEPALIVE_STATE(IN_HANDLER);
|
||||||
lcd_ignore_click(false);
|
|
||||||
} else {
|
} else {
|
||||||
marlin_wait_for_click();
|
marlin_wait_for_click();
|
||||||
}
|
}
|
||||||
|
menu_unset_block(MENU_BLOCK_STATUS_SCREEN_M0);
|
||||||
if (IS_SD_PRINTING)
|
if (IS_SD_PRINTING)
|
||||||
custom_message_type = CustomMsg::Status;
|
custom_message_type = CustomMsg::Status;
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ enum ESeriousErrors {
|
||||||
#ifdef TEMP_MODEL
|
#ifdef TEMP_MODEL
|
||||||
MENU_BLOCK_TEMP_MODEL_AUTOTUNE = 0x02,
|
MENU_BLOCK_TEMP_MODEL_AUTOTUNE = 0x02,
|
||||||
#endif
|
#endif
|
||||||
|
MENU_BLOCK_STATUS_SCREEN_M0 = 0x04,
|
||||||
}; // and possibly others in the future.
|
}; // and possibly others in the future.
|
||||||
|
|
||||||
//! this is a flag for disabling entering the main menu and longpress. If this is set to anything !=
|
//! this is a flag for disabling entering the main menu and longpress. If this is set to anything !=
|
||||||
|
|
@ -49,7 +50,8 @@ extern uint8_t menu_block_mask;
|
||||||
//! a c++ class would have been better
|
//! a c++ class would have been better
|
||||||
#define menu_set_block(x) menu_block_mask |= x;
|
#define menu_set_block(x) menu_block_mask |= x;
|
||||||
#define menu_unset_block(x) menu_block_mask &= ~x;
|
#define menu_unset_block(x) menu_block_mask &= ~x;
|
||||||
#define menu_is_blocked(x) (menu_block_mask & x) != 0
|
#define menu_is_blocked(x) (menu_block_mask & x)
|
||||||
|
#define menu_is_any_block() (menu_block_mask != MENU_BLOCK_NONE)
|
||||||
|
|
||||||
extern uint8_t menu_line;
|
extern uint8_t menu_line;
|
||||||
extern uint8_t menu_item;
|
extern uint8_t menu_item;
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,6 @@ static const char* lcd_display_message_fullscreen_nonBlocking_P(const char *msg)
|
||||||
// void copy_and_scalePID_d();
|
// void copy_and_scalePID_d();
|
||||||
|
|
||||||
/* Different menus */
|
/* Different menus */
|
||||||
//static void lcd_status_screen(); // NOT static due to using inside "Marlin_main" module ("manage_inactivity()")
|
|
||||||
#if (LANG_MODE != 0)
|
#if (LANG_MODE != 0)
|
||||||
static void lcd_language_menu();
|
static void lcd_language_menu();
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -256,9 +255,6 @@ bool lcd_oldcardstatus;
|
||||||
|
|
||||||
uint8_t selected_sheet = 0;
|
uint8_t selected_sheet = 0;
|
||||||
|
|
||||||
bool ignore_click = false;
|
|
||||||
bool wait_for_unclick;
|
|
||||||
|
|
||||||
bool bMain; // flag (i.e. 'fake parameter') for 'lcd_sdcard_menu()' function
|
bool bMain; // flag (i.e. 'fake parameter') for 'lcd_sdcard_menu()' function
|
||||||
bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_hw_setup_menu()' function
|
bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_hw_setup_menu()' function
|
||||||
|
|
||||||
|
|
@ -757,29 +753,7 @@ void lcd_status_screen() // NOT static due to using ins
|
||||||
lcd_commands();
|
lcd_commands();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool current_click = lcd_clicked();
|
if (!menu_is_any_block() && lcd_clicked()) {
|
||||||
|
|
||||||
if (ignore_click)
|
|
||||||
{
|
|
||||||
if (wait_for_unclick)
|
|
||||||
{
|
|
||||||
if (!current_click)
|
|
||||||
ignore_click = wait_for_unclick = false;
|
|
||||||
else
|
|
||||||
current_click = false;
|
|
||||||
}
|
|
||||||
else if (current_click)
|
|
||||||
{
|
|
||||||
lcd_draw_update = 2;
|
|
||||||
wait_for_unclick = true;
|
|
||||||
current_click = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current_click
|
|
||||||
&& ( menu_block_mask == MENU_BLOCK_NONE ) // or a serious error blocks entering the menu
|
|
||||||
)
|
|
||||||
{
|
|
||||||
menu_depth = 0; //redundant, as already done in lcd_return_to_status(), just to be sure
|
menu_depth = 0; //redundant, as already done in lcd_return_to_status(), just to be sure
|
||||||
menu_submenu(lcd_main_menu);
|
menu_submenu(lcd_main_menu);
|
||||||
lcd_refresh(); // to maybe revive the LCD if static electricity killed it.
|
lcd_refresh(); // to maybe revive the LCD if static electricity killed it.
|
||||||
|
|
@ -7188,12 +7162,6 @@ void ultralcd_init()
|
||||||
strncpy_P(lcd_status_message, MSG_WELCOME, LCD_WIDTH);
|
strncpy_P(lcd_status_message, MSG_WELCOME, LCD_WIDTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcd_ignore_click(bool b)
|
|
||||||
{
|
|
||||||
ignore_click = b;
|
|
||||||
wait_for_unclick = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool lcd_message_check(uint8_t priority)
|
static bool lcd_message_check(uint8_t priority)
|
||||||
{
|
{
|
||||||
// regular priority check
|
// regular priority check
|
||||||
|
|
@ -7290,7 +7258,7 @@ void menu_lcd_longpress_func(void)
|
||||||
// Wake up the LCD backlight and,
|
// Wake up the LCD backlight and,
|
||||||
// start LCD inactivity timer
|
// start LCD inactivity timer
|
||||||
lcd_timeoutToStatus.start();
|
lcd_timeoutToStatus.start();
|
||||||
if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z || menu_block_mask != MENU_BLOCK_NONE || Stopped)
|
if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z || menu_is_any_block() || Stopped)
|
||||||
{
|
{
|
||||||
// disable longpress during re-entry, while homing, calibration or if a serious error
|
// disable longpress during re-entry, while homing, calibration or if a serious error
|
||||||
lcd_draw_update = 2;
|
lcd_draw_update = 2;
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,6 @@ extern bool isPrintPaused;
|
||||||
extern uint8_t scrollstuff;
|
extern uint8_t scrollstuff;
|
||||||
|
|
||||||
|
|
||||||
void lcd_ignore_click(bool b=true);
|
|
||||||
void lcd_commands();
|
void lcd_commands();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue