sched.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /** @file event.h
  2. * @brief Public interface for event schedule functions.
  3. */
  4. #ifndef _faux_sched_h
  5. #define _faux_sched_h
  6. #include <faux/list.h>
  7. #include <faux/faux.h>
  8. #include <faux/time.h>
  9. #define FAUX_SCHED_NOW NULL
  10. #define FAUX_SCHED_INFINITE (unsigned int)(-1l)
  11. typedef enum {
  12. FAUX_SCHED_PERIODIC = BOOL_TRUE,
  13. FAUX_SCHED_ONCE = BOOL_FALSE
  14. } faux_sched_periodic_e;
  15. typedef struct faux_ev_s faux_ev_t;
  16. typedef struct faux_sched_s faux_sched_t;
  17. typedef faux_list_node_t faux_sched_node_t;
  18. C_DECL_BEGIN
  19. // Time event
  20. faux_ev_t *faux_ev_new(int ev_id, void *data);
  21. void faux_ev_free(void *ptr);
  22. bool_t faux_ev_is_busy(const faux_ev_t *ev);
  23. void faux_ev_set_free_data_cb(faux_ev_t *ev, faux_list_free_fn free_data_cb);
  24. bool_t faux_ev_set_time(faux_ev_t *ev, const struct timespec *new_time);
  25. const struct timespec *faux_ev_time(const faux_ev_t *ev);
  26. bool_t faux_ev_set_periodic(faux_ev_t *ev,
  27. const struct timespec *interval, unsigned int cycle_num);
  28. faux_sched_periodic_e faux_ev_is_periodic(const faux_ev_t *ev);
  29. bool_t faux_ev_time_left(const faux_ev_t *ev, struct timespec *left);
  30. int faux_ev_id(const faux_ev_t *ev);
  31. void *faux_ev_data(const faux_ev_t *ev);
  32. // Time event scheduler
  33. faux_sched_t *faux_sched_new(void);
  34. void faux_sched_free(faux_sched_t *sched);
  35. bool_t faux_sched_add(faux_sched_t *sched, faux_ev_t *ev);
  36. faux_ev_t *faux_sched_once(
  37. faux_sched_t *sched, const struct timespec *time, int ev_id, void *data);
  38. faux_ev_t *faux_sched_once_delayed(faux_sched_t *sched,
  39. const struct timespec *interval, int ev_id, void *data);
  40. faux_ev_t *faux_sched_periodic(
  41. faux_sched_t *sched, const struct timespec *time, int ev_id, void *data,
  42. const struct timespec *period, unsigned int cycle_num);
  43. faux_ev_t *faux_sched_periodic_delayed(
  44. faux_sched_t *sched, int ev_id, void *data,
  45. const struct timespec *period, unsigned int cycle_num);
  46. bool_t faux_sched_next_interval(const faux_sched_t *sched, struct timespec *interval);
  47. void faux_sched_del_all(faux_sched_t *sched);
  48. faux_ev_t *faux_sched_pop(faux_sched_t *sched);
  49. ssize_t faux_sched_del(faux_sched_t *sched, faux_ev_t *ev);
  50. ssize_t faux_sched_del_by_id(faux_sched_t *sched, int id);
  51. ssize_t faux_sched_del_by_data(faux_sched_t *sched, void *data);
  52. faux_list_node_t *faux_sched_init_ev_iter(faux_sched_t *sched);
  53. faux_ev_t *faux_sched_get_by_id(faux_sched_t *sched, int ev_id,
  54. faux_list_node_t **saved);
  55. faux_ev_t *faux_sched_get_by_data(faux_sched_t *sched, void *data,
  56. faux_list_node_t **saved);
  57. C_DECL_END
  58. #endif /* _faux_sched_h */