diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 969f015af..4f5749c28 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -648,12 +648,11 @@ void crashdet_detected(uint8_t mask) lcd_puts_P(_T(MSG_RESUME_PRINT)); lcd_putc('?'); bool yesno = lcd_show_yes_no_and_wait(false); - lcd_update_enable(true); - if (yesno) + if (yesno == LEFT_BUTTON_CHOICE) { enquecommand_P(PSTR("CRASH_RECOVER")); } - else + else // MIDDLE_BUTTON_CHOICE { enquecommand_P(PSTR("CRASH_CANCEL")); } @@ -1583,7 +1582,7 @@ void setup() #ifdef UVLO_SUPPORT if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) != 0) { //previous print was terminated by UVLO /* - if (lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false)) recover_print(); + if (!lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false)) recover_print(); else { eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); lcd_update_enable(true); @@ -1605,8 +1604,9 @@ void setup() #ifdef DEBUG_UVLO_AUTOMATIC_RECOVER puts_P(_N("Normal recovery!")); #endif - if ( lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false) ) recover_print(0); - else { + if ( lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false) == LEFT_BUTTON_CHOICE) { + recover_print(0); + } else { eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); lcd_update_enable(true); lcd_update(2); @@ -3289,9 +3289,11 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level) KEEPALIVE_STATE(PAUSED_FOR_USER); #ifdef STEEL_SHEET bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_STEEL_SHEET_CHECK), false, false); - if(result) lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET)); + if(result == LEFT_BUTTON_CHOICE) { + lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET)); + } #endif //STEEL_SHEET - lcd_show_fullscreen_message_and_wait_P(_T(MSG_PAPER)); + lcd_show_fullscreen_message_and_wait_P(_T(MSG_PAPER)); KEEPALIVE_STATE(IN_HANDLER); lcd_display_message_fullscreen_P(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1)); lcd_puts_at_P(0,3,_n("1/4")); @@ -3585,13 +3587,13 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float KEEPALIVE_STATE(PAUSED_FOR_USER); lcd_change_fil_state = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Was filament unload successful?"), false, true); ////MSG_UNLOAD_SUCCESSFUL c=20 r=2 - if (lcd_change_fil_state == 0) { - lcd_clear(); - lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT)); - current_position[X_AXIS] -= 100; - plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED); - st_synchronize(); - lcd_show_fullscreen_message_and_wait_P(_i("Please open idler and remove filament manually."));////MSG_CHECK_IDLER c=20 r=5 + if (lcd_change_fil_state == MIDDLE_BUTTON_CHOICE) { + lcd_clear(); + lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT)); + current_position[X_AXIS] -= 100; + plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED); + st_synchronize(); + lcd_show_fullscreen_message_and_wait_P(_i("Please open idler and remove filament manually.")); ////MSG_CHECK_IDLER c=20 r=5 } } @@ -4918,7 +4920,7 @@ eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,0xFFFF); lcd_show_fullscreen_message_and_wait_P(_i("Stable ambient temperature 21-26C is needed a rigid stand is required."));////MSG_TEMP_CAL_WARNING c=20 r=4 bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_STEEL_SHEET_CHECK), false, false); - if (result) + if (result == LEFT_BUTTON_CHOICE) { current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; plan_buffer_line_curposXYZE(3000 / 60); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 3ac1eb954..75fae476a 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2300,7 +2300,7 @@ void show_preheat_nozzle_warning() void lcd_load_filament_color_check() { bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_CLEAN), false, true); - while (!clean) { + while (clean == MIDDLE_BUTTON_CHOICE) { lcd_update_enable(true); lcd_update(2); load_filament_final_feed(); @@ -3188,8 +3188,8 @@ lcd_wait_for_click_delay(0); //! @param msg Message to show. If NULL, do not clear the screen and handle choice selection only. //! @param allow_timeouting if true, allows time outing of the screen //! @param default_yes if true, yes choice is selected by default, otherwise no choice is preselected -//! @retval 1 yes choice selected by user -//! @retval 0 no choice selected by user +//! @retval 0 yes choice selected by user +//! @retval 1 no choice selected by user //! @retval -1 screen timed out int8_t lcd_show_multiscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting, bool default_yes) //currently just max. n*4 + 3 lines supported (set in language header files) { @@ -3315,8 +3315,8 @@ int8_t lcd_show_multiscreen_message_with_choices_and_wait_P(const char *msg, boo //! @brief Display and wait for a Yes/No choice using the last line of the LCD //! @param allow_timeouting if true, allows time outing of the screen //! @param default_yes if true, yes choice is selected by default, otherwise no choice is preselected -//! @retval 1 yes choice selected by user -//! @retval 0 no choice selected by user +//! @retval 0 yes choice selected by user +//! @retval 1 no choice selected by user //! @retval -1 screen timed out int8_t lcd_show_yes_no_and_wait(bool allow_timeouting, bool default_yes) { @@ -3327,8 +3327,8 @@ int8_t lcd_show_yes_no_and_wait(bool allow_timeouting, bool default_yes) //! @param msg Message to show. If NULL, do not clear the screen and handle choice selection only. //! @param allow_timeouting if true, allows time outing of the screen //! @param default_yes if true, yes choice is selected by default, otherwise no choice is preselected -//! @retval 1 yes choice selected by user -//! @retval 0 no choice selected by user +//! @retval 0 yes choice selected by user +//! @retval 1 no choice selected by user //! @retval -1 screen timed out //! @relates lcd_show_yes_no_and_wait int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting, bool default_yes) @@ -3658,7 +3658,7 @@ void menu_setlang(unsigned char lang) { if (!lang_select(lang)) { - if (lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Copy selected language?"), false, true))////MSG_COPY_SEL_LANG c=20 r=3 + if (lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Copy selected language?"), false, true) == LEFT_BUTTON_CHOICE)////MSG_COPY_SEL_LANG c=20 r=3 lang_boot_update_start(lang); lcd_update_enable(true); lcd_clear(); @@ -3851,7 +3851,7 @@ void lcd_v2_calibration() } else { - loaded = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_LOADED), false, true); + loaded = !lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_LOADED), false, true); lcd_update_enabled = true; } @@ -3881,7 +3881,7 @@ void lcd_v2_calibration() void lcd_wizard() { bool result = true; if (calibration_status() != CALIBRATION_STATUS_ASSEMBLED) { - result = lcd_show_multiscreen_message_yes_no_and_wait_P(_i("Running Wizard will delete current calibration results and start from the beginning. Continue?"), false, false);////MSG_WIZARD_RERUN c=20 r=7 + result = !lcd_show_multiscreen_message_yes_no_and_wait_P(_i("Running Wizard will delete current calibration results and start from the beginning. Continue?"), false, false);////MSG_WIZARD_RERUN c=20 r=7 } if (result) { calibration_status_store(CALIBRATION_STATUS_ASSEMBLED); @@ -4044,10 +4044,10 @@ void lcd_wizard(WizState state) state = S::Restore; } else { wizard_event = lcd_show_multiscreen_message_yes_no_and_wait_P(_T(MSG_WIZARD_WELCOME), false, true); - if (wizard_event) { + if (wizard_event == LEFT_BUTTON_CHOICE) { state = S::Restore; eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); - } else { + } else { // MIDDLE_BUTTON_CHOICE eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 0); end = true; } @@ -4083,7 +4083,9 @@ void lcd_wizard(WizState state) lcd_show_fullscreen_message_and_wait_P(_i("Now remove the test print from steel sheet."));////MSG_REMOVE_TEST_PRINT c=20 r=4 lcd_show_fullscreen_message_and_wait_P(_i("I will run z calibration now."));////MSG_WIZARD_Z_CAL c=20 r=8 wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_STEEL_SHEET_CHECK), false, false); - if (!wizard_event) lcd_show_fullscreen_message_and_wait_P(_T(MSG_PLACE_STEEL_SHEET)); + if (wizard_event == MIDDLE_BUTTON_CHOICE) { + lcd_show_fullscreen_message_and_wait_P(_T(MSG_PLACE_STEEL_SHEET)); + } wizard_event = gcode_M45(true, 0); if (wizard_event) { //current filament needs to be unloaded and then new filament should be loaded @@ -4104,16 +4106,10 @@ void lcd_wizard(WizState state) //start to preheat nozzle and bed to save some time later setTargetHotend(PLA_PREHEAT_HOTEND_TEMP, 0); setTargetBed(PLA_PREHEAT_HPB_TEMP); - if (MMU2::mmu2.Enabled()) - { - wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_LOADED), true); - } else - { - wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_LOADED), true); - } - if (wizard_event) state = S::Lay1CalCold; - else - { + wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_LOADED), true); + if (wizard_event == LEFT_BUTTON_CHOICE) { + state = S::Lay1CalCold; + } else { // MIDDLE_BUTTON_CHOICE if(MMU2::mmu2.Enabled()) state = S::LoadFilCold; else state = S::Preheat; } @@ -4144,7 +4140,7 @@ void lcd_wizard(WizState state) break; case S::RepeatLay1Cal: wizard_event = lcd_show_multiscreen_message_yes_no_and_wait_P(_i("Do you want to repeat last step to readjust distance between nozzle and heatbed?"), false);////MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 - if (wizard_event) + if (wizard_event == LEFT_BUTTON_CHOICE) { lcd_show_fullscreen_message_and_wait_P(_i("Please clean heatbed and then press the knob."));////MSG_WIZARD_CLEAN_HEATBED c=20 r=8 state = S::Lay1CalCold; @@ -5099,7 +5095,7 @@ char reset_menu() { static void lcd_disable_farm_mode() { int8_t disable = lcd_show_fullscreen_message_yes_no_and_wait_P(PSTR("Disable farm mode?"), true, false); //allow timeouting, default no - if (disable) + if (disable == LEFT_BUTTON_CHOICE) { enquecommand_P(PSTR("G99")); lcd_return_to_status(); @@ -7461,8 +7457,7 @@ static void menu_action_sdfile(const char* filename) //filename is just a pointer to card.filename, which changes everytime you try to open a file by filename. So you can't use filename directly //to open a file. Instead, the cached filename in cmd is used as that one is static for the whole lifetime of this function. if (!check_file(cmd + 4)) { - result = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("File incomplete. Continue anyway?"), false, false);////MSG_FILE_INCOMPLETE c=20 r=3 - lcd_update_enable(true); + result = !lcd_show_fullscreen_message_yes_no_and_wait_P(_i("File incomplete. Continue anyway?"), false, false);////MSG_FILE_INCOMPLETE c=20 r=3 } if (result) { enquecommand(cmd); diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index a5c9a8a86..6f7675b3c 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -78,9 +78,9 @@ extern void lcd_return_to_status(); extern void lcd_wait_for_click(); extern bool lcd_wait_for_click_delay(uint16_t nDelay); extern void lcd_show_fullscreen_message_and_wait_P(const char *msg); -// 0: no, 1: yes, -1: timeouted +// 1: no, 0: yes, -1: timeouted extern int8_t lcd_show_yes_no_and_wait(bool allow_timeouting = true, bool default_yes = false); -// 0: no, 1: yes, -1: timeouted +// 1: no, 0: yes, -1: timeouted extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false); extern int8_t lcd_show_multiscreen_message_with_choices_and_wait_P(const char *msg, bool allow_timeouting, bool default_yes, const char *first_choice, const char *second_choice, const char *third_choice = nullptr, uint8_t second_col = 7);