10#ifndef NROS_RCLCPP_QOS_HPP
11#define NROS_RCLCPP_QOS_HPP
20#include "rclcpp/duration.hpp"
25#include "rclc/visibility_control.h"
29#include "rclcpp/logging.hpp"
203struct QoSInitialization;
226 return d.nanoseconds() <= 0 ? 0u
227 : d.nanoseconds() == INT64_MAX - 1
229 : (d.nanoseconds() >=
static_cast<int64_t
>(UINT32_MAX - 1u) * 1000000 - 999999
231 :
static_cast<uint32_t
>((d.nanoseconds() + 999999) / 1000000));
242 return Duration::from_nanoseconds(INT64_MAX - 1);
250 : Duration::from_nanoseconds(
static_cast<int64_t
>(ms) * 1000000);
283 depth_(10), deadline_ms_(0), lifespan_ms_(0), liveliness_lease_ms_(0),
284 avoid_ros_namespace_conventions_(0), tx_express_(0) {}
396 avoid_ros_namespace_conventions_ = on ? 1 : 0;
405 tx_express_ = on ? 1 : 0;
439 constexpr int depth()
const {
return depth_; }
450 return avoid_ros_namespace_conventions_ != 0;
453 constexpr bool tx_express()
const {
return tx_express_ != 0; }
483 uint32_t deadline_ms_;
484 uint32_t lifespan_ms_;
485 uint32_t liveliness_lease_ms_;
486 uint8_t avoid_ros_namespace_conventions_;
533 return !(left == right);
682 ::rclcpp::Duration::from_nanoseconds(10000000000LL));
876 typedef char yes_t[1];
877 typedef char no_t[2];
880 static yes_t& probe(const ::rclcpp::QoS*);
884 static yes_t& probe(const ::rmw_qos_profile_s*);
885 static no_t& probe(...);
889 static const bool value =
sizeof(probe(arg())) ==
sizeof(yes_t);
1006 static_assert(detail::refuse<T>::value, NROS_RCLCPP_REFUSE_SYSTEM_DEFAULTS_QOS);
1060#if defined(NROS_RMW_ENTITY_H)
1062 "<rclcpp/qos.hpp> defines upstream's rmw_qos_profile_t, and <nros/rmw_entity.h> defines the RMW ABI's struct under the same name. A node includes rclcpp only; a backend includes the ABI header only (issue 2054)."
1074#define RMW_DURATION_INFINITE \
1075 { 9223372036LL, 854775807LL }
1076#define RMW_DURATION_UNSPECIFIED \
1078#define RMW_QOS_POLICY_DEPTH_SYSTEM_DEFAULT 0
1079#define RMW_QOS_DEADLINE_DEFAULT RMW_DURATION_UNSPECIFIED
1080#define RMW_QOS_DEADLINE_BEST_AVAILABLE \
1081 { 9223372036LL, 854775806LL }
1082#define RMW_QOS_LIFESPAN_DEFAULT RMW_DURATION_UNSPECIFIED
1083#define RMW_QOS_LIVELINESS_LEASE_DURATION_DEFAULT RMW_DURATION_UNSPECIFIED
1084#define RMW_QOS_LIVELINESS_LEASE_DURATION_BEST_AVAILABLE \
1085 { 9223372036LL, 854775806LL }
1131 : ms == UINT32_MAX ?
rmw_time_t{9223372036u, 854775807u}
1132 : ms == UINT32_MAX - 1u ?
rmw_time_t{9223372036u, 854775806u}
1133 :
rmw_time_t{ms / 1000u, (ms % 1000u) * 1000000u};
1139 return (t.
sec == 0u && t.
nsec == 0u) ? 0u
1140 : (t.
sec == 9223372036u && t.
nsec == 854775807u) ? UINT32_MAX
1141 : (t.
sec == 9223372036u && t.
nsec == 854775806u)
1143 : (t.
sec > 9000000000u ? UINT32_MAX
1145 static_cast<int64_t
>(t.
sec) * 1000000000 +
1146 static_cast<int64_t
>(t.
nsec))));
1233 constexpr operator ::rclcpp::QoS()
const {
1248 return ::rclcpp::detail::qos_from_ffi(f);
1259 static_cast<size_t>(q.
depth() < 0 ? 0 : q.
depth()),
1295 :
QoS(static_cast<
QoS>(profile)) {
1297 depth_ =
static_cast<int>(
init.depth);
constexpr BestAvailableQoS()
Definition qos.hpp:992
constexpr ClockQoS()
Definition qos.hpp:977
constexpr ParameterEventsQoS()
Definition qos.hpp:958
constexpr ParametersQoS()
Definition qos.hpp:946
constexpr Duration lifespan() const
The lifespan window. Duration() (zero) = infinite.
Definition qos.hpp:443
constexpr Duration deadline() const
The deadline window. Duration() (zero) = infinite.
Definition qos.hpp:441
constexpr QoS & liveliness_lease_duration(const Duration &d)
Definition qos.hpp:388
constexpr QoS & durability_best_available()
Definition qos.hpp:341
constexpr QoS & keep_all()
Use KEEP_ALL history (bounded by transport).
Definition qos.hpp:355
constexpr QoS & reliability_best_available()
Definition qos.hpp:333
constexpr QoS()
Definition qos.hpp:280
constexpr QoS & deadline(const Duration &d)
Definition qos.hpp:367
constexpr Duration liveliness_lease_duration() const
The liveliness lease window. Duration() (zero) = infinite.
Definition qos.hpp:445
constexpr bool tx_express() const
Whether this publisher's samples bypass transport tx batching.
Definition qos.hpp:453
constexpr QoS & best_effort()
Set reliability to BEST_EFFORT (fire-and-forget; default for sensors).
Definition qos.hpp:312
constexpr QoS & transient_local()
Set durability to TRANSIENT_LOCAL — late joiners get the last value.
Definition qos.hpp:318
constexpr QoS & lifespan(const Duration &d)
Definition qos.hpp:374
constexpr QoS & keep_last(int depth)
Definition qos.hpp:348
constexpr HistoryPolicy history() const
The history policy.
Definition qos.hpp:435
constexpr QoS & reliable()
Set reliability to RELIABLE (acked transport, retransmits on loss).
Definition qos.hpp:306
constexpr ::rmw_qos_profile_s get_rmw_qos_profile() const
Definition qos.hpp:1300
constexpr LivelinessPolicy liveliness() const
The liveliness policy kind.
Definition qos.hpp:437
constexpr DurabilityPolicy durability() const
The durability policy.
Definition qos.hpp:433
constexpr QoS & tx_express(bool on)
Definition qos.hpp:404
constexpr ReliabilityPolicy reliability() const
The reliability policy.
Definition qos.hpp:431
constexpr QoS & liveliness(LivelinessPolicy kind)
Definition qos.hpp:381
constexpr QoS & avoid_ros_namespace_conventions(bool on)
Definition qos.hpp:395
constexpr QoS & durability_volatile()
Set durability to VOLATILE — late joiners get nothing (default).
Definition qos.hpp:324
static constexpr QoS services()
Services profile: RELIABLE + VOLATILE + KEEP_LAST(10).
Definition qos.hpp:805
static constexpr QoS sensor_data()
Sensor-data profile: BEST_EFFORT + VOLATILE + KEEP_LAST(5).
Definition qos.hpp:802
constexpr QoS(::size_t depth)
Definition qos.hpp:292
constexpr bool avoid_ros_namespace_conventions() const
Whether to skip the /rt/ ROS topic-name prefix.
Definition qos.hpp:449
constexpr int depth() const
Configured queue depth (only meaningful for KEEP_LAST).
Definition qos.hpp:439
static constexpr QoS default_profile()
Default profile: RELIABLE + VOLATILE + KEEP_LAST(10).
Definition qos.hpp:799
constexpr RosoutQoS()
Definition qos.hpp:971
constexpr SensorDataQoS()
Definition qos.hpp:929
constexpr ServicesQoS()
Definition qos.hpp:938
SystemDefaultsQoS()
Definition qos.hpp:1005
static const bool value
Definition qos.hpp:889
Definition rclcpp.hpp:418
constexpr QoS qos_all_unknown()
Definition qos.hpp:753
constexpr uint32_t qos_window_from_rmw(const rmw_time_t &t)
Definition qos.hpp:1138
constexpr DurabilityPolicy qos_durability_from_rmw(rmw_qos_durability_policy_t p)
Definition qos.hpp:1185
constexpr Duration qos_window_duration(uint32_t ms)
Definition qos.hpp:248
constexpr rmw_qos_history_policy_t qos_history_to_rmw(HistoryPolicy p)
Definition qos.hpp:1166
constexpr nros_cpp_qos_t qos_to_ffi(const QoS &qos)
Definition qos.hpp:719
constexpr rmw_qos_liveliness_policy_t qos_liveliness_to_rmw(LivelinessPolicy p)
Definition qos.hpp:1192
constexpr HistoryPolicy qos_history_from_rmw(rmw_qos_history_policy_t p)
Definition qos.hpp:1172
constexpr rmw_qos_durability_policy_t qos_durability_to_rmw(DurabilityPolicy p)
Definition qos.hpp:1178
constexpr rmw_time_t qos_window_to_rmw(uint32_t ms)
Definition qos.hpp:1129
constexpr QoS qos_from_ffi(const nros_cpp_qos_t &f)
Definition qos.hpp:778
constexpr ReliabilityPolicy qos_reliability_from_rmw(rmw_qos_reliability_policy_t p)
Definition qos.hpp:1159
constexpr uint32_t qos_window_ms(const Duration &d)
Definition qos.hpp:225
constexpr Duration qos_best_available_duration()
Definition qos.hpp:241
constexpr rmw_qos_profile_t qos_to_rmw(const QoS &q)
Definition qos.hpp:1257
constexpr LivelinessPolicy qos_liveliness_from_rmw(rmw_qos_liveliness_policy_t p)
Definition qos.hpp:1200
constexpr rmw_qos_reliability_policy_t qos_reliability_to_rmw(ReliabilityPolicy p)
Definition qos.hpp:1152
constexpr bool operator==(const QoS &left, const QoS &right)
Definition qos.hpp:518
const char * rclc_qos_policy_kind_to_cstr(uint32_t policy)
constexpr bool operator!=(const QoS &left, const QoS &right)
Definition qos.hpp:532
constexpr QoS KeepLast(::size_t depth)
Definition qos.hpp:1020
const char * qos_policy_kind_to_cstr(uint32_t policy)
Definition qos.hpp:582
constexpr QoS KeepAll()
rclcpp::KeepAll(). Same ADOPT-BOUNDED note as KeepLast.
Definition qos.hpp:1025
ReliabilityPolicy
Definition qos.hpp:148
@ BestAvailable
Definition qos.hpp:159
@ Reliable
Definition qos.hpp:149
@ Unknown
The backend could not determine this policy. An ABSENCE.
Definition qos.hpp:155
@ SystemDefault
Definition qos.hpp:153
@ BestEffort
Definition qos.hpp:150
LivelinessPolicy
Definition qos.hpp:190
@ Automatic
Definition qos.hpp:192
@ BestAvailable
Resolve at creation against the discovered graph (issue 1973).
Definition qos.hpp:199
@ ManualByNode
Definition qos.hpp:194
@ Unknown
Definition qos.hpp:197
@ SystemDefault
Definition qos.hpp:191
@ ManualByTopic
Definition qos.hpp:193
HistoryPolicy
History policy. Matches DDS HISTORY_QOS_POLICY.
Definition qos.hpp:175
@ Unknown
The backend could not determine this policy. An ABSENCE.
Definition qos.hpp:181
@ KeepAll
Definition qos.hpp:177
@ SystemDefault
Nobody stated a history policy — the middleware chose.
Definition qos.hpp:179
@ KeepLast
Definition qos.hpp:176
void init(int argc, char const *const *argv)
Definition rclcpp.hpp:525
DurabilityPolicy
Durability policy. Matches DDS DURABILITY_QOS_POLICY.
Definition qos.hpp:163
@ BestAvailable
Resolve at creation against the discovered graph (issue 1973).
Definition qos.hpp:171
@ Volatile
Definition qos.hpp:164
@ Unknown
The backend could not determine this policy. An ABSENCE.
Definition qos.hpp:169
@ TransientLocal
Definition qos.hpp:165
@ SystemDefault
Nobody stated a durability policy — the middleware chose.
Definition qos.hpp:167
rmw_qos_reliability_policy_e
Definition qos.hpp:1087
@ RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT
Definition qos.hpp:1090
@ RMW_QOS_POLICY_RELIABILITY_BEST_AVAILABLE
Definition qos.hpp:1092
@ RMW_QOS_POLICY_RELIABILITY_SYSTEM_DEFAULT
Definition qos.hpp:1088
@ RMW_QOS_POLICY_RELIABILITY_RELIABLE
Definition qos.hpp:1089
@ RMW_QOS_POLICY_RELIABILITY_UNKNOWN
Definition qos.hpp:1091
enum rmw_qos_liveliness_policy_e rmw_qos_liveliness_policy_t
static constexpr rmw_qos_profile_t rmw_qos_profile_sensor_data
Definition qos.hpp:1311
nros_cpp_qos_history_t
Definition qos.hpp:70
@ NROS_CPP_QOS_HISTORY_UNKNOWN
Definition qos.hpp:74
@ NROS_CPP_QOS_KEEP_LAST
Definition qos.hpp:71
@ NROS_CPP_QOS_KEEP_ALL
Definition qos.hpp:72
@ NROS_CPP_QOS_HISTORY_SYSTEM_DEFAULT
Definition qos.hpp:73
static constexpr rmw_qos_profile_t rmw_qos_profile_default
Definition qos.hpp:1309
enum rmw_qos_reliability_policy_e rmw_qos_reliability_policy_t
static constexpr rmw_qos_profile_t rmw_qos_profile_parameter_events
Definition qos.hpp:1317
nros_cpp_qos_liveliness_t
Definition qos.hpp:76
@ NROS_CPP_QOS_LIVELINESS_MANUAL_BY_NODE
Definition qos.hpp:80
@ NROS_CPP_QOS_LIVELINESS_AUTOMATIC
Definition qos.hpp:78
@ NROS_CPP_QOS_LIVELINESS_UNKNOWN
Definition qos.hpp:81
@ NROS_CPP_QOS_LIVELINESS_BEST_AVAILABLE
Definition qos.hpp:82
@ NROS_CPP_QOS_LIVELINESS_MANUAL_BY_TOPIC
Definition qos.hpp:79
@ NROS_CPP_QOS_LIVELINESS_NONE
Definition qos.hpp:77
struct rmw_qos_profile_s rmw_qos_profile_t
static constexpr rmw_qos_profile_t rmw_qos_profile_services_default
Definition qos.hpp:1313
enum rmw_qos_durability_policy_e rmw_qos_durability_policy_t
enum rmw_qos_history_policy_e rmw_qos_history_policy_t
rmw_qos_durability_policy_e
Definition qos.hpp:1102
@ RMW_QOS_POLICY_DURABILITY_BEST_AVAILABLE
Definition qos.hpp:1107
@ RMW_QOS_POLICY_DURABILITY_UNKNOWN
Definition qos.hpp:1106
@ RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL
Definition qos.hpp:1104
@ RMW_QOS_POLICY_DURABILITY_VOLATILE
Definition qos.hpp:1105
@ RMW_QOS_POLICY_DURABILITY_SYSTEM_DEFAULT
Definition qos.hpp:1103
rmw_qos_history_policy_e
Definition qos.hpp:1095
@ RMW_QOS_POLICY_HISTORY_SYSTEM_DEFAULT
Definition qos.hpp:1096
@ RMW_QOS_POLICY_HISTORY_KEEP_LAST
Definition qos.hpp:1097
@ RMW_QOS_POLICY_HISTORY_UNKNOWN
Definition qos.hpp:1099
@ RMW_QOS_POLICY_HISTORY_KEEP_ALL
Definition qos.hpp:1098
rmw_qos_liveliness_policy_e
Definition qos.hpp:1110
@ RMW_QOS_POLICY_LIVELINESS_UNKNOWN
Definition qos.hpp:1116
@ RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_NODE
Deprecated upstream; kept because the value is upstream's.
Definition qos.hpp:1114
@ RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_TOPIC
Definition qos.hpp:1115
@ RMW_QOS_POLICY_LIVELINESS_BEST_AVAILABLE
Definition qos.hpp:1117
@ RMW_QOS_POLICY_LIVELINESS_SYSTEM_DEFAULT
Definition qos.hpp:1111
@ RMW_QOS_POLICY_LIVELINESS_AUTOMATIC
Definition qos.hpp:1112
struct rmw_time_s rmw_time_t
nros_cpp_qos_durability_t
Definition qos.hpp:63
@ NROS_CPP_QOS_DURABILITY_UNKNOWN
Definition qos.hpp:67
@ NROS_CPP_QOS_DURABILITY_BEST_AVAILABLE
Definition qos.hpp:68
@ NROS_CPP_QOS_VOLATILE
Definition qos.hpp:64
@ NROS_CPP_QOS_TRANSIENT_LOCAL
Definition qos.hpp:65
@ NROS_CPP_QOS_DURABILITY_SYSTEM_DEFAULT
Definition qos.hpp:66
nros_cpp_qos_reliability_t
Definition qos.hpp:56
@ NROS_CPP_QOS_RELIABILITY_BEST_AVAILABLE
Definition qos.hpp:61
@ NROS_CPP_QOS_RELIABLE
Definition qos.hpp:57
@ NROS_CPP_QOS_RELIABILITY_UNKNOWN
Definition qos.hpp:60
@ NROS_CPP_QOS_BEST_EFFORT
Definition qos.hpp:58
@ NROS_CPP_QOS_RELIABILITY_SYSTEM_DEFAULT
Definition qos.hpp:59
static constexpr rmw_qos_profile_t rmw_qos_profile_parameters
Definition qos.hpp:1315
enum nros_cpp_qos_durability_t durability
Definition qos.hpp:86
uint32_t liveliness_lease_ms
Definition qos.hpp:92
uint32_t lifespan_ms
Definition qos.hpp:91
enum nros_cpp_qos_history_t history
Definition qos.hpp:87
uint8_t tx_express
Definition qos.hpp:94
enum nros_cpp_qos_liveliness_t liveliness_kind
Definition qos.hpp:88
enum nros_cpp_qos_reliability_t reliability
Definition qos.hpp:85
uint8_t avoid_ros_namespace_conventions
Definition qos.hpp:93
uint32_t deadline_ms
Definition qos.hpp:90
int depth
Definition qos.hpp:89
rmw_qos_history_policy_t history_policy
Definition qos.hpp:1278
constexpr QoSInitialization(rmw_qos_history_policy_t history_policy_arg, size_t depth_arg)
Definition qos.hpp:1281
static constexpr QoSInitialization from_rmw(const rmw_qos_profile_t &profile)
Definition qos.hpp:1289
constexpr QoSInitialization(const QoS &qos)
Definition qos.hpp:1285
size_t depth
Definition qos.hpp:1279
F type
Definition qos.hpp:866
F type
Definition qos.hpp:872
F type
Definition qos.hpp:869
F type
Definition qos.hpp:863
static constexpr QoS rosout()
Definition qos.hpp:680
static constexpr QoS parameters()
rmw_qos_profile_parameters — KEEP_LAST(1000), RELIABLE, VOLATILE.
Definition qos.hpp:669
static constexpr QoS best_available()
Definition qos.hpp:695
static constexpr QoS clock()
Definition qos.hpp:690
static constexpr QoS parameter_events()
Definition qos.hpp:676
static constexpr QoS services_default()
Definition qos.hpp:666
static constexpr QoS sensor_data()
rmw_qos_profile_sensor_data — KEEP_LAST(5), BEST_EFFORT, VOLATILE.
Definition qos.hpp:659
static constexpr QoS default_profile()
Definition qos.hpp:656
size_t depth
Definition qos.hpp:1223
rmw_time_t deadline
Definition qos.hpp:1226
rmw_time_t lifespan
Definition qos.hpp:1227
rmw_qos_reliability_policy_t reliability
Definition qos.hpp:1224
rmw_time_t liveliness_lease_duration
Definition qos.hpp:1229
rmw_qos_history_policy_t history
Definition qos.hpp:1222
rmw_qos_durability_policy_t durability
Definition qos.hpp:1225
rmw_qos_liveliness_policy_t liveliness
Definition qos.hpp:1228
bool avoid_ros_namespace_conventions
Definition qos.hpp:1230
uint64_t nsec
Definition qos.hpp:1071
uint64_t sec
Definition qos.hpp:1070