diff options
| author | bernard <[email protected]> | 2017-10-15 22:56:46 +0800 |
|---|---|---|
| committer | bernard <[email protected]> | 2017-10-15 22:56:46 +0800 |
| commit | d7087fdd3b998192afb03b34fd8034071d06bde7 (patch) | |
| tree | 6a99d97408c4b3bc708b3a0601bff80907d8beac /components/drivers/include/ipc/workqueue.h | |
| parent | 0f5a68a55e2a3c44f1e85029d22de6180ad30390 (diff) | |
[DeviceDrivers] change cmd type.
1. Change 'rt_uint8_t' type of cmd to 'int';
2. Add waitqueue;
3. Split device ipc header files;
Diffstat (limited to 'components/drivers/include/ipc/workqueue.h')
| -rw-r--r-- | components/drivers/include/ipc/workqueue.h | 41 |
1 files changed, 41 insertions, 0 deletions
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 <rtthread.h> + +/* 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 + |
