lv_task.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /**
  2. * @file lv_task.c
  3. * An 'lv_task' is a void (*fp) (void* param) type function which will be called periodically.
  4. * A priority (5 levels + disable) can be assigned to lv_tasks.
  5. */
  6. #ifndef LV_TASK_H
  7. #define LV_TASK_H
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /*********************
  12. * INCLUDES
  13. *********************/
  14. #include <stdint.h>
  15. #include <stdbool.h>
  16. #include "lv_mem.h"
  17. #include "lv_ll.h"
  18. /*********************
  19. * DEFINES
  20. *********************/
  21. #ifndef LV_ATTRIBUTE_TASK_HANDLER
  22. #define LV_ATTRIBUTE_TASK_HANDLER
  23. #endif
  24. /**********************
  25. * TYPEDEFS
  26. **********************/
  27. /**
  28. * Possible priorities for lv_tasks
  29. */
  30. typedef enum
  31. {
  32. LV_TASK_PRIO_OFF = 0,
  33. LV_TASK_PRIO_LOWEST,
  34. LV_TASK_PRIO_LOW,
  35. LV_TASK_PRIO_MID,
  36. LV_TASK_PRIO_HIGH,
  37. LV_TASK_PRIO_HIGHEST,
  38. LV_TASK_PRIO_NUM,
  39. }lv_task_prio_t;
  40. /**
  41. * Descriptor of a lv_task
  42. */
  43. typedef struct
  44. {
  45. uint32_t period;
  46. uint32_t last_run;
  47. void (*task) (void*);
  48. void * param;
  49. uint8_t prio:3;
  50. uint8_t once:1;
  51. }lv_task_t;
  52. /**********************
  53. * GLOBAL PROTOTYPES
  54. **********************/
  55. /**
  56. * Init the lv_task module
  57. */
  58. void lv_task_init(void);
  59. /**
  60. * Call it periodically to handle lv_tasks.
  61. */
  62. LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void);
  63. /**
  64. * Create a new lv_task
  65. * @param task a function which is the task itself
  66. * @param period call period in ms unit
  67. * @param prio priority of the task (LV_TASK_PRIO_OFF means the task is stopped)
  68. * @param param free parameter
  69. * @return pointer to the new task
  70. */
  71. lv_task_t* lv_task_create(void (*task) (void *), uint32_t period, lv_task_prio_t prio, void * param);
  72. /**
  73. * Delete a lv_task
  74. * @param lv_task_p pointer to task created by lv_task_p
  75. */
  76. void lv_task_del(lv_task_t* lv_task_p);
  77. /**
  78. * Set new priority for a lv_task
  79. * @param lv_task_p pointer to a lv_task
  80. * @param prio the new priority
  81. */
  82. void lv_task_set_prio(lv_task_t* lv_task_p, lv_task_prio_t prio);
  83. /**
  84. * Set new period for a lv_task
  85. * @param lv_task_p pointer to a lv_task
  86. * @param period the new period
  87. */
  88. void lv_task_set_period(lv_task_t* lv_task_p, uint32_t period);
  89. /**
  90. * Make a lv_task ready. It will not wait its period.
  91. * @param lv_task_p pointer to a lv_task.
  92. */
  93. void lv_task_ready(lv_task_t* lv_task_p);
  94. /**
  95. * Delete the lv_task after one call
  96. * @param lv_task_p pointer to a lv_task.
  97. */
  98. void lv_task_once(lv_task_t * lv_task_p);
  99. /**
  100. * Reset a lv_task.
  101. * It will be called the previously set period milliseconds later.
  102. * @param lv_task_p pointer to a lv_task.
  103. */
  104. void lv_task_reset(lv_task_t* lv_task_p);
  105. /**
  106. * Enable or disable the whole lv_task handling
  107. * @param en: true: lv_task handling is running, false: lv_task handling is suspended
  108. */
  109. void lv_task_enable(bool en);
  110. /**
  111. * Get idle percentage
  112. * @return the lv_task idle in percentage
  113. */
  114. uint8_t lv_task_get_idle(void);
  115. /**********************
  116. * MACROS
  117. **********************/
  118. #ifdef __cplusplus
  119. } /* extern "C" */
  120. #endif
  121. #endif