#include #include #include "config.h" #include "settings.h" #include "wifi_manager.h" #include "power_manager.h" #include "button_handler.h" SettingsManager settingsManager; WiFiManager wifiManager; PowerManager powerManager; ButtonHandler buttonHandler; void setup() { auto cfg = M5.config(); M5.begin(cfg); Serial.begin(115200); Serial.println("[main] Immich Frame booting..."); powerManager.begin(); settingsManager.begin(); wifiManager.begin(settingsManager); buttonHandler.begin(powerManager, settingsManager); Serial.println("[main] Boot complete"); } void loop() { M5.update(); powerManager.updateBatteryLED(); ButtonEvent event = buttonHandler.poll(); switch (event) { case ButtonEvent::NextPhoto: Serial.println("[main] → Next photo requested"); break; case ButtonEvent::RandomPhoto: Serial.println("[main] → Random photo requested"); break; case ButtonEvent::PlayPause: Serial.println("[main] → Play/Pause toggled"); break; case ButtonEvent::DeepSleep: case ButtonEvent::FactoryReset: break; // Handled internally case ButtonEvent::None: break; default: { ButtonEvent unreachable = event; (void)unreachable; break; } } delay(10); // 100Hz poll rate for responsive buttons }