mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-04 14:47:37 +03:00
Add side button layout configuration while on reader (#147)
## Summary Allow swapping the side button layout between *next page - prev page* and *prev page - next page* while reading
This commit is contained in:
parent
2437943c94
commit
d7f4bd54f5
@ -11,7 +11,7 @@ CrossPointSettings CrossPointSettings::instance;
|
|||||||
namespace {
|
namespace {
|
||||||
constexpr uint8_t SETTINGS_FILE_VERSION = 1;
|
constexpr uint8_t SETTINGS_FILE_VERSION = 1;
|
||||||
// Increment this when adding new persisted settings fields
|
// Increment this when adding new persisted settings fields
|
||||||
constexpr uint8_t SETTINGS_COUNT = 6;
|
constexpr uint8_t SETTINGS_COUNT = 7;
|
||||||
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
|
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -32,6 +32,7 @@ bool CrossPointSettings::saveToFile() const {
|
|||||||
serialization::writePod(outputFile, statusBar);
|
serialization::writePod(outputFile, statusBar);
|
||||||
serialization::writePod(outputFile, orientation);
|
serialization::writePod(outputFile, orientation);
|
||||||
serialization::writePod(outputFile, frontButtonLayout);
|
serialization::writePod(outputFile, frontButtonLayout);
|
||||||
|
serialization::writePod(outputFile, sideButtonLayout);
|
||||||
outputFile.close();
|
outputFile.close();
|
||||||
|
|
||||||
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
|
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
|
||||||
@ -70,6 +71,8 @@ bool CrossPointSettings::loadFromFile() {
|
|||||||
if (++settingsRead >= fileSettingsCount) break;
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
serialization::readPod(inputFile, frontButtonLayout);
|
serialization::readPod(inputFile, frontButtonLayout);
|
||||||
if (++settingsRead >= fileSettingsCount) break;
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
|
serialization::readPod(inputFile, sideButtonLayout);
|
||||||
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
} while (false);
|
} while (false);
|
||||||
|
|
||||||
inputFile.close();
|
inputFile.close();
|
||||||
|
|||||||
@ -33,6 +33,11 @@ class CrossPointSettings {
|
|||||||
// Swapped: Left, Right, Back, Confirm
|
// Swapped: Left, Right, Back, Confirm
|
||||||
enum FRONT_BUTTON_LAYOUT { BACK_CONFIRM_LEFT_RIGHT = 0, LEFT_RIGHT_BACK_CONFIRM = 1 };
|
enum FRONT_BUTTON_LAYOUT { BACK_CONFIRM_LEFT_RIGHT = 0, LEFT_RIGHT_BACK_CONFIRM = 1 };
|
||||||
|
|
||||||
|
// Side button layout options
|
||||||
|
// Default: Previous, Next
|
||||||
|
// Swapped: Next, Previous
|
||||||
|
enum SIDE_BUTTON_LAYOUT { PREV_NEXT = 0, NEXT_PREV = 1 };
|
||||||
|
|
||||||
// Sleep screen settings
|
// Sleep screen settings
|
||||||
uint8_t sleepScreen = DARK;
|
uint8_t sleepScreen = DARK;
|
||||||
// Status bar settings
|
// Status bar settings
|
||||||
@ -46,6 +51,8 @@ class CrossPointSettings {
|
|||||||
uint8_t orientation = PORTRAIT;
|
uint8_t orientation = PORTRAIT;
|
||||||
// Front button layout
|
// Front button layout
|
||||||
uint8_t frontButtonLayout = BACK_CONFIRM_LEFT_RIGHT;
|
uint8_t frontButtonLayout = BACK_CONFIRM_LEFT_RIGHT;
|
||||||
|
// Side button layout
|
||||||
|
uint8_t sideButtonLayout = PREV_NEXT;
|
||||||
|
|
||||||
~CrossPointSettings() = default;
|
~CrossPointSettings() = default;
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
#include "MappedInputManager.h"
|
#include "MappedInputManager.h"
|
||||||
|
|
||||||
decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button button) const {
|
decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button button) const {
|
||||||
const auto layout = static_cast<CrossPointSettings::FRONT_BUTTON_LAYOUT>(SETTINGS.frontButtonLayout);
|
const auto frontLayout = static_cast<CrossPointSettings::FRONT_BUTTON_LAYOUT>(SETTINGS.frontButtonLayout);
|
||||||
|
const auto sideLayout = static_cast<CrossPointSettings::SIDE_BUTTON_LAYOUT>(SETTINGS.sideButtonLayout);
|
||||||
|
|
||||||
switch (button) {
|
switch (button) {
|
||||||
case Button::Back:
|
case Button::Back:
|
||||||
switch (layout) {
|
switch (frontLayout) {
|
||||||
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
||||||
return InputManager::BTN_LEFT;
|
return InputManager::BTN_LEFT;
|
||||||
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
||||||
@ -13,7 +14,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt
|
|||||||
return InputManager::BTN_BACK;
|
return InputManager::BTN_BACK;
|
||||||
}
|
}
|
||||||
case Button::Confirm:
|
case Button::Confirm:
|
||||||
switch (layout) {
|
switch (frontLayout) {
|
||||||
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
||||||
return InputManager::BTN_RIGHT;
|
return InputManager::BTN_RIGHT;
|
||||||
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
||||||
@ -21,7 +22,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt
|
|||||||
return InputManager::BTN_CONFIRM;
|
return InputManager::BTN_CONFIRM;
|
||||||
}
|
}
|
||||||
case Button::Left:
|
case Button::Left:
|
||||||
switch (layout) {
|
switch (frontLayout) {
|
||||||
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
||||||
return InputManager::BTN_BACK;
|
return InputManager::BTN_BACK;
|
||||||
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
||||||
@ -29,7 +30,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt
|
|||||||
return InputManager::BTN_LEFT;
|
return InputManager::BTN_LEFT;
|
||||||
}
|
}
|
||||||
case Button::Right:
|
case Button::Right:
|
||||||
switch (layout) {
|
switch (frontLayout) {
|
||||||
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM:
|
||||||
return InputManager::BTN_CONFIRM;
|
return InputManager::BTN_CONFIRM;
|
||||||
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT:
|
||||||
@ -43,9 +44,21 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt
|
|||||||
case Button::Power:
|
case Button::Power:
|
||||||
return InputManager::BTN_POWER;
|
return InputManager::BTN_POWER;
|
||||||
case Button::PageBack:
|
case Button::PageBack:
|
||||||
return InputManager::BTN_UP;
|
switch (sideLayout) {
|
||||||
case Button::PageForward:
|
case CrossPointSettings::NEXT_PREV:
|
||||||
return InputManager::BTN_DOWN;
|
return InputManager::BTN_DOWN;
|
||||||
|
case CrossPointSettings::PREV_NEXT:
|
||||||
|
default:
|
||||||
|
return InputManager::BTN_UP;
|
||||||
|
}
|
||||||
|
case Button::PageForward:
|
||||||
|
switch (sideLayout) {
|
||||||
|
case CrossPointSettings::NEXT_PREV:
|
||||||
|
return InputManager::BTN_UP;
|
||||||
|
case CrossPointSettings::PREV_NEXT:
|
||||||
|
default:
|
||||||
|
return InputManager::BTN_DOWN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return InputManager::BTN_BACK;
|
return InputManager::BTN_BACK;
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
// Define the static settings list
|
// Define the static settings list
|
||||||
namespace {
|
namespace {
|
||||||
constexpr int settingsCount = 7;
|
constexpr int settingsCount = 8;
|
||||||
const SettingInfo settingsList[settingsCount] = {
|
const SettingInfo settingsList[settingsCount] = {
|
||||||
// Should match with SLEEP_SCREEN_MODE
|
// Should match with SLEEP_SCREEN_MODE
|
||||||
{"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}},
|
{"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}},
|
||||||
@ -24,6 +24,10 @@ const SettingInfo settingsList[settingsCount] = {
|
|||||||
SettingType::ENUM,
|
SettingType::ENUM,
|
||||||
&CrossPointSettings::frontButtonLayout,
|
&CrossPointSettings::frontButtonLayout,
|
||||||
{"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm"}},
|
{"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm"}},
|
||||||
|
{"Side Button Layout (reader)",
|
||||||
|
SettingType::ENUM,
|
||||||
|
&CrossPointSettings::sideButtonLayout,
|
||||||
|
{"Prev, Next", "Next, Prev"}},
|
||||||
{"Check for updates", SettingType::ACTION, nullptr, {}},
|
{"Check for updates", SettingType::ACTION, nullptr, {}},
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user