workqueue.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef WORKQUEUE_H__
  2. #define WORKQUEUE_H__
  3. #include <rtthread.h>
  4. /* workqueue implementation */
  5. struct rt_workqueue
  6. {
  7. rt_list_t work_list;
  8. struct rt_work *work_current; /* current work */
  9. struct rt_semaphore sem;
  10. rt_thread_t work_thread;
  11. };
  12. struct rt_work
  13. {
  14. rt_list_t list;
  15. void (*work_func)(struct rt_work* work, void* work_data);
  16. void *work_data;
  17. };
  18. #ifdef RT_USING_HEAP
  19. /**
  20. * WorkQueue for DeviceDriver
  21. */
  22. struct rt_workqueue *rt_workqueue_create(const char* name, rt_uint16_t stack_size, rt_uint8_t priority);
  23. rt_err_t rt_workqueue_destroy(struct rt_workqueue* queue);
  24. rt_err_t rt_workqueue_dowork(struct rt_workqueue* queue, struct rt_work* work);
  25. rt_err_t rt_workqueue_cancel_work(struct rt_workqueue* queue, struct rt_work* work);
  26. rt_err_t rt_workqueue_cancel_work_sync(struct rt_workqueue* queue, struct rt_work* work);
  27. rt_inline void rt_work_init(struct rt_work* work, void (*work_func)(struct rt_work* work, void* work_data),
  28. void* work_data)
  29. {
  30. rt_list_init(&(work->list));
  31. work->work_func = work_func;
  32. work->work_data = work_data;
  33. }
  34. #endif
  35. #endif