summaryrefslogtreecommitdiff
path: root/src/ui/lvgl_task.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-08 20:25:42 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-08 20:25:42 +1000
commite1181fbe59a835ea9c93d6e067e9757e8c522d3c (patch)
tree2fd61bb93713de8c2205b7b6d0a8c84c49832e93 /src/ui/lvgl_task.cpp
parentc3f40a8cc37114365ef3ec6f2888df64e5206b39 (diff)
parent592f231627843bc44ebaaa4506aec26da1f56499 (diff)
downloadtangara-fw-e1181fbe59a835ea9c93d6e067e9757e8c522d3c.tar.gz
Merge branch 'main' into opus
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);
}
}