rcl  master
C API providing common ROS client library functionality.
time.h
Go to the documentation of this file.
1 // Copyright 2015 Open Source Robotics Foundation, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef RCL__TIME_H_
16 #define RCL__TIME_H_
17 
18 #ifdef __cplusplus
19 extern "C"
20 {
21 #endif
22 
23 #include "rcl/allocator.h"
24 #include "rcl/macros.h"
25 #include "rcl/types.h"
26 #include "rcl/visibility_control.h"
27 #include "rcutils/time.h"
28 
30 #define RCL_S_TO_NS RCUTILS_S_TO_NS
31 #define RCL_MS_TO_NS RCUTILS_MS_TO_NS
33 #define RCL_US_TO_NS RCUTILS_US_TO_NS
35 
37 #define RCL_NS_TO_S RCUTILS_NS_TO_S
38 #define RCL_NS_TO_MS RCUTILS_NS_TO_MS
40 #define RCL_NS_TO_US RCUTILS_NS_TO_US
42 
47 
49 typedef enum rcl_clock_type_t
50 {
56 
58 typedef struct rcl_clock_t
59 {
61  void (* pre_update)(void);
62  void (* post_update)(void);
64  // void (*set_now) (rcl_time_point_value_t);
65  void * data;
67 } rcl_clock_t;
68 
70 typedef struct rcl_time_point_t
71 {
75 
77 typedef struct rcl_duration_t
78 {
81 
82 // typedef struct rcl_rate_t
83 // {
84 // rcl_time_point_value_t trigger_time;
85 // int64_t period;
86 // rcl_clock_type_t clock;;
87 // } rcl_rate_t;
88 // TODO(tfoote) integrate rate and timer implementations
89 
91 
102 bool
104 
106 
118 rcl_ret_t
120  enum rcl_clock_type_t clock_type, rcl_clock_t * clock,
121  rcl_allocator_t * allocator);
122 
124 
138 rcl_ret_t
140  rcl_clock_t * clock);
141 
143 
155 rcl_ret_t
157  rcl_clock_t * clock,
158  rcl_allocator_t * allocator);
159 
161 
173 rcl_ret_t
175  rcl_clock_t * clock);
176 
178 
190 rcl_ret_t
192  rcl_clock_t * clock,
193  rcl_allocator_t * allocator);
194 
196 
210 rcl_ret_t
212  rcl_clock_t * clock);
213 
215 
229 rcl_ret_t
231  rcl_clock_t * clock,
232  rcl_allocator_t * allocator);
233 
235 
249 rcl_ret_t
251  rcl_clock_t * clock);
252 
254 
271 rcl_ret_t
273  rcl_time_point_t * start, rcl_time_point_t * finish, rcl_duration_t * delta);
274 
276 
287 rcl_ret_t
288 rcl_clock_get_now(rcl_clock_t * clock, rcl_time_point_t * time_point);
289 
290 
292 
304 rcl_ret_t
306 
308 
320 rcl_ret_t
322 
323 
325 
338 rcl_ret_t
340  rcl_clock_t * clock, bool * is_enabled);
341 
343 
357 rcl_ret_t
359  rcl_clock_t * clock, rcl_time_point_value_t time_value);
360 
361 #ifdef __cplusplus
362 }
363 #endif
364 
365 #endif // RCL__TIME_H_
enum rcl_clock_type_t type
Definition: time.h:60
rcl_ret_t rcl_set_ros_time_override(rcl_clock_t *clock, rcl_time_point_value_t time_value)
Set the current time for this RCL_ROS_TIME time source.
A single point in time, measured in nanoseconds, the reference point is based on the source...
Definition: time.h:70
rcl_ret_t rcl_disable_ros_time_override(rcl_clock_t *clock)
Disable the ROS time abstraction override.
rcl_duration_value_t nanoseconds
Definition: time.h:79
rcl_ret_t rcl_steady_clock_init(rcl_clock_t *clock, rcl_allocator_t *allocator)
Initialize a clock as a RCL_STEADY_TIME time source.
bool rcl_clock_valid(rcl_clock_t *clock)
Check if the clock has valid values.
rcl_clock_type_t clock_type
Definition: time.h:73
rmw_ret_t rcl_ret_t
Definition: types.h:20
rcl_ret_t rcl_clock_fini(rcl_clock_t *clock)
Finalize a clock.
struct rcl_time_point_t rcl_time_point_t
A single point in time, measured in nanoseconds, the reference point is based on the source...
rcl_ret_t(* get_now)(void *data, rcl_time_point_value_t *now)
Definition: time.h:63
rcl_clock_type_t
Time source type, used to indicate the source of a time measurement.
Definition: time.h:49
rcl_time_point_value_t nanoseconds
Definition: time.h:72
Definition: time.h:51
rcl_ret_t rcl_enable_ros_time_override(rcl_clock_t *clock)
Enable the ROS time abstraction override.
rcl_allocator_t * allocator
Definition: time.h:66
rcl_ret_t rcl_system_clock_fini(rcl_clock_t *clock)
Finalize a clock as a RCL_SYSTEM_TIME time source.
int64_t rcutils_time_point_value_t
rcl_ret_t rcl_ros_clock_init(rcl_clock_t *clock, rcl_allocator_t *allocator)
Initialize a clock as a RCL_ROS_TIME time source.
int64_t rcutils_duration_value_t
rcutils_time_point_value_t rcl_time_point_value_t
A single point in time, measured in nanoseconds since the Unix epoch.
Definition: time.h:44
Definition: time.h:53
rcl_ret_t rcl_steady_clock_fini(rcl_clock_t *clock)
Finalize a clock as a RCL_STEADY_TIME time source.
#define RCL_WARN_UNUSED
Ignored return values of functions with this macro will emit a warning.
Definition: macros.h:25
Definition: time.h:54
rcutils_duration_value_t rcl_duration_value_t
A duration of time, measured in nanoseconds.
Definition: time.h:46
struct rcl_clock_t rcl_clock_t
Encapsulation of a time source.
Encapsulation of a time source.
Definition: time.h:58
#define RCL_PUBLIC
Definition: visibility_control.h:48
struct rcl_duration_t rcl_duration_t
A duration of time, measured in nanoseconds and its source.
rcl_ret_t rcl_clock_init(enum rcl_clock_type_t clock_type, rcl_clock_t *clock, rcl_allocator_t *allocator)
Initialize a clock based on the passed type.
A duration of time, measured in nanoseconds and its source.
Definition: time.h:77
Definition: time.h:52
rcl_ret_t rcl_is_enabled_ros_time_override(rcl_clock_t *clock, bool *is_enabled)
Check if the RCL_ROS_TIME time source has the override enabled.
rcl_ret_t rcl_difference_times(rcl_time_point_t *start, rcl_time_point_t *finish, rcl_duration_t *delta)
Compute the difference between two time points.
rcl_ret_t rcl_ros_clock_fini(rcl_clock_t *clock)
Finalize a clock as a RCL_ROS_TIME time source.
rcl_ret_t rcl_system_clock_init(rcl_clock_t *clock, rcl_allocator_t *allocator)
Initialize a clock as a RCL_SYSTEM_TIME time source.
void(* post_update)(void)
Definition: time.h:62
void * data
Definition: time.h:65
void(* pre_update)(void)
Definition: time.h:61
rcl_ret_t rcl_clock_get_now(rcl_clock_t *clock, rcl_time_point_t *time_point)
Fill the time point with the current value of the associated clock.