22 #include "rcl/error_handling.h"
24 #include "rmw/error_handling.h"
27 #include "./context_impl.h"
31 rmw_guard_condition_t * rmw_handle;
32 bool allocated_rmw_guard_condition;
41 return null_guard_condition;
45 __rcl_guard_condition_init_from_rmw_impl(
47 const rmw_guard_condition_t * rmw_guard_condition,
58 if (guard_condition->
impl) {
59 RCL_SET_ERROR_MSG(
"guard_condition already initialized, or memory was unintialized");
66 "the given context is not valid, "
67 "either rcl_init() was not called or rcl_shutdown() was called.");
73 if (!guard_condition->
impl) {
74 RCL_SET_ERROR_MSG(
"allocating memory failed");
78 if (rmw_guard_condition) {
80 guard_condition->
impl->rmw_handle = (rmw_guard_condition_t *)rmw_guard_condition;
81 guard_condition->
impl->allocated_rmw_guard_condition =
false;
84 guard_condition->
impl->rmw_handle = rmw_create_guard_condition(&(context->
impl->
rmw_context));
85 if (!guard_condition->
impl->rmw_handle) {
87 allocator->deallocate(guard_condition->
impl, allocator->state);
88 guard_condition->
impl = NULL;
89 RCL_SET_ERROR_MSG(rmw_get_error_string().str);
92 guard_condition->
impl->allocated_rmw_guard_condition =
true;
95 guard_condition->
impl->options = options;
106 return __rcl_guard_condition_init_from_rmw_impl(guard_condition, NULL, context, options);
112 const rmw_guard_condition_t * rmw_guard_condition,
116 return __rcl_guard_condition_init_from_rmw_impl(
117 guard_condition, rmw_guard_condition, context, options);
126 if (guard_condition->
impl) {
129 if (guard_condition->
impl->rmw_handle && guard_condition->
impl->allocated_rmw_guard_condition) {
130 if (rmw_destroy_guard_condition(guard_condition->
impl->rmw_handle) != RMW_RET_OK) {
131 RCL_SET_ERROR_MSG(rmw_get_error_string().str);
135 allocator.deallocate(guard_condition->
impl, allocator.state);
136 guard_condition->
impl = NULL;
147 return default_options;
158 if (rmw_trigger_guard_condition(guard_condition->
impl->rmw_handle) != RMW_RET_OK) {
159 RCL_SET_ERROR_MSG(rmw_get_error_string().str);
169 RCL_CHECK_ARGUMENT_FOR_NULL(guard_condition, NULL);
170 RCL_CHECK_FOR_NULL_WITH_MSG(
171 guard_condition->
impl,
172 "guard condition implementation is invalid",
174 return &guard_condition->
impl->options;
177 rmw_guard_condition_t *
184 return guard_condition->
impl->rmw_handle;
#define rcl_get_default_allocator
Return a properly initialized rcl_allocator_t with default values.
#define RCL_CHECK_ALLOCATOR_WITH_MSG(allocator, msg, fail_statement)
Check that the given allocator is initialized, or fail with a message.
rcutils_allocator_t rcl_allocator_t
Encapsulation of an allocator.
RCL_PUBLIC RCL_WARN_UNUSED bool rcl_context_is_valid(const rcl_context_t *context)
Return true if the given context is currently valid, otherwise false.
RCL_PUBLIC RCL_WARN_UNUSED const rcl_guard_condition_options_t * rcl_guard_condition_get_options(const rcl_guard_condition_t *guard_condition)
Return the guard condition options.
RCL_PUBLIC RCL_WARN_UNUSED rcl_guard_condition_t rcl_get_zero_initialized_guard_condition(void)
Return a rcl_guard_condition_t struct with members set to NULL.
RCL_PUBLIC RCL_WARN_UNUSED rmw_guard_condition_t * rcl_guard_condition_get_rmw_handle(const rcl_guard_condition_t *guard_condition)
Return the rmw guard condition handle.
RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_trigger_guard_condition(rcl_guard_condition_t *guard_condition)
Trigger a rcl guard condition.
RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_guard_condition_init(rcl_guard_condition_t *guard_condition, rcl_context_t *context, const rcl_guard_condition_options_t options)
Initialize a rcl guard_condition.
RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_guard_condition_fini(rcl_guard_condition_t *guard_condition)
Finalize a rcl_guard_condition_t.
RCL_PUBLIC RCL_WARN_UNUSED rcl_guard_condition_options_t rcl_guard_condition_get_default_options(void)
Return the default options in a rcl_guard_condition_options_t struct.
rcl_ret_t rcl_guard_condition_init_from_rmw(rcl_guard_condition_t *guard_condition, const rmw_guard_condition_t *rmw_guard_condition, rcl_context_t *context, const rcl_guard_condition_options_t options)
Same as rcl_guard_condition_init(), but reusing an existing rmw handle.
rmw_context_t rmw_context
rmw context.
Encapsulates the non-global state of an init/shutdown cycle.
rcl_context_impl_t * impl
Implementation specific pointer.
Options available for a rcl guard condition.
rcl_allocator_t allocator
Custom allocator for the guard condition, used for internal allocations.
Handle for a rcl guard condition.
rcl_guard_condition_impl_t * impl
Pointer to the guard condition implementation.
#define RCL_RET_NOT_INIT
rcl_init() not yet called return code.
#define RCL_RET_ALREADY_INIT
rcl_init() already called return code.
#define RCL_RET_OK
Success return code.
#define RCL_RET_BAD_ALLOC
Failed to allocate memory return code.
#define RCL_RET_INVALID_ARGUMENT
Invalid argument return code.
#define RCL_RET_ERROR
Unspecified error return code.
rmw_ret_t rcl_ret_t
The type that holds an rcl return code.