mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-27 13:56:24 +00:00
Move last bootscreen delay to end of setup (#21665)
This commit is contained in:
parent
a73dce4a56
commit
a29aefc9c0
@ -1214,8 +1214,9 @@ void setup() {
|
|||||||
DWIN_UpdateLCD(); // Show bootscreen (first image)
|
DWIN_UpdateLCD(); // Show bootscreen (first image)
|
||||||
#else
|
#else
|
||||||
SETUP_RUN(ui.init());
|
SETUP_RUN(ui.init());
|
||||||
#if HAS_WIRED_LCD && ENABLED(SHOW_BOOTSCREEN)
|
#if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN)
|
||||||
SETUP_RUN(ui.show_bootscreen());
|
SETUP_RUN(ui.show_bootscreen());
|
||||||
|
const millis_t bootscreen_ms = millis();
|
||||||
#endif
|
#endif
|
||||||
SETUP_RUN(ui.reset_status()); // Load welcome message early. (Retained if no errors exist.)
|
SETUP_RUN(ui.reset_status()); // Load welcome message early. (Retained if no errors exist.)
|
||||||
#endif
|
#endif
|
||||||
@ -1501,6 +1502,14 @@ void setup() {
|
|||||||
SETUP_RUN(tft_lvgl_init());
|
SETUP_RUN(tft_lvgl_init());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN)
|
||||||
|
const millis_t elapsed = millis() - bootscreen_ms;
|
||||||
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
|
SERIAL_ECHOLNPAIR("elapsed=", elapsed);
|
||||||
|
#endif
|
||||||
|
SETUP_RUN(ui.bootscreen_completion(elapsed));
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLED(PASSWORD_ON_STARTUP)
|
#if ENABLED(PASSWORD_ON_STARTUP)
|
||||||
SETUP_RUN(password.lock_machine()); // Will not proceed until correct password provided
|
SETUP_RUN(password.lock_machine()); // Will not proceed until correct password provided
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,6 +35,18 @@ void safe_delay(millis_t ms) {
|
|||||||
thermalManager.manage_heater(); // This keeps us safe if too many small safe_delay() calls are made
|
thermalManager.manage_heater(); // This keeps us safe if too many small safe_delay() calls are made
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
|
void early_safe_delay(millis_t ms) {
|
||||||
|
while (ms > 50) {
|
||||||
|
ms -= 50;
|
||||||
|
delay(50);
|
||||||
|
watchdog_refresh();
|
||||||
|
}
|
||||||
|
delay(ms);
|
||||||
|
watchdog_refresh();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// A delay to provide brittle hosts time to receive bytes
|
// A delay to provide brittle hosts time to receive bytes
|
||||||
#if ENABLED(SERIAL_OVERRUN_PROTECTION)
|
#if ENABLED(SERIAL_OVERRUN_PROTECTION)
|
||||||
|
|
||||||
|
@ -25,8 +25,12 @@
|
|||||||
#include "../core/types.h"
|
#include "../core/types.h"
|
||||||
#include "../core/millis_t.h"
|
#include "../core/millis_t.h"
|
||||||
|
|
||||||
// Delay that ensures heaters and watchdog are kept alive
|
void safe_delay(millis_t ms); // Delay ensuring that temperatures are updated and the watchdog is kept alive.
|
||||||
void safe_delay(millis_t ms);
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
|
void early_safe_delay(millis_t ms); // Delay ensuring that the watchdog is kept alive. Can be used before the Temperature ISR starts.
|
||||||
|
#else
|
||||||
|
inline void early_safe_delay(millis_t ms) { safe_delay(ms); }
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLED(SERIAL_OVERRUN_PROTECTION)
|
#if ENABLED(SERIAL_OVERRUN_PROTECTION)
|
||||||
void serial_delay(const millis_t ms);
|
void serial_delay(const millis_t ms);
|
||||||
|
@ -486,7 +486,9 @@ void MarlinUI::clear_lcd() { lcd.clear(); }
|
|||||||
CENTER_OR_SCROLL(STRING_SPLASH_LINE3, 1500);
|
CENTER_OR_SCROLL(STRING_SPLASH_LINE3, 1500);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MarlinUI::bootscreen_completion(const millis_t) {
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
safe_delay(100);
|
safe_delay(100);
|
||||||
set_custom_characters(CHARSET_INFO);
|
set_custom_characters(CHARSET_INFO);
|
||||||
|
@ -397,7 +397,10 @@ static void center_text_P(PGM_P pstart, uint8_t y) {
|
|||||||
center_text_P(PSTR(MARLIN_WEBSITE_URL), 4);
|
center_text_P(PSTR(MARLIN_WEBSITE_URL), 4);
|
||||||
picBits = ICON_LOGO;
|
picBits = ICON_LOGO;
|
||||||
lcd.print_screen();
|
lcd.print_screen();
|
||||||
safe_delay(1500);
|
}
|
||||||
|
|
||||||
|
void MarlinUI::bootscreen_completion(const millis_t sofar) {
|
||||||
|
if ((BOOTSCREEN_TIMEOUT) > sofar) safe_delay((BOOTSCREEN_TIMEOUT) - sofar);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // SHOW_BOOTSCREEN
|
#endif // SHOW_BOOTSCREEN
|
||||||
|
@ -160,20 +160,21 @@ bool MarlinUI::detected() { return true; }
|
|||||||
#endif
|
#endif
|
||||||
u8g.firstPage();
|
u8g.firstPage();
|
||||||
do { draw_custom_bootscreen(f); } while (u8g.nextPage());
|
do { draw_custom_bootscreen(f); } while (u8g.nextPage());
|
||||||
if (frame_time) safe_delay(frame_time);
|
if (frame_time) early_safe_delay(frame_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CUSTOM_BOOTSCREEN_TIMEOUT
|
#ifndef CUSTOM_BOOTSCREEN_TIMEOUT
|
||||||
#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
|
#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
|
||||||
#endif
|
#endif
|
||||||
#if CUSTOM_BOOTSCREEN_TIMEOUT
|
#if CUSTOM_BOOTSCREEN_TIMEOUT
|
||||||
safe_delay(CUSTOM_BOOTSCREEN_TIMEOUT);
|
early_safe_delay(CUSTOM_BOOTSCREEN_TIMEOUT);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif // SHOW_CUSTOM_BOOTSCREEN
|
#endif // SHOW_CUSTOM_BOOTSCREEN
|
||||||
|
|
||||||
// Two-part needed to display all info
|
// Two-part needed to display all info
|
||||||
constexpr bool two_part = ((LCD_PIXEL_HEIGHT) - (START_BMPHEIGHT)) < ((MENU_FONT_ASCENT) * 2);
|
constexpr bool two_part = ((LCD_PIXEL_HEIGHT) - (START_BMPHEIGHT)) < ((MENU_FONT_ASCENT) * 2);
|
||||||
|
constexpr uint8_t bootscreen_pages = 1 + two_part;
|
||||||
|
|
||||||
// Draw the static Marlin bootscreen from a u8g loop
|
// Draw the static Marlin bootscreen from a u8g loop
|
||||||
// or the animated boot screen within its own u8g loop
|
// or the animated boot screen within its own u8g loop
|
||||||
@ -225,17 +226,16 @@ bool MarlinUI::detected() { return true; }
|
|||||||
constexpr millis_t frame_time = MARLIN_BOOTSCREEN_FRAME_TIME;
|
constexpr millis_t frame_time = MARLIN_BOOTSCREEN_FRAME_TIME;
|
||||||
LOOP_L_N(f, COUNT(marlin_bootscreen_animation)) {
|
LOOP_L_N(f, COUNT(marlin_bootscreen_animation)) {
|
||||||
draw_bootscreen_bmp((uint8_t*)pgm_read_ptr(&marlin_bootscreen_animation[f]));
|
draw_bootscreen_bmp((uint8_t*)pgm_read_ptr(&marlin_bootscreen_animation[f]));
|
||||||
if (frame_time) safe_delay(frame_time);
|
if (frame_time) early_safe_delay(frame_time);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show the Marlin bootscreen, with the u8g loop and delays
|
// Show the Marlin bootscreen, with the u8g loop and delays
|
||||||
void MarlinUI::show_marlin_bootscreen() {
|
void MarlinUI::show_marlin_bootscreen() {
|
||||||
constexpr uint8_t pages = two_part ? 2 : 1;
|
for (uint8_t q = bootscreen_pages; q--;) {
|
||||||
for (uint8_t q = pages; q--;) {
|
|
||||||
draw_marlin_bootscreen(q == 0);
|
draw_marlin_bootscreen(q == 0);
|
||||||
safe_delay((BOOTSCREEN_TIMEOUT) / pages);
|
if (q) early_safe_delay((BOOTSCREEN_TIMEOUT) / bootscreen_pages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,6 +244,10 @@ bool MarlinUI::detected() { return true; }
|
|||||||
show_marlin_bootscreen();
|
show_marlin_bootscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MarlinUI::bootscreen_completion(const millis_t sofar) {
|
||||||
|
if ((BOOTSCREEN_TIMEOUT) / bootscreen_pages > sofar) safe_delay((BOOTSCREEN_TIMEOUT) / bootscreen_pages - sofar);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // SHOW_BOOTSCREEN
|
#endif // SHOW_BOOTSCREEN
|
||||||
|
|
||||||
#if ENABLED(LIGHTWEIGHT_UI)
|
#if ENABLED(LIGHTWEIGHT_UI)
|
||||||
|
@ -337,6 +337,7 @@ public:
|
|||||||
static void draw_marlin_bootscreen(const bool line2=false);
|
static void draw_marlin_bootscreen(const bool line2=false);
|
||||||
static void show_marlin_bootscreen();
|
static void show_marlin_bootscreen();
|
||||||
static void show_bootscreen();
|
static void show_bootscreen();
|
||||||
|
static void bootscreen_completion(const millis_t sofar);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
|
@ -60,6 +60,7 @@ void MarlinUI::tft_idle() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLED(SHOW_BOOTSCREEN)
|
#if ENABLED(SHOW_BOOTSCREEN)
|
||||||
|
|
||||||
void MarlinUI::show_bootscreen() {
|
void MarlinUI::show_bootscreen() {
|
||||||
tft.queue.reset();
|
tft.queue.reset();
|
||||||
|
|
||||||
@ -81,9 +82,13 @@ void MarlinUI::tft_idle() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
tft.queue.sync();
|
tft.queue.sync();
|
||||||
safe_delay(BOOTSCREEN_TIMEOUT);
|
}
|
||||||
|
|
||||||
|
void MarlinUI::bootscreen_completion(const millis_t sofar) {
|
||||||
|
if ((BOOTSCREEN_TIMEOUT) > sofar) safe_delay((BOOTSCREEN_TIMEOUT) - sofar);
|
||||||
clear_lcd();
|
clear_lcd();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void MarlinUI::draw_kill_screen() {
|
void MarlinUI::draw_kill_screen() {
|
||||||
|
@ -60,6 +60,7 @@ void MarlinUI::tft_idle() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLED(SHOW_BOOTSCREEN)
|
#if ENABLED(SHOW_BOOTSCREEN)
|
||||||
|
|
||||||
void MarlinUI::show_bootscreen() {
|
void MarlinUI::show_bootscreen() {
|
||||||
tft.queue.reset();
|
tft.queue.reset();
|
||||||
|
|
||||||
@ -81,9 +82,13 @@ void MarlinUI::tft_idle() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
tft.queue.sync();
|
tft.queue.sync();
|
||||||
safe_delay(BOOTSCREEN_TIMEOUT);
|
}
|
||||||
|
|
||||||
|
void MarlinUI::bootscreen_completion(const millis_t sofar) {
|
||||||
|
if ((BOOTSCREEN_TIMEOUT) > sofar) safe_delay((BOOTSCREEN_TIMEOUT) - sofar);
|
||||||
clear_lcd();
|
clear_lcd();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void MarlinUI::draw_kill_screen() {
|
void MarlinUI::draw_kill_screen() {
|
||||||
|
Loading…
Reference in New Issue
Block a user