time_event_manager.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #ifndef __TIME_EVENT_MANAGER_H
  2. #define __TIME_EVENT_MANAGER_H
  3. #include "../../lock_ops.h"
  4. #include "../../timer.h"
  5. struct _time_event_data_t;
  6. typedef void(*time_event_func)(struct _time_event_data_t *s);
  7. typedef struct _time_event_data_t {
  8. unsigned int tick_time;
  9. /** callback function */
  10. time_event_func cb;
  11. /** callback function argument */
  12. void *cb_param;
  13. /** callback function argument */
  14. void *cb_param1;
  15. /** next element in time slot */
  16. struct _time_event_data_t *next;
  17. /** previous element in time slot */
  18. struct _time_event_data_t *prev;
  19. } time_event_data_t;
  20. typedef struct _time_event_slot_t {
  21. time_event_data_t *first, *last;
  22. } time_event_slot_t;
  23. typedef struct _time_event_manager_t {
  24. time_event_slot_t *time_slots;
  25. unsigned int slot_cnt;
  26. /** atomic time in seconds */
  27. unsigned int atomic_time;
  28. /** allow the event to be "called" after its time */
  29. int enable_delay;
  30. /** counts ticks - this is an absolute value "timer" */
  31. unsigned int tick_counter;
  32. /** mutex is taken from parent (locking must be common - deadlock prevention) */
  33. gen_lock_t *mutex;
  34. /** count of seconds after which should be called this timer's step */
  35. unsigned int process_timer_counter;
  36. struct _time_event_manager_t *next;
  37. struct _time_event_manager_t *prev;
  38. } time_event_manager_t;
  39. time_event_manager_t *tem_create(unsigned int atomic_time, unsigned int slot_cnt, int enable_delay, gen_lock_t *mutex);
  40. int tem_init(time_event_manager_t *tm, unsigned int atomic_time, unsigned int slot_cnt, int enable_delay, gen_lock_t *mutex);
  41. void tem_destroy(time_event_manager_t *tem);
  42. void tem_add_event(time_event_manager_t *tem, unsigned int action_time, time_event_data_t *te);
  43. void tem_remove_event(time_event_manager_t *tem, time_event_data_t *te);
  44. void tem_add_event_nolock(time_event_manager_t *tem, unsigned int action_time, time_event_data_t *te);
  45. void tem_remove_event_nolock(time_event_manager_t *tem, time_event_data_t *te);
  46. int time_event_management_init();
  47. void time_event_management_destroy();
  48. #endif