From da142c362e72f5473cc5b339e9165378488992f5 Mon Sep 17 00:00:00 2001 From: dpoulter Date: Sun, 1 Feb 2026 09:55:00 +0200 Subject: [PATCH] feat: add sleep screen selection --- src/CrossPointSettings.cpp | 53 ++++++++++++++++++++++-------------- src/CrossPointSettings.h | 56 ++++++++++++++++++++++++++------------ 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index ba558057..8914384b 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -272,44 +272,55 @@ int CrossPointSettings::getReaderFontId() const { } } +namespace { +const char* const REFRESH_FREQUENCY_OPTIONS[] = { + #define X(name, val, str) str, + REFRESH_DATA + #undef X +}; + +const char* const SLEEP_SCREEN_OPTIONS[] = { + #define X(name, val, str) str, + SLEEP_SCREEN_DATA + #undef X +}; + +const char* const SLEEP_TIMEOUT_OPTIONS[] = { + #define X(name, val, str) str, + TIMEOUT_DATA + #undef X +}; +} // namespace + const char* CrossPointSettings::getRefreshFrequencyString(uint8_t value) { - static const char* options[] = {"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}; - static constexpr size_t count = sizeof(options) / sizeof(options[0]); - if (value < count) { - return options[value]; + if (value < REFRESH_FREQUENCY_COUNT) { + return REFRESH_FREQUENCY_OPTIONS[value]; } - return options[REFRESH_15]; // Default + return REFRESH_FREQUENCY_OPTIONS[REFRESH_15]; } size_t CrossPointSettings::getRefreshFrequencyCount() { - static const char* options[] = {"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}; - return sizeof(options) / sizeof(options[0]); + return REFRESH_FREQUENCY_COUNT; } const char* CrossPointSettings::getSleepScreenString(uint8_t value) { - static const char* options[] = {"Dark", "Light", "Custom", "Cover", "None"}; - static constexpr size_t count = sizeof(options) / sizeof(options[0]); - if (value < count) { - return options[value]; + if (value < SLEEP_SCREEN_MODE_COUNT) { + return SLEEP_SCREEN_OPTIONS[value]; } - return options[DARK]; // Default + return SLEEP_SCREEN_OPTIONS[DARK]; } size_t CrossPointSettings::getSleepScreenCount() { - static const char* options[] = {"Dark", "Light", "Custom", "Cover", "None"}; - return sizeof(options) / sizeof(options[0]); + return SLEEP_SCREEN_MODE_COUNT; } const char* CrossPointSettings::getSleepTimeoutString(uint8_t value) { - static const char* options[] = {"1 min", "5 min", "10 min", "15 min", "30 min"}; - static constexpr size_t count = sizeof(options) / sizeof(options[0]); - if (value < count) { - return options[value]; + if (value < SLEEP_TIMEOUT_COUNT) { + return SLEEP_TIMEOUT_OPTIONS[value]; } - return options[SLEEP_10_MIN]; // Default + return SLEEP_TIMEOUT_OPTIONS[SLEEP_10_MIN]; } size_t CrossPointSettings::getSleepTimeoutCount() { - static const char* options[] = {"1 min", "5 min", "10 min", "15 min", "30 min"}; - return sizeof(options) / sizeof(options[0]); + return SLEEP_TIMEOUT_COUNT; } diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 7b66bb54..48a08931 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -15,7 +15,19 @@ class CrossPointSettings { CrossPointSettings(const CrossPointSettings&) = delete; CrossPointSettings& operator=(const CrossPointSettings&) = delete; - enum SLEEP_SCREEN_MODE { DARK = 0, LIGHT = 1, CUSTOM = 2, COVER = 3, BLANK = 4, SLEEP_SCREEN_MODE_COUNT }; + #define SLEEP_SCREEN_DATA \ + X(DARK, 0, "Dark") \ + X(LIGHT, 1, "Light") \ + X(CUSTOM, 2, "Custom") \ + X(COVER, 3, "Cover") \ + X(BLANK, 4, "None") + + enum SLEEP_SCREEN_MODE { + #define X(name, val, str) name = val, + SLEEP_SCREEN_DATA + #undef X + SLEEP_SCREEN_MODE_COUNT + }; enum SLEEP_SCREEN_COVER_MODE { FIT = 0, CROP = 1, SLEEP_SCREEN_COVER_MODE_COUNT }; enum SLEEP_SCREEN_COVER_FILTER { NO_FILTER = 0, @@ -71,24 +83,34 @@ class CrossPointSettings { PARAGRAPH_ALIGNMENT_COUNT }; - // Auto-sleep timeout options (in minutes) - enum SLEEP_TIMEOUT { - SLEEP_1_MIN = 0, - SLEEP_5_MIN = 1, - SLEEP_10_MIN = 2, - SLEEP_15_MIN = 3, - SLEEP_30_MIN = 4, - SLEEP_TIMEOUT_COUNT + // E-ink refresh frequency (pages between full refreshes) + #define REFRESH_DATA \ + X(REFRESH_1, 0, "1 page") \ + X(REFRESH_5, 1, "5 pages") \ + X(REFRESH_10, 2, "10 pages") \ + X(REFRESH_15, 3, "15 pages") \ + X(REFRESH_30, 4, "30 pages") + + enum REFRESH_FREQUENCY { + #define X(name, val, str) name = val, + REFRESH_DATA + #undef X + REFRESH_FREQUENCY_COUNT }; - // E-ink refresh frequency (pages between full refreshes) - enum REFRESH_FREQUENCY { - REFRESH_1 = 0, - REFRESH_5 = 1, - REFRESH_10 = 2, - REFRESH_15 = 3, - REFRESH_30 = 4, - REFRESH_FREQUENCY_COUNT + // Auto-sleep timeout options (in minutes) + #define TIMEOUT_DATA \ + X(SLEEP_1_MIN, 0, "1 min") \ + X(SLEEP_5_MIN, 1, "5 min") \ + X(SLEEP_10_MIN, 2, "10 min") \ + X(SLEEP_15_MIN, 3, "15 min") \ + X(SLEEP_30_MIN, 4, "30 min") + + enum SLEEP_TIMEOUT { + #define X(name, val, str) name = val, + TIMEOUT_DATA + #undef X + SLEEP_TIMEOUT_COUNT }; // Short power button press actions