workqueue.h 1002 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. rt_thread_t work_thread;
  10. };
  11. struct rt_work
  12. {
  13. rt_list_t list;
  14. void (*work_func)(struct rt_work* work, void* work_data);
  15. void *work_data;
  16. };
  17. #ifdef RT_USING_HEAP
  18. /**
  19. * WorkQueue for DeviceDriver
  20. */
  21. struct rt_workqueue *rt_workqueue_create(const char* name, rt_uint16_t stack_size, rt_uint8_t priority);
  22. rt_err_t rt_workqueue_destroy(struct rt_workqueue* queue);
  23. rt_err_t rt_workqueue_dowork(struct rt_workqueue* queue, struct rt_work* work);
  24. rt_err_t rt_workqueue_cancel_work(struct rt_workqueue* queue, struct rt_work* work);
  25. rt_inline void rt_work_init(struct rt_work* work, void (*work_func)(struct rt_work* work, void* work_data),
  26. void* work_data)
  27. {
  28. rt_list_init(&(work->list));
  29. work->work_func = work_func;
  30. work->work_data = work_data;
  31. }
  32. #endif
  33. #endif