feat: add sleep screen selection

This commit is contained in:
dpoulter 2026-02-01 09:55:00 +02:00
parent c3ce6e11da
commit da142c362e
2 changed files with 71 additions and 38 deletions

View File

@ -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) { const char* CrossPointSettings::getRefreshFrequencyString(uint8_t value) {
static const char* options[] = {"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}; if (value < REFRESH_FREQUENCY_COUNT) {
static constexpr size_t count = sizeof(options) / sizeof(options[0]); return REFRESH_FREQUENCY_OPTIONS[value];
if (value < count) {
return options[value];
} }
return options[REFRESH_15]; // Default return REFRESH_FREQUENCY_OPTIONS[REFRESH_15];
} }
size_t CrossPointSettings::getRefreshFrequencyCount() { size_t CrossPointSettings::getRefreshFrequencyCount() {
static const char* options[] = {"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}; return REFRESH_FREQUENCY_COUNT;
return sizeof(options) / sizeof(options[0]);
} }
const char* CrossPointSettings::getSleepScreenString(uint8_t value) { const char* CrossPointSettings::getSleepScreenString(uint8_t value) {
static const char* options[] = {"Dark", "Light", "Custom", "Cover", "None"}; if (value < SLEEP_SCREEN_MODE_COUNT) {
static constexpr size_t count = sizeof(options) / sizeof(options[0]); return SLEEP_SCREEN_OPTIONS[value];
if (value < count) {
return options[value];
} }
return options[DARK]; // Default return SLEEP_SCREEN_OPTIONS[DARK];
} }
size_t CrossPointSettings::getSleepScreenCount() { size_t CrossPointSettings::getSleepScreenCount() {
static const char* options[] = {"Dark", "Light", "Custom", "Cover", "None"}; return SLEEP_SCREEN_MODE_COUNT;
return sizeof(options) / sizeof(options[0]);
} }
const char* CrossPointSettings::getSleepTimeoutString(uint8_t value) { const char* CrossPointSettings::getSleepTimeoutString(uint8_t value) {
static const char* options[] = {"1 min", "5 min", "10 min", "15 min", "30 min"}; if (value < SLEEP_TIMEOUT_COUNT) {
static constexpr size_t count = sizeof(options) / sizeof(options[0]); return SLEEP_TIMEOUT_OPTIONS[value];
if (value < count) {
return options[value];
} }
return options[SLEEP_10_MIN]; // Default return SLEEP_TIMEOUT_OPTIONS[SLEEP_10_MIN];
} }
size_t CrossPointSettings::getSleepTimeoutCount() { size_t CrossPointSettings::getSleepTimeoutCount() {
static const char* options[] = {"1 min", "5 min", "10 min", "15 min", "30 min"}; return SLEEP_TIMEOUT_COUNT;
return sizeof(options) / sizeof(options[0]);
} }

View File

@ -15,7 +15,19 @@ class CrossPointSettings {
CrossPointSettings(const CrossPointSettings&) = delete; CrossPointSettings(const CrossPointSettings&) = delete;
CrossPointSettings& operator=(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_MODE { FIT = 0, CROP = 1, SLEEP_SCREEN_COVER_MODE_COUNT };
enum SLEEP_SCREEN_COVER_FILTER { enum SLEEP_SCREEN_COVER_FILTER {
NO_FILTER = 0, NO_FILTER = 0,
@ -71,24 +83,34 @@ class CrossPointSettings {
PARAGRAPH_ALIGNMENT_COUNT PARAGRAPH_ALIGNMENT_COUNT
}; };
// Auto-sleep timeout options (in minutes) // E-ink refresh frequency (pages between full refreshes)
enum SLEEP_TIMEOUT { #define REFRESH_DATA \
SLEEP_1_MIN = 0, X(REFRESH_1, 0, "1 page") \
SLEEP_5_MIN = 1, X(REFRESH_5, 1, "5 pages") \
SLEEP_10_MIN = 2, X(REFRESH_10, 2, "10 pages") \
SLEEP_15_MIN = 3, X(REFRESH_15, 3, "15 pages") \
SLEEP_30_MIN = 4, X(REFRESH_30, 4, "30 pages")
SLEEP_TIMEOUT_COUNT
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) // Auto-sleep timeout options (in minutes)
enum REFRESH_FREQUENCY { #define TIMEOUT_DATA \
REFRESH_1 = 0, X(SLEEP_1_MIN, 0, "1 min") \
REFRESH_5 = 1, X(SLEEP_5_MIN, 1, "5 min") \
REFRESH_10 = 2, X(SLEEP_10_MIN, 2, "10 min") \
REFRESH_15 = 3, X(SLEEP_15_MIN, 3, "15 min") \
REFRESH_30 = 4, X(SLEEP_30_MIN, 4, "30 min")
REFRESH_FREQUENCY_COUNT
enum SLEEP_TIMEOUT {
#define X(name, val, str) name = val,
TIMEOUT_DATA
#undef X
SLEEP_TIMEOUT_COUNT
}; };
// Short power button press actions // Short power button press actions