refactor: use low priority workqueue for underglow and battery reporting

Blocking operations on the high priority system workqueue may result in
deadlocks, particularly when Bluetooth is in use.
This commit is contained in:
Xudong Zheng
2023-07-17 17:16:04 -04:00
committed by Pete Johanson
parent f743d57ff1
commit 9a963abfc8
6 changed files with 44 additions and 10 deletions

27
app/src/workqueue.c Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zmk/workqueue.h>
K_THREAD_STACK_DEFINE(lowprio_q_stack, CONFIG_ZMK_LOW_PRIORITY_THREAD_STACK_SIZE);
static struct k_work_q lowprio_work_q;
struct k_work_q *zmk_workqueue_lowprio_work_q() {
return &lowprio_work_q;
}
static int workqueue_init() {
static const struct k_work_queue_config queue_config = {.name = "Low Priority Work Queue"};
k_work_queue_start(&lowprio_work_q, lowprio_q_stack, K_THREAD_STACK_SIZEOF(lowprio_q_stack),
CONFIG_ZMK_LOW_PRIORITY_THREAD_PRIORITY, &queue_config);
return 0;
}
SYS_INIT(workqueue_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);