refactor(display): Updates for LVGL v8.x changes.

* LV_ prefix from new LVGL official Kconfig now used.
* API changes for themes, container object removal, etc.
* Add our own Kconfig and code for theme default small font.
* Remove some hardcoded sizes.
This commit is contained in:
Peter Johanson
2023-01-17 23:33:42 -05:00
committed by Pete Johanson
parent 168b32b828
commit 69a4c3200d
44 changed files with 463 additions and 246 deletions

View File

@@ -15,11 +15,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
#include <drivers/display.h>
#include <lvgl.h>
#include "theme.h"
#include <zmk/event_manager.h>
#include <zmk/events/activity_state_changed.h>
#include <zmk/display/status_screen.h>
#define ZMK_DISPLAY_NAME CONFIG_LVGL_DISPLAY_DEV_NAME
#define ZMK_DISPLAY_NAME CONFIG_LV_Z_DISPLAY_DEV_NAME
static const struct device *display;
static bool initialized = false;
@@ -50,16 +52,21 @@ struct k_work_q *zmk_display_work_q() {
#endif
}
void display_timer_cb() {
lv_tick_inc(TICK_MS);
k_work_submit_to_queue(zmk_display_work_q(), &display_tick_work);
}
void blank_display_cb(struct k_work *work) { display_blanking_on(display); }
void unblank_display_cb(struct k_work *work) { display_blanking_off(display); }
void display_timer_cb() { k_work_submit_to_queue(zmk_display_work_q(), &display_tick_work); }
K_TIMER_DEFINE(display_timer, display_timer_cb, NULL);
void unblank_display_cb(struct k_work *work) {
display_blanking_off(display);
k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS));
}
#if IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE)
void blank_display_cb(struct k_work *work) {
k_timer_stop(&display_timer);
display_blanking_on(display);
}
K_WORK_DEFINE(blank_display_work, blank_display_cb);
K_WORK_DEFINE(unblank_display_work, unblank_display_cb);
@@ -69,26 +76,30 @@ static void start_display_updates() {
}
k_work_submit_to_queue(zmk_display_work_q(), &unblank_display_work);
k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS));
}
#if IS_ENABLED(CONFIG_ZMK_DISPLAY_BLANK_ON_IDLE)
static void stop_display_updates() {
if (display == NULL) {
return;
}
k_work_submit_to_queue(zmk_display_work_q(), &blank_display_work);
k_timer_stop(&display_timer);
}
#endif
int zmk_display_is_initialized() { return initialized; }
static void initialize_theme() {
#if IS_ENABLED(CONFIG_LV_USE_THEME_MONO)
lv_disp_t *disp = lv_disp_get_default();
lv_theme_t *theme = lv_theme_mono_init(disp, false, CONFIG_LV_FONT_DEFAULT);
theme->font_small = CONFIG_ZMK_LV_FONT_DEFAULT_SMALL;
disp->theme = theme;
#endif // CONFIG_LV_USE_THEME_MONO
}
void initialize_display(struct k_work *work) {
LOG_DBG("");
@@ -100,6 +111,8 @@ void initialize_display(struct k_work *work) {
initialized = true;
initialize_theme();
screen = zmk_display_status_screen();
if (screen == NULL) {
@@ -109,7 +122,7 @@ void initialize_display(struct k_work *work) {
lv_scr_load(screen);
start_display_updates();
unblank_display_cb(work);
}
K_WORK_DEFINE(init_work, initialize_display);