diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-05-02 19:12:26 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-05-02 19:12:26 +1000 |
| commit | 1573a8c4cde1cd9528b422b2dcc598e37ffe94a7 (patch) | |
| tree | d162822b8fd7054f81bace0c7a65ab4d5e6f93ef /src/input/include/lvgl_input_driver.hpp | |
| parent | a231fd1c8afedbeb14b0bc77d76bad61db986059 (diff) | |
| download | tangara-fw-1573a8c4cde1cd9528b422b2dcc598e37ffe94a7.tar.gz | |
WIP merge cyclically dependent components into one big component
Diffstat (limited to 'src/input/include/lvgl_input_driver.hpp')
| -rw-r--r-- | src/input/include/lvgl_input_driver.hpp | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/src/input/include/lvgl_input_driver.hpp b/src/input/include/lvgl_input_driver.hpp deleted file mode 100644 index 9adaf143..00000000 --- a/src/input/include/lvgl_input_driver.hpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2023 jacqueline <me@jacqueline.id.au> - * - * SPDX-License-Identifier: GPL-3.0-only - */ - -#pragma once - -#include <cstdint> -#include <deque> -#include <memory> -#include <set> - -#include "core/lv_group.h" -#include "device_factory.hpp" -#include "feedback_device.hpp" -#include "gpios.hpp" -#include "hal/lv_hal_indev.h" - -#include "input_device.hpp" -#include "input_hook.hpp" -#include "lua_thread.hpp" -#include "nvs.hpp" -#include "property.hpp" -#include "touchwheel.hpp" - -namespace input { - -/* - * Implementation of an LVGL input device. This class composes multiple - * IInputDevice and IFeedbackDevice instances together into a single LVGL - * device. - */ -class LvglInputDriver { - public: - LvglInputDriver(drivers::NvsStorage& nvs, DeviceFactory&); - - auto mode() -> lua::Property& { return mode_; } - - auto read(lv_indev_data_t* data) -> void; - auto feedback(uint8_t) -> void; - - auto registration() -> lv_indev_t* { return registration_; } - auto lock(bool l) -> void { is_locked_ = l; } - - auto pushHooks(lua_State* L) -> int; - - private: - drivers::NvsStorage& nvs_; - DeviceFactory& factory_; - - lua::Property mode_; - lv_indev_drv_t driver_; - lv_indev_t* registration_; - - std::vector<std::shared_ptr<IInputDevice>> inputs_; - std::vector<std::shared_ptr<IFeedbackDevice>> feedbacks_; - - /* - * Key for identifying which device, trigger, and specific hook are being - * overriden by Lua. - */ - struct OverrideSelector { - std::string device_name; - std::string trigger_name; - std::string hook_name; - - friend bool operator<(const OverrideSelector& l, - const OverrideSelector& r) { - return std::tie(l.device_name, l.trigger_name, l.hook_name) < - std::tie(r.device_name, r.trigger_name, r.hook_name); - } - }; - - /* Userdata object for tracking the Lua mirror of a TriggerHooks object. */ - class LuaTrigger { - public: - LuaTrigger(LvglInputDriver&, IInputDevice&, TriggerHooks&); - - static auto get(lua_State*, int idx) -> LuaTrigger&; - static auto luaGc(lua_State*) -> int; - static auto luaToString(lua_State*) -> int; - static auto luaNewIndex(lua_State*) -> int; - - static constexpr struct luaL_Reg kFuncs[] = {{"__gc", luaGc}, - {"__tostring", luaToString}, - {"__newindex", luaNewIndex}, - {NULL, NULL}}; - - private: - LvglInputDriver* driver_; - - std::string device_; - std::string trigger_; - std::map<std::string, std::string> hooks_; - }; - - /* A hook override implemented as a lua callback */ - struct LuaOverride { - lua_State* L; - int ref; - }; - - std::map<OverrideSelector, LuaOverride> overrides_; - - auto setOverride(lua_State* L, const OverrideSelector&) -> void; - auto applyOverride(const OverrideSelector&, LuaOverride&) -> void; - - bool is_locked_; -}; - -} // namespace input |
