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 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(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 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