diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-04-24 16:06:10 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-04-24 16:06:10 +1000 |
| commit | 920345b940bb3993c389d9e9be1a75a8041d431d (patch) | |
| tree | 562e53906a14c31ba8a21b3c2ae64c652a16acb4 /src/input/include | |
| parent | 531475e3511e9c722677d3a351b51d4a579876df (diff) | |
| download | tangara-fw-920345b940bb3993c389d9e9be1a75a8041d431d.tar.gz | |
Support getting a tree of controls + hooks via lua
Diffstat (limited to 'src/input/include')
| -rw-r--r-- | src/input/include/input_device.hpp | 10 | ||||
| -rw-r--r-- | src/input/include/input_hook.hpp | 34 | ||||
| -rw-r--r-- | src/input/include/input_hook_actions.hpp | 19 | ||||
| -rw-r--r-- | src/input/include/input_nav_buttons.hpp | 3 | ||||
| -rw-r--r-- | src/input/include/input_touch_dpad.hpp | 3 | ||||
| -rw-r--r-- | src/input/include/input_touch_wheel.hpp | 3 | ||||
| -rw-r--r-- | src/input/include/input_volume_buttons.hpp | 3 | ||||
| -rw-r--r-- | src/input/include/lvgl_input_driver.hpp | 2 |
8 files changed, 54 insertions, 23 deletions
diff --git a/src/input/include/input_device.hpp b/src/input/include/input_device.hpp index 5fc3e066..59456351 100644 --- a/src/input/include/input_device.hpp +++ b/src/input/include/input_device.hpp @@ -11,6 +11,7 @@ #include <vector> #include "hal/lv_hal_indev.h" +#include "input_hook.hpp" #include "property.hpp" namespace input { @@ -27,13 +28,8 @@ class IInputDevice { virtual auto read(lv_indev_data_t* data) -> void = 0; - // TODO: Add hooks and configuration (or are hooks just one kind of - // configuration?) - - virtual auto settings() - -> std::vector<std::pair<std::string, lua::Property>> { - return {}; - } + virtual auto name() -> std::string = 0; + virtual auto hooks() -> std::vector<TriggerHooks> { return {}; } }; } // namespace input diff --git a/src/input/include/input_hook.hpp b/src/input/include/input_hook.hpp index 96b9b5cd..81eb80d9 100644 --- a/src/input/include/input_hook.hpp +++ b/src/input/include/input_hook.hpp @@ -8,35 +8,53 @@ #include <functional> #include <optional> +#include <string> #include "hal/lv_hal_indev.h" +#include "lua.hpp" + #include "input_trigger.hpp" namespace input { -using HookCb = std::optional<std::function<void(lv_indev_data_t*)>>; +struct HookCallback { + std::string name; + std::function<void(lv_indev_data_t*)> fn; +}; class Hook { public: - Hook(HookCb); + Hook(std::string name, std::optional<HookCallback> cb); auto invoke(lv_indev_data_t*) -> void; - auto override(HookCb) -> void; + auto override(std::optional<HookCallback>) -> void; + + auto name() const -> const std::string& { return name_; } + auto callback() -> std::optional<HookCallback>; private: - HookCb default_; - HookCb override_; + std::string name_; + std::optional<HookCallback> default_; + std::optional<HookCallback> override_; }; class TriggerHooks { public: - TriggerHooks(HookCb cb) : TriggerHooks(cb, cb, cb) {} - TriggerHooks(HookCb, HookCb, HookCb); + TriggerHooks(std::string name, std::optional<HookCallback> cb) + : TriggerHooks(name, cb, cb, cb) {} + TriggerHooks(std::string name, + std::optional<HookCallback> click, + std::optional<HookCallback> long_press, + std::optional<HookCallback> repeat); auto update(bool, lv_indev_data_t*) -> void; - auto override(Trigger::State, HookCb) -> void; + auto override(Trigger::State, std::optional<HookCallback>) -> void; + + auto name() const -> const std::string&; + auto pushHooks(lua_State*) -> void; private: + std::string name_; Trigger trigger_; Hook click_; diff --git a/src/input/include/input_hook_actions.hpp b/src/input/include/input_hook_actions.hpp index a05a14e8..105bd10d 100644 --- a/src/input/include/input_hook_actions.hpp +++ b/src/input/include/input_hook_actions.hpp @@ -7,22 +7,25 @@ #pragma once #include "hal/lv_hal_indev.h" +#include "input_hook.hpp" namespace input { namespace actions { -auto select(lv_indev_data_t*) -> void; +auto select() -> HookCallback; -auto scrollUp(lv_indev_data_t*) -> void; -auto scrollDown(lv_indev_data_t*) -> void; +auto scrollUp() -> HookCallback; +auto scrollDown() -> HookCallback; -auto scrollToTop(lv_indev_data_t*) -> void; -auto scrollToBottom(lv_indev_data_t*) -> void; +auto scrollToTop() -> HookCallback; +auto scrollToBottom() -> HookCallback; -auto goBack(lv_indev_data_t*) -> void; +auto goBack() -> HookCallback; -auto volumeUp(lv_indev_data_t*) -> void; -auto volumeDown(lv_indev_data_t*) -> void; +auto volumeUp() -> HookCallback; +auto volumeDown() -> HookCallback; + +auto allActions() -> std::vector<HookCallback>; } // namespace actions } // namespace input diff --git a/src/input/include/input_nav_buttons.hpp b/src/input/include/input_nav_buttons.hpp index 60566ebc..4e4952c9 100644 --- a/src/input/include/input_nav_buttons.hpp +++ b/src/input/include/input_nav_buttons.hpp @@ -25,6 +25,9 @@ class NavButtons : public IInputDevice { auto read(lv_indev_data_t* data) -> void override; + auto name() -> std::string override; + auto hooks() -> std::vector<TriggerHooks> override; + private: drivers::IGpios& gpios_; diff --git a/src/input/include/input_touch_dpad.hpp b/src/input/include/input_touch_dpad.hpp index f80400dc..691e3243 100644 --- a/src/input/include/input_touch_dpad.hpp +++ b/src/input/include/input_touch_dpad.hpp @@ -24,6 +24,9 @@ class TouchDPad : public IInputDevice { auto read(lv_indev_data_t* data) -> void override; + auto name() -> std::string override; + auto hooks() -> std::vector<TriggerHooks> override; + private: drivers::TouchWheel& wheel_; diff --git a/src/input/include/input_touch_wheel.hpp b/src/input/include/input_touch_wheel.hpp index 88ebee40..1f116da9 100644 --- a/src/input/include/input_touch_wheel.hpp +++ b/src/input/include/input_touch_wheel.hpp @@ -27,6 +27,9 @@ class TouchWheel : public IInputDevice { auto read(lv_indev_data_t* data) -> void override; + auto name() -> std::string override; + auto hooks() -> std::vector<TriggerHooks> override; + auto sensitivity() -> lua::Property&; private: diff --git a/src/input/include/input_volume_buttons.hpp b/src/input/include/input_volume_buttons.hpp index 68962908..a684aa48 100644 --- a/src/input/include/input_volume_buttons.hpp +++ b/src/input/include/input_volume_buttons.hpp @@ -24,6 +24,9 @@ class VolumeButtons : public IInputDevice { auto read(lv_indev_data_t* data) -> void override; + auto name() -> std::string override; + auto hooks() -> std::vector<TriggerHooks> override; + private: drivers::IGpios& gpios_; diff --git a/src/input/include/lvgl_input_driver.hpp b/src/input/include/lvgl_input_driver.hpp index 257ccb28..9f43d27f 100644 --- a/src/input/include/lvgl_input_driver.hpp +++ b/src/input/include/lvgl_input_driver.hpp @@ -41,6 +41,8 @@ class LvglInputDriver { 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_; |
