fix(display): Tweak init state to avoid race.

* Move "initialized" state early, to avoid race condition causing
  listener events to get lost during startup sequence.
This commit is contained in:
Peter Johanson 2022-09-22 19:37:56 +00:00
parent 8c863ef205
commit ee54632140

View file

@ -73,6 +73,8 @@ static void start_display_updates() {
k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS)); 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() { static void stop_display_updates() {
if (display == NULL) { if (display == NULL) {
return; return;
@ -83,6 +85,8 @@ static void stop_display_updates() {
k_timer_stop(&display_timer); k_timer_stop(&display_timer);
} }
#endif
int zmk_display_is_initialized() { return initialized; } int zmk_display_is_initialized() { return initialized; }
void initialize_display(struct k_work *work) { void initialize_display(struct k_work *work) {
@ -94,6 +98,8 @@ void initialize_display(struct k_work *work) {
return; return;
} }
initialized = true;
screen = zmk_display_status_screen(); screen = zmk_display_status_screen();
if (screen == NULL) { if (screen == NULL) {
@ -104,8 +110,6 @@ void initialize_display(struct k_work *work) {
lv_scr_load(screen); lv_scr_load(screen);
start_display_updates(); start_display_updates();
initialized = true;
} }
K_WORK_DEFINE(init_work, initialize_display); K_WORK_DEFINE(init_work, initialize_display);