Add auto-sleep timeout setting and handle it in loop
Incremented settings count, added autoSleepMinutes to CrossPointSettings, updated save/load functions, and integrated auto-sleep logic based on the new setting.
This commit is contained in:
@@ -12,7 +12,7 @@ CrossPointSettings CrossPointSettings::instance;
|
||||
namespace {
|
||||
constexpr uint8_t SETTINGS_FILE_VERSION = 1;
|
||||
// Increment this when adding new persisted settings fields
|
||||
constexpr uint8_t SETTINGS_COUNT = 12;
|
||||
constexpr uint8_t SETTINGS_COUNT = 13;
|
||||
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
|
||||
} // namespace
|
||||
|
||||
@@ -39,6 +39,7 @@ bool CrossPointSettings::saveToFile() const {
|
||||
serialization::writePod(outputFile, lineSpacing);
|
||||
serialization::writePod(outputFile, bluetoothEnabled);
|
||||
serialization::writePod(outputFile, useCoverArtPicker);
|
||||
serialization::writePod(outputFile, autoSleepMinutes);
|
||||
outputFile.close();
|
||||
|
||||
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
|
||||
@@ -89,6 +90,8 @@ bool CrossPointSettings::loadFromFile() {
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
serialization::readPod(inputFile, useCoverArtPicker);
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
serialization::readPod(inputFile, autoSleepMinutes);
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
} while (false);
|
||||
|
||||
inputFile.close();
|
||||
|
||||
@@ -66,6 +66,8 @@ class CrossPointSettings {
|
||||
uint8_t bluetoothEnabled = 0;
|
||||
// File browser settings
|
||||
uint8_t useCoverArtPicker = 0;
|
||||
// Auto-sleep timeout (enum index: 0=5min, 1=10min, 2=15min, 3=20min, 4=30min, 5=60min, 6=Never)
|
||||
uint8_t autoSleepMinutes = 1; // Default to 10 minutes
|
||||
|
||||
~CrossPointSettings() = default;
|
||||
|
||||
@@ -74,6 +76,19 @@ class CrossPointSettings {
|
||||
|
||||
uint16_t getPowerButtonDuration() const { return shortPwrBtn ? 10 : 400; }
|
||||
int getReaderFontId() const;
|
||||
unsigned long getAutoSleepTimeoutMs() const {
|
||||
// Map enum index to milliseconds: 0=5min, 1=10min, 2=15min, 3=20min, 4=30min, 5=60min, 6=Never(0)
|
||||
constexpr unsigned long timeouts[] = {
|
||||
5UL * 60UL * 1000UL, // 0: 5 minutes
|
||||
10UL * 60UL * 1000UL, // 1: 10 minutes (default)
|
||||
15UL * 60UL * 1000UL, // 2: 15 minutes
|
||||
20UL * 60UL * 1000UL, // 3: 20 minutes
|
||||
30UL * 60UL * 1000UL, // 4: 30 minutes
|
||||
60UL * 60UL * 1000UL, // 5: 60 minutes
|
||||
0UL // 6: Never (disabled)
|
||||
};
|
||||
return (autoSleepMinutes < 7) ? timeouts[autoSleepMinutes] : timeouts[1];
|
||||
}
|
||||
|
||||
bool saveToFile() const;
|
||||
bool loadFromFile();
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
// Define the static settings list
|
||||
namespace {
|
||||
constexpr int settingsCount = 13;
|
||||
constexpr int settingsCount = 14;
|
||||
const SettingInfo settingsList[settingsCount] = {
|
||||
// Should match with SLEEP_SCREEN_MODE
|
||||
{"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}},
|
||||
@@ -35,6 +35,10 @@ const SettingInfo settingsList[settingsCount] = {
|
||||
{"Reader Font Size", SettingType::ENUM, &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}},
|
||||
{"Reader Line Spacing", SettingType::ENUM, &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}},
|
||||
{"Cover Art Picker", SettingType::TOGGLE, &CrossPointSettings::useCoverArtPicker, {}},
|
||||
{"Auto Sleep Timeout",
|
||||
SettingType::ENUM,
|
||||
&CrossPointSettings::autoSleepMinutes,
|
||||
{"5 min", "10 min", "15 min", "20 min", "30 min", "60 min", "Never"}},
|
||||
{"Bluetooth", SettingType::TOGGLE, &CrossPointSettings::bluetoothEnabled, {}},
|
||||
{"Check for updates", SettingType::ACTION, nullptr, {}},
|
||||
};
|
||||
|
||||
@@ -127,8 +127,6 @@ EpdFont ui12RegularFont(&ubuntu_12_regular);
|
||||
EpdFont ui12BoldFont(&ubuntu_12_bold);
|
||||
EpdFontFamily ui12FontFamily(&ui12RegularFont, &ui12BoldFont);
|
||||
|
||||
// Auto-sleep timeout (10 minutes of inactivity)
|
||||
constexpr unsigned long AUTO_SLEEP_TIMEOUT_MS = 10 * 60 * 1000;
|
||||
// measurement of power button press duration calibration value
|
||||
unsigned long t1 = 0;
|
||||
unsigned long t2 = 0;
|
||||
@@ -330,8 +328,10 @@ void loop() {
|
||||
lastActivityTime = millis(); // Reset inactivity timer
|
||||
}
|
||||
|
||||
if (millis() - lastActivityTime >= AUTO_SLEEP_TIMEOUT_MS) {
|
||||
Serial.printf("[%lu] [SLP] Auto-sleep triggered after %lu ms of inactivity\n", millis(), AUTO_SLEEP_TIMEOUT_MS);
|
||||
// Check auto-sleep timeout (if enabled - 0 means never sleep)
|
||||
const unsigned long autoSleepTimeout = SETTINGS.getAutoSleepTimeoutMs();
|
||||
if (autoSleepTimeout > 0 && millis() - lastActivityTime >= autoSleepTimeout) {
|
||||
Serial.printf("[%lu] [SLP] Auto-sleep triggered after %lu ms of inactivity\n", millis(), autoSleepTimeout);
|
||||
enterDeepSleep();
|
||||
// This should never be hit as `enterDeepSleep` calls esp_deep_sleep_start
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user