Contiki 2.5
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
core
sys
timer.c
Go to the documentation of this file.
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 Contiki operating system.
42
*
43
* Author: Adam Dunkels <adam@sics.se>
44
*
45
* $Id: timer.c,v 1.8 2010/06/21 19:07:24 joxe Exp $
46
*/
47
48
#include "contiki-conf.h"
49
#include "sys/clock.h"
50
#include "
sys/timer.h
"
51
52
/*---------------------------------------------------------------------------*/
53
/**
54
* Set a timer.
55
*
56
* This function is used to set a timer for a time sometime in the
57
* future. The function timer_expired() will evaluate to true after
58
* the timer has expired.
59
*
60
* \param t A pointer to the timer
61
* \param interval The interval before the timer expires.
62
*
63
*/
64
void
65
timer_set
(
struct
timer
*t, clock_time_t interval)
66
{
67
t->interval = interval;
68
t->start =
clock_time
();
69
}
70
/*---------------------------------------------------------------------------*/
71
/**
72
* Reset the timer with the same interval.
73
*
74
* This function resets the timer with the same interval that was
75
* given to the timer_set() function. The start point of the interval
76
* is the exact time that the timer last expired. Therefore, this
77
* function will cause the timer to be stable over time, unlike the
78
* timer_restart() function.
79
*
80
* \param t A pointer to the timer.
81
*
82
* \sa timer_restart()
83
*/
84
void
85
timer_reset
(
struct
timer
*t)
86
{
87
t->start += t->interval;
88
}
89
/*---------------------------------------------------------------------------*/
90
/**
91
* Restart the timer from the current point in time
92
*
93
* This function restarts a timer with the same interval that was
94
* given to the timer_set() function. The timer will start at the
95
* current time.
96
*
97
* \note A periodic timer will drift if this function is used to reset
98
* it. For preioric timers, use the timer_reset() function instead.
99
*
100
* \param t A pointer to the timer.
101
*
102
* \sa timer_reset()
103
*/
104
void
105
timer_restart
(
struct
timer
*t)
106
{
107
t->start =
clock_time
();
108
}
109
/*---------------------------------------------------------------------------*/
110
/**
111
* Check if a timer has expired.
112
*
113
* This function tests if a timer has expired and returns true or
114
* false depending on its status.
115
*
116
* \param t A pointer to the timer
117
*
118
* \return Non-zero if the timer has expired, zero otherwise.
119
*
120
*/
121
int
122
timer_expired
(
struct
timer
*t)
123
{
124
/* Note: Can not return diff >= t->interval so we add 1 to diff and return
125
t->interval < diff - required to avoid an internal error in mspgcc. */
126
clock_time_t diff = (
clock_time
() - t->start) + 1;
127
return
t->interval < diff;
128
129
}
130
/*---------------------------------------------------------------------------*/
131
/**
132
* The time until the timer expires
133
*
134
* This function returns the time until the timer expires.
135
*
136
* \param t A pointer to the timer
137
*
138
* \return The time until the timer expires
139
*
140
*/
141
clock_time_t
142
timer_remaining
(
struct
timer
*t)
143
{
144
return
t->start + t->interval -
clock_time
();
145
}
146
/*---------------------------------------------------------------------------*/
147
148
/** @} */
Generated on Fri Aug 30 2013 12:34:07 for Contiki 2.5 by
1.8.3.1