Centralize click-handling in the LCD loop
This commit is contained in:
		| @@ -270,7 +270,7 @@ extern bool axis_known_position[XYZ]; // axis[n].is_known | |||||||
| extern bool axis_homed[XYZ]; // axis[n].is_homed | extern bool axis_homed[XYZ]; // axis[n].is_homed | ||||||
| extern volatile bool wait_for_heatup; | extern volatile bool wait_for_heatup; | ||||||
|  |  | ||||||
| #if ENABLED(ULTIPANEL) || ENABLED(EMERGENCY_PARSER) | #if ENABLED(EMERGENCY_PARSER) || ENABLED(ULTIPANEL) | ||||||
|   extern volatile bool wait_for_user; |   extern volatile bool wait_for_user; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -508,10 +508,7 @@ MarlinSerial customizedSerial; | |||||||
|         if (c == '\n') { |         if (c == '\n') { | ||||||
|           switch (state) { |           switch (state) { | ||||||
|             case state_M108: |             case state_M108: | ||||||
|               wait_for_heatup = false; |               wait_for_user = wait_for_heatup = false; | ||||||
|               #if DISABLED(ULTIPANEL) |  | ||||||
|                 wait_for_user = false; |  | ||||||
|               #endif |  | ||||||
|               break; |               break; | ||||||
|             case state_M112: |             case state_M112: | ||||||
|               kill(PSTR(MSG_KILLED)); |               kill(PSTR(MSG_KILLED)); | ||||||
|   | |||||||
| @@ -1046,7 +1046,12 @@ inline void get_serial_commands() { | |||||||
|  |  | ||||||
|       #if DISABLED(EMERGENCY_PARSER) |       #if DISABLED(EMERGENCY_PARSER) | ||||||
|         // If command was e-stop process now |         // If command was e-stop process now | ||||||
|         if (strcmp(command, "M108") == 0) wait_for_heatup = false; |         if (strcmp(command, "M108") == 0) { | ||||||
|  |           wait_for_heatup = false; | ||||||
|  |           #if ENABLED(ULTIPANEL) | ||||||
|  |             wait_for_user = false; | ||||||
|  |           #endif | ||||||
|  |         } | ||||||
|         if (strcmp(command, "M112") == 0) kill(PSTR(MSG_KILLED)); |         if (strcmp(command, "M112") == 0) kill(PSTR(MSG_KILLED)); | ||||||
|         if (strcmp(command, "M410") == 0) { quickstop_stepper(); } |         if (strcmp(command, "M410") == 0) { quickstop_stepper(); } | ||||||
|       #endif |       #endif | ||||||
| @@ -4414,7 +4419,6 @@ inline void gcode_G92() { | |||||||
|           dontExpireStatus(); |           dontExpireStatus(); | ||||||
|         #endif |         #endif | ||||||
|       } |       } | ||||||
|       lcd_ignore_click(); |  | ||||||
|  |  | ||||||
|     #else |     #else | ||||||
|  |  | ||||||
| @@ -4425,53 +4429,28 @@ inline void gcode_G92() { | |||||||
|  |  | ||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     #if ENABLED(EMERGENCY_PARSER) |     wait_for_user = true; | ||||||
|       wait_for_user = true; |  | ||||||
|     #endif |  | ||||||
|  |  | ||||||
|     KEEPALIVE_STATE(PAUSED_FOR_USER); |     KEEPALIVE_STATE(PAUSED_FOR_USER); | ||||||
|  |  | ||||||
|     stepper.synchronize(); |     stepper.synchronize(); | ||||||
|     refresh_cmd_timeout(); |     refresh_cmd_timeout(); | ||||||
|  |  | ||||||
|     #if ENABLED(ULTIPANEL) |     if (codenum > 0) { | ||||||
|  |       codenum += previous_cmd_ms;  // wait until this time for a click | ||||||
|       #if ENABLED(EMERGENCY_PARSER) |       while (PENDING(millis(), codenum) && wait_for_user) idle(); | ||||||
|         #define M1_WAIT_CONDITION (!lcd_clicked() && wait_for_user) |     } | ||||||
|  |     else { | ||||||
|  |       #if ENABLED(ULTIPANEL) | ||||||
|  |         if (lcd_detected()) { | ||||||
|  |           while (wait_for_user) idle(); | ||||||
|  |           IS_SD_PRINTING ? LCD_MESSAGEPGM(MSG_RESUMING) : LCD_MESSAGEPGM(WELCOME_MSG); | ||||||
|  |         } | ||||||
|       #else |       #else | ||||||
|         #define M1_WAIT_CONDITION !lcd_clicked() |         while (wait_for_user) idle(); | ||||||
|       #endif |       #endif | ||||||
|  |     } | ||||||
|  |  | ||||||
|       if (codenum > 0) { |     wait_for_user = false; | ||||||
|         codenum += previous_cmd_ms;  // wait until this time for a click |  | ||||||
|         while (PENDING(millis(), codenum) && M1_WAIT_CONDITION) idle(); |  | ||||||
|         lcd_ignore_click(false); |  | ||||||
|       } |  | ||||||
|       else if (lcd_detected()) { |  | ||||||
|         while (M1_WAIT_CONDITION) idle(); |  | ||||||
|       } |  | ||||||
|       else goto ExitM1; |  | ||||||
|  |  | ||||||
|       IS_SD_PRINTING ? LCD_MESSAGEPGM(MSG_RESUMING) : LCD_MESSAGEPGM(WELCOME_MSG); |  | ||||||
|  |  | ||||||
|     #else |  | ||||||
|  |  | ||||||
|       if (codenum > 0) { |  | ||||||
|         codenum += previous_cmd_ms;  // wait until this time for an M108 |  | ||||||
|         while (PENDING(millis(), codenum) && wait_for_user) idle(); |  | ||||||
|       } |  | ||||||
|       else while (wait_for_user) idle(); |  | ||||||
|  |  | ||||||
|     #endif |  | ||||||
|  |  | ||||||
| #if ENABLED(ULTIPANEL) |  | ||||||
|   ExitM1: |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|     #if ENABLED(EMERGENCY_PARSER) |  | ||||||
|       wait_for_user = false; |  | ||||||
|     #endif |  | ||||||
|  |  | ||||||
|     KEEPALIVE_STATE(IN_HANDLER); |     KEEPALIVE_STATE(IN_HANDLER); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -6874,7 +6853,10 @@ inline void gcode_M503() { | |||||||
|     // Wait for filament insert by user and press button |     // Wait for filament insert by user and press button | ||||||
|     lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT); |     lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT); | ||||||
|  |  | ||||||
|     while (!lcd_clicked()) { |     // LCD click or M108 will clear this | ||||||
|  |     wait_for_user = true; | ||||||
|  |  | ||||||
|  |     while (wait_for_user) { | ||||||
|       #if HAS_BUZZER |       #if HAS_BUZZER | ||||||
|         millis_t ms = millis(); |         millis_t ms = millis(); | ||||||
|         if (ms >= next_buzz) { |         if (ms >= next_buzz) { | ||||||
| @@ -6884,9 +6866,6 @@ inline void gcode_M503() { | |||||||
|       #endif |       #endif | ||||||
|       idle(true); |       idle(true); | ||||||
|     } |     } | ||||||
|     delay(100); |  | ||||||
|     while (lcd_clicked()) idle(true); |  | ||||||
|     delay(100); |  | ||||||
|  |  | ||||||
|     // Show load message |     // Show load message | ||||||
|     lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD); |     lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD); | ||||||
|   | |||||||
| @@ -243,7 +243,6 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|    * |    * | ||||||
|    * START_MENU    Opening code for a screen with menu items. |    * START_MENU    Opening code for a screen with menu items. | ||||||
|    *               Scroll as-needed to keep the selected line in view. |    *               Scroll as-needed to keep the selected line in view. | ||||||
|    *               'wasClicked' indicates the controller was clicked. |  | ||||||
|    */ |    */ | ||||||
|   #define START_SCREEN() \ |   #define START_SCREEN() \ | ||||||
|     START_SCREEN_OR_MENU(LCD_HEIGHT); \ |     START_SCREEN_OR_MENU(LCD_HEIGHT); \ | ||||||
| @@ -257,7 +256,6 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|     if (encoderLine >= encoderTopLine + LCD_HEIGHT) { \ |     if (encoderLine >= encoderTopLine + LCD_HEIGHT) { \ | ||||||
|       encoderTopLine = encoderLine - (LCD_HEIGHT - 1); \ |       encoderTopLine = encoderLine - (LCD_HEIGHT - 1); \ | ||||||
|     } \ |     } \ | ||||||
|     bool wasClicked = LCD_CLICKED; \ |  | ||||||
|     bool _skipStatic = true; \ |     bool _skipStatic = true; \ | ||||||
|     SCREEN_OR_MENU_LOOP() |     SCREEN_OR_MENU_LOOP() | ||||||
|  |  | ||||||
| @@ -288,8 +286,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|     if (_menuLineNr == _thisItemNr) { \ |     if (_menuLineNr == _thisItemNr) { \ | ||||||
|       if (lcdDrawUpdate) \ |       if (lcdDrawUpdate) \ | ||||||
|         lcd_implementation_drawmenu_ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PSTR(LABEL), ## __VA_ARGS__); \ |         lcd_implementation_drawmenu_ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PSTR(LABEL), ## __VA_ARGS__); \ | ||||||
|       if (wasClicked && encoderLine == _thisItemNr) { \ |       if (lcd_clicked && encoderLine == _thisItemNr) { | ||||||
|         lcd_quick_feedback() |  | ||||||
|  |  | ||||||
|   #define _MENU_ITEM_PART_2(TYPE, ...) \ |   #define _MENU_ITEM_PART_2(TYPE, ...) \ | ||||||
|         menu_action_ ## TYPE(__VA_ARGS__); \ |         menu_action_ ## TYPE(__VA_ARGS__); \ | ||||||
| @@ -381,9 +378,8 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|   menuPosition screen_history[10]; |   menuPosition screen_history[10]; | ||||||
|   uint8_t screen_history_depth = 0; |   uint8_t screen_history_depth = 0; | ||||||
|  |  | ||||||
|   bool ignore_click = false; |   // LCD and menu clicks | ||||||
|   bool wait_for_unclick; |   bool lcd_clicked, wait_for_unclick, defer_return_to_status; | ||||||
|   bool defer_return_to_status = false; |  | ||||||
|  |  | ||||||
|   // Variables used when editing values. |   // Variables used when editing values. | ||||||
|   const char* editLabel; |   const char* editLabel; | ||||||
| @@ -392,9 +388,9 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|   screenFunc_t callbackFunc;              // call this after editing |   screenFunc_t callbackFunc;              // call this after editing | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * General function to go directly to a menu |    * General function to go directly to a screen | ||||||
|    */ |    */ | ||||||
|   static void lcd_goto_screen(screenFunc_t screen, const bool feedback = false, const uint32_t encoder = 0) { |   static void lcd_goto_screen(screenFunc_t screen, const uint32_t encoder = 0) { | ||||||
|     if (currentScreen != screen) { |     if (currentScreen != screen) { | ||||||
|       currentScreen = screen; |       currentScreen = screen; | ||||||
|       encoderPosition = encoder; |       encoderPosition = encoder; | ||||||
| @@ -402,7 +398,6 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|         defer_return_to_status = false; |         defer_return_to_status = false; | ||||||
|         screen_history_depth = 0; |         screen_history_depth = 0; | ||||||
|       } |       } | ||||||
|       if (feedback) lcd_quick_feedback(); |  | ||||||
|       lcd_implementation_clear(); |       lcd_implementation_clear(); | ||||||
|       #if ENABLED(LCD_PROGRESS_BAR) |       #if ENABLED(LCD_PROGRESS_BAR) | ||||||
|         // For LCD_PROGRESS_BAR re-initialize custom characters |         // For LCD_PROGRESS_BAR re-initialize custom characters | ||||||
| @@ -427,7 +422,6 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|       --screen_history_depth; |       --screen_history_depth; | ||||||
|       lcd_goto_screen( |       lcd_goto_screen( | ||||||
|         screen_history[screen_history_depth].menu_function, |         screen_history[screen_history_depth].menu_function, | ||||||
|         feedback, |  | ||||||
|         screen_history[screen_history_depth].encoder_position |         screen_history[screen_history_depth].encoder_position | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -435,11 +429,6 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to | |||||||
|       lcd_return_to_status(); |       lcd_return_to_status(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void lcd_ignore_click(bool b) { |  | ||||||
|     ignore_click = b; |  | ||||||
|     wait_for_unclick = false; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
| #endif // ULTIPANEL | #endif // ULTIPANEL | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -493,23 +482,7 @@ static void lcd_status_screen() { | |||||||
|  |  | ||||||
|   #if ENABLED(ULTIPANEL) |   #if ENABLED(ULTIPANEL) | ||||||
|  |  | ||||||
|     bool current_click = LCD_CLICKED; |     if (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_quick_feedback(); |  | ||||||
|         wait_for_unclick = true; |  | ||||||
|         current_click = false; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (current_click) { |  | ||||||
|       #if ENABLED(FILAMENT_LCD_DISPLAY) |       #if ENABLED(FILAMENT_LCD_DISPLAY) | ||||||
|         previous_lcd_status_ms = millis();  // get status message to show up for a while |         previous_lcd_status_ms = millis();  // get status message to show up for a while | ||||||
|       #endif |       #endif | ||||||
| @@ -518,7 +491,7 @@ static void lcd_status_screen() { | |||||||
|           false |           false | ||||||
|         #endif |         #endif | ||||||
|       ); |       ); | ||||||
|       lcd_goto_screen(lcd_main_menu, true); |       lcd_goto_screen(lcd_main_menu); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #if ENABLED(ULTIPANEL_FEEDMULTIPLY) |     #if ENABLED(ULTIPANEL_FEEDMULTIPLY) | ||||||
| @@ -676,7 +649,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|     long babysteps_done = 0; |     long babysteps_done = 0; | ||||||
|  |  | ||||||
|     static void _lcd_babystep(const AxisEnum axis, const char* msg) { |     static void _lcd_babystep(const AxisEnum axis, const char* msg) { | ||||||
|       if (LCD_CLICKED) { defer_return_to_status = false; lcd_goto_previous_menu(true); return; } |       if (lcd_clicked) { defer_return_to_status = false; return lcd_goto_previous_menu(true); } | ||||||
|       ENCODER_DIRECTION_NORMAL(); |       ENCODER_DIRECTION_NORMAL(); | ||||||
|       if (encoderPosition) { |       if (encoderPosition) { | ||||||
|         int babystep_increment = (int32_t)encoderPosition * BABYSTEP_MULTIPLICATOR; |         int babystep_increment = (int32_t)encoderPosition * BABYSTEP_MULTIPLICATOR; | ||||||
| @@ -1092,12 +1065,12 @@ void kill_screen(const char* lcd_msg) { | |||||||
|       } |       } | ||||||
|  |  | ||||||
|       static bool debounce_click = false; |       static bool debounce_click = false; | ||||||
|       if (LCD_CLICKED) { |       if (lcd_clicked) { | ||||||
|         if (!debounce_click) { |         if (!debounce_click) { | ||||||
|           debounce_click = true; // ignore multiple "clicks" in a row |           debounce_click = true; // ignore multiple "clicks" in a row | ||||||
|           mbl.set_zigzag_z(_lcd_level_bed_position++, current_position[Z_AXIS]); |           mbl.set_zigzag_z(_lcd_level_bed_position++, current_position[Z_AXIS]); | ||||||
|           if (_lcd_level_bed_position == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) { |           if (_lcd_level_bed_position == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) { | ||||||
|             lcd_goto_screen(_lcd_level_bed_done, true); |             lcd_goto_screen(_lcd_level_bed_done); | ||||||
|  |  | ||||||
|             current_position[Z_AXIS] = MESH_HOME_SEARCH_Z + Z_HOMING_HEIGHT; |             current_position[Z_AXIS] = MESH_HOME_SEARCH_Z + Z_HOMING_HEIGHT; | ||||||
|             line_to_current(Z_AXIS); |             line_to_current(Z_AXIS); | ||||||
| @@ -1113,7 +1086,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|             #endif |             #endif | ||||||
|           } |           } | ||||||
|           else { |           else { | ||||||
|             lcd_goto_screen(_lcd_level_goto_next_point, true); |             lcd_goto_screen(_lcd_level_goto_next_point); | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @@ -1171,7 +1144,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|      */ |      */ | ||||||
|     static void _lcd_level_bed_homing_done() { |     static void _lcd_level_bed_homing_done() { | ||||||
|       if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_WAITING)); |       if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_WAITING)); | ||||||
|       if (LCD_CLICKED) { |       if (lcd_clicked) { | ||||||
|         _lcd_level_bed_position = 0; |         _lcd_level_bed_position = 0; | ||||||
|         current_position[Z_AXIS] = MESH_HOME_SEARCH_Z |         current_position[Z_AXIS] = MESH_HOME_SEARCH_Z | ||||||
|           #if Z_HOME_DIR > 0 |           #if Z_HOME_DIR > 0 | ||||||
| @@ -1179,7 +1152,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|           #endif |           #endif | ||||||
|         ; |         ; | ||||||
|         planner.set_position_mm(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); |         planner.set_position_mm(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); | ||||||
|         lcd_goto_screen(_lcd_level_goto_next_point, true); |         lcd_goto_screen(_lcd_level_goto_next_point); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -1385,7 +1358,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|    */ |    */ | ||||||
|  |  | ||||||
|   static void _lcd_move_xyz(const char* name, AxisEnum axis) { |   static void _lcd_move_xyz(const char* name, AxisEnum axis) { | ||||||
|     if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |     if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|     ENCODER_DIRECTION_NORMAL(); |     ENCODER_DIRECTION_NORMAL(); | ||||||
|     if (encoderPosition) { |     if (encoderPosition) { | ||||||
|       refresh_cmd_timeout(); |       refresh_cmd_timeout(); | ||||||
| @@ -1425,7 +1398,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|       int8_t eindex=-1 |       int8_t eindex=-1 | ||||||
|     #endif |     #endif | ||||||
|   ) { |   ) { | ||||||
|     if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |     if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|     ENCODER_DIRECTION_NORMAL(); |     ENCODER_DIRECTION_NORMAL(); | ||||||
|     if (encoderPosition) { |     if (encoderPosition) { | ||||||
|       current_position[E_AXIS] += float((int32_t)encoderPosition) * move_menu_scale; |       current_position[E_AXIS] += float((int32_t)encoderPosition) * move_menu_scale; | ||||||
| @@ -1924,7 +1897,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|    */ |    */ | ||||||
|   #if HAS_LCD_CONTRAST |   #if HAS_LCD_CONTRAST | ||||||
|     static void lcd_set_contrast() { |     static void lcd_set_contrast() { | ||||||
|       if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |       if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|       ENCODER_DIRECTION_NORMAL(); |       ENCODER_DIRECTION_NORMAL(); | ||||||
|       if (encoderPosition) { |       if (encoderPosition) { | ||||||
|         set_lcd_contrast(lcd_contrast + encoderPosition); |         set_lcd_contrast(lcd_contrast + encoderPosition); | ||||||
| @@ -1991,7 +1964,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|      */ |      */ | ||||||
|     void lcd_sdcard_menu() { |     void lcd_sdcard_menu() { | ||||||
|       ENCODER_DIRECTION_MENUS(); |       ENCODER_DIRECTION_MENUS(); | ||||||
|       if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) return; // nothing to do (so don't thrash the SD card) |       if (!lcdDrawUpdate && !lcd_clicked) return; // nothing to do (so don't thrash the SD card) | ||||||
|       uint16_t fileCnt = card.getnrfilenames(); |       uint16_t fileCnt = card.getnrfilenames(); | ||||||
|       START_MENU(); |       START_MENU(); | ||||||
|       MENU_BACK(MSG_MAIN); |       MENU_BACK(MSG_MAIN); | ||||||
| @@ -2037,7 +2010,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|        * |        * | ||||||
|        */ |        */ | ||||||
|       static void lcd_info_stats_menu() { |       static void lcd_info_stats_menu() { | ||||||
|         if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |         if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|  |  | ||||||
|         char buffer[21]; |         char buffer[21]; | ||||||
|         printStatistics stats = print_job_timer.getStats(); |         printStatistics stats = print_job_timer.getStats(); | ||||||
| @@ -2071,7 +2044,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|      * |      * | ||||||
|      */ |      */ | ||||||
|     static void lcd_info_thermistors_menu() { |     static void lcd_info_thermistors_menu() { | ||||||
|       if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |       if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|       START_SCREEN(); |       START_SCREEN(); | ||||||
|       #define THERMISTOR_ID TEMP_SENSOR_0 |       #define THERMISTOR_ID TEMP_SENSOR_0 | ||||||
|       #include "thermistornames.h" |       #include "thermistornames.h" | ||||||
| @@ -2123,7 +2096,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|      * |      * | ||||||
|      */ |      */ | ||||||
|     static void lcd_info_board_menu() { |     static void lcd_info_board_menu() { | ||||||
|       if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |       if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|       START_SCREEN(); |       START_SCREEN(); | ||||||
|       STATIC_ITEM(BOARD_NAME, true, true);                           // MyPrinterController |       STATIC_ITEM(BOARD_NAME, true, true);                           // MyPrinterController | ||||||
|       STATIC_ITEM(MSG_INFO_BAUDRATE ": " STRINGIFY(BAUDRATE), true); // Baud: 250000 |       STATIC_ITEM(MSG_INFO_BAUDRATE ": " STRINGIFY(BAUDRATE), true); // Baud: 250000 | ||||||
| @@ -2144,7 +2117,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|      * |      * | ||||||
|      */ |      */ | ||||||
|     static void lcd_info_printer_menu() { |     static void lcd_info_printer_menu() { | ||||||
|       if (LCD_CLICKED) { lcd_goto_previous_menu(true); return; } |       if (lcd_clicked) { return lcd_goto_previous_menu(true); } | ||||||
|       START_SCREEN(); |       START_SCREEN(); | ||||||
|       STATIC_ITEM(MSG_MARLIN, true, true);                             // Marlin |       STATIC_ITEM(MSG_MARLIN, true, true);                             // Marlin | ||||||
|       STATIC_ITEM(SHORT_BUILD_VERSION, true);                          // x.x.x-Branch |       STATIC_ITEM(SHORT_BUILD_VERSION, true);                          // x.x.x-Branch | ||||||
| @@ -2334,16 +2307,15 @@ void kill_screen(const char* lcd_msg) { | |||||||
|   #define menu_edit_type(_type, _name, _strFunc, scale) \ |   #define menu_edit_type(_type, _name, _strFunc, scale) \ | ||||||
|     bool _menu_edit_ ## _name () { \ |     bool _menu_edit_ ## _name () { \ | ||||||
|       ENCODER_DIRECTION_NORMAL(); \ |       ENCODER_DIRECTION_NORMAL(); \ | ||||||
|       bool isClicked = LCD_CLICKED; \ |  | ||||||
|       if ((int32_t)encoderPosition < 0) encoderPosition = 0; \ |       if ((int32_t)encoderPosition < 0) encoderPosition = 0; \ | ||||||
|       if ((int32_t)encoderPosition > maxEditValue) encoderPosition = maxEditValue; \ |       if ((int32_t)encoderPosition > maxEditValue) encoderPosition = maxEditValue; \ | ||||||
|       if (lcdDrawUpdate) \ |       if (lcdDrawUpdate) \ | ||||||
|         lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \ |         lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \ | ||||||
|       if (isClicked) { \ |       if (lcd_clicked) { \ | ||||||
|         *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \ |         *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \ | ||||||
|         lcd_goto_previous_menu(true); \ |         lcd_goto_previous_menu(true); \ | ||||||
|       } \ |       } \ | ||||||
|       return isClicked; \ |       return lcd_clicked; \ | ||||||
|     } \ |     } \ | ||||||
|     void menu_edit_ ## _name () { _menu_edit_ ## _name(); } \ |     void menu_edit_ ## _name () { _menu_edit_ ## _name(); } \ | ||||||
|     void menu_edit_callback_ ## _name () { if (_menu_edit_ ## _name ()) (*callbackFunc)(); } \ |     void menu_edit_callback_ ## _name () { if (_menu_edit_ ## _name ()) (*callbackFunc)(); } \ | ||||||
| @@ -2614,9 +2586,20 @@ void lcd_update() { | |||||||
|   #if ENABLED(ULTIPANEL) |   #if ENABLED(ULTIPANEL) | ||||||
|     static millis_t return_to_status_ms = 0; |     static millis_t return_to_status_ms = 0; | ||||||
|     manage_manual_move(); |     manage_manual_move(); | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   lcd_buttons_update(); |     lcd_buttons_update(); | ||||||
|  |  | ||||||
|  |     // If the action button is pressed... | ||||||
|  |     if (LCD_CLICKED) { | ||||||
|  |       if (!wait_for_unclick) {           // If not waiting for a debounce release: | ||||||
|  |         wait_for_unclick = true;         //  Set debounce flag to ignore continous clicks | ||||||
|  |         lcd_clicked = !wait_for_user;    //  Keep the click if not waiting for a user-click | ||||||
|  |         wait_for_user = false;           //  Any click clears wait for user | ||||||
|  |         lcd_quick_feedback();            //  Always make a click sound | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     else wait_for_unclick = false; | ||||||
|  |   #endif | ||||||
|  |  | ||||||
|   #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT) |   #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT) | ||||||
|  |  | ||||||
| @@ -2691,7 +2674,7 @@ void lcd_update() { | |||||||
|       #endif // REPRAPWORLD_KEYPAD |       #endif // REPRAPWORLD_KEYPAD | ||||||
|  |  | ||||||
|       bool encoderPastThreshold = (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP); |       bool encoderPastThreshold = (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP); | ||||||
|       if (encoderPastThreshold || LCD_CLICKED) { |       if (encoderPastThreshold || lcd_clicked) { | ||||||
|         if (encoderPastThreshold) { |         if (encoderPastThreshold) { | ||||||
|           int32_t encoderMultiplier = 1; |           int32_t encoderMultiplier = 1; | ||||||
|  |  | ||||||
| @@ -2757,7 +2740,7 @@ void lcd_update() { | |||||||
|       } |       } | ||||||
|  |  | ||||||
|       #if ENABLED(ULTIPANEL) |       #if ENABLED(ULTIPANEL) | ||||||
|         #define CURRENTSCREEN() (*currentScreen)() |         #define CURRENTSCREEN() (*currentScreen)(), lcd_clicked = false | ||||||
|       #else |       #else | ||||||
|         #define CURRENTSCREEN() lcd_status_screen() |         #define CURRENTSCREEN() lcd_status_screen() | ||||||
|       #endif |       #endif | ||||||
| @@ -3020,8 +3003,6 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; } | |||||||
|     #endif |     #endif | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   bool lcd_clicked() { return LCD_CLICKED; } |  | ||||||
|  |  | ||||||
| #endif // ULTIPANEL | #endif // ULTIPANEL | ||||||
|  |  | ||||||
| #endif // ULTRA_LCD | #endif // ULTRA_LCD | ||||||
|   | |||||||
| @@ -68,8 +68,6 @@ | |||||||
|     extern volatile uint8_t buttons;  //the last checked buttons in a bit array. |     extern volatile uint8_t buttons;  //the last checked buttons in a bit array. | ||||||
|     void lcd_buttons_update(); |     void lcd_buttons_update(); | ||||||
|     void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual |     void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual | ||||||
|     bool lcd_clicked(); |  | ||||||
|     void lcd_ignore_click(bool b=true); |  | ||||||
|  |  | ||||||
|     #if ENABLED(FILAMENT_CHANGE_FEATURE) |     #if ENABLED(FILAMENT_CHANGE_FEATURE) | ||||||
|       void lcd_filament_change_show_message(FilamentChangeMessage message); |       void lcd_filament_change_show_message(FilamentChangeMessage message); | ||||||
| @@ -79,12 +77,12 @@ | |||||||
|     FORCE_INLINE void lcd_buttons_update() {} |     FORCE_INLINE void lcd_buttons_update() {} | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   extern int preheatHotendTemp1; |   extern int preheatHotendTemp1, | ||||||
|   extern int preheatBedTemp1; |              preheatBedTemp1, | ||||||
|   extern int preheatFanSpeed1; |              preheatFanSpeed1, | ||||||
|   extern int preheatHotendTemp2; |              preheatHotendTemp2, | ||||||
|   extern int preheatBedTemp2; |              preheatBedTemp2, | ||||||
|   extern int preheatFanSpeed2; |              preheatFanSpeed2; | ||||||
|  |  | ||||||
|   #if ENABLED(FILAMENT_LCD_DISPLAY) |   #if ENABLED(FILAMENT_LCD_DISPLAY) | ||||||
|     extern millis_t previous_lcd_status_ms; |     extern millis_t previous_lcd_status_ms; | ||||||
| @@ -150,6 +148,8 @@ | |||||||
|     #define LCD_CLICKED ((buttons & EN_C) || (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F1)) |     #define LCD_CLICKED ((buttons & EN_C) || (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F1)) | ||||||
|   #elif ENABLED(NEWPANEL) |   #elif ENABLED(NEWPANEL) | ||||||
|     #define LCD_CLICKED (buttons & EN_C) |     #define LCD_CLICKED (buttons & EN_C) | ||||||
|  |   #else | ||||||
|  |     #define LCD_CLICKED false | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
| #else //no LCD | #else //no LCD | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user