Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Release 1.0
[palacios.git] / geekos / src / net / timer.c
1 /**
2  * \addtogroup timer
3  * @{
4  */
5
6 /**
7  * \file
8  * Timer library implementation.
9  * \author
10  * Adam Dunkels <adam@sics.se>
11  */
12
13 /*
14  * Copyright (c) 2004, Swedish Institute of Computer Science.
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions
19  * are met:
20  * 1. Redistributions of source code must retain the above copyright
21  *    notice, this list of conditions and the following disclaimer.
22  * 2. Redistributions in binary form must reproduce the above copyright
23  *    notice, this list of conditions and the following disclaimer in the
24  *    documentation and/or other materials provided with the distribution.
25  * 3. Neither the name of the Institute nor the names of its contributors
26  *    may be used to endorse or promote products derived from this software
27  *    without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
30  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
33  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39  * SUCH DAMAGE.
40  *
41  * This file is part of the uIP TCP/IP stack
42  *
43  * Author: Adam Dunkels <adam@sics.se>
44  *
45  * $Id: timer.c,v 1.1 2008/08/06 23:21:19 andrewlxia Exp $
46  */
47
48 #include <uip/clock.h>
49 #include <uip/timer.h>
50
51 /*---------------------------------------------------------------------------*/
52 /**
53  * Set a timer.
54  *
55  * This function is used to set a timer for a time sometime in the
56  * future. The function timer_expired() will evaluate to true after
57  * the timer has expired.
58  *
59  * \param t A pointer to the timer
60  * \param interval The interval before the timer expires.
61  *
62  */
63 void
64 timer_set(struct timer *t, clock_time_t interval)
65 {
66   t->interval = interval;
67   t->start = clock_time();
68 }
69 /*---------------------------------------------------------------------------*/
70 /**
71  * Reset the timer with the same interval.
72  *
73  * This function resets the timer with the same interval that was
74  * given to the timer_set() function. The start point of the interval
75  * is the exact time that the timer last expired. Therefore, this
76  * function will cause the timer to be stable over time, unlike the
77  * timer_rester() function.
78  *
79  * \param t A pointer to the timer.
80  *
81  * \sa timer_restart()
82  */
83 void
84 timer_reset(struct timer *t)
85 {
86   t->start += t->interval;
87 }
88 /*---------------------------------------------------------------------------*/
89 /**
90  * Restart the timer from the current point in time
91  *
92  * This function restarts a timer with the same interval that was
93  * given to the timer_set() function. The timer will start at the
94  * current time.
95  *
96  * \note A periodic timer will drift if this function is used to reset
97  * it. For preioric timers, use the timer_reset() function instead.
98  *
99  * \param t A pointer to the timer.
100  *
101  * \sa timer_reset()
102  */
103 void
104 timer_restart(struct timer *t)
105 {
106   t->start = clock_time();
107 }
108 /*---------------------------------------------------------------------------*/
109 /**
110  * Check if a timer has expired.
111  *
112  * This function tests if a timer has expired and returns true or
113  * false depending on its status.
114  *
115  * \param t A pointer to the timer
116  *
117  * \return Non-zero if the timer has expired, zero otherwise.
118  *
119  */
120 int
121 timer_expired(struct timer *t)
122 {
123   return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval;
124 }
125 /*---------------------------------------------------------------------------*/
126
127 /** @} */