summaryrefslogtreecommitdiff
path: root/src/input/input_touch_dpad.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-04-15 14:18:20 +1000
committerjacqueline <me@jacqueline.id.au>2024-04-15 14:18:20 +1000
commit1baaa6dadcea5b8a85f1629e31119f4edba91b75 (patch)
treefeae0c19f1a6744b60f3e59a5d9b8df1c28c6ebf /src/input/input_touch_dpad.cpp
parentc24dfa6846929e8a7659c4aa2633b82494ac7fe1 (diff)
downloadtangara-fw-1baaa6dadcea5b8a85f1629e31119f4edba91b75.tar.gz
Use more generic 'hooks' for each input device's actions
Diffstat (limited to 'src/input/input_touch_dpad.cpp')
-rw-r--r--src/input/input_touch_dpad.cpp67
1 files changed, 23 insertions, 44 deletions
diff --git a/src/input/input_touch_dpad.cpp b/src/input/input_touch_dpad.cpp
index 828d6b59..32ca1ac1 100644
--- a/src/input/input_touch_dpad.cpp
+++ b/src/input/input_touch_dpad.cpp
@@ -13,63 +13,42 @@
#include "event_queue.hpp"
#include "haptics.hpp"
#include "input_device.hpp"
+#include "input_hook_actions.hpp"
#include "input_touch_dpad.hpp"
#include "touchwheel.hpp"
namespace input {
-static inline auto IsAngleWithin(int16_t wheel_angle,
- int16_t target_angle,
- int threshold) -> bool {
- int16_t difference = (wheel_angle - target_angle + 127 + 255) % 255 - 127;
- return difference <= threshold && difference >= -threshold;
-}
-
-TouchDPad::TouchDPad(drivers::TouchWheel& wheel) : wheel_(wheel) {}
+TouchDPad::TouchDPad(drivers::TouchWheel& wheel)
+ : wheel_(wheel),
+ centre_(actions::select, {}, {}),
+ up_(actions::scrollUp),
+ right_({}, {}, {}),
+ down_(actions::scrollDown),
+ left_(actions::goBack) {}
auto TouchDPad::read(lv_indev_data_t* data) -> void {
wheel_.Update();
auto wheel_data = wheel_.GetTouchWheelData();
- if (wheel_data.is_button_touched) {
- data->state = LV_INDEV_STATE_PRESSED;
- } else {
- data->state = LV_INDEV_STATE_RELEASED;
- }
+ centre_.update(wheel_data.is_button_touched, data);
- switch (up_.update(
- wheel_data.is_wheel_touched &&
- drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 0, 32))) {
- case Trigger::State::kNone:
- break;
- default:
- data->enc_diff = -1;
- break;
- }
- switch (right_.update(
- wheel_data.is_wheel_touched &&
- drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 192, 32))) {
- default:
- break;
- }
- switch (down_.update(
+ up_.update(
wheel_data.is_wheel_touched &&
- drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 128, 32))) {
- case Trigger::State::kNone:
- break;
- default:
- data->enc_diff = 1;
- break;
- }
- switch (left_.update(
+ drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 0, 32),
+ data);
+ right_.update(
+ wheel_data.is_wheel_touched && drivers::TouchWheel::isAngleWithin(
+ wheel_data.wheel_position, 192, 32),
+ data);
+ down_.update(
+ wheel_data.is_wheel_touched && drivers::TouchWheel::isAngleWithin(
+ wheel_data.wheel_position, 128, 32),
+ data);
+ left_.update(
wheel_data.is_wheel_touched &&
- drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 64, 32))) {
- case Trigger::State::kLongPress:
- events::Ui().Dispatch(ui::internal::BackPressed{});
- break;
- default:
- break;
- }
+ drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 64, 32),
+ data);
}
} // namespace input