summaryrefslogtreecommitdiff
path: root/src/tangara/input/lvgl_input_driver.cpp
diff options
context:
space:
mode:
authorrdsh <rdsh@noreply.codeberg.org>2025-02-05 21:57:45 +0000
committerrdsh <rdsh@noreply.codeberg.org>2025-02-05 21:57:45 +0000
commit2ec84a1393331f57f8402bce66d337c0dd255f64 (patch)
tree30f271bf10988a9717abdf266d135e3ec0ae2d31 /src/tangara/input/lvgl_input_driver.cpp
parentddcd06dbca61fc55a7c2cd68f82f8cfe7b4c5cbf (diff)
parent9ecb79a264daa7896ce7d5a65592c05631213d5a (diff)
downloadtangara-fw-2ec84a1393331f57f8402bce66d337c0dd255f64.tar.gz
Merge pull request 'main' (#1) from cool-tech-zone/tangara-fw:main into main
Reviewed-on: https://codeberg.org/rdsh/tangara-fw/pulls/1
Diffstat (limited to 'src/tangara/input/lvgl_input_driver.cpp')
-rw-r--r--src/tangara/input/lvgl_input_driver.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/tangara/input/lvgl_input_driver.cpp b/src/tangara/input/lvgl_input_driver.cpp
index c008b007..2859c6a8 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,19 @@ 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;
+ case 1:
+ return drivers::NvsStorage::LockedInputModes::kVolumeOnly;
+ default:
+ return {};
+ }
+}
+
+} // namespace {}
+
LvglInputDriver::LvglInputDriver(drivers::NvsStorage& nvs,
DeviceFactory& factory)
: nvs_(nvs),
@@ -85,6 +100,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 +157,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();
}