forked from contiki-os/contiki
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathctimer.h
166 lines (152 loc) · 5.74 KB
/
ctimer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*
* Copyright (c) 2006, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
/**
* \file
* Header file for the callback timer
* \author
* Adam Dunkels <[email protected]>
*/
/**
* \addtogroup sys
* @{
*/
/**
* \defgroup ctimer Callback timer
* @{
*
* The ctimer module provides a timer mechanism that calls a specified
* C function when a ctimer expires.
*
*/
#ifndef CTIMER_H_
#define CTIMER_H_
#include "sys/etimer.h"
struct ctimer {
struct ctimer *next;
struct etimer etimer;
struct process *p;
void (*f)(void *);
void *ptr;
};
/**
* \brief Reset a callback timer with the same interval as was
* previously set.
* \param c A pointer to the callback timer.
*
* This function resets the callback timer with the same
* interval that was given to the callback timer with the
* ctimer_set() function. The start point of the interval
* is the exact time that the callback timer last
* expired. Therefore, this function will cause the timer
* to be stable over time, unlike the ctimer_restart()
* function.
*
* \sa ctimer_restart()
*/
void ctimer_reset(struct ctimer *c);
/**
* \brief Restart a callback timer from the current point in time
* \param c A pointer to the callback timer.
*
* This function restarts the callback timer with the same
* interval that was given to the ctimer_set()
* function. The callback timer will start at the current
* time.
*
* \note A periodic timer will drift if this function is
* used to reset it. For periodic timers, use the
* ctimer_reset() function instead.
*
* \sa ctimer_reset()
*/
void ctimer_restart(struct ctimer *c);
/**
* \brief Set a callback timer.
* \param c A pointer to the callback timer.
* \param t The interval before the timer expires.
* \param f A function to be called when the timer expires.
* \param ptr An opaque pointer that will be supplied as an argument to the callback function.
*
* This function is used to set a callback timer for a time
* sometime in the future. When the callback timer expires,
* the callback function f will be called with ptr as argument.
*
* This essentially does ctimer_set_process(c, t, f, ptr, PROCESS_CURRENT());
*
*/
void ctimer_set(struct ctimer *c, clock_time_t t,
void (*f)(void *), void *ptr);
/**
* \brief Set a callback timer.
* \param c A pointer to the callback timer.
* \param t The interval before the timer expires.
* \param f A function to be called when the timer expires.
* \param ptr An opaque pointer that will be supplied as an argument to the callback function.
* \param p A pointer to the process the timer belongs to
*
* This function is used to set a callback timer for a time
* sometime in the future. When the callback timer expires,
* the callback function f will be called with ptr as argument.
*
*/
void ctimer_set_with_process(struct ctimer *c, clock_time_t t,
void (*f)(void *), void *ptr, struct process *p);
/**
* \brief Stop a pending callback timer.
* \param c A pointer to the pending callback timer.
*
* This function stops a callback timer that has previously
* been set with ctimer_set(), ctimer_reset(), or ctimer_restart().
* After this function has been called, the callback timer will be
* expired and will not call the callback function.
*
*/
void ctimer_stop(struct ctimer *c);
/**
* \brief Check if a callback timer has expired.
* \param c A pointer to the callback timer
* \return Non-zero if the timer has expired, zero otherwise.
*
* This function tests if a callback timer has expired and
* returns true or false depending on its status.
*/
int ctimer_expired(struct ctimer *c);
/**
* \brief Initialize the callback timer library.
*
* This function initializes the callback timer library and
* should be called from the system boot up code.
*/
void ctimer_init(void);
#endif /* CTIMER_H_ */
/** @} */
/** @} */