summaryrefslogtreecommitdiff
path: root/src/ui/lvgl_task.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-05-24 13:30:05 +1000
committerjacqueline <me@jacqueline.id.au>2023-05-24 13:30:05 +1000
commit65833649f4779754e90760c1f0fc81ed220c84d0 (patch)
tree7aa4baa722edb7db80055fdeb9e8053766707259 /src/ui/lvgl_task.cpp
parent3b371cfc544d4b7c462d0a32d06525ab2b970875 (diff)
downloadtangara-fw-65833649f4779754e90760c1f0fc81ed220c84d0.tar.gz
Add some placeholder splash and menu screens
Includes a bunch of misc display fixes. Most significantly, our lvgl tickers was busted.
Diffstat (limited to 'src/ui/lvgl_task.cpp')
-rw-r--r--src/ui/lvgl_task.cpp35
1 files changed, 15 insertions, 20 deletions
diff --git a/src/ui/lvgl_task.cpp b/src/ui/lvgl_task.cpp
index 55087f77..f2f7c67c 100644
--- a/src/ui/lvgl_task.cpp
+++ b/src/ui/lvgl_task.cpp
@@ -19,18 +19,21 @@
#include "core/lv_obj_pos.h"
#include "core/lv_obj_tree.h"
#include "esp_log.h"
+#include "event_queue.hpp"
#include "font/lv_font.h"
#include "freertos/portmacro.h"
#include "freertos/projdefs.h"
#include "freertos/timers.h"
#include "hal/gpio_types.h"
#include "hal/spi_types.h"
+#include "lv_api_map.h"
#include "lvgl/lvgl.h"
#include "misc/lv_color.h"
#include "misc/lv_style.h"
#include "misc/lv_timer.h"
#include "tasks.hpp"
#include "touchwheel.hpp"
+#include "ui_fsm.hpp"
#include "widgets/lv_label.h"
#include "display.hpp"
@@ -40,33 +43,25 @@ namespace ui {
static const char* kTag = "lv_task";
-auto tick_hook(TimerHandle_t xTimer) -> void {
- lv_tick_inc(1);
-}
-
void LvglMain(std::weak_ptr<drivers::TouchWheel> weak_touch_wheel,
std::weak_ptr<drivers::Display> weak_display) {
ESP_LOGI(kTag, "init lvgl");
lv_init();
- // LVGL has been initialised, so we can now start reporting ticks to it.
- xTimerCreate("lv_tick", pdMS_TO_TICKS(1), pdTRUE, NULL, &tick_hook);
-
- lv_style_t style;
- lv_style_init(&style);
- lv_style_set_text_color(&style, LV_COLOR_MAKE(0xFF, 0, 0));
- // TODO: find a nice bitmap font for this display size and density.
- // lv_style_set_text_font(&style, &lv_font_montserrat_24);
-
- auto label = lv_label_create(NULL);
- lv_label_set_text(label, "COLOURS!!");
- lv_obj_add_style(label, &style, 0);
+ std::shared_ptr<Screen> current_screen;
+ auto& events = events::EventQueue::GetInstance();
+ while (1) {
+ while (events.ServiceUi(0)) {
+ }
- lv_obj_center(label);
- lv_scr_load(label);
+ std::shared_ptr<Screen> screen = UiState::current_screen();
+ if (screen != current_screen && screen != nullptr) {
+ current_screen = screen;
+ // TODO(jacqueline): animate this sometimes
+ lv_scr_load(screen->root());
+ }
- while (1) {
- lv_timer_handler();
+ lv_task_handler();
// 30 FPS
// TODO(jacqueline): make this dynamic
vTaskDelay(pdMS_TO_TICKS(33));