summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2023-07-04 17:10:28 +1000
committerailurux <ailuruxx@gmail.com>2023-07-04 17:10:28 +1000
commitfcdf0a32f98aeca71e18d8169927c266ac087aab (patch)
tree8bda837be07bb95b757f54b717e70fcb9d08b0b1 /src
parentac8e7cf3d8d90196fc4990f452748180529eafbb (diff)
downloadtangara-fw-fcdf0a32f98aeca71e18d8169927c266ac087aab.tar.gz
Touchpad works better now yay
Diffstat (limited to 'src')
-rw-r--r--src/ui/lvgl_task.cpp2
-rw-r--r--src/ui/wheel_encoder.cpp29
2 files changed, 25 insertions, 6 deletions
diff --git a/src/ui/lvgl_task.cpp b/src/ui/lvgl_task.cpp
index 961b5147..3ffaea03 100644
--- a/src/ui/lvgl_task.cpp
+++ b/src/ui/lvgl_task.cpp
@@ -77,8 +77,6 @@ void LvglMain(std::weak_ptr<drivers::RelativeWheel> weak_touch_wheel,
// 30 FPS
// TODO(jacqueline): make this dynamic
vTaskDelay(pdMS_TO_TICKS(33));
- lv_indev_data_t d;
- encoder.Read(&d);
}
}
diff --git a/src/ui/wheel_encoder.cpp b/src/ui/wheel_encoder.cpp
index 432a81b4..a78bdc37 100644
--- a/src/ui/wheel_encoder.cpp
+++ b/src/ui/wheel_encoder.cpp
@@ -14,15 +14,22 @@ namespace ui {
void encoder_read(lv_indev_drv_t* drv, lv_indev_data_t* data) {
TouchWheelEncoder* instance =
reinterpret_cast<TouchWheelEncoder*>(drv->user_data);
+ ESP_LOGI("Wheel Encoder", "Before read state: %d", data->state);
instance->Read(data);
+ ESP_LOGI("Wheel Encoder", "After read state: %d", data->state);
+}
+
+void encoder_feedback(lv_indev_drv_t* drv, uint8_t event_code) {
+ ESP_LOGI("Touchwheel Event", "Event code: %d", event_code);
}
TouchWheelEncoder::TouchWheelEncoder(
std::weak_ptr<drivers::RelativeWheel> wheel)
: last_key_(0), wheel_(wheel) {
lv_indev_drv_init(&driver_);
- driver_.type = LV_INDEV_TYPE_ENCODER;
+ driver_.type = LV_INDEV_TYPE_KEYPAD;
driver_.read_cb = encoder_read;
+ driver_.feedback_cb = encoder_feedback;
driver_.user_data = this;
registration_ = lv_indev_drv_register(&driver_);
@@ -36,9 +43,23 @@ auto TouchWheelEncoder::Read(lv_indev_data_t* data) -> void {
lock->Update();
- data->enc_diff = lock->ticks();
- data->state =
- lock->is_clicking() ? LV_INDEV_STATE_PRESSED : LV_INDEV_STATE_RELEASED;
+
+ auto ticks = lock->ticks();
+ if (ticks > 0) {
+ ESP_LOGI("wheel encoder", "is prev");
+ data->key = LV_KEY_PREV;
+ data->state = LV_INDEV_STATE_PRESSED;
+ } else if (ticks < 0) {
+ ESP_LOGI("wheel encoder", "is next");
+ data->key = LV_KEY_NEXT;
+ data->state = LV_INDEV_STATE_PRESSED;
+ } else if (lock->is_clicking()) {
+ ESP_LOGI("wheel encoder", "is clicking");
+ data->key = LV_KEY_ENTER;
+ data->state = LV_INDEV_STATE_PRESSED;
+ } else {
+ data->state = LV_INDEV_STATE_RELEASED;
+ }
}
} // namespace ui