Merge pull request #46 from pmow/feature/eink-ui-scale

GDEQ0426T82 4.26" panel (#42), bulk SPI writes (#43), Text size and Icon size for big panels

# Conflicts:
#	examples/companion_radio/DataStore.cpp
#	examples/companion_radio/NodePrefs.h
This commit is contained in:
Jakub
2026-10-11 10:41:29 +02:00
14 changed files with 346 additions and 23 deletions
@@ -24,6 +24,7 @@ static const Key KEYS[] = {
K("contacts.expiry", contact_expiry_idx), K("contacts.fav.first", fav_sort), K("dm.resend", dm_resend_count),
K("display.brightness", display_brightness), K("display.off", auto_off_secs), K("display.wake", msg_wake),
K("display.alert", msg_alert), K("lock", auto_lock), K("lock.clock", lock_compact),
K("display.text.size", ui_text_scale), K("display.icon.size", ui_icon_scale),
K("batt.display", batt_display_mode), K("batt.shutdown", low_batt_mv), K("gps.interval", gps_interval),
K("clock.12h", clock_12h), K("clock.seconds", clock_hide_seconds), K("units.imperial", units_imperial),
K("sound.volume", buzzer_volume), K("quiet", quiet_hours), K("quiet.from", quiet_from), K("quiet.until", quiet_to),
@@ -144,6 +144,15 @@ static void optMsgAlert(uint8_t v, char* b, int n, const NodePrefs&) {
static const char* const L[] = { "Normal", "Compact", "Off" };
snprintf(b, n, "%s", L[v < 3 ? v : 0]);
}
#ifdef EINK_FONT_SCALE
static const int32_t TEXT_SCALE[] = { 1, 2, 3, 4, 5 };
static void optTextScale(uint8_t v, char* b, int n, const NodePrefs&) { snprintf(b, n, "%ldx", (long)TEXT_SCALE[v]); }
#endif
#ifdef STATUS_ICON_SCALE
static void optIconScale(uint8_t v, char* b, int n, const NodePrefs&) {
if (v == 0) snprintf(b, n, "Auto"); else snprintf(b, n, "%ux", (unsigned)v);
}
#endif
static void optLockLook(uint8_t v, char* b, int n, const NodePrefs&) { snprintf(b, n, "%s", v ? "Compact" : "Big"); }
static void optExpiry(uint8_t v, char* b, int n, const NodePrefs&) {
snprintf(b, n, "%s", NodePrefs::contactExpiryLabel(v));
@@ -247,6 +256,15 @@ static const Setting ALL[] = {
SW("Lock screen", "Slide to unlock after sleep", SEC_DISPLAY, auto_lock, nullptr),
IDX("Lock clock", "Big, or compact with the clock fields", SEC_DISPLAY, lock_compact, 2, optLockLook, nullptr),
IDX("Battery display", "In the status bar", SEC_DISPLAY, batt_display_mode, 3, optBattDisplay, nullptr),
// Only the builds that ask for them (big e-ink panels): each screen elsewhere
// is laid out for one cell size.
#ifdef EINK_FONT_SCALE
MAP("Text size", "Bigger letters on a big panel", SEC_DISPLAY, ui_text_scale, TEXT_SCALE, optTextScale, applyDisplay),
#endif
#ifdef STATUS_ICON_SCALE
IDX("Icon size", "Home's status icons", SEC_DISPLAY, ui_icon_scale, NodePrefs::UI_ICON_SCALE_MAX + 1,
optIconScale, applyDisplay),
#endif
MAP("Battery shutdown", "Power off below this voltage", SEC_POWER, low_batt_mv, LOW_BATT, optLowBatt, nullptr),
MAP("GPS power saving", "Sleep between fixes", SEC_POWER, gps_interval, GPS_DUTY, optGpsDuty, applyGpsDuty),