summaryrefslogtreecommitdiff
path: root/src/tangara/input/lvgl_input_driver.cpp
diff options
context:
space:
mode:
authorcooljqln <cooljqln@noreply.codeberg.org>2025-02-03 23:45:28 +0000
committercooljqln <cooljqln@noreply.codeberg.org>2025-02-03 23:45:28 +0000
commit38cb3d8219da0d26077d238c3e633f75a11055a3 (patch)
tree7279ecbf1be6e7384e3a90c15153863ae1cf994f /src/tangara/input/lvgl_input_driver.cpp
parent28846b989b75ca6fe513462c209ce95bce2a46b7 (diff)
parent546daf71c1b04284848c4b5edfbaa3c5b4a284f4 (diff)
downloadtangara-fw-38cb3d8219da0d26077d238c3e633f75a11055a3.tar.gz
Merge pull request 'Add optional support for adjusting volume while locked' (#230) from teisenbe/tangara-fw:locked_input into main
Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/230
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();
}