forked from kofal.net/zmk
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:
committed by
Pete Johanson
parent
168b32b828
commit
69a4c3200d
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user