40 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "timers.h"
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *				tmrs_settimer				     *
 | |
|  *===========================================================================*/
 | |
| clock_t tmrs_settimer(tmrs, tp, exp_time, watchdog, new_head)
 | |
| timer_t **tmrs;				/* pointer to timers queue */
 | |
| timer_t *tp;				/* the timer to be added */
 | |
| clock_t exp_time;			/* its expiration time */
 | |
| tmr_func_t watchdog;			/* watchdog function to be run */
 | |
| clock_t *new_head;			/* new earliest timer, if non NULL */
 | |
| {
 | |
| /* Activate a timer to run function 'fp' at time 'exp_time'. If the timer is
 | |
|  * already in use it is first removed from the timers queue. Then, it is put
 | |
|  * in the list of active timers with the first to expire in front.
 | |
|  * The caller responsible for scheduling a new alarm for the timer if needed. 
 | |
|  */
 | |
|   timer_t **atp;
 | |
|   clock_t old_head = 0;
 | |
| 
 | |
|   if(*tmrs)
 | |
|   	old_head = (*tmrs)->tmr_exp_time;
 | |
| 
 | |
|   /* Set the timer's variables. */
 | |
|   (void) tmrs_clrtimer(tmrs, tp, NULL);
 | |
|   tp->tmr_exp_time = exp_time;
 | |
|   tp->tmr_func = watchdog;
 | |
| 
 | |
|   /* Add the timer to the active timers. The next timer due is in front. */
 | |
|   for (atp = tmrs; *atp != NULL; atp = &(*atp)->tmr_next) {
 | |
| 	if (exp_time < (*atp)->tmr_exp_time) break;
 | |
|   }
 | |
|   tp->tmr_next = *atp;
 | |
|   *atp = tp;
 | |
|   if(new_head)
 | |
|   	(*new_head) = (*tmrs)->tmr_exp_time;
 | |
|   return old_head;
 | |
| }
 | |
| 
 | 
