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