From f47fe2212c9c3d3480bf7a21bb4ea5af751c0027 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Thu, 22 Jan 2026 12:47:17 +0300 Subject: [PATCH] Add Power Button Hold Duration functionality --- src/CrossPointSettings.cpp | 5 ++++- src/CrossPointSettings.h | 21 +++++++++++++++++++- src/activities/settings/SettingsActivity.cpp | 6 ++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index f5e8ded5..566d7c11 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -14,7 +14,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 = 20; +constexpr uint8_t SETTINGS_COUNT = 21; constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; } // namespace @@ -32,6 +32,7 @@ bool CrossPointSettings::saveToFile() const { serialization::writePod(outputFile, sleepScreen); serialization::writePod(outputFile, extraParagraphSpacing); serialization::writePod(outputFile, shortPwrBtn); + serialization::writePod(outputFile, powerButtonHoldDuration); serialization::writePod(outputFile, statusBar); serialization::writePod(outputFile, orientation); serialization::writePod(outputFile, frontButtonLayout); @@ -81,6 +82,8 @@ bool CrossPointSettings::loadFromFile() { if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, shortPwrBtn); if (++settingsRead >= fileSettingsCount) break; + serialization::readPod(inputFile, powerButtonHoldDuration); + if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, statusBar); if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, orientation); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 8ce32a2c..66a553f1 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -55,6 +55,9 @@ class CrossPointSettings { // Short power button press actions enum SHORT_PWRBTN { IGNORE = 0, SLEEP = 1, PAGE_TURN = 2 }; + // Power button hold duration options + enum POWER_BTN_HOLD_DURATION { PB_FAST = 0, PB_NORMAL = 1, PB_SLOW = 2, PB_XSLOW = 3 }; + // Hide battery percentage enum HIDE_BATTERY_PERCENTAGE { HIDE_NEVER = 0, HIDE_READER = 1, HIDE_ALWAYS = 2 }; @@ -69,6 +72,8 @@ class CrossPointSettings { uint8_t textAntiAliasing = 1; // Short power button click behaviour uint8_t shortPwrBtn = IGNORE; + // Power button hold duration + uint8_t powerButtonHoldDuration = PB_NORMAL; // EPUB reading orientation settings // 0 = portrait (default), 1 = landscape clockwise, 2 = inverted, 3 = landscape counter-clockwise uint8_t orientation = PORTRAIT; @@ -101,7 +106,21 @@ class CrossPointSettings { static CrossPointSettings& getInstance() { return instance; } uint16_t getPowerButtonDuration() const { - return (shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::SLEEP) ? 10 : 400; + if (shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::SLEEP) { + return 10; + } else { + switch (powerButtonHoldDuration) { + case POWER_BTN_HOLD_DURATION::PB_FAST: + return 400; + case POWER_BTN_HOLD_DURATION::PB_NORMAL: + default: + return 600; + case POWER_BTN_HOLD_DURATION::PB_SLOW: + return 800; + case POWER_BTN_HOLD_DURATION::PB_XSLOW: + return 1000; + } + } } int getReaderFontId() const; diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 943fdb4c..01bc0c17 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -35,14 +35,16 @@ const SettingInfo readerSettings[readerSettingsCount] = { SettingInfo::Toggle("Extra Paragraph Spacing", &CrossPointSettings::extraParagraphSpacing), SettingInfo::Toggle("Text Anti-Aliasing", &CrossPointSettings::textAntiAliasing)}; -constexpr int controlsSettingsCount = 4; +constexpr int controlsSettingsCount = 5; const SettingInfo controlsSettings[controlsSettingsCount] = { SettingInfo::Enum("Front Button Layout", &CrossPointSettings::frontButtonLayout, {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}), SettingInfo::Enum("Side Button Layout (reader)", &CrossPointSettings::sideButtonLayout, {"Prev, Next", "Next, Prev"}), SettingInfo::Toggle("Long-press Chapter Skip", &CrossPointSettings::longPressChapterSkip), - SettingInfo::Enum("Short Power Button Click", &CrossPointSettings::shortPwrBtn, {"Ignore", "Sleep", "Page Turn"})}; + SettingInfo::Enum("Short Power Button Click", &CrossPointSettings::shortPwrBtn, {"Ignore", "Sleep", "Page Turn"}), + SettingInfo::Enum("Power Button Hold Duration", &CrossPointSettings::powerButtonHoldDuration, + {"Fast", "Normal", "Slow", "X Slow"})}; constexpr int systemSettingsCount = 5; const SettingInfo systemSettings[systemSettingsCount] = {