queue.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include <gui/gui.h>
  3. #include <furi.h>
  4. typedef struct {
  5. void (*callback)(void *state); //Callback for when the item is dequeued
  6. void (*render)(const void *state, Canvas *const canvas); //Callback for the rendering loop while this item is running
  7. void (*start)(void *state); //Callback when this item is started running
  8. void *next; //Pointer to the next item
  9. uint32_t duration; //duration of the item
  10. } QueueItem;
  11. typedef struct {
  12. unsigned int start; //current queue item start time
  13. QueueItem *current; //current queue item
  14. bool running; //is the queue running
  15. } QueueState;
  16. /**
  17. * Enqueue a new item.
  18. *
  19. * @param queue_state The queue state pointer
  20. * @param app_state Your app state
  21. * @param done Callback for dequeue event
  22. * @param start Callback for when the item is activated
  23. * @param render Callback to render loop if needed
  24. * @param duration Length of the item
  25. */
  26. void enqueue(QueueState *queue_state, void *app_state,
  27. void(*done)(void *state), void(*start)(void *state),
  28. void (*render)(const void *state, Canvas *const canvas), uint32_t duration);
  29. /**
  30. * Clears all queue items
  31. *
  32. * @param queue_state The queue state pointer
  33. */
  34. void queue_clear(QueueState *queue_state);
  35. /**
  36. * Dequeues the active queue item. Usually you don't need to call it directly.
  37. *
  38. * @param queue_state The queue state pointer
  39. * @param app_state Your application state
  40. */
  41. void dequeue(QueueState *queue_state, void *app_state);
  42. /**
  43. * Runs the queue logic (place it in your tick function)
  44. *
  45. * @param queue_state The queue state pointer
  46. * @param app_state Your application state
  47. * @return FALSE when there is nothing to run, TRUE otherwise
  48. */
  49. bool run_queue(QueueState *queue_state, void *app_state);
  50. /**
  51. * Calls the currently active queue items render callback (if there is any)
  52. *
  53. * @param queue_state The queue state pointer
  54. * @param app_state Your application state
  55. * @param canvas Pointer to Flipper's canvas object
  56. */
  57. void render_queue(const QueueState *queue_state, const void *app_state, Canvas *const canvas);