sched.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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(const struct timespec *time,
  21. int ev_id, void *data, faux_list_free_fn free_data_cb);
  22. void faux_ev_free(void *ptr);
  23. bool_t faux_ev_set_periodic(faux_ev_t *ev,
  24. const struct timespec *interval, unsigned int cycle_num);
  25. bool_t faux_ev_dec_cycles(faux_ev_t *ev, unsigned int *new_cycle_num);
  26. bool_t faux_ev_reschedule(faux_ev_t *ev, const struct timespec *new_time);
  27. bool_t faux_ev_reschedule_period(faux_ev_t *ev);
  28. bool_t faux_ev_time_left(faux_ev_t *ev, struct timespec *left);
  29. int faux_ev_id(const faux_ev_t *ev);
  30. void *faux_ev_data(const faux_ev_t *ev);
  31. const struct timespec *faux_ev_time(const faux_ev_t *ev);
  32. faux_sched_periodic_e faux_ev_is_periodic(faux_ev_t *ev);
  33. // Time event scheduler
  34. faux_sched_t *faux_sched_new(void);
  35. void faux_sched_free(faux_sched_t *sched);
  36. int faux_sched_once(
  37. faux_sched_t *sched, const struct timespec *time, int ev_id, void *data);
  38. int faux_sched_once_delayed(faux_sched_t *sched,
  39. const struct timespec *interval, int ev_id, void *data);
  40. int 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. int faux_sched_periodic_delayed(
  44. faux_sched_t *sched, int ev_id, void *data,
  45. const struct timespec *period, unsigned int cycle_num);
  46. int faux_sched_next_interval(faux_sched_t *sched, struct timespec *interval);
  47. void faux_sched_empty(faux_sched_t *sched);
  48. int faux_sched_pop(faux_sched_t *sched, int *ev_id, void **data);
  49. int faux_sched_remove_by_id(faux_sched_t *sched, int id);
  50. int faux_sched_remove_by_data(faux_sched_t *sched, void *data);
  51. const struct timespec *faux_sched_time_by_data(faux_sched_t *sched, void *data);
  52. bool_t faux_sched_id_exist(faux_sched_t *sched, int id);
  53. bool_t faux_sched_get_by_id(faux_sched_t *sched, int ev_id, void **data,
  54. faux_list_node_t **saved);
  55. C_DECL_END
  56. #endif /* _faux_sched_h */