time_event_manager.h

00001 #ifndef __TIME_EVENT_MANAGER_H
00002 #define __TIME_EVENT_MANAGER_H
00003 
00004 #include "../../lock_ops.h"
00005 #include "../../timer.h"
00006 
00007 struct _time_event_data_t;
00008 
00009 typedef void(*time_event_func)(struct _time_event_data_t *s);
00010 
00011 typedef struct _time_event_data_t {
00012         unsigned int tick_time;
00013         
00015         time_event_func cb;
00017         void *cb_param;
00019         void *cb_param1;
00020         
00022         struct _time_event_data_t *next;
00024         struct _time_event_data_t *prev;
00025 } time_event_data_t;
00026 
00027 typedef struct _time_event_slot_t {
00028         time_event_data_t *first, *last;
00029 } time_event_slot_t;
00030 
00031 typedef struct _time_event_manager_t {
00032         time_event_slot_t *time_slots;
00033         unsigned int slot_cnt;
00035         unsigned int atomic_time;
00037         int enable_delay;
00039         unsigned int tick_counter;
00041         gen_lock_t *mutex;
00044         unsigned int process_timer_counter;
00045         struct _time_event_manager_t *next;
00046         struct _time_event_manager_t *prev;
00047 } time_event_manager_t;
00048 
00049 time_event_manager_t *tem_create(unsigned int atomic_time, unsigned int slot_cnt, int enable_delay, gen_lock_t *mutex);
00050 int tem_init(time_event_manager_t *tm, unsigned int atomic_time, unsigned int slot_cnt, int enable_delay, gen_lock_t *mutex);
00051 void tem_destroy(time_event_manager_t *tem);
00052 void tem_add_event(time_event_manager_t *tem, unsigned int action_time, time_event_data_t *te);
00053 void tem_remove_event(time_event_manager_t *tem, time_event_data_t *te);
00054 void tem_add_event_nolock(time_event_manager_t *tem, unsigned int action_time, time_event_data_t *te);
00055 void tem_remove_event_nolock(time_event_manager_t *tem, time_event_data_t *te);
00056 
00057 int time_event_management_init();
00058 void time_event_management_destroy();
00059 
00060 #endif