fix(display): Avoid fault w/ LVGL API usage.
* Increment the tick from within the ISR itself. * Don't call task handler until in the display callback. PR: https://github.com/zmkfirmware/zmk/pull/736
This commit is contained in:
parent
b2d64fe598
commit
65ff995033
1 changed files with 8 additions and 8 deletions
|
@ -26,14 +26,16 @@ 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) {
|
void display_tick_cb(struct k_work *work) { lv_task_handler(); }
|
||||||
lv_tick_inc(10);
|
|
||||||
lv_task_handler();
|
#define TICK_MS 10
|
||||||
}
|
|
||||||
|
|
||||||
K_WORK_DEFINE(display_tick_work, display_tick_cb);
|
K_WORK_DEFINE(display_tick_work, display_tick_cb);
|
||||||
|
|
||||||
void display_timer_cb() { k_work_submit(&display_tick_work); }
|
void display_timer_cb() {
|
||||||
|
lv_tick_inc(TICK_MS);
|
||||||
|
k_work_submit(&display_tick_work);
|
||||||
|
}
|
||||||
|
|
||||||
K_TIMER_DEFINE(display_timer, display_timer_cb, NULL);
|
K_TIMER_DEFINE(display_timer, display_timer_cb, NULL);
|
||||||
|
|
||||||
|
@ -44,7 +46,7 @@ static void start_display_updates() {
|
||||||
|
|
||||||
display_blanking_off(display);
|
display_blanking_off(display);
|
||||||
|
|
||||||
k_timer_start(&display_timer, K_MSEC(10), K_MSEC(10));
|
k_timer_start(&display_timer, K_MSEC(TICK_MS), K_MSEC(TICK_MS));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stop_display_updates() {
|
static void stop_display_updates() {
|
||||||
|
@ -75,8 +77,6 @@ int zmk_display_init() {
|
||||||
|
|
||||||
lv_scr_load(screen);
|
lv_scr_load(screen);
|
||||||
|
|
||||||
lv_task_handler();
|
|
||||||
|
|
||||||
start_display_updates();
|
start_display_updates();
|
||||||
|
|
||||||
LOG_DBG("");
|
LOG_DBG("");
|
||||||
|
|
Loading…
Reference in a new issue