Speedup boot by not waiting for Serial

This commit is contained in:
Dave Allie 2025-12-05 17:47:23 +11:00
parent ddec7f78dd
commit 85502b417e
No known key found for this signature in database
GPG Key ID: F2FDDB3AD8D0276F
3 changed files with 23 additions and 25 deletions

View File

@ -29,15 +29,15 @@ Button getPressedButton() {
return NONE; return NONE;
} }
Input getInput(const bool skipWait) { Input getInput(const long maxHoldMs) {
const Button button = getPressedButton(); const Button button = getPressedButton();
if (button == NONE) return {NONE, 0}; if (button == NONE) return {NONE, 0};
if (skipWait) {
return {button, 0};
}
const auto start = millis(); const auto start = millis();
while (getPressedButton() == button) delay(50); unsigned long held = 0;
return {button, millis() - start}; while (getPressedButton() == button && (maxHoldMs < 0 || held < maxHoldMs)) {
delay(50);
held = millis() - start;
}
return {button, held};
} }

View File

@ -25,4 +25,4 @@ struct Input {
void setupInputPinModes(); void setupInputPinModes();
Button getPressedButton(); Button getPressedButton();
Input getInput(bool skipWait = false); Input getInput(long maxHoldMs = -1);

View File

@ -67,10 +67,10 @@ void enterNewScreen(Screen* screen) {
void verifyWakeupLongPress() { void verifyWakeupLongPress() {
// Give the user up to 1000ms to start holding the power button, and must hold for POWER_BUTTON_WAKEUP_MS // Give the user up to 1000ms to start holding the power button, and must hold for POWER_BUTTON_WAKEUP_MS
const auto start = millis(); const auto start = millis();
auto input = getInput(); auto input = getInput(POWER_BUTTON_WAKEUP_MS);
while (input.button != POWER && millis() - start < 1000) { while (input.button != POWER && millis() - start < 1000) {
delay(50); delay(50);
input = getInput(); input = getInput(POWER_BUTTON_WAKEUP_MS);
} }
if (input.button != POWER || input.pressTime < POWER_BUTTON_WAKEUP_MS) { if (input.button != POWER || input.pressTime < POWER_BUTTON_WAKEUP_MS) {
@ -81,6 +81,12 @@ void verifyWakeupLongPress() {
} }
} }
void waitForNoButton() {
while (getInput().button != NONE) {
delay(50);
}
}
// Enter deep sleep mode // Enter deep sleep mode
void enterDeepSleep() { void enterDeepSleep() {
enterNewScreen(new FullScreenMessageScreen(renderer, "Sleeping", true, false, true)); enterNewScreen(new FullScreenMessageScreen(renderer, "Sleeping", true, false, true));
@ -97,20 +103,6 @@ void enterDeepSleep() {
esp_deep_sleep_start(); esp_deep_sleep_start();
} }
void setupSerial() {
Serial.begin(115200);
// Wait for serial monitor
const unsigned long start = millis();
while (!Serial && (millis() - start) < 3000) {
delay(10);
}
if (Serial) {
// delay for monitor to start reading
delay(1000);
}
}
void onGoHome(); void onGoHome();
void onSelectEpubFile(const std::string& path) { void onSelectEpubFile(const std::string& path) {
enterNewScreen(new FullScreenMessageScreen(renderer, "Loading...")); enterNewScreen(new FullScreenMessageScreen(renderer, "Loading..."));
@ -129,7 +121,8 @@ void onGoHome() { enterNewScreen(new FileSelectionScreen(renderer, onSelectEpubF
void setup() { void setup() {
setupInputPinModes(); setupInputPinModes();
verifyWakeupLongPress(); verifyWakeupLongPress();
setupSerial(); Serial.begin(115200);
Serial.println("Booting...");
// Initialize pins // Initialize pins
pinMode(BAT_GPIO0, INPUT); pinMode(BAT_GPIO0, INPUT);
@ -154,11 +147,16 @@ void setup() {
Epub* epub = loadEpub(appState->openEpubPath); Epub* epub = loadEpub(appState->openEpubPath);
if (epub) { if (epub) {
enterNewScreen(new EpubReaderScreen(renderer, epub, onGoHome)); enterNewScreen(new EpubReaderScreen(renderer, epub, onGoHome));
// Ensure we're not still holding the power button before leaving setup
waitForNoButton();
return; return;
} }
} }
enterNewScreen(new FileSelectionScreen(renderer, onSelectEpubFile)); enterNewScreen(new FileSelectionScreen(renderer, onSelectEpubFile));
// Ensure we're not still holding the power button before leaving setup
waitForNoButton();
} }
void loop() { void loop() {