From 3395816d3f2f417953299b0d6e114a10a2ac9a84 Mon Sep 17 00:00:00 2001 From: William Woodall Date: Fri, 4 Oct 2019 16:29:56 -0700 Subject: [PATCH 1/2] add optional rmw payload to rcl options for pub and sub Signed-off-by: William Woodall --- rcl/include/rcl/publisher.h | 2 ++ rcl/include/rcl/subscription.h | 2 ++ rcl/src/rcl/publisher.c | 4 +++- rcl/src/rcl/subscription.c | 3 ++- rcl_action/src/rcl_action/action_client.c | 9 ++++----- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/rcl/include/rcl/publisher.h b/rcl/include/rcl/publisher.h index 5f4834e5a..9f657c504 100644 --- a/rcl/include/rcl/publisher.h +++ b/rcl/include/rcl/publisher.h @@ -43,6 +43,8 @@ typedef struct rcl_publisher_options_t /// Custom allocator for the publisher, used for incidental allocations. /** For default behavior (malloc/free), use: rcl_get_default_allocator() */ rcl_allocator_t allocator; + /// rmw specific publisher options, e.g. the rmw implementation specific payload. + rmw_publisher_options_t rmw_publisher_options; } rcl_publisher_options_t; /// Return a rcl_publisher_t struct with members set to `NULL`. diff --git a/rcl/include/rcl/subscription.h b/rcl/include/rcl/subscription.h index bb45ce855..af965e449 100644 --- a/rcl/include/rcl/subscription.h +++ b/rcl/include/rcl/subscription.h @@ -45,6 +45,8 @@ typedef struct rcl_subscription_options_t /// Custom allocator for the subscription, used for incidental allocations. /** For default behavior (malloc/free), see: rcl_get_default_allocator() */ rcl_allocator_t allocator; + /// rmw specific subscription options, e.g. the rmw implementation specific payload. + rmw_subscription_options_t rmw_subscription_options; } rcl_subscription_options_t; /// Return a rcl_subscription_t struct with members set to `NULL`. diff --git a/rcl/src/rcl/publisher.c b/rcl/src/rcl/publisher.c index bde157342..8cb7ce835 100644 --- a/rcl/src/rcl/publisher.c +++ b/rcl/src/rcl/publisher.c @@ -166,7 +166,8 @@ rcl_publisher_init( rcl_node_get_rmw_handle(node), type_support, remapped_topic_name, - &(options->qos)); + &(options->qos), + &(options->rmw_publisher_options)); RCL_CHECK_FOR_NULL_WITH_MSG(publisher->impl->rmw_handle, rmw_get_error_string().str, goto fail); // get actual qos, and store it @@ -240,6 +241,7 @@ rcl_publisher_get_default_options() // Must set the allocator and qos after because they are not a compile time constant. default_options.qos = rmw_qos_profile_default; default_options.allocator = rcl_get_default_allocator(); + default_options.rmw_publisher_options = rmw_get_default_publisher_options(); return default_options; } diff --git a/rcl/src/rcl/subscription.c b/rcl/src/rcl/subscription.c index b881502f3..4cbd330ca 100644 --- a/rcl/src/rcl/subscription.c +++ b/rcl/src/rcl/subscription.c @@ -162,7 +162,7 @@ rcl_subscription_init( type_support, remapped_topic_name, &(options->qos), - options->ignore_local_publications); + &(options->rmw_subscription_options)); if (!subscription->impl->rmw_handle) { RCL_SET_ERROR_MSG(rmw_get_error_string().str); goto fail; @@ -236,6 +236,7 @@ rcl_subscription_get_default_options() // Must set the allocator and qos after because they are not a compile time constant. default_options.qos = rmw_qos_profile_default; default_options.allocator = rcl_get_default_allocator(); + default_options.rmw_subscription_options = rmw_get_default_subscription_options(); return default_options; } diff --git a/rcl_action/src/rcl_action/action_client.c b/rcl_action/src/rcl_action/action_client.c index c02726ecf..d1e437e9e 100644 --- a/rcl_action/src/rcl_action/action_client.c +++ b/rcl_action/src/rcl_action/action_client.c @@ -110,11 +110,10 @@ rcl_action_get_zero_initialized_client(void) } \ goto fail; \ } \ - rcl_subscription_options_t Type ## _topic_subscription_options = { \ - .qos = options->Type ## _topic_qos, \ - .ignore_local_publications = false, \ - .allocator = allocator \ - }; \ + rcl_subscription_options_t Type ## _topic_subscription_options = \ + rcl_subscription_get_default_options(); \ + Type ## _topic_subscription_options.qos = options->Type ## _topic_qos; \ + Type ## _topic_subscription_options.allocator = allocator; \ action_client->impl->Type ## _subscription = rcl_get_zero_initialized_subscription(); \ ret = rcl_subscription_init( \ &action_client->impl->Type ## _subscription, \ From 7e427020c974b5a6bcea9e4b65b69c281c607971 Mon Sep 17 00:00:00 2001 From: William Woodall Date: Fri, 4 Oct 2019 16:30:20 -0700 Subject: [PATCH 2/2] move ignore_local_publications into rmw options structure for subs Signed-off-by: William Woodall --- rcl/include/rcl/subscription.h | 2 -- rcl/src/rcl/subscription.c | 6 ++---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/rcl/include/rcl/subscription.h b/rcl/include/rcl/subscription.h index af965e449..7de6ed8ff 100644 --- a/rcl/include/rcl/subscription.h +++ b/rcl/include/rcl/subscription.h @@ -40,8 +40,6 @@ typedef struct rcl_subscription_options_t { /// Middleware quality of service settings for the subscription. rmw_qos_profile_t qos; - /// If true, messages published from within the same node are ignored. - bool ignore_local_publications; /// Custom allocator for the subscription, used for incidental allocations. /** For default behavior (malloc/free), see: rcl_get_default_allocator() */ rcl_allocator_t allocator; diff --git a/rcl/src/rcl/subscription.c b/rcl/src/rcl/subscription.c index 4cbd330ca..45aee8389 100644 --- a/rcl/src/rcl/subscription.c +++ b/rcl/src/rcl/subscription.c @@ -230,10 +230,8 @@ rcl_subscription_options_t rcl_subscription_get_default_options() { // !!! MAKE SURE THAT CHANGES TO THESE DEFAULTS ARE REFLECTED IN THE HEADER DOC STRING - static rcl_subscription_options_t default_options = { - .ignore_local_publications = false, - }; - // Must set the allocator and qos after because they are not a compile time constant. + static rcl_subscription_options_t default_options; + // Must set these after declaration because they are not a compile time constants. default_options.qos = rmw_qos_profile_default; default_options.allocator = rcl_get_default_allocator(); default_options.rmw_subscription_options = rmw_get_default_subscription_options();