File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mpd / src / timer.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 08:44:29 2013 UTC (11 years ago) by misho
Branches: mpd, MAIN
CVS tags: v5_8p7, v5_8p1_cross, v5_8p1, v5_8, v5_7p0, v5_7, HEAD
5.7

    1: 
    2: /*
    3:  * timer.c
    4:  *
    5:  * Written by Archie Cobbs <archie@freebsd.org>
    6:  * Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
    7:  * See ``COPYRIGHT.whistle''
    8:  */
    9: 
   10: #include "ppp.h"
   11: 
   12: /*
   13:  * INTERNAL FUNCTIONS
   14:  */
   15: 
   16:   static void	TimerExpires(int type, void *cookie);
   17: 
   18: /*
   19:  * TimerInit()
   20:  */
   21: 
   22: void
   23: TimerInit2(PppTimer timer, const char *desc,
   24:   int load, void (*handler)(void *), void *arg, const char *dbg)
   25: {
   26:   memset(timer, 0, sizeof(*timer));
   27:   timer->load	= (load >= 0) ? load : 0;
   28:   timer->func	= handler;
   29:   timer->arg	= arg;
   30:   timer->desc	= desc;
   31:   timer->dbg	= dbg;
   32: }
   33: 
   34: /*
   35:  * TimerStart()
   36:  */
   37: 
   38: void
   39: TimerStart2(PppTimer timer, const char *file, int line)
   40: {
   41:     /* Stop timer if running */
   42:     assert(timer->func);
   43:     if (EventIsRegistered(&timer->event))
   44: 	EventUnRegister(&timer->event);
   45: 
   46:     Log(LG_EVENTS, ("EVENT: Starting timer \"%s\" %s() for %d ms at %s:%d",
   47: 	timer->desc, timer->dbg, timer->load, file, line));
   48:     /* Register timeout event */
   49:     EventRegister(&timer->event, EVENT_TIMEOUT,
   50: 	timer->load, 0, TimerExpires, timer);
   51: }
   52: 
   53: /*
   54:  * TimerStartRecurring()
   55:  */
   56: 
   57: void
   58: TimerStartRecurring2(PppTimer timer, const char *file, int line)
   59: {
   60:     /* Stop timer if running */
   61:     assert(timer->func);
   62:     Log(LG_EVENTS, ("EVENT: Starting recurring timer \"%s\" %s() for %d ms at %s:%d",
   63: 	timer->desc, timer->dbg, timer->load, file, line));
   64:     if (EventIsRegistered(&timer->event))
   65: 	EventUnRegister(&timer->event);
   66: 
   67:     /* Register timeout event */
   68:     EventRegister(&timer->event, EVENT_TIMEOUT,
   69: 	timer->load, EVENT_RECURRING, TimerExpires, timer);
   70: }
   71: 
   72: /*
   73:  * TimerStop()
   74:  */
   75: 
   76: void
   77: TimerStop2(PppTimer timer, const char *file, int line)
   78: {
   79:     /* Stop timer if running */
   80:     if (EventIsRegistered(&timer->event)) {
   81: 	Log(LG_EVENTS, ("\nEVENT: Stopping timer \"%s\" %s() at %s:%d\n",
   82: 	    timer->desc, timer->dbg, file, line));
   83: 	EventUnRegister(&timer->event);
   84:     }
   85: }
   86: 
   87: /*
   88:  * TimerExpires()
   89:  */
   90: 
   91: static void
   92: TimerExpires(int type, void *cookie)
   93: {
   94:     PppTimer	const timer = (PppTimer) cookie;
   95:     const char	*desc = timer->desc;
   96:     const char	*dbg = timer->dbg;
   97: 
   98:     Log(LG_EVENTS, ("EVENT: Processing timer \"%s\" %s()", desc, dbg));
   99:     (*timer->func)(timer->arg);
  100:     Log(LG_EVENTS, ("EVENT: Processing timer \"%s\" %s() done", desc, dbg));
  101: }
  102: 
  103: /*
  104:  * TimerRemain()
  105:  *
  106:  * Return number of ticks left on a timer, or -1 if not running.
  107:  */
  108: 
  109: int
  110: TimerRemain(PppTimer t)
  111: {
  112:   return(EventTimerRemain(&t->event));
  113: }
  114: 
  115: /*
  116:  * TimerStarted()
  117:  *
  118:  * Return Timer status.
  119:  */
  120: 
  121: int
  122: TimerStarted(PppTimer t)
  123: {
  124:   return (EventIsRegistered(&t->event));
  125: }
  126: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>