2026-08-03 10:46:23 -04:00
|
|
|
#include <Arduino.h>
|
|
|
|
|
#include <M5Unified.h>
|
|
|
|
|
#include "config.h"
|
2026-08-03 10:49:13 -04:00
|
|
|
#include "settings.h"
|
2026-08-03 10:49:58 -04:00
|
|
|
#include "wifi_manager.h"
|
2026-08-03 10:50:32 -04:00
|
|
|
#include "power_manager.h"
|
2026-08-03 10:51:29 -04:00
|
|
|
#include "button_handler.h"
|
2026-08-03 10:49:13 -04:00
|
|
|
|
|
|
|
|
SettingsManager settingsManager;
|
2026-08-03 10:49:58 -04:00
|
|
|
WiFiManager wifiManager;
|
2026-08-03 10:50:32 -04:00
|
|
|
PowerManager powerManager;
|
2026-08-03 10:51:29 -04:00
|
|
|
ButtonHandler buttonHandler;
|
2026-08-03 10:46:23 -04:00
|
|
|
|
|
|
|
|
void setup() {
|
|
|
|
|
auto cfg = M5.config();
|
|
|
|
|
M5.begin(cfg);
|
|
|
|
|
|
|
|
|
|
Serial.begin(115200);
|
|
|
|
|
Serial.println("[main] Immich Frame booting...");
|
|
|
|
|
|
2026-08-03 10:50:32 -04:00
|
|
|
powerManager.begin();
|
2026-08-03 10:49:13 -04:00
|
|
|
settingsManager.begin();
|
2026-08-03 10:49:58 -04:00
|
|
|
wifiManager.begin(settingsManager);
|
2026-08-03 10:51:29 -04:00
|
|
|
buttonHandler.begin(powerManager, settingsManager);
|
2026-08-03 10:49:13 -04:00
|
|
|
|
|
|
|
|
Serial.println("[main] Boot complete");
|
2026-08-03 10:46:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void loop() {
|
|
|
|
|
M5.update();
|
2026-08-03 10:50:32 -04:00
|
|
|
powerManager.updateBatteryLED();
|
2026-08-03 10:51:29 -04:00
|
|
|
|
|
|
|
|
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
|
2026-08-03 10:46:23 -04:00
|
|
|
}
|