123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #ifndef __TIME_EVENT_MANAGER_H
- #define __TIME_EVENT_MANAGER_H
- #include "../../lock_ops.h"
- #include "../../timer.h"
- struct _time_event_data_t;
- typedef void(*time_event_func)(struct _time_event_data_t *s);
- typedef struct _time_event_data_t {
- unsigned int tick_time;
-
- /** callback function */
- time_event_func cb;
- /** callback function argument */
- void *cb_param;
- /** callback function argument */
- void *cb_param1;
-
- /** next element in time slot */
- struct _time_event_data_t *next;
- /** previous element in time slot */
- struct _time_event_data_t *prev;
- } time_event_data_t;
- typedef struct _time_event_slot_t {
- time_event_data_t *first, *last;
- } time_event_slot_t;
- typedef struct _time_event_manager_t {
- time_event_slot_t *time_slots;
- unsigned int slot_cnt;
- /** atomic time in seconds */
- unsigned int atomic_time;
- /** allow the event to be "called" after its time */
- int enable_delay;
- /** counts ticks - this is an absolute value "timer" */
- unsigned int tick_counter;
- /** mutex is taken from parent (locking must be common - deadlock prevention) */
- gen_lock_t *mutex;
- /** count of seconds after which should be called this timer's step */
- unsigned int process_timer_counter;
- struct _time_event_manager_t *next;
- struct _time_event_manager_t *prev;
- } time_event_manager_t;
- time_event_manager_t *tem_create(unsigned int atomic_time, unsigned int slot_cnt, int enable_delay, gen_lock_t *mutex);
- int tem_init(time_event_manager_t *tm, unsigned int atomic_time, unsigned int slot_cnt, int enable_delay, gen_lock_t *mutex);
- void tem_destroy(time_event_manager_t *tem);
- void tem_add_event(time_event_manager_t *tem, unsigned int action_time, time_event_data_t *te);
- void tem_remove_event(time_event_manager_t *tem, time_event_data_t *te);
- void tem_add_event_nolock(time_event_manager_t *tem, unsigned int action_time, time_event_data_t *te);
- void tem_remove_event_nolock(time_event_manager_t *tem, time_event_data_t *te);
- int time_event_management_init();
- void time_event_management_destroy();
- #endif
|