From 16d3cf4aaf3e964459b816aa32b0ff69bb95a477 Mon Sep 17 00:00:00 2001 From: ivanpauno Date: Mon, 1 Apr 2019 17:54:01 -0300 Subject: [PATCH] Add function to get publisher actual qos settings (#169) * Added rmw_publisher_get_actual_qos function Signed-off-by: ivanpauno * Add RMW_QOS_POLICY_*_UNKNOWN enum value Signed-off-by: ivanpauno --- rmw/include/rmw/rmw.h | 26 ++++++++++++++++++++++++++ rmw/include/rmw/types.h | 9 ++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/rmw/include/rmw/rmw.h b/rmw/include/rmw/rmw.h index 2310b9ff..63d86b05 100644 --- a/rmw/include/rmw/rmw.h +++ b/rmw/include/rmw/rmw.h @@ -251,6 +251,32 @@ rmw_publisher_count_matched_subscriptions( const rmw_publisher_t * publisher, size_t * subscription_count); +/// Retrieve the actual qos settings of the publisher. +/** + * Query the underlying middleware to determine the qos settings + * of the publisher. + * The actual configuration applied when using RMW_*_SYSTEM_DEFAULT + * can only be resolved after the creation of the publisher, and it + * depends on the underlying rmw implementation. + * If the underlying setting in use can't be represented in ROS terms, + * it will be set to RMW_*_UNKNOWN. + * The value of avoid_ros_namespace_conventions field is not resolved + * with this function. The rcl function rcl_publisher_get_actual_qos + * resolves it. + * + * \param[in] publisher the publisher object to inspect + * \param[out] qos the actual qos settings + * \return `RMW_RET_OK` if successful, or + * \return `RMW_RET_INVALID_ARGUMENT` if either argument is null, or + * \return `RMW_RET_ERROR` if an unexpected error occurs. + */ +RMW_PUBLIC +RMW_WARN_UNUSED +rmw_ret_t +rmw_publisher_get_actual_qos( + const rmw_publisher_t * publisher, + rmw_qos_profile_t * qos); + /// Publish an already serialized message. /** * The publisher must already be registered with the correct message type diff --git a/rmw/include/rmw/types.h b/rmw/include/rmw/types.h index 43d8016c..b3ea4fba 100644 --- a/rmw/include/rmw/types.h +++ b/rmw/include/rmw/types.h @@ -175,21 +175,24 @@ enum RMW_PUBLIC_TYPE rmw_qos_reliability_policy_t { RMW_QOS_POLICY_RELIABILITY_SYSTEM_DEFAULT, RMW_QOS_POLICY_RELIABILITY_RELIABLE, - RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT + RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT, + RMW_QOS_POLICY_RELIABILITY_UNKNOWN }; enum RMW_PUBLIC_TYPE rmw_qos_history_policy_t { RMW_QOS_POLICY_HISTORY_SYSTEM_DEFAULT, RMW_QOS_POLICY_HISTORY_KEEP_LAST, - RMW_QOS_POLICY_HISTORY_KEEP_ALL + RMW_QOS_POLICY_HISTORY_KEEP_ALL, + RMW_QOS_POLICY_HISTORY_UNKNOWN }; enum RMW_PUBLIC_TYPE rmw_qos_durability_policy_t { RMW_QOS_POLICY_DURABILITY_SYSTEM_DEFAULT, RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL, - RMW_QOS_POLICY_DURABILITY_VOLATILE + RMW_QOS_POLICY_DURABILITY_VOLATILE, + RMW_QOS_POLICY_DURABILITY_UNKNOWN }; /// ROS MiddleWare quality of service profile.