Centralize click-handling in the LCD loop
This commit is contained in:
parent
47ad97c35e
commit
50ee749082
5 changed files with 72 additions and 115 deletions
|
@ -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 a new issue