Contiki-Inga 3.x
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
*/
46
47
#include "contiki-conf.h"
48
#include "sys/clock.h"
49
#include "
sys/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_restart() function.
78
*
79
* \note Must not be executed before timer expired
80
*
81
* \param t A pointer to the timer.
82
* \sa timer_restart()
83
*/
84
void
85
timer_reset
(
struct
timer
*t)
86
{
87
//if (clock_time() >= t->start + t->interval) {
88
t->start += t->interval;
89
//}
90
}
91
/*---------------------------------------------------------------------------*/
92
/**
93
* Restart the timer from the current point in time
94
*
95
* This function restarts a timer with the same interval that was
96
* given to the timer_set() function. The timer will start at the
97
* current time.
98
*
99
* \note A periodic timer will drift if this function is used to reset
100
* it. For preioric timers, use the timer_reset() function instead.
101
*
102
* \param t A pointer to the timer.
103
*
104
* \sa timer_reset()
105
*/
106
void
107
timer_restart
(
struct
timer
*t)
108
{
109
t->start =
clock_time
();
110
}
111
/*---------------------------------------------------------------------------*/
112
/**
113
* Check if a timer has expired.
114
*
115
* This function tests if a timer has expired and returns true or
116
* false depending on its status.
117
*
118
* \param t A pointer to the timer
119
*
120
* \return Non-zero if the timer has expired, zero otherwise.
121
*
122
*/
123
int
124
timer_expired
(
struct
timer
*t)
125
{
126
/* Note: Can not return diff >= t->interval so we add 1 to diff and return
127
t->interval < diff - required to avoid an internal error in mspgcc. */
128
if
(t->start >
clock_time
())
return
0;
129
clock_time_t diff = (
clock_time
() - t->start) + 1;
130
return
t->interval < diff;
131
132
}
133
/*---------------------------------------------------------------------------*/
134
/**
135
* The time until the timer expires
136
*
137
* This function returns the time until the timer expires.
138
*
139
* \param t A pointer to the timer
140
*
141
* \return The time until the timer expires
142
*
143
*/
144
clock_time_t
145
timer_remaining
(
struct
timer
*t)
146
{
147
return
t->start + t->interval -
clock_time
();
148
}
149
/*---------------------------------------------------------------------------*/
150
151
/** @} */
Generated on Thu Apr 24 2014 16:26:13 for Contiki-Inga 3.x by
1.8.3.1