summaryrefslogtreecommitdiff
path: root/src/ui/lvgl_task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/lvgl_task.cpp')
-rw-r--r--src/ui/lvgl_task.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/ui/lvgl_task.cpp b/src/ui/lvgl_task.cpp
index 06a6b28b..340282ee 100644
--- a/src/ui/lvgl_task.cpp
+++ b/src/ui/lvgl_task.cpp
@@ -48,12 +48,25 @@
namespace ui {
static const char* kTag = "lv_task";
+static const TickType_t kMaxFrameRate = pdMS_TO_TICKS(33);
+
+static int sTimerId;
+static SemaphoreHandle_t sFrameSemaphore;
+
+auto next_frame(TimerHandle_t) {
+ xSemaphoreGive(sFrameSemaphore);
+}
void LvglMain(std::weak_ptr<drivers::RelativeWheel> weak_touch_wheel,
std::weak_ptr<drivers::Display> weak_display) {
ESP_LOGI(kTag, "init lvgl");
lv_init();
+ sFrameSemaphore = xSemaphoreCreateBinary();
+ auto timer =
+ xTimerCreate("lvgl_frame", kMaxFrameRate, pdTRUE, &sTimerId, next_frame);
+ xTimerStart(timer, portMAX_DELAY);
+
lv_theme_t* base_theme = lv_theme_basic_init(NULL);
lv_disp_set_theme(NULL, base_theme);
static themes::Theme sTheme{};
@@ -80,9 +93,9 @@ void LvglMain(std::weak_ptr<drivers::RelativeWheel> weak_touch_wheel,
}
lv_task_handler();
- // 30 FPS
- // TODO(jacqueline): make this dynamic
- vTaskDelay(pdMS_TO_TICKS(33));
+
+ // Wait for the signal to loop again.
+ xSemaphoreTake(sFrameSemaphore, portMAX_DELAY);
}
}