From d7087fdd3b998192afb03b34fd8034071d06bde7 Mon Sep 17 00:00:00 2001 From: bernard Date: Sun, 15 Oct 2017 22:56:46 +0800 Subject: [DeviceDrivers] change cmd type. 1. Change 'rt_uint8_t' type of cmd to 'int'; 2. Add waitqueue; 3. Split device ipc header files; --- components/drivers/include/ipc/workqueue.h | 41 ++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 components/drivers/include/ipc/workqueue.h (limited to 'components/drivers/include/ipc/workqueue.h') diff --git a/components/drivers/include/ipc/workqueue.h b/components/drivers/include/ipc/workqueue.h new file mode 100644 index 0000000000..36eb825dc9 --- /dev/null +++ b/components/drivers/include/ipc/workqueue.h @@ -0,0 +1,41 @@ +#ifndef WORKQUEUE_H__ +#define WORKQUEUE_H__ + +#include + +/* workqueue implementation */ +struct rt_workqueue +{ + rt_list_t work_list; + struct rt_work *work_current; /* current work */ + rt_thread_t work_thread; +}; + +struct rt_work +{ + rt_list_t list; + + void (*work_func)(struct rt_work* work, void* work_data); + void *work_data; +}; + +#ifdef RT_USING_HEAP +/** + * WorkQueue for DeviceDriver + */ +struct rt_workqueue *rt_workqueue_create(const char* name, rt_uint16_t stack_size, rt_uint8_t priority); +rt_err_t rt_workqueue_destroy(struct rt_workqueue* queue); +rt_err_t rt_workqueue_dowork(struct rt_workqueue* queue, struct rt_work* work); +rt_err_t rt_workqueue_cancel_work(struct rt_workqueue* queue, struct rt_work* work); + +rt_inline void rt_work_init(struct rt_work* work, void (*work_func)(struct rt_work* work, void* work_data), + void* work_data) +{ + rt_list_init(&(work->list)); + work->work_func = work_func; + work->work_data = work_data; +} +#endif + +#endif + -- cgit v1.3.1