nros C API
Lightweight ROS 2 client for embedded real-time systems
Loading...
Searching...
No Matches
rclc_parameter.h
Go to the documentation of this file.
1
39#ifndef RCLC_PARAMETER__RCLC_PARAMETER_H_
40#define RCLC_PARAMETER__RCLC_PARAMETER_H_
41
42#include <stdbool.h>
43#include <stddef.h>
44#include <stdint.h>
45
46#include "rclc/types.h"
47
48/* Issue 0865 — this surface exists only in an image built with the
49 * `param-services` capability. Say so here rather than in `ld`'s output. */
50#if defined(NROS_HAS_PARAM_SERVICES) && !NROS_HAS_PARAM_SERVICES
51#error "<rclc_parameter/rclc_parameter.h> needs the param_services capability: declare \
52features = [\"param_services\"] under [system] in system.toml, or \
53set(NROS_FEATURES \"param_services\") before add_subdirectory(<nano-ros>), and rebuild."
54#endif
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60/* ===================================================================
61 * Return codes rclc adds (upstream values, including 40004)
62 * =================================================================== */
63
64#define RCLC_PARAMETER_MODIFICATION_REJECTED 4001
65#define RCLC_PARAMETER_TYPE_MISMATCH 4002
66#define RCLC_PARAMETER_DISABLED_ON_CALLBACK 40004
67
71#define RCLC_EXECUTOR_PARAMETER_SERVER_HANDLES 6
72
73/* ===================================================================
74 * Types
75 * =================================================================== */
76
91
99
100/* rosidl's C runtime shapes, from their one definition site in nano-ros
101 * (phase-492 W7). Each is guarded with upstream's include guard, so a
102 * translation unit that already has rosidl's definition (same layout) keeps
103 * it. */
104#include <rosidl_runtime_c/primitives_sequence.h>
105#include <rosidl_runtime_c/string.h>
106
107#ifndef RCL_INTERFACES__MSG__DETAIL__PARAMETER_VALUE__STRUCT_H_
108#define RCL_INTERFACES__MSG__DETAIL__PARAMETER_VALUE__STRUCT_H_
110 uint8_t type;
114 rosidl_runtime_c__String string_value;
115 rosidl_runtime_c__octet__Sequence byte_array_value;
116 rosidl_runtime_c__boolean__Sequence bool_array_value;
117 rosidl_runtime_c__int64__Sequence integer_array_value;
118 rosidl_runtime_c__double__Sequence double_array_value;
119 rosidl_runtime_c__String__Sequence string_array_value;
121#endif
122
123#ifndef RCL_INTERFACES__MSG__DETAIL__PARAMETER__STRUCT_H_
124#define RCL_INTERFACES__MSG__DETAIL__PARAMETER__STRUCT_H_
129#endif
130
134
141typedef bool (*rclc_parameter_callback_t)(const Parameter* old_param, const Parameter* new_param,
142 void* context);
143
160
161/* ===================================================================
162 * rclc's functions
163 * =================================================================== */
164
167 struct rcl_node_t* node);
169 rclc_parameter_server_t* parameter_server, struct rcl_node_t* node,
170 const rclc_parameter_options_t* options);
173 struct rcl_node_t* node);
174
178 rclc_parameter_server_t* parameter_server,
179 rclc_parameter_callback_t on_modification);
181 struct rclc_executor_t* executor, rclc_parameter_server_t* parameter_server,
182 rclc_parameter_callback_t on_modification, void* context);
183
187 const char* parameter_name, rclc_parameter_type_t type);
189 const char* parameter_name);
190
192 const char* parameter_name, bool value);
194 const char* parameter_name, int64_t value);
196 const char* parameter_name, double value);
198 const char* parameter_name, bool* output);
200 const char* parameter_name, int64_t* output);
202 const char* parameter_name, double* output);
203
205 const char* parameter_name,
206 const char* parameter_description,
207 const char* additional_constraints);
210 const char* parameter_name, bool read_only);
213 rclc_parameter_server_t* parameter_server, const char* parameter_name, int64_t from_value,
214 int64_t to_value, uint64_t step);
216 rclc_parameter_server_t* parameter_server, const char* parameter_name, double from_value,
217 double to_value, double step);
218
219/* ===================================================================
220 * Extensions (nano-ros; rclc has no equivalent)
221 * =================================================================== */
222
226 const char* parameter_name, bool default_value);
228 const char* parameter_name, int64_t default_value);
230 const char* parameter_name,
231 double default_value);
233 const char* parameter_name,
234 const char* default_value);
235
237 const char* parameter_name, const char* value);
241 const char* parameter_name, char* output,
242 size_t capacity);
243
244/* Arrays, bounded by NROS_MAX_ARRAY_LEN (bytes: NROS_MAX_BYTE_ARRAY_LEN). A get
245 * writes the stored length to `*out_len` and returns `RCLC_RET_FULL` without
246 * copying when it exceeds `capacity`. */
247#define NROS__RCLC_ARRAY(NAME, T) \
248 NROS_PUBLIC rcl_ret_t rclc_parameter_declare_##NAME##_array( \
249 rclc_parameter_server_t* parameter_server, const char* parameter_name, const T* data, \
250 size_t len); \
251 NROS_PUBLIC rcl_ret_t rclc_parameter_set_##NAME##_array( \
252 rclc_parameter_server_t* parameter_server, const char* parameter_name, const T* data, \
253 size_t len); \
254 NROS_PUBLIC rcl_ret_t rclc_parameter_get_##NAME##_array( \
255 rclc_parameter_server_t* parameter_server, const char* parameter_name, T* output, \
256 size_t capacity, size_t* out_len);
258NROS__RCLC_ARRAY(int, int64_t)
259NROS__RCLC_ARRAY(double, double)
260NROS__RCLC_ARRAY(byte, uint8_t)
261#undef NROS__RCLC_ARRAY
262
263/* String arrays: `data` is `len` C strings, each at most NROS_MAX_STRING_VALUE_LEN
264 * bytes. A get copies into `capacity` rows of `stride` bytes, each
265 * NUL-terminated, writes the stored length to `*out_len`, and returns
266 * `RCLC_RET_FULL` without copying when the rows or a row are too small. */
268 const char* parameter_name,
269 const char* const* data, size_t len);
271 const char* parameter_name,
272 const char* const* data, size_t len);
274 const char* parameter_name, char* output,
275 size_t stride, size_t capacity,
276 size_t* out_len);
277
280 const char* parameter_name);
284 const char* parameter_name, char* out_description,
285 size_t description_capacity, char* out_constraints,
286 size_t constraints_capacity, bool* out_read_only);
289 const char* parameter_name,
290 int64_t* out_from, int64_t* out_to,
291 int64_t* out_step);
293 const char* parameter_name, double* out_from,
294 double* out_to, double* out_step);
299 const char* prefix, char* out_names, size_t name_stride,
300 size_t max_names, size_t* out_count);
301
302#ifdef __cplusplus
303}
304#endif
305
306#endif /* RCLC_PARAMETER__RCLC_PARAMETER_H_ */
int rcl_ret_t
Definition nros_generated.h:903
rcl_ret_t rclc_parameter_get_double(rclc_parameter_server_t *parameter_server, const char *parameter_name, double *output)
rcl_ret_t rclc_parameter_server_init_with_option(rclc_parameter_server_t *parameter_server, struct rcl_node_t *node, const rclc_parameter_options_t *options)
rcl_interfaces__msg__Parameter Parameter
Definition rclc_parameter.h:132
rcl_ret_t rclc_parameter_declare_double(rclc_parameter_server_t *parameter_server, const char *parameter_name, double default_value)
rcl_ret_t rclc_executor_add_parameter_server(struct rclc_executor_t *executor, rclc_parameter_server_t *parameter_server, rclc_parameter_callback_t on_modification)
rcl_ret_t rclc_add_parameter_constraint_double(rclc_parameter_server_t *parameter_server, const char *parameter_name, double from_value, double to_value, double step)
rcl_ret_t rclc_parameter_get_int(rclc_parameter_server_t *parameter_server, const char *parameter_name, int64_t *output)
rcl_ret_t rclc_parameter_declare_string_array(rclc_parameter_server_t *parameter_server, const char *parameter_name, const char *const *data, size_t len)
rcl_ret_t rclc_add_parameter_constraint_integer(rclc_parameter_server_t *parameter_server, const char *parameter_name, int64_t from_value, int64_t to_value, uint64_t step)
rcl_ret_t rclc_parameter_set_double(rclc_parameter_server_t *parameter_server, const char *parameter_name, double value)
#define NROS__RCLC_ARRAY(NAME, T)
Definition rclc_parameter.h:247
rcl_ret_t rclc_parameter_declare_string(rclc_parameter_server_t *parameter_server, const char *parameter_name, const char *default_value)
rcl_ret_t rclc_parameter_declare_bool(rclc_parameter_server_t *parameter_server, const char *parameter_name, bool default_value)
rcl_ret_t rclc_parameter_set_bool(rclc_parameter_server_t *parameter_server, const char *parameter_name, bool value)
rcl_ret_t rclc_parameter_get_string(rclc_parameter_server_t *parameter_server, const char *parameter_name, char *output, size_t capacity)
rcl_ret_t rclc_parameter_server_fini(rclc_parameter_server_t *parameter_server, struct rcl_node_t *node)
rcl_ret_t rclc_parameter_get_string_array(rclc_parameter_server_t *parameter_server, const char *parameter_name, char *output, size_t stride, size_t capacity, size_t *out_len)
rcl_ret_t rclc_set_parameter_read_only(rclc_parameter_server_t *parameter_server, const char *parameter_name, bool read_only)
rcl_ret_t rclc_parameter_server_init_default(rclc_parameter_server_t *parameter_server, struct rcl_node_t *node)
rcl_ret_t rclc_parameter_describe(rclc_parameter_server_t *parameter_server, const char *parameter_name, char *out_description, size_t description_capacity, char *out_constraints, size_t constraints_capacity, bool *out_read_only)
rcl_ret_t rclc_parameter_get_bool(rclc_parameter_server_t *parameter_server, const char *parameter_name, bool *output)
rcl_ret_t rclc_parameter_get_double_range(rclc_parameter_server_t *parameter_server, const char *parameter_name, double *out_from, double *out_to, double *out_step)
bool(* rclc_parameter_callback_t)(const Parameter *old_param, const Parameter *new_param, void *context)
Definition rclc_parameter.h:141
rcl_ret_t rclc_parameter_set_int(rclc_parameter_server_t *parameter_server, const char *parameter_name, int64_t value)
rcl_ret_t rclc_add_parameter_description(rclc_parameter_server_t *parameter_server, const char *parameter_name, const char *parameter_description, const char *additional_constraints)
rcl_ret_t rclc_add_parameter(rclc_parameter_server_t *parameter_server, const char *parameter_name, rclc_parameter_type_t type)
rclc_parameter_type_t
Definition rclc_parameter.h:79
@ RCLC_PARAMETER_INT_ARRAY
Definition rclc_parameter.h:87
@ RCLC_PARAMETER_BYTE_ARRAY
Definition rclc_parameter.h:85
@ RCLC_PARAMETER_STRING_ARRAY
Definition rclc_parameter.h:89
@ RCLC_PARAMETER_BOOL_ARRAY
Definition rclc_parameter.h:86
@ RCLC_PARAMETER_DOUBLE
Definition rclc_parameter.h:83
@ RCLC_PARAMETER_DOUBLE_ARRAY
Definition rclc_parameter.h:88
@ RCLC_PARAMETER_INT
Definition rclc_parameter.h:82
@ RCLC_PARAMETER_STRING
Definition rclc_parameter.h:84
@ RCLC_PARAMETER_BOOL
Definition rclc_parameter.h:81
@ RCLC_PARAMETER_NOT_SET
Definition rclc_parameter.h:80
rcl_interfaces__msg__ParameterValue ParameterValue
Definition rclc_parameter.h:133
rclc_parameter_type_t rclc_parameter_get_type(rclc_parameter_server_t *parameter_server, const char *parameter_name)
rcl_ret_t rclc_parameter_declare_int(rclc_parameter_server_t *parameter_server, const char *parameter_name, int64_t default_value)
rcl_ret_t rclc_parameter_set_string(rclc_parameter_server_t *parameter_server, const char *parameter_name, const char *value)
rcl_ret_t rclc_parameter_list(rclc_parameter_server_t *parameter_server, const char *prefix, char *out_names, size_t name_stride, size_t max_names, size_t *out_count)
rcl_ret_t rclc_parameter_set_string_array(rclc_parameter_server_t *parameter_server, const char *parameter_name, const char *const *data, size_t len)
rcl_ret_t rclc_parameter_get_integer_range(rclc_parameter_server_t *parameter_server, const char *parameter_name, int64_t *out_from, int64_t *out_to, int64_t *out_step)
rcl_ret_t rclc_delete_parameter(rclc_parameter_server_t *parameter_server, const char *parameter_name)
rcl_ret_t rclc_executor_add_parameter_server_with_context(struct rclc_executor_t *executor, rclc_parameter_server_t *parameter_server, rclc_parameter_callback_t on_modification, void *context)
Definition rclc_parameter.h:109
bool bool_value
Definition rclc_parameter.h:111
int64_t integer_value
Definition rclc_parameter.h:112
rosidl_runtime_c__double__Sequence double_array_value
Definition rclc_parameter.h:118
rosidl_runtime_c__boolean__Sequence bool_array_value
Definition rclc_parameter.h:116
rosidl_runtime_c__String string_value
Definition rclc_parameter.h:114
double double_value
Definition rclc_parameter.h:113
rosidl_runtime_c__octet__Sequence byte_array_value
Definition rclc_parameter.h:115
rosidl_runtime_c__int64__Sequence integer_array_value
Definition rclc_parameter.h:117
uint8_t type
Definition rclc_parameter.h:110
rosidl_runtime_c__String__Sequence string_array_value
Definition rclc_parameter.h:119
Definition rclc_parameter.h:125
rcl_interfaces__msg__ParameterValue value
Definition rclc_parameter.h:127
rosidl_runtime_c__String name
Definition rclc_parameter.h:126
Definition nros_generated.h:1454
Definition nros_generated.h:1317
Definition rclc_parameter.h:93
size_t max_params
Definition rclc_parameter.h:95
bool low_mem_mode
Definition rclc_parameter.h:97
bool notify_changed_over_dds
Definition rclc_parameter.h:94
bool allow_undeclared_parameters
Definition rclc_parameter.h:96
Definition rclc_parameter.h:147
bool _initialized
Definition rclc_parameter.h:153
bool _on_callback
Definition rclc_parameter.h:154
uint16_t _hook
Definition rclc_parameter.h:156
uint8_t _node_id
Definition rclc_parameter.h:152
bool _low_mem_mode
Definition rclc_parameter.h:158
void * _executor
Definition rclc_parameter.h:148
bool _notify_changed_over_dds
Definition rclc_parameter.h:157
rclc_parameter_callback_t _on_modification
Definition rclc_parameter.h:150
void * _context
Definition rclc_parameter.h:151
size_t _max_params
Definition rclc_parameter.h:149
bool _has_hook
Definition rclc_parameter.h:155
Shared types and constants for the nros C API.
#define NROS_PUBLIC
Definition visibility_control.h:33