summaryrefslogtreecommitdiff
path: root/src/tangara/input/lvgl_input_driver.cpp
diff options
context:
space:
mode:
authorTess Eisenberger <github@teisen.be>2025-02-01 15:59:08 -0800
committerteisenbe <teisenbe@noreply.codeberg.org>2025-02-02 04:48:42 +0000
commite8eaf3df10a896cb28e91cfc416b19303926a00a (patch)
tree15d20a1108d230285ae37a260f6920ac6c6cb8bf /src/tangara/input/lvgl_input_driver.cpp
parentb98e67972bca390961ecd2240ab3d3553ea0bf86 (diff)
downloadtangara-fw-e8eaf3df10a896cb28e91cfc416b19303926a00a.tar.gz
Add a new setting for input controls when locked
This is just the plumbing of the new setting. The input methods will come in subsequent patches.
Diffstat (limited to 'src/tangara/input/lvgl_input_driver.cpp')
-rw-r--r--src/tangara/input/lvgl_input_driver.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/tangara/input/lvgl_input_driver.cpp b/src/tangara/input/lvgl_input_driver.cpp
index c008b007..9177f92f 100644
--- a/src/tangara/input/lvgl_input_driver.cpp
+++ b/src/tangara/input/lvgl_input_driver.cpp
@@ -53,6 +53,8 @@ static void focus_cb(lv_group_t* group) {
instance->feedback(LV_EVENT_FOCUSED);
}
+namespace {
+
auto intToMode(int raw) -> std::optional<drivers::NvsStorage::InputModes> {
switch (raw) {
case 0:
@@ -68,6 +70,17 @@ auto intToMode(int raw) -> std::optional<drivers::NvsStorage::InputModes> {
}
}
+auto intToLockedMode(int raw) -> std::optional<drivers::NvsStorage::LockedInputModes> {
+ switch (raw) {
+ case 0:
+ return drivers::NvsStorage::LockedInputModes::kDisabled;
+ default:
+ return {};
+ }
+}
+
+} // namespace {}
+
LvglInputDriver::LvglInputDriver(drivers::NvsStorage& nvs,
DeviceFactory& factory)
: nvs_(nvs),
@@ -85,6 +98,18 @@ LvglInputDriver::LvglInputDriver(drivers::NvsStorage& nvs,
inputs_ = factory.createInputs(*mode);
return true;
}),
+ locked_mode_(static_cast<int>(nvs.LockedInput()),
+ [&](const lua::LuaValue& val) {
+ if (!std::holds_alternative<int>(val)) {
+ return false;
+ }
+ auto mode = intToLockedMode(std::get<int>(val));
+ if (!mode) {
+ return false;
+ }
+ nvs.LockedInput(*mode);
+ return true;
+ }),
inputs_(factory.createInputs(nvs.PrimaryInput())),
feedbacks_(factory.createFeedbacks()),
is_locked_(false) {
@@ -130,9 +155,11 @@ auto LvglInputDriver::feedback(uint8_t event) -> void {
auto LvglInputDriver::lock(bool l) -> void {
is_locked_ = l;
+ auto locked_input_mode = nvs_.LockedInput();
+
for (auto&& device : inputs_) {
if (l) {
- device->onLock();
+ device->onLock(locked_input_mode);
} else {
device->onUnlock();
}