@@ -7,11 +7,6 @@ constexpr ButtonEventManager::Button ButtonEventManager::ALL_BUTTONS[ButtonEvent
|
||||
|
||||
bool ButtonEventManager::hasDoubleAction(const Button button) {
|
||||
using BA = CrossPointSettings::BUTTON_ACTION;
|
||||
// Up/Down share physical pins with PageBack/PageForward via sideButtonLayout.
|
||||
// Their double-action settings must be consulted when checking the PageBack/PageForward FSMs
|
||||
// so that the disambiguation delay is applied when either role has a double action.
|
||||
const bool prevNext = static_cast<CrossPointSettings::SIDE_BUTTON_LAYOUT>(SETTINGS.sideButtonLayout) ==
|
||||
CrossPointSettings::SIDE_BUTTON_LAYOUT::PREV_NEXT;
|
||||
switch (button) {
|
||||
case Button::Back:
|
||||
return SETTINGS.btnDoubleBack != BA::BTN_DEFAULT;
|
||||
@@ -21,17 +16,10 @@ bool ButtonEventManager::hasDoubleAction(const Button button) {
|
||||
return SETTINGS.btnDoubleLeft != BA::BTN_DEFAULT;
|
||||
case Button::Right:
|
||||
return SETTINGS.btnDoubleRight != BA::BTN_DEFAULT;
|
||||
case Button::Up:
|
||||
case Button::Down:
|
||||
return false; // Up/Down have no dedicated FSM; handled via PageBack/PageForward
|
||||
case Button::PageBack:
|
||||
// PREV_NEXT: BTN_UP = PageBack; NEXT_PREV: BTN_DOWN = PageBack
|
||||
return SETTINGS.btnDoublePageBack != BA::BTN_DEFAULT ||
|
||||
(prevNext ? SETTINGS.btnDoubleUp : SETTINGS.btnDoubleDown) != BA::BTN_DEFAULT;
|
||||
return SETTINGS.btnDoublePageBack != BA::BTN_DEFAULT;
|
||||
case Button::PageForward:
|
||||
// PREV_NEXT: BTN_DOWN = PageForward; NEXT_PREV: BTN_UP = PageForward
|
||||
return SETTINGS.btnDoublePageForward != BA::BTN_DEFAULT ||
|
||||
(prevNext ? SETTINGS.btnDoubleDown : SETTINGS.btnDoubleUp) != BA::BTN_DEFAULT;
|
||||
return SETTINGS.btnDoublePageForward != BA::BTN_DEFAULT;
|
||||
case Button::Power:
|
||||
return SETTINGS.btnDoublePower != BA::BTN_DEFAULT;
|
||||
}
|
||||
|
||||
@@ -54,10 +54,6 @@ class ButtonEventManager {
|
||||
static bool hasDoubleAction(Button button);
|
||||
|
||||
private:
|
||||
// Up and Down alias the same physical GPIO pins as PageBack/PageForward (via sideButtonLayout).
|
||||
// Running separate FSMs for both would double-fire on every side button press.
|
||||
// Up/Down are therefore excluded here; their configurable actions are resolved in main.cpp
|
||||
// by treating a PageBack/PageForward event as the canonical side-button event.
|
||||
static constexpr int NUM_BUTTONS = 7;
|
||||
static constexpr Button ALL_BUTTONS[NUM_BUTTONS] = {
|
||||
Button::Back, Button::Confirm, Button::Left, Button::Right, Button::PageBack, Button::PageForward, Button::Power,
|
||||
|
||||
@@ -151,7 +151,10 @@ bool CrossPointSettings::loadFromBinaryFile() {
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
readAndValidate(inputFile, frontButtonLayout, FRONT_BUTTON_LAYOUT_COUNT);
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
readAndValidate(inputFile, sideButtonLayout, SIDE_BUTTON_LAYOUT_COUNT);
|
||||
{
|
||||
uint8_t ignored;
|
||||
serialization::readPod(inputFile, ignored);
|
||||
} // legacy sideButtonLayout field
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
readAndValidate(inputFile, fontFamily, FONT_FAMILY_COUNT);
|
||||
if (++settingsRead >= fileSettingsCount) break;
|
||||
|
||||
@@ -88,11 +88,6 @@ class CrossPointSettings {
|
||||
FRONT_BUTTON_HARDWARE_COUNT
|
||||
};
|
||||
|
||||
// Side button layout options
|
||||
// Default: Previous, Next
|
||||
// Swapped: Next, Previous
|
||||
enum SIDE_BUTTON_LAYOUT { PREV_NEXT = 0, NEXT_PREV = 1, SIDE_BUTTON_LAYOUT_COUNT };
|
||||
|
||||
// Font family options
|
||||
enum FONT_FAMILY { BOOKERLY = 0, NOTOSANS = 1, OPENDYSLEXIC = 2, FONT_FAMILY_COUNT };
|
||||
// Font size options
|
||||
@@ -208,7 +203,6 @@ class CrossPointSettings {
|
||||
uint8_t orientation = PORTRAIT;
|
||||
// Button layouts (front layout retained for migration only)
|
||||
uint8_t frontButtonLayout = BACK_CONFIRM_LEFT_RIGHT;
|
||||
uint8_t sideButtonLayout = PREV_NEXT;
|
||||
// Front button remap (logical -> hardware)
|
||||
// Used by MappedInputManager to translate logical buttons into physical front buttons.
|
||||
uint8_t frontButtonBack = FRONT_HW_BACK;
|
||||
@@ -292,8 +286,6 @@ class CrossPointSettings {
|
||||
uint8_t btnShortConfirm = BTN_DEFAULT;
|
||||
uint8_t btnShortLeft = BTN_DEFAULT;
|
||||
uint8_t btnShortRight = BTN_DEFAULT;
|
||||
uint8_t btnShortUp = BTN_DEFAULT;
|
||||
uint8_t btnShortDown = BTN_DEFAULT;
|
||||
uint8_t btnShortPageBack = BTN_DEFAULT;
|
||||
uint8_t btnShortPageForward = BTN_DEFAULT;
|
||||
uint8_t btnShortPower = BTN_DEFAULT;
|
||||
@@ -303,8 +295,6 @@ class CrossPointSettings {
|
||||
uint8_t btnDoubleConfirm = BTN_DEFAULT;
|
||||
uint8_t btnDoubleLeft = BTN_DEFAULT;
|
||||
uint8_t btnDoubleRight = BTN_DEFAULT;
|
||||
uint8_t btnDoubleUp = BTN_DEFAULT;
|
||||
uint8_t btnDoubleDown = BTN_DEFAULT;
|
||||
uint8_t btnDoublePageBack = BTN_DEFAULT;
|
||||
uint8_t btnDoublePageForward = BTN_DEFAULT;
|
||||
uint8_t btnDoublePower = BTN_DEFAULT;
|
||||
@@ -314,8 +304,6 @@ class CrossPointSettings {
|
||||
uint8_t btnLongConfirm = BTN_DEFAULT;
|
||||
uint8_t btnLongLeft = BTN_DEFAULT;
|
||||
uint8_t btnLongRight = BTN_DEFAULT;
|
||||
uint8_t btnLongUp = BTN_DEFAULT;
|
||||
uint8_t btnLongDown = BTN_DEFAULT;
|
||||
uint8_t btnLongPageBack = BTN_DEFAULT;
|
||||
uint8_t btnLongPageForward = BTN_DEFAULT;
|
||||
uint8_t btnLongPower = BTN_DEFAULT;
|
||||
|
||||
@@ -2,55 +2,27 @@
|
||||
|
||||
#include "CrossPointSettings.h"
|
||||
|
||||
namespace {
|
||||
using ButtonIndex = uint8_t;
|
||||
|
||||
struct SideLayoutMap {
|
||||
ButtonIndex pageBack;
|
||||
ButtonIndex pageForward;
|
||||
};
|
||||
|
||||
// Order matches CrossPointSettings::SIDE_BUTTON_LAYOUT.
|
||||
constexpr SideLayoutMap kSideLayouts[] = {
|
||||
{HalGPIO::BTN_UP, HalGPIO::BTN_DOWN},
|
||||
{HalGPIO::BTN_DOWN, HalGPIO::BTN_UP},
|
||||
};
|
||||
} // namespace
|
||||
|
||||
bool MappedInputManager::mapButton(const Button button, bool (HalGPIO::*fn)(uint8_t) const) const {
|
||||
const auto sideLayout = static_cast<CrossPointSettings::SIDE_BUTTON_LAYOUT>(SETTINGS.sideButtonLayout);
|
||||
const auto& side = kSideLayouts[sideLayout];
|
||||
|
||||
switch (button) {
|
||||
case Button::Back:
|
||||
// Logical Back maps to user-configured front button.
|
||||
return (gpio.*fn)(SETTINGS.frontButtonBack);
|
||||
case Button::Confirm:
|
||||
// Logical Confirm maps to user-configured front button.
|
||||
return (gpio.*fn)(SETTINGS.frontButtonConfirm);
|
||||
case Button::Left:
|
||||
// Logical Left maps to user-configured front button.
|
||||
return (gpio.*fn)(SETTINGS.frontButtonLeft);
|
||||
case Button::Right:
|
||||
// Logical Right maps to user-configured front button.
|
||||
return (gpio.*fn)(SETTINGS.frontButtonRight);
|
||||
case Button::Up:
|
||||
// Side buttons remain fixed for Up/Down.
|
||||
return (gpio.*fn)(HalGPIO::BTN_UP);
|
||||
case Button::Down:
|
||||
// Side buttons remain fixed for Up/Down.
|
||||
return (gpio.*fn)(HalGPIO::BTN_DOWN);
|
||||
case Button::Power:
|
||||
// Power button bypasses remapping.
|
||||
return (gpio.*fn)(HalGPIO::BTN_POWER);
|
||||
case Button::PageBack:
|
||||
// Reader page navigation uses side buttons and can be swapped via settings.
|
||||
return (gpio.*fn)(side.pageBack);
|
||||
return (gpio.*fn)(HalGPIO::BTN_UP);
|
||||
case Button::PageForward:
|
||||
// Reader page navigation uses side buttons and can be swapped via settings.
|
||||
return (gpio.*fn)(side.pageForward);
|
||||
return (gpio.*fn)(HalGPIO::BTN_DOWN);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
+6
-25
@@ -131,9 +131,7 @@ inline const std::vector<SettingInfo> list = {
|
||||
.withSubcategory(StrId::STR_MENU_READER_TWEAKS),
|
||||
|
||||
// --- Controls ---
|
||||
SettingInfo::Enum(StrId::STR_SIDE_BTN_LAYOUT, &CrossPointSettings::sideButtonLayout,
|
||||
{StrId::STR_PREV_NEXT, StrId::STR_NEXT_PREV}, "sideButtonLayout", StrId::STR_CAT_CONTROLS)
|
||||
.withSubcategory(StrId::STR_MENU_BTN_PHYSICAL),
|
||||
SettingInfo::Separator(StrId::STR_MENU_BTN_PHYSICAL),
|
||||
|
||||
// --- Button Actions (short / double / long press per logical button) ---
|
||||
// All entries share the same ordered action-label list; the submenu groups them behind
|
||||
@@ -147,6 +145,7 @@ inline const std::vector<SettingInfo> list = {
|
||||
StrId::STR_BTN_ACT_PREV_SECTION, StrId::STR_BTN_ACT_EXIT_READER, StrId::STR_BTN_ACT_READER_MENU, \
|
||||
StrId::STR_BTN_ACT_KOREADER_SYNC
|
||||
|
||||
SettingInfo::Separator(StrId::STR_MENU_BTN_ACTIONS),
|
||||
// Back button: short=exit reader, double=ignore, long=go home
|
||||
SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortBack,
|
||||
{StrId::STR_BTN_DEF_EXIT_READER, BTN_ACT_OPTIONS}, "btnShortBack", StrId::STR_CAT_CONTROLS)
|
||||
@@ -162,9 +161,11 @@ inline const std::vector<SettingInfo> list = {
|
||||
{StrId::STR_BTN_DEF_READER_MENU, BTN_ACT_OPTIONS}, "btnShortConfirm", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_CONFIRM),
|
||||
SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleConfirm,
|
||||
{StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleConfirm", StrId::STR_CAT_CONTROLS),
|
||||
{StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleConfirm", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_CONFIRM),
|
||||
SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongConfirm,
|
||||
{StrId::STR_BTN_DEF_KOREADER_SYNC, BTN_ACT_OPTIONS}, "btnLongConfirm", StrId::STR_CAT_CONTROLS),
|
||||
{StrId::STR_BTN_DEF_KOREADER_SYNC, BTN_ACT_OPTIONS}, "btnLongConfirm", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_CONFIRM),
|
||||
// Left button: short=previous page, double=ignore, long=chapter back
|
||||
SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortLeft,
|
||||
{StrId::STR_BTN_DEF_PREV_PAGE, BTN_ACT_OPTIONS}, "btnShortLeft", StrId::STR_CAT_CONTROLS)
|
||||
@@ -185,26 +186,6 @@ inline const std::vector<SettingInfo> list = {
|
||||
SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongRight,
|
||||
{StrId::STR_BTN_DEF_CHAPTER_FORWARD, BTN_ACT_OPTIONS}, "btnLongRight", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_RIGHT),
|
||||
// Up button: short=previous page, double=ignore, long=chapter back
|
||||
SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortUp,
|
||||
{StrId::STR_BTN_DEF_PREV_PAGE, BTN_ACT_OPTIONS}, "btnShortUp", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_UP),
|
||||
SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleUp,
|
||||
{StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleUp", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_UP),
|
||||
SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongUp,
|
||||
{StrId::STR_BTN_DEF_CHAPTER_BACK, BTN_ACT_OPTIONS}, "btnLongUp", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_UP),
|
||||
// Down button: short=next page, double=ignore, long=chapter forward
|
||||
SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortDown,
|
||||
{StrId::STR_BTN_DEF_NEXT_PAGE, BTN_ACT_OPTIONS}, "btnShortDown", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_DOWN),
|
||||
SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleDown,
|
||||
{StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleDown", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_DOWN),
|
||||
SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongDown,
|
||||
{StrId::STR_BTN_DEF_CHAPTER_FORWARD, BTN_ACT_OPTIONS}, "btnLongDown", StrId::STR_CAT_CONTROLS)
|
||||
.withSubmenu(StrId::STR_BTN_DOWN),
|
||||
// Page Back button: short=previous page, double=ignore, long=chapter back
|
||||
SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPageBack,
|
||||
{StrId::STR_BTN_DEF_PREV_PAGE, BTN_ACT_OPTIONS}, "btnShortPageBack", StrId::STR_CAT_CONTROLS)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
#include <GfxRenderer.h>
|
||||
#include <HalClock.h>
|
||||
#include <HalDisplay.h>
|
||||
#include <HalGPIO.h>
|
||||
#include <Logging.h>
|
||||
|
||||
#include "CrossPointSettings.h"
|
||||
@@ -277,6 +279,5 @@ void SettingsActivity::render(RenderLock&&) {
|
||||
const auto labels = mappedInput.mapLabels(tr(STR_BACK), confirmLabel, tr(STR_DIR_UP), tr(STR_DIR_DOWN));
|
||||
GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
|
||||
|
||||
// Always use standard refresh for settings screen
|
||||
renderer.displayBuffer();
|
||||
renderer.displayBuffer(gpio.deviceIsX3() ? HalDisplay::HALF_REFRESH : HalDisplay::FAST_REFRESH);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "SettingsSubmenuActivity.h"
|
||||
|
||||
#include <GfxRenderer.h>
|
||||
#include <HalDisplay.h>
|
||||
#include <HalGPIO.h>
|
||||
#include <I18n.h>
|
||||
|
||||
#include "CrossPointSettings.h"
|
||||
@@ -63,5 +65,5 @@ void SettingsSubmenuActivity::render(RenderLock&&) {
|
||||
const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_SELECT), tr(STR_DIR_UP), tr(STR_DIR_DOWN));
|
||||
GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
|
||||
|
||||
renderer.displayBuffer();
|
||||
renderer.displayBuffer(gpio.deviceIsX3() ? HalDisplay::HALF_REFRESH : HalDisplay::FAST_REFRESH);
|
||||
}
|
||||
|
||||
+63
-70
@@ -387,87 +387,80 @@ void loop() {
|
||||
using B = MappedInputManager::Button;
|
||||
ButtonEventManager::ButtonEvent ev;
|
||||
while (buttonEventManager.consumeEvent(ev)) {
|
||||
// Up/Down share physical pins with PageBack/PageForward via sideButtonLayout.
|
||||
// ButtonEventManager only runs FSMs for PageBack/PageForward (not Up/Down) to avoid
|
||||
// double-firing. Here we resolve Up/Down settings as aliases of the side-button events:
|
||||
// with PREV_NEXT layout, PageBack = BTN_UP and PageForward = BTN_DOWN, so the
|
||||
// btnShort/Double/LongUp/Down settings apply when PageBack/PageForward fires.
|
||||
const bool prevNext = static_cast<CrossPointSettings::SIDE_BUTTON_LAYOUT>(SETTINGS.sideButtonLayout) ==
|
||||
CrossPointSettings::SIDE_BUTTON_LAYOUT::PREV_NEXT;
|
||||
auto actionFor = [&](B btn) -> uint8_t {
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
switch (btn) {
|
||||
case B::Back:
|
||||
switch (btn) {
|
||||
case B::Back:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortBack;
|
||||
case B::Confirm:
|
||||
return SETTINGS.btnShortConfirm;
|
||||
case B::Left:
|
||||
return SETTINGS.btnShortLeft;
|
||||
case B::Right:
|
||||
return SETTINGS.btnShortRight;
|
||||
case B::Up:
|
||||
return BA::BTN_DEFAULT; // no dedicated FSM
|
||||
case B::Down:
|
||||
return BA::BTN_DEFAULT; // no dedicated FSM
|
||||
case B::PageBack:
|
||||
if (SETTINGS.btnShortPageBack != BA::BTN_DEFAULT) return SETTINGS.btnShortPageBack;
|
||||
return prevNext ? SETTINGS.btnShortUp : SETTINGS.btnShortDown;
|
||||
case B::PageForward:
|
||||
if (SETTINGS.btnShortPageForward != BA::BTN_DEFAULT) return SETTINGS.btnShortPageForward;
|
||||
return prevNext ? SETTINGS.btnShortDown : SETTINGS.btnShortUp;
|
||||
case B::Power:
|
||||
return SETTINGS.btnShortPower;
|
||||
}
|
||||
break;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
switch (btn) {
|
||||
case B::Back:
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoubleBack;
|
||||
case B::Confirm:
|
||||
return SETTINGS.btnDoubleConfirm;
|
||||
case B::Left:
|
||||
return SETTINGS.btnDoubleLeft;
|
||||
case B::Right:
|
||||
return SETTINGS.btnDoubleRight;
|
||||
case B::Up:
|
||||
return BA::BTN_DEFAULT; // no dedicated FSM
|
||||
case B::Down:
|
||||
return BA::BTN_DEFAULT; // no dedicated FSM
|
||||
case B::PageBack:
|
||||
if (SETTINGS.btnDoublePageBack != BA::BTN_DEFAULT) return SETTINGS.btnDoublePageBack;
|
||||
return prevNext ? SETTINGS.btnDoubleUp : SETTINGS.btnDoubleDown;
|
||||
case B::PageForward:
|
||||
if (SETTINGS.btnDoublePageForward != BA::BTN_DEFAULT) return SETTINGS.btnDoublePageForward;
|
||||
return prevNext ? SETTINGS.btnDoubleDown : SETTINGS.btnDoubleUp;
|
||||
case B::Power:
|
||||
return SETTINGS.btnDoublePower;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongBack;
|
||||
}
|
||||
break;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
switch (btn) {
|
||||
case B::Back:
|
||||
return SETTINGS.btnLongBack;
|
||||
case B::Confirm:
|
||||
case B::Confirm:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortConfirm;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoubleConfirm;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongConfirm;
|
||||
case B::Left:
|
||||
}
|
||||
break;
|
||||
case B::Left:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortLeft;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoubleLeft;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongLeft;
|
||||
case B::Right:
|
||||
}
|
||||
break;
|
||||
case B::Right:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortRight;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoubleRight;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongRight;
|
||||
case B::Up:
|
||||
return BA::BTN_DEFAULT; // no dedicated FSM
|
||||
case B::Down:
|
||||
return BA::BTN_DEFAULT; // no dedicated FSM
|
||||
case B::PageBack:
|
||||
if (SETTINGS.btnLongPageBack != BA::BTN_DEFAULT) return SETTINGS.btnLongPageBack;
|
||||
return prevNext ? SETTINGS.btnLongUp : SETTINGS.btnLongDown;
|
||||
case B::PageForward:
|
||||
if (SETTINGS.btnLongPageForward != BA::BTN_DEFAULT) return SETTINGS.btnLongPageForward;
|
||||
return prevNext ? SETTINGS.btnLongDown : SETTINGS.btnLongUp;
|
||||
case B::Power:
|
||||
}
|
||||
break;
|
||||
case B::PageBack:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortPageBack;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoublePageBack;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongPageBack;
|
||||
}
|
||||
break;
|
||||
case B::PageForward:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortPageForward;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoublePageForward;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongPageForward;
|
||||
}
|
||||
break;
|
||||
case B::Power:
|
||||
switch (ev.type) {
|
||||
case ButtonEventManager::PressType::Short:
|
||||
return SETTINGS.btnShortPower;
|
||||
case ButtonEventManager::PressType::Double:
|
||||
return SETTINGS.btnDoublePower;
|
||||
case ButtonEventManager::PressType::Long:
|
||||
return SETTINGS.btnLongPower;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break; // Up/Down have no FSMs — ButtonEventManager never emits these
|
||||
}
|
||||
return BA::BTN_DEFAULT;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user