Browse Source

fix(display): All display updates in work thread.

* Make sure all LVGL access is from main work thread.
xmkb
Pete Johanson 4 years ago
parent
commit
7ea1892bbb
  1. 3
      app/include/zmk/display.h
  2. 21
      app/src/display/main.c
  3. 4
      app/src/display/widgets/output_status.c
  4. 4
      app/src/main.c

3
app/include/zmk/display.h

@ -6,5 +6,4 @@
#pragma once #pragma once
int zmk_display_init(); int zmk_display_init();
void zmk_display_task_handler();

21
app/src/display/main.c

@ -24,6 +24,17 @@ static lv_obj_t *screen;
__attribute__((weak)) lv_obj_t *zmk_display_status_screen() { return NULL; } __attribute__((weak)) lv_obj_t *zmk_display_status_screen() { return NULL; }
void display_tick_cb(struct k_work *work) {
lv_tick_inc(10);
lv_task_handler();
}
K_WORK_DEFINE(display_tick_work, display_tick_cb);
void display_timer_cb() { k_work_submit(&display_tick_work); }
K_TIMER_DEFINE(display_timer, display_timer_cb, NULL);
int zmk_display_init() { int zmk_display_init() {
LOG_DBG(""); LOG_DBG("");
@ -45,12 +56,8 @@ int zmk_display_init() {
lv_task_handler(); lv_task_handler();
display_blanking_off(display); display_blanking_off(display);
k_timer_start(&display_timer, K_MSEC(10), K_MSEC(10));
LOG_DBG(""); LOG_DBG("");
return 0; return 0;
} }
void zmk_display_task_handler() {
lv_tick_inc(10);
lv_task_handler();
k_sleep(K_MSEC(10));
}

4
app/src/display/widgets/output_status.c

@ -41,20 +41,16 @@ void set_status_symbol(lv_obj_t *label) {
switch (selected_endpoint) { switch (selected_endpoint) {
case ZMK_ENDPOINT_USB: case ZMK_ENDPOINT_USB:
LOG_DBG("USB, BOY!");
strcat(text, LV_SYMBOL_USB " "); strcat(text, LV_SYMBOL_USB " ");
break; break;
case ZMK_ENDPOINT_BLE: case ZMK_ENDPOINT_BLE:
if (active_profie_bonded) { if (active_profie_bonded) {
if (active_profile_connected) { if (active_profile_connected) {
LOG_DBG("Bonded & connected!");
sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_OK, active_profile_index); sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_OK, active_profile_index);
} else { } else {
LOG_DBG("Bonded but not connected!");
sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_CLOSE, active_profile_index); sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_CLOSE, active_profile_index);
} }
} else { } else {
LOG_DBG("NOT Bonded!");
sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_SETTINGS, active_profile_index); sprintf(text, LV_SYMBOL_WIFI "%i " LV_SYMBOL_SETTINGS, active_profile_index);
} }
break; break;

4
app/src/main.c

@ -28,9 +28,5 @@ void main(void) {
#ifdef CONFIG_ZMK_DISPLAY #ifdef CONFIG_ZMK_DISPLAY
zmk_display_init(); zmk_display_init();
while (1) {
zmk_display_task_handler();
}
#endif /* CONFIG_ZMK_DISPLAY */ #endif /* CONFIG_ZMK_DISPLAY */
} }

Loading…
Cancel
Save