Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Marlin/src/inc/Conditionals_LCD.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@

#ifndef STD_ENCODER_PULSES_PER_STEP
#if ENABLED(TOUCH_BUTTONS)
#define STD_ENCODER_PULSES_PER_STEP 1
#define STD_ENCODER_PULSES_PER_STEP 2
#else
#define STD_ENCODER_PULSES_PER_STEP 5
#endif
Expand Down
9 changes: 9 additions & 0 deletions Marlin/src/lcd/menu/menu_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,11 @@ void menu_main() {
SUBMENU(MSG_TUNE, menu_tune);
}
else {

#if !HAS_ENCODER_WHEEL && ENABLED(SDSUPPORT)

// *** IF THIS SECTION IS CHANGED, REPRODUCE BELOW ***

//
// Autostart
//
Expand Down Expand Up @@ -134,6 +138,7 @@ void menu_main() {
ACTION_ITEM(MSG_MEDIA_RELEASED, nullptr);
#endif
}

#endif // !HAS_ENCODER_WHEEL && SDSUPPORT

#if MACHINE_CAN_PAUSE
Expand Down Expand Up @@ -197,6 +202,9 @@ void menu_main() {
#endif

#if HAS_ENCODER_WHEEL && ENABLED(SDSUPPORT)

// *** IF THIS SECTION IS CHANGED, REPRODUCE ABOVE ***

//
// Autostart
//
Expand Down Expand Up @@ -224,6 +232,7 @@ void menu_main() {
ACTION_ITEM(MSG_MEDIA_RELEASED, nullptr);
#endif
}

#endif // HAS_ENCODER_WHEEL && SDSUPPORT

#if HAS_SERVICE_INTERVALS
Expand Down
81 changes: 39 additions & 42 deletions Marlin/src/lcd/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ millis_t MarlinUI::next_button_update_ms; // = 0
#endif

#if ENABLED(TOUCH_BUTTONS)
uint8_t MarlinUI::touch_buttons;
uint8_t MarlinUI::repeat_delay;
#endif

Expand Down Expand Up @@ -778,58 +779,46 @@ void MarlinUI::update() {

#if ENABLED(TOUCH_BUTTONS)

#define TOUCH_MENU_MASK 0x80

static bool arrow_pressed; // = false

// Handle touch events which are slow to read
if (ELAPSED(ms, next_button_update_ms)) {
uint8_t touch_buttons = touch.read_buttons();
if (touch_buttons) {
RESET_STATUS_TIMEOUT();
if (touch_buttons & TOUCH_MENU_MASK) { // Processing Menu Area touch?
if (!wait_for_unclick) { // If not waiting for a debounce release:
wait_for_unclick = true; // - Set debounce flag to ignore continous clicks
wait_for_user = false; // - Any click clears wait for user
// TODO for next PR.
//uint8_t tpos = touch_buttons & ~(TOUCH_MENU_MASK); // Safe 7bit touched screen coordinate
next_button_update_ms = ms + 500; // Defer next check for 1/2 second
#if HAS_LCD_MENU
refresh();
#endif
}
touch_buttons = 0; // Swallow the touch
}
buttons |= (touch_buttons & (EN_C | EN_D)); // Pass on Click and Back buttons
if (touch_buttons & (EN_A | EN_B)) { // A and/or B button?
if (touch_buttons) {
RESET_STATUS_TIMEOUT();
if (buttons & (EN_A | EN_B)) { // Menu arrows, in priority
if (ELAPSED(ms, next_button_update_ms)) {
encoderDiff = (ENCODER_STEPS_PER_MENU_ITEM) * (ENCODER_PULSES_PER_STEP) * encoderDirection;
if (touch_buttons & EN_A) encoderDiff *= -1;
next_button_update_ms = ms + repeat_delay; // Assume the repeat delay
if (!wait_for_unclick && !arrow_pressed) { // On click prepare for repeat
next_button_update_ms += 250; // Longer delay on first press
arrow_pressed = true; // Mark arrow as pressed
if (buttons & EN_A) encoderDiff *= -1;
next_button_update_ms = ms + repeat_delay; // Assume the repeat delay
if (!wait_for_unclick) {
next_button_update_ms += 250; // Longer delay on first press
wait_for_unclick = true; // Avoid Back/Select click while repeating
#if HAS_BUZZER
buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ);
#endif
}
}
}
if (!(touch_buttons & (EN_A | EN_B))) arrow_pressed = false;
else if (!wait_for_unclick && (buttons & EN_C)) { // OK button, if not waiting for a debounce release:
wait_for_unclick = true; // - Set debounce flag to ignore continous clicks
lcd_clicked = !wait_for_user && !no_reentry; // - Keep the click if not waiting for a user-click
wait_for_user = false; // - Any click clears wait for user
quick_feedback(); // - Always make a click sound
}
}
else // keep wait_for_unclick value

#endif // TOUCH_BUTTONS

// Integrated LCD click handling via button_pressed
if (!external_control && button_pressed()) {
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 && !no_reentry; // - Keep the click if not waiting for a user-click
wait_for_user = false; // - Any click clears wait for user
quick_feedback(); // - Always make a click sound
{
// Integrated LCD click handling via button_pressed
if (!external_control && button_pressed()) {
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 && !no_reentry; // - Keep the click if not waiting for a user-click
wait_for_user = false; // - Any click clears wait for user
quick_feedback(); // - Always make a click sound
}
}
else
wait_for_unclick = false;
}
}
else
wait_for_unclick = false;

if (LCD_BACK_CLICKED()) {
quick_feedback();
Expand Down Expand Up @@ -894,8 +883,13 @@ void MarlinUI::update() {
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;

#if ENABLED(TOUCH_BUTTONS)
if (on_status_screen())
next_lcd_update_ms += (LCD_UPDATE_INTERVAL) * 2;

if (on_status_screen()) next_lcd_update_ms += (LCD_UPDATE_INTERVAL) * 2;

#if HAS_ENCODER_ACTION
touch_buttons = touch.read_buttons();
#endif

#endif

#if ENABLED(LCD_HAS_STATUS_INDICATORS)
Expand Down Expand Up @@ -1249,6 +1243,9 @@ void MarlinUI::update() {
#if HAS_SLOW_BUTTONS
| slow_buttons
#endif
#if ENABLED(TOUCH_BUTTONS) && HAS_ENCODER_ACTION
| touch_buttons
#endif
);

#elif HAS_ADC_BUTTONS
Expand Down
7 changes: 4 additions & 3 deletions Marlin/src/lcd/ultralcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@
#include "../libs/buzzer.h"
#endif

#define HAS_DIGITAL_BUTTONS (!HAS_ADC_BUTTONS && ENABLED(NEWPANEL) || BUTTON_EXISTS(EN1, EN2) || ANY_BUTTON(ENC, BACK, UP, DWN, LFT, RT))
#define HAS_SHIFT_ENCODER (!HAS_ADC_BUTTONS && (ENABLED(REPRAPWORLD_KEYPAD) || (HAS_SPI_LCD && DISABLED(NEWPANEL))))
#define HAS_ENCODER_WHEEL ((!HAS_ADC_BUTTONS && ENABLED(NEWPANEL)) || BUTTON_EXISTS(EN1, EN2))
#define HAS_ENCODER_ACTION (HAS_LCD_MENU || ENABLED(ULTIPANEL_FEEDMULTIPLY))
#define HAS_ENCODER_WHEEL ((!HAS_ADC_BUTTONS && ENABLED(NEWPANEL)) || BUTTON_EXISTS(EN1, EN2))
#define HAS_DIGITAL_BUTTONS (HAS_ENCODER_WHEEL || ANY_BUTTON(ENC, BACK, UP, DWN, LFT, RT))
#define HAS_SHIFT_ENCODER (!HAS_ADC_BUTTONS && (ENABLED(REPRAPWORLD_KEYPAD) || (HAS_SPI_LCD && DISABLED(NEWPANEL))))

// I2C buttons must be read in the main thread
#define HAS_SLOW_BUTTONS EITHER(LCD_I2C_VIKI, LCD_I2C_PANELOLU2)
Expand Down Expand Up @@ -425,6 +425,7 @@ class MarlinUI {
#if HAS_LCD_MENU

#if ENABLED(TOUCH_BUTTONS)
static uint8_t touch_buttons;
static uint8_t repeat_delay;
#endif

Expand Down
2 changes: 1 addition & 1 deletion config/examples/Alfawise/U20-bltouch/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -2139,7 +2139,7 @@
#if ENABLED(TOUCH_BUTTONS)
#define TOUCH_CALIBRATION // Include user calibration widget in menus (Alfawise)

#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_EDIT 75 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_MENU 100 // (ms) Button repeat delay for menus

#if ENABLED(TS_V11)
Expand Down
2 changes: 1 addition & 1 deletion config/examples/Alfawise/U20/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -2138,7 +2138,7 @@
#if ENABLED(TOUCH_BUTTONS)
#define TOUCH_CALIBRATION // Include user calibration widget in menus (Alfawise)

#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_EDIT 75 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_MENU 100 // (ms) Button repeat delay for menus

#if ENABLED(TS_V11)
Expand Down
4 changes: 2 additions & 2 deletions config/examples/Mks/Robin/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -2059,8 +2059,8 @@
//
#define TOUCH_BUTTONS
#if ENABLED(TOUCH_BUTTONS)
#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
#define BUTTON_DELAY_EDIT 75 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_MENU 100 // (ms) Button repeat delay for menus

/* MKS Robin TFT v2.0 */
#define XPT2046_X_CALIBRATION 12013
Expand Down