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
40#ifndef RCLC_PARAMETER__RCLC_PARAMETER_H_
41#define RCLC_PARAMETER__RCLC_PARAMETER_H_
42
43#include <stdbool.h>
44#include <stddef.h>
45#include <stdint.h>
46
47#include "rclc/types.h"
48
49/* Issue 0865 — this surface exists only in an image built with the
50 * `param-services` capability. Say so here rather than in `ld`'s output. */
51#if defined(NROS_HAS_PARAM_SERVICES) && !NROS_HAS_PARAM_SERVICES
52#error "<rclc_parameter/rclc_parameter.h> needs the param_services capability: declare \
53features = [\"param_services\"] under [system] in system.toml, or \
54set(NROS_FEATURES \"param_services\") before add_subdirectory(<nano-ros>), and rebuild."
55#endif
56
57#ifdef __cplusplus
58extern "C" {
59#endif
60
61/* ===================================================================
62 * Return codes rclc adds (upstream values, including 40004)
63 * =================================================================== */
64
65#define RCLC_PARAMETER_MODIFICATION_REJECTED 4001
66#define RCLC_PARAMETER_TYPE_MISMATCH 4002
67#define RCLC_PARAMETER_DISABLED_ON_CALLBACK 40004
68
72#define RCLC_EXECUTOR_PARAMETER_SERVER_HANDLES 6
73
74/* ===================================================================
75 * Types
76 * =================================================================== */
77
92
100
101/* rosidl's C runtime shapes, from their one definition site in nano-ros
102 * (phase-492 W7). Each is guarded with upstream's include guard, so a
103 * translation unit that already has rosidl's definition (same layout) keeps
104 * it. */
105#include <rosidl_runtime_c/primitives_sequence.h>
106#include <rosidl_runtime_c/string.h>
107
108#ifndef RCL_INTERFACES__MSG__DETAIL__PARAMETER_VALUE__STRUCT_H_
109#define RCL_INTERFACES__MSG__DETAIL__PARAMETER_VALUE__STRUCT_H_
111 uint8_t type;
115 rosidl_runtime_c__String string_value;
116 rosidl_runtime_c__octet__Sequence byte_array_value;
117 rosidl_runtime_c__boolean__Sequence bool_array_value;
118 rosidl_runtime_c__int64__Sequence integer_array_value;
119 rosidl_runtime_c__double__Sequence double_array_value;
120 rosidl_runtime_c__String__Sequence string_array_value;
122#endif
123
124#ifndef RCL_INTERFACES__MSG__DETAIL__PARAMETER__STRUCT_H_
125#define RCL_INTERFACES__MSG__DETAIL__PARAMETER__STRUCT_H_
130#endif
131
135
142typedef bool (*rclc_parameter_callback_t)(const Parameter* old_param, const Parameter* new_param,
143 void* context);
144
161
162/* ===================================================================
163 * rclc's functions
164 * =================================================================== */
165
168 struct rcl_node_t* node);
170 rclc_parameter_server_t* parameter_server, struct rcl_node_t* node,
171 const rclc_parameter_options_t* options);
174 struct rcl_node_t* node);
175
179 rclc_parameter_server_t* parameter_server,
180 rclc_parameter_callback_t on_modification);
182 struct rclc_executor_t* executor, rclc_parameter_server_t* parameter_server,
183 rclc_parameter_callback_t on_modification, void* context);
184
188 const char* parameter_name, rclc_parameter_type_t type);
190 const char* parameter_name);
191
193 const char* parameter_name, bool value);
195 const char* parameter_name, int64_t value);
197 const char* parameter_name, double value);
199 const char* parameter_name, bool* output);
201 const char* parameter_name, int64_t* output);
203 const char* parameter_name, double* output);
204
206 const char* parameter_name,
207 const char* parameter_description,
208 const char* additional_constraints);
211 const char* parameter_name, bool read_only);
214 rclc_parameter_server_t* parameter_server, const char* parameter_name, int64_t from_value,
215 int64_t to_value, uint64_t step);
217 rclc_parameter_server_t* parameter_server, const char* parameter_name, double from_value,
218 double to_value, double step);
219
220/* ===================================================================
221 * Extensions (nano-ros; rclc has no equivalent)
222 * =================================================================== */
223
227 const char* parameter_name, bool default_value);
229 const char* parameter_name, int64_t default_value);
231 const char* parameter_name,
232 double default_value);
234 const char* parameter_name,
235 const char* default_value);
236
238 const char* parameter_name, const char* value);
242 const char* parameter_name, char* output,
243 size_t capacity);
244
245/* Arrays, bounded by NROS_MAX_ARRAY_LEN (bytes: NROS_MAX_BYTE_ARRAY_LEN). A get
246 * writes the stored length to `*out_len` and returns `RCLC_RET_FULL` without
247 * copying when it exceeds `capacity`. */
248#define NROS__RCLC_ARRAY(NAME, T) \
249 NROS_PUBLIC rcl_ret_t rclc_parameter_declare_##NAME##_array( \
250 rclc_parameter_server_t* parameter_server, const char* parameter_name, const T* data, \
251 size_t len); \
252 NROS_PUBLIC rcl_ret_t rclc_parameter_set_##NAME##_array( \
253 rclc_parameter_server_t* parameter_server, const char* parameter_name, const T* data, \
254 size_t len); \
255 NROS_PUBLIC rcl_ret_t rclc_parameter_get_##NAME##_array( \
256 rclc_parameter_server_t* parameter_server, const char* parameter_name, T* output, \
257 size_t capacity, size_t* out_len);
259NROS__RCLC_ARRAY(int, int64_t)
260NROS__RCLC_ARRAY(double, double)
261NROS__RCLC_ARRAY(byte, uint8_t)
262#undef NROS__RCLC_ARRAY
263
264/* String arrays: `data` is `len` C strings, each at most NROS_MAX_STRING_VALUE_LEN
265 * bytes. A get copies into `capacity` rows of `stride` bytes, each
266 * NUL-terminated, writes the stored length to `*out_len`, and returns
267 * `RCLC_RET_FULL` without copying when the rows or a row are too small. */
269 const char* parameter_name,
270 const char* const* data, size_t len);
272 const char* parameter_name,
273 const char* const* data, size_t len);
275 const char* parameter_name, char* output,
276 size_t stride, size_t capacity,
277 size_t* out_len);
278
281 const char* parameter_name);
285 const char* parameter_name, char* out_description,
286 size_t description_capacity, char* out_constraints,
287 size_t constraints_capacity, bool* out_read_only);
290 const char* parameter_name,
291 int64_t* out_from, int64_t* out_to,
292 int64_t* out_step);
294 const char* parameter_name, double* out_from,
295 double* out_to, double* out_step);
300 const char* prefix, char* out_names, size_t name_stride,
301 size_t max_names, size_t* out_count);
302
303#ifdef __cplusplus
304}
305#endif
306
307#endif /* RCLC_PARAMETER__RCLC_PARAMETER_H_ */
int rcl_ret_t
Definition nros_generated.h:977
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:133
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:248
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:142
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:80
@ RCLC_PARAMETER_INT_ARRAY
Definition rclc_parameter.h:88
@ RCLC_PARAMETER_BYTE_ARRAY
Definition rclc_parameter.h:86
@ RCLC_PARAMETER_STRING_ARRAY
Definition rclc_parameter.h:90
@ RCLC_PARAMETER_BOOL_ARRAY
Definition rclc_parameter.h:87
@ RCLC_PARAMETER_DOUBLE
Definition rclc_parameter.h:84
@ RCLC_PARAMETER_DOUBLE_ARRAY
Definition rclc_parameter.h:89
@ RCLC_PARAMETER_INT
Definition rclc_parameter.h:83
@ RCLC_PARAMETER_STRING
Definition rclc_parameter.h:85
@ RCLC_PARAMETER_BOOL
Definition rclc_parameter.h:82
@ RCLC_PARAMETER_NOT_SET
Definition rclc_parameter.h:81
rcl_interfaces__msg__ParameterValue ParameterValue
Definition rclc_parameter.h:134
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:110
bool bool_value
Definition rclc_parameter.h:112
int64_t integer_value
Definition rclc_parameter.h:113
rosidl_runtime_c__double__Sequence double_array_value
Definition rclc_parameter.h:119
rosidl_runtime_c__boolean__Sequence bool_array_value
Definition rclc_parameter.h:117
rosidl_runtime_c__String string_value
Definition rclc_parameter.h:115
double double_value
Definition rclc_parameter.h:114
rosidl_runtime_c__octet__Sequence byte_array_value
Definition rclc_parameter.h:116
rosidl_runtime_c__int64__Sequence integer_array_value
Definition rclc_parameter.h:118
uint8_t type
Definition rclc_parameter.h:111
rosidl_runtime_c__String__Sequence string_array_value
Definition rclc_parameter.h:120
Definition rclc_parameter.h:126
rcl_interfaces__msg__ParameterValue value
Definition rclc_parameter.h:128
rosidl_runtime_c__String name
Definition rclc_parameter.h:127
Definition nros_generated.h:1610
Definition nros_generated.h:1473
Definition rclc_parameter.h:94
size_t max_params
Definition rclc_parameter.h:96
bool low_mem_mode
Definition rclc_parameter.h:98
bool notify_changed_over_dds
Definition rclc_parameter.h:95
bool allow_undeclared_parameters
Definition rclc_parameter.h:97
Definition rclc_parameter.h:148
bool _initialized
Definition rclc_parameter.h:154
bool _on_callback
Definition rclc_parameter.h:155
uint16_t _hook
Definition rclc_parameter.h:157
uint8_t _node_id
Definition rclc_parameter.h:153
bool _low_mem_mode
Definition rclc_parameter.h:159
void * _executor
Definition rclc_parameter.h:149
bool _notify_changed_over_dds
Definition rclc_parameter.h:158
rclc_parameter_callback_t _on_modification
Definition rclc_parameter.h:151
void * _context
Definition rclc_parameter.h:152
size_t _max_params
Definition rclc_parameter.h:150
bool _has_hook
Definition rclc_parameter.h:156
Shared types and constants for the nros C API.
#define NROS_PUBLIC
Definition visibility_control.h:33