summaryrefslogtreecommitdiff
path: root/src/input/lvgl_input_driver.cpp
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-05-10 13:06:20 +1000
committerailurux <ailuruxx@gmail.com>2024-05-10 13:06:20 +1000
commit3f177cdb8880abf199f4445f1398cd69fb813892 (patch)
treee20de4949b1344c826e5af41ab701f3db75b21bc /src/input/lvgl_input_driver.cpp
parent8019c7691889cde4c3d40bbd78d485a92d713bbf (diff)
parente4ce7c4ac23402e09be8d6a52e0f739c0dff4ff0 (diff)
downloadtangara-fw-3f177cdb8880abf199f4445f1398cd69fb813892.tar.gz
Merge branch 'main' into file-browser
Diffstat (limited to 'src/input/lvgl_input_driver.cpp')
-rw-r--r--src/input/lvgl_input_driver.cpp127
1 files changed, 0 insertions, 127 deletions
diff --git a/src/input/lvgl_input_driver.cpp b/src/input/lvgl_input_driver.cpp
deleted file mode 100644
index 61a85fa5..00000000
--- a/src/input/lvgl_input_driver.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2023 jacqueline <me@jacqueline.id.au>
- *
- * SPDX-License-Identifier: GPL-3.0-only
- */
-
-#include "lvgl_input_driver.hpp"
-#include <stdint.h>
-
-#include <cstdint>
-#include <memory>
-#include <variant>
-
-#include "device_factory.hpp"
-#include "feedback_haptics.hpp"
-#include "input_touch_wheel.hpp"
-#include "input_trigger.hpp"
-#include "input_volume_buttons.hpp"
-#include "lauxlib.h"
-#include "lua.h"
-#include "lvgl.h"
-#include "nvs.hpp"
-#include "property.hpp"
-
-[[maybe_unused]] static constexpr char kTag[] = "input";
-
-namespace input {
-
-static void read_cb(lv_indev_drv_t* drv, lv_indev_data_t* data) {
- LvglInputDriver* instance =
- reinterpret_cast<LvglInputDriver*>(drv->user_data);
- instance->read(data);
-}
-
-static void feedback_cb(lv_indev_drv_t* drv, uint8_t event) {
- LvglInputDriver* instance =
- reinterpret_cast<LvglInputDriver*>(drv->user_data);
- instance->feedback(event);
-}
-
-auto intToMode(int raw) -> std::optional<drivers::NvsStorage::InputModes> {
- switch (raw) {
- case 0:
- return drivers::NvsStorage::InputModes::kButtonsOnly;
- case 1:
- return drivers::NvsStorage::InputModes::kButtonsWithWheel;
- case 2:
- return drivers::NvsStorage::InputModes::kDirectionalWheel;
- case 3:
- return drivers::NvsStorage::InputModes::kRotatingWheel;
- default:
- return {};
- }
-}
-
-LvglInputDriver::LvglInputDriver(drivers::NvsStorage& nvs,
- DeviceFactory& factory)
- : nvs_(nvs),
- factory_(factory),
- mode_(static_cast<int>(nvs.PrimaryInput()),
- [&](const lua::LuaValue& val) {
- if (!std::holds_alternative<int>(val)) {
- return false;
- }
- auto mode = intToMode(std::get<int>(val));
- if (!mode) {
- return false;
- }
- nvs.PrimaryInput(*mode);
- inputs_ = factory.createInputs(*mode);
- return true;
- }),
- driver_(),
- registration_(nullptr),
- inputs_(factory.createInputs(nvs.PrimaryInput())),
- feedbacks_(factory.createFeedbacks()),
- is_locked_(false) {
- lv_indev_drv_init(&driver_);
- driver_.type = LV_INDEV_TYPE_ENCODER;
- driver_.read_cb = read_cb;
- driver_.feedback_cb = feedback_cb;
- driver_.user_data = this;
- driver_.long_press_time = kLongPressDelayMs;
- driver_.long_press_repeat_time = kRepeatDelayMs;
-
- registration_ = lv_indev_drv_register(&driver_);
-}
-
-auto LvglInputDriver::read(lv_indev_data_t* data) -> void {
- // TODO: we should pass lock state on to the individual devices, since they
- // may wish to either ignore the lock state, or power down until unlock.
- if (is_locked_) {
- return;
- }
- for (auto&& device : inputs_) {
- device->read(data);
- }
-}
-
-auto LvglInputDriver::feedback(uint8_t event) -> void {
- if (is_locked_) {
- return;
- }
- for (auto&& device : feedbacks_) {
- device->feedback(event);
- }
-}
-
-auto LvglInputDriver::pushHooks(lua_State* L) -> int {
- lua_newtable(L);
-
- for (auto& dev : inputs_) {
- lua_pushlstring(L, dev->name().data(), dev->name().size());
- lua_newtable(L);
-
- for (auto& hook : dev->hooks()) {
- lua_pushlstring(L, hook.name().data(), hook.name().size());
- hook.pushHooks(L);
- lua_rawset(L, -3);
- }
-
- lua_rawset(L, -3);
- }
- return 1;
-}
-
-} // namespace input