nros C++ API
Lightweight ROS 2 client for embedded real-time systems (C++ headers)
Loading...
Searching...
No Matches
qos.hpp
Go to the documentation of this file.
1// nros-cpp: QoS (Quality of Service) profiles
2// Freestanding C++ — no STL required
3
10#ifndef NROS_CPP_QOS_HPP
11#define NROS_CPP_QOS_HPP
12
13#include <stdint.h>
14
15// FFI struct definition — mirrors `nros_cpp_qos_t` in
16// nros_cpp_ffi.h. Phase 118.D: guarded by `NROS_CPP_FFI_H`. If
17// `nros_cpp_ffi.h` was included earlier (it sets that guard), the
18// canonical types are already in scope; otherwise emit local
19// definitions so this header stays self-contained for callers that
20// don't pull the cbindgen header directly.
21#ifndef NROS_CPP_FFI_H
22extern "C" {
52}
53#endif // NROS_CPP_FFI_H
54
55namespace nros {
56
67class QoS {
68 public:
76
79 constexpr QoS()
80 : reliability_(Reliable), durability_(Volatile), history_(KeepLast),
81 liveliness_(LivelinessAutomatic), depth_(10), deadline_ms_(0), lifespan_ms_(0),
82 liveliness_lease_ms_(0), avoid_ros_namespace_conventions_(0) {}
83
84 // -- Chainable setters (match rclcpp fluent API) --
85
87 constexpr QoS& reliable() {
88 reliability_ = Reliable;
89 return *this;
90 }
91
93 constexpr QoS& best_effort() {
94 reliability_ = BestEffort;
95 return *this;
96 }
97
99 constexpr QoS& transient_local() {
100 durability_ = TransientLocal;
101 return *this;
102 }
103
106 durability_ = Volatile;
107 return *this;
108 }
109
112 constexpr QoS& keep_last(int depth) {
113 history_ = KeepLast;
114 depth_ = depth;
115 return *this;
116 }
117
119 constexpr QoS& keep_all() {
120 history_ = KeepAll;
121 return *this;
122 }
123
127 deadline_ms_ = ms;
128 return *this;
129 }
130
133 lifespan_ms_ = ms;
134 return *this;
135 }
136
140 liveliness_ = kind;
141 return *this;
142 }
143
146 liveliness_lease_ms_ = ms;
147 return *this;
148 }
149
153 avoid_ros_namespace_conventions_ = on ? 1 : 0;
154 return *this;
155 }
156
157 // -- Predefined profiles (match rclcpp named constructors) --
158
160 static constexpr QoS default_profile() { return QoS(); }
161
163 static constexpr QoS sensor_data() { return QoS().best_effort().keep_last(5); }
164
166 static constexpr QoS services() { return QoS().reliable(); }
167
168 // -- Accessors --
169
171 constexpr int reliability_raw() const { return static_cast<int>(reliability_); }
173 constexpr int durability_raw() const { return static_cast<int>(durability_); }
175 constexpr int history_raw() const { return static_cast<int>(history_); }
177 constexpr int liveliness_raw() const { return static_cast<int>(liveliness_); }
179 constexpr int depth() const { return depth_; }
181 constexpr uint32_t deadline_ms() const { return deadline_ms_; }
183 constexpr uint32_t lifespan_ms() const { return lifespan_ms_; }
185 constexpr uint32_t liveliness_lease_ms() const { return liveliness_lease_ms_; }
187 constexpr bool avoid_ros_namespace_conventions() const {
188 return avoid_ros_namespace_conventions_ != 0;
189 }
190
191 private:
192 enum Reliability { Reliable = 0, BestEffort = 1 } reliability_;
193 enum Durability { Volatile = 0, TransientLocal = 1 } durability_;
194 enum History { KeepLast = 0, KeepAll = 1 } history_;
195 Liveliness liveliness_;
196 int depth_;
197 uint32_t deadline_ms_;
198 uint32_t lifespan_ms_;
199 uint32_t liveliness_lease_ms_;
200 uint8_t avoid_ros_namespace_conventions_;
201};
202
203} // namespace nros
204
205#endif // NROS_CPP_QOS_HPP
Definition future.hpp:40
Definition qos.hpp:67
constexpr int depth() const
Configured queue depth (only meaningful for KEEP_LAST).
Definition qos.hpp:179
constexpr QoS & best_effort()
Set reliability to BEST_EFFORT (fire-and-forget; default for sensors).
Definition qos.hpp:93
constexpr int history_raw() const
History as a raw int (0 = KeepLast, 1 = KeepAll).
Definition qos.hpp:175
constexpr bool avoid_ros_namespace_conventions() const
Whether to skip the /rt/ ROS topic-name prefix.
Definition qos.hpp:187
constexpr uint32_t lifespan_ms() const
Lifespan in ms (0 = infinite).
Definition qos.hpp:183
constexpr QoS & deadline_ms(uint32_t ms)
Definition qos.hpp:126
static constexpr QoS default_profile()
Default profile: RELIABLE + VOLATILE + KEEP_LAST(10).
Definition qos.hpp:160
static constexpr QoS services()
Services profile: RELIABLE + VOLATILE + KEEP_LAST(10).
Definition qos.hpp:166
constexpr QoS & avoid_ros_namespace_conventions(bool on)
Definition qos.hpp:152
Liveliness
Liveliness policy kind. Matches DDS LIVELINESS_QOS_POLICY.
Definition qos.hpp:70
@ LivelinessAutomatic
Definition qos.hpp:72
@ LivelinessManualByTopic
Definition qos.hpp:73
@ LivelinessNone
Definition qos.hpp:71
@ LivelinessManualByNode
Definition qos.hpp:74
constexpr QoS & reliable()
Set reliability to RELIABLE (acked transport, retransmits on loss).
Definition qos.hpp:87
static constexpr QoS sensor_data()
Sensor-data profile: BEST_EFFORT + VOLATILE + KEEP_LAST(5).
Definition qos.hpp:163
constexpr uint32_t deadline_ms() const
Deadline in ms (0 = infinite).
Definition qos.hpp:181
constexpr QoS()
Definition qos.hpp:79
constexpr QoS & lifespan_ms(uint32_t ms)
Sample expiry. 0 = infinite.
Definition qos.hpp:132
constexpr int liveliness_raw() const
Liveliness kind as a raw int (0..3).
Definition qos.hpp:177
constexpr int reliability_raw() const
Reliability as a raw int (0 = Reliable, 1 = BestEffort).
Definition qos.hpp:171
constexpr QoS & keep_last(int depth)
Definition qos.hpp:112
constexpr QoS & durability_volatile()
Set durability to VOLATILE — late joiners get nothing (default).
Definition qos.hpp:105
constexpr uint32_t liveliness_lease_ms() const
Liveliness lease in ms (0 = infinite).
Definition qos.hpp:185
constexpr QoS & liveliness(Liveliness kind)
Definition qos.hpp:139
constexpr int durability_raw() const
Durability as a raw int (0 = Volatile, 1 = TransientLocal).
Definition qos.hpp:173
constexpr QoS & keep_all()
Use KEEP_ALL history (bounded by transport).
Definition qos.hpp:119
constexpr QoS & transient_local()
Set durability to TRANSIENT_LOCAL — late joiners get the last value.
Definition qos.hpp:99
constexpr QoS & liveliness_lease_ms(uint32_t ms)
Liveliness lease duration. 0 = infinite.
Definition qos.hpp:145
Definition nros.hpp:42
nros_cpp_qos_history_t
Definition qos.hpp:31
@ NROS_CPP_QOS_KEEP_LAST
Definition qos.hpp:32
@ NROS_CPP_QOS_KEEP_ALL
Definition qos.hpp:33
nros_cpp_qos_liveliness_t
Definition qos.hpp:35
@ NROS_CPP_QOS_LIVELINESS_MANUAL_BY_NODE
Definition qos.hpp:39
@ NROS_CPP_QOS_LIVELINESS_AUTOMATIC
Definition qos.hpp:37
@ NROS_CPP_QOS_LIVELINESS_MANUAL_BY_TOPIC
Definition qos.hpp:38
@ NROS_CPP_QOS_LIVELINESS_NONE
Definition qos.hpp:36
nros_cpp_qos_durability_t
Definition qos.hpp:27
@ NROS_CPP_QOS_VOLATILE
Definition qos.hpp:28
@ NROS_CPP_QOS_TRANSIENT_LOCAL
Definition qos.hpp:29
nros_cpp_qos_reliability_t
Definition qos.hpp:23
@ NROS_CPP_QOS_RELIABLE
Definition qos.hpp:24
@ NROS_CPP_QOS_BEST_EFFORT
Definition qos.hpp:25
Definition qos.hpp:41
enum nros_cpp_qos_durability_t durability
Definition qos.hpp:43
uint32_t liveliness_lease_ms
Definition qos.hpp:49
uint32_t lifespan_ms
Definition qos.hpp:48
enum nros_cpp_qos_history_t history
Definition qos.hpp:44
enum nros_cpp_qos_liveliness_t liveliness_kind
Definition qos.hpp:45
enum nros_cpp_qos_reliability_t reliability
Definition qos.hpp:42
uint8_t avoid_ros_namespace_conventions
Definition qos.hpp:50
uint32_t deadline_ms
Definition qos.hpp:47
int depth
Definition qos.hpp:46