✨ TFT Screen/Backlight Sleep (#22617)
This commit is contained in:
committed by
Scott Lahteine
parent
033043218e
commit
224371dfc6
@ -73,13 +73,18 @@ TFT_IO tftio;
|
||||
#define HEIGHT LCD_PIXEL_HEIGHT
|
||||
#define PAGE_HEIGHT 8
|
||||
|
||||
#include "../touch/touch_buttons.h"
|
||||
|
||||
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
|
||||
#include "../tft_io/touch_calibration.h"
|
||||
#include "../marlinui.h"
|
||||
#endif
|
||||
|
||||
#if HAS_TOUCH_BUTTONS
|
||||
#include "../touch/touch_buttons.h"
|
||||
#if HAS_TOUCH_SLEEP
|
||||
#define HAS_TOUCH_BUTTONS_SLEEP 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define X_HI (UPSCALE(TFT_PIXEL_OFFSET_X, WIDTH) - 1)
|
||||
#define Y_HI (UPSCALE(TFT_PIXEL_OFFSET_Y, HEIGHT) - 1)
|
||||
|
||||
@ -340,6 +345,18 @@ static uint8_t page;
|
||||
}
|
||||
#endif // HAS_TOUCH_BUTTONS
|
||||
|
||||
static void u8g_upscale_clear_lcd(u8g_t *u8g, u8g_dev_t *dev, uint16_t *buffer) {
|
||||
setWindow(u8g, dev, 0, 0, (TFT_WIDTH) - 1, (TFT_HEIGHT) - 1);
|
||||
#if HAS_LCD_IO
|
||||
UNUSED(buffer);
|
||||
tftio.WriteMultiple(TFT_MARLINBG_COLOR, (TFT_WIDTH) * (TFT_HEIGHT));
|
||||
#else
|
||||
memset2(buffer, TFT_MARLINBG_COLOR, (TFT_WIDTH) / 2);
|
||||
for (uint16_t i = 0; i < (TFT_HEIGHT) * sq(GRAPHICAL_TFT_UPSCALE); i++)
|
||||
u8g_WriteSequence(u8g, dev, (TFT_WIDTH) / 2, (uint8_t *)buffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint8_t msgInitCount = 2; // Ignore all messages until 2nd U8G_COM_MSG_INIT
|
||||
|
||||
uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) {
|
||||
@ -365,27 +382,32 @@ uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, u
|
||||
tftio.Init();
|
||||
tftio.InitTFT();
|
||||
TERN_(TOUCH_SCREEN_CALIBRATION, touch_calibration.calibration_reset());
|
||||
|
||||
// Clear Screen
|
||||
setWindow(u8g, dev, 0, 0, (TFT_WIDTH) - 1, (TFT_HEIGHT) - 1);
|
||||
#if HAS_LCD_IO
|
||||
tftio.WriteMultiple(TFT_MARLINBG_COLOR, (TFT_WIDTH) * (TFT_HEIGHT));
|
||||
#else
|
||||
memset2(buffer, TFT_MARLINBG_COLOR, (TFT_WIDTH) / 2);
|
||||
for (uint16_t i = 0; i < (TFT_HEIGHT) * sq(GRAPHICAL_TFT_UPSCALE); i++)
|
||||
u8g_WriteSequence(u8g, dev, (TFT_WIDTH) / 2, (uint8_t *)buffer);
|
||||
#endif
|
||||
u8g_upscale_clear_lcd(u8g, dev, buffer);
|
||||
return 0;
|
||||
|
||||
case U8G_DEV_MSG_STOP: preinit = true; break;
|
||||
|
||||
case U8G_DEV_MSG_PAGE_FIRST:
|
||||
case U8G_DEV_MSG_PAGE_FIRST: {
|
||||
page = 0;
|
||||
#if HAS_TOUCH_BUTTONS_SLEEP
|
||||
static bool sleepCleared;
|
||||
if (touchBt.isSleeping()) {
|
||||
if (!sleepCleared) {
|
||||
sleepCleared = true;
|
||||
u8g_upscale_clear_lcd(u8g, dev, buffer);
|
||||
IF_ENABLED(HAS_TOUCH_BUTTONS, redrawTouchButtons = true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
sleepCleared = false;
|
||||
#endif
|
||||
TERN_(HAS_TOUCH_BUTTONS, drawTouchButtons(u8g, dev));
|
||||
setWindow(u8g, dev, TFT_PIXEL_OFFSET_X, TFT_PIXEL_OFFSET_Y, X_HI, Y_HI);
|
||||
break;
|
||||
} break;
|
||||
|
||||
case U8G_DEV_MSG_PAGE_NEXT:
|
||||
if (TERN0(HAS_TOUCH_BUTTONS_SLEEP, touchBt.isSleeping())) break;
|
||||
if (++page > (HEIGHT / PAGE_HEIGHT)) return 1;
|
||||
|
||||
LOOP_L_N(y, PAGE_HEIGHT) {
|
||||
|
Reference in New Issue
Block a user