From 3b15b0aeefb6c846d04c8066bac57293b59da3c3 Mon Sep 17 00:00:00 2001 From: John Poole Date: Mon, 16 Feb 2026 18:19:16 -0800 Subject: [PATCH] Pickup stragglers --- .../lib/startup_sd/StartupSdManager.cpp | 5 +++++ .../07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.h | 3 +++ exercises/README.md | 2 ++ 3 files changed, 10 insertions(+) diff --git a/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.cpp b/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.cpp index 5cc77ed..a77f92e 100644 --- a/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.cpp +++ b/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.cpp @@ -71,6 +71,11 @@ void StartupSdManager::update() { bool mounted = mountPreferred(false); if (!mounted && (uint32_t)(now - lastFullScanMs_) >= cfg_.fullScanIntervalMs) { lastFullScanMs_ = now; + if (cfg_.recoveryRailCycleOnFullScan) { + logf("Watcher: recovery rail cycle before full scan"); + cycleSdRail(cfg_.recoveryRailOffMs, cfg_.recoveryRailOnSettleMs); + delay(150); + } logf("Watcher: preferred probe failed, running full scan"); mounted = mountCardFullScan(); } diff --git a/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.h b/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.h index 095f857..be9ef27 100644 --- a/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.h +++ b/exercises/07_SD_Startup_Watcher/lib/startup_sd/StartupSdManager.h @@ -23,6 +23,9 @@ using SdStatusCallback = void (*)(SdEvent event, const char* message); struct SdWatcherConfig { bool enableSdRailCycle = true; bool enablePinDumps = true; + bool recoveryRailCycleOnFullScan = true; + uint32_t recoveryRailOffMs = 250; + uint32_t recoveryRailOnSettleMs = 700; uint32_t startupWarmupMs = 1500; uint32_t pollIntervalAbsentMs = 1000; uint32_t pollIntervalMountedMs = 2000; diff --git a/exercises/README.md b/exercises/README.md index a6b703a..2f7f118 100644 --- a/exercises/README.md +++ b/exercises/README.md @@ -45,6 +45,8 @@ Exercise 06: RTC check (PCF8563) read/set and persistence validation Exercise 07: SD startup watcher library harness with hot-insert detection +Exercise 08: SystemStartup package scaffold (shared begin/update API) + Each exercise is self-contained: its own platformio.ini