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 #if __cplusplus
19 extern "C"
20 {
21 #endif
22 
23 #include "rcl/macros.h"
24 #include "rcl/types.h"
25 #include "rcl/visibility_control.h"
26 #include "rcutils/time.h"
27 
29 #define RCL_S_TO_NS RCUTILS_S_TO_NS
30 #define RCL_MS_TO_NS RCUTILS_MS_TO_NS
32 #define RCL_US_TO_NS RCUTILS_US_TO_NS
34 
36 #define RCL_NS_TO_S RCUTILS_NS_TO_S
37 #define RCL_NS_TO_MS RCUTILS_NS_TO_MS
39 #define RCL_NS_TO_US RCUTILS_NS_TO_US
41 
46 
49 {
54 };
55 
57 typedef struct rcl_time_source_t
58 {
60  void (* pre_update)(void);
61  void (* post_update)(void);
62  rcl_ret_t (* get_now)(void * data, rcl_time_point_value_t * now);
63  // void (*set_now) (rcl_time_point_value_t);
64  void * data;
66 
67 struct rcl_ros_time_source_storage_t;
68 
70 typedef struct rcl_time_point_t
71 {
72  rcl_time_point_value_t nanoseconds;
75 
77 typedef struct rcl_duration_t
78 {
79  rcl_duration_value_t nanoseconds;
82 
83 // typedef struct rcl_rate_t
84 // {
85 // rcl_time_point_value_t trigger_time;
86 // int64_t period;
87 // rcl_time_source_t * time_source;
88 // } rcl_rate_t;
89 // TODO(tfoote) integrate rate and timer implementations
90 
92 
103 bool
105 
107 
118 rcl_ret_t
120  enum rcl_time_source_type_t time_source_type, rcl_time_source_t * time_source
121 );
122 
124 
138 rcl_ret_t
140 
142 
153 rcl_ret_t
155 
157 
169 rcl_ret_t
171 
173 
184 rcl_ret_t
186 
188 
202 rcl_ret_t
204 
206 
219 rcl_ret_t
221 
223 
237 rcl_ret_t
239 
241 
258 rcl_ret_t
259 rcl_time_point_init(rcl_time_point_t * time_point, rcl_time_source_t * time_source);
260 
262 
274 rcl_ret_t
276 
278 
293 rcl_ret_t
294 rcl_duration_init(rcl_duration_t * duration, rcl_time_source_t * time_source);
295 
297 
309 rcl_ret_t
311 
313 
328 
330 
345 
347 
362 
364 
380 rcl_ret_t
382 
384 
401 rcl_ret_t
403  rcl_duration_t * delta);
404 
406 
417 rcl_ret_t
419 
420 
422 
434 rcl_ret_t
436 
438 
450 rcl_ret_t
452 
453 
455 
468 rcl_ret_t
470  bool * is_enabled);
471 
473 
487 rcl_ret_t
489  rcl_time_point_value_t time_value);
490 
491 #if __cplusplus
492 }
493 #endif
494 
495 #endif // RCL__TIME_H_
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_time_source_t *time_source)
Disable the ROS time abstraction override.
rcl_ret_t rcl_duration_init(rcl_duration_t *duration, rcl_time_source_t *time_source)
Initialize a duration using the time_source.
rcl_ret_t rcl_time_point_init(rcl_time_point_t *time_point, rcl_time_source_t *time_source)
Initialize a time point using the time_source.
rcl_duration_value_t nanoseconds
Definition: time.h:79
rcl_ret_t rcl_time_point_fini(rcl_time_point_t *time_point)
Finalize a time_point.
rcl_ret_t rcl_ros_time_source_init(rcl_time_source_t *time_source)
Initialize a time_source as a RCL_ROS_TIME time source.
rcl_time_source_t * time_source
Definition: time.h:80
void * data
Definition: time.h:64
rmw_ret_t rcl_ret_t
Definition: types.h:20
enum rcl_time_source_type_t type
Definition: time.h:59
void(* post_update)(void)
Definition: time.h:61
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:62
rcl_time_source_t * rcl_get_default_ros_time_source(void)
Get the default RCL_ROS_TIME time source.
rcl_ret_t rcl_is_enabled_ros_time_override(rcl_time_source_t *time_source, bool *is_enabled)
Check if the RCL_ROS_TIME time source has the override enabled.
rcl_time_point_value_t nanoseconds
Definition: time.h:72
rcl_ret_t rcl_set_default_ros_time_source(rcl_time_source_t *process_time_source)
Set the current time on the RCL_ROS_TIME time source.
Definition: time.h:53
struct rcl_time_source_t rcl_time_source_t
Encapsulation of a time source.
rcl_ret_t rcl_enable_ros_time_override(rcl_time_source_t *time_source)
Enable the ROS time abstraction override.
Definition: time.h:50
void(* pre_update)(void)
Definition: time.h:60
rcl_ret_t rcl_time_source_fini(rcl_time_source_t *time_source)
Finalize a time_source.
rcl_ret_t rcl_time_point_get_now(rcl_time_point_t *time_point)
Fill the time point with the current value of the associated clock.
rcl_ret_t rcl_system_time_source_init(rcl_time_source_t *time_source)
Initialize a time_source as a RCL_SYSTEM_TIME time source.
rcl_time_source_type_t
Time source type, used to indicate the source of a time measurement.
Definition: time.h:48
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:43
Encapsulation of a time source.
Definition: time.h:57
rcl_time_source_t * rcl_get_default_system_time_source(void)
Get the default RCL_SYSTEM_TIME time source.
rcl_ret_t rcl_set_ros_time_override(rcl_time_source_t *time_source, rcl_time_point_value_t time_value)
Set the current time for this RCL_ROS_TIME time source.
Definition: time.h:51
#define RCL_WARN_UNUSED
Ignored return values of functions with this macro will emit a warning.
Definition: macros.h:25
rcutils_duration_value_t rcl_duration_value_t
A duration of time, measured in nanoseconds.
Definition: time.h:45
rcl_time_source_t * rcl_get_default_steady_time_source(void)
Get the default RCL_STEADY_TIME time source.
#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_ros_time_source_fini(rcl_time_source_t *time_source)
Finalize a time_source as a RCL_ROS_TIME time source.
A duration of time, measured in nanoseconds and its source.
Definition: time.h:77
rcl_time_source_t * time_source
Definition: time.h:73
bool rcl_time_source_valid(rcl_time_source_t *time_source)
Check if the time_source has valid values.
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_system_time_source_fini(rcl_time_source_t *time_source)
Finalize a time_source as a RCL_SYSTEM_TIME time source.
rcl_ret_t rcl_duration_fini(rcl_duration_t *duration)
Finalize a duration.
rcl_ret_t rcl_steady_time_source_fini(rcl_time_source_t *time_source)
Finalize a time_source as a RCL_STEADY_TIME time source.
rcl_ret_t rcl_time_source_init(enum rcl_time_source_type_t time_source_type, rcl_time_source_t *time_source)
Initialize a time_source based on the passed type.
Definition: time.h:52
uint64_t rcutils_time_point_value_t
rcl_ret_t rcl_steady_time_source_init(rcl_time_source_t *time_source)
Initialize a time_source as a RCL_STEADY_TIME time source.