fix(display): All display updates in work thread.
* Make sure all LVGL access is from main work thread.
This commit is contained in:
parent
783fc4d3db
commit
e5f0456d17
4 changed files with 15 additions and 17 deletions
|
@ -7,4 +7,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
int zmk_display_init();
|
int zmk_display_init();
|
||||||
void zmk_display_task_handler();
|
|
|
@ -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));
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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…
Add table
Reference in a new issue