nros C API
Lightweight ROS 2 client for embedded real-time systems
Loading...
Searching...
No Matches
parameter.h
Go to the documentation of this file.
1
9#ifndef NROS_PARAMETER_H
10#define NROS_PARAMETER_H
11
12#include "nros/types.h"
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/* Phase 91.C1: type definitions (nros_parameter_server_state_t,
19 * nros_parameter_type_t, nros_parameter_array_t, nros_parameter_value_t,
20 * nros_parameter_t, nros_parameter_callback_t, nros_parameter_server_t) come
21 * from <nros/nros_generated.h> via the nros/types.h include above.
22 *
23 * The typed parameter setters / getters (bool / integer / double /
24 * *_array) are declared by hand below; the auto-generated header
25 * cannot synthesise them from the runtime side, so this file keeps
26 * the canonical declarations.
27 */
28
29/* ===================================================================
30 * Functions
31 * =================================================================== */
32
38
50 struct nros_parameter_t* storage, size_t capacity);
51
64
76 bool default_value);
77
89 int64_t default_value);
90
102 double default_value);
103
115 const char* default_value);
116
129 bool* value);
130
143 const char* name, int64_t* value);
144
157 double* value);
158
172 char* value, size_t max_len);
173
186 bool value);
187
200 int64_t value);
201
214 double value);
215
228 const char* value);
229
230/* -------------------------------------------------------------------
231 * Array parameters
232 *
233 * Array parameters store a pointer + length to caller-owned data.
234 * The caller MUST keep the underlying storage alive for the lifetime of
235 * the parameter (until @ref nros_parameter_server_fini, or until the
236 * parameter is overwritten with a new pointer via the matching `_set`
237 * function). String arrays point to an array of `const char*` — each
238 * element is itself a null-terminated, caller-owned string.
239 * ------------------------------------------------------------------- */
240
244 const char* name, const uint8_t* data, size_t len);
248 const char* name, const bool* data, size_t len);
252 const char* name, const int64_t* data, size_t len);
256 const char* name, const double* data, size_t len);
260 const char* name, const char* const* data,
261 size_t len);
262
294 const char* name, const uint8_t** data, size_t* len);
298 const char* name, const bool** data, size_t* len);
302 const char* name, const int64_t** data, size_t* len);
306 const char* name, const double** data, size_t* len);
310 const char* name, const char* const** data, size_t* len);
316 const uint8_t* data, size_t len);
320 const bool* data, size_t len);
324 const char* name, const int64_t* data, size_t len);
328 const double* data, size_t len);
332 const char* const* data, size_t len);
333
341NROS_PUBLIC bool nros_parameter_has(const struct nros_parameter_server_t* server, const char* name);
342
352 const char* name);
353
361
369
370/* ===================================================================
371 * Service-Backed Parameter API (requires NROS_PARAM_SERVICES feature)
372 *
373 * These functions operate on the nros-params::ParameterServer owned by
374 * the Executor. After calling nros_executor_register_parameter_services,
375 * declared parameters are visible to `ros2 param list /<node>`.
376 *
377 * Only available when nros-c is built with the `param-services` Cargo
378 * feature (requires alloc).
379 * =================================================================== */
380
381struct nros_executor_t;
382
398
401 const char* name, bool value);
404 const char* name, int64_t value);
407 const char* name, double value);
410 const char* name, const char* value);
411
414 const char* name, bool* out_value);
417 const char* name, int64_t* out_value);
420 const char* name, double* out_value);
423 const char* name, char* out_value,
424 size_t max_len);
425
428 const char* name, bool value);
431 const char* name, int64_t value);
434 const char* name, double value);
437 const char* name, const char* value);
438
440NROS_PUBLIC bool nros_executor_has_param(struct nros_executor_t* executor, const char* name);
441
442/* ===================================================================
443 * Deprecated compatibility aliases (phase 379 W5)
444 *
445 * The parameter entry points were renamed `nros_param_*` ->
446 * `nros_parameter_*` so the FUNCTIONS spell the word the way the TYPES
447 * they operate on always did (`nros_parameter_t`,
448 * `nros_parameter_value_t`, `nros_parameter_type_t`) and the way rclc,
449 * `nros::ParameterServer` and `nros_params::ParameterServer` do. See the
450 * `c:parameter_server_t` row in `docs/reference/api-parity-ledger/param.json`.
451 *
452 * The old spellings keep COMPILING, with a deprecation warning. They cost
453 * nothing at run time and nothing in the ABI: each is a `static inline`
454 * forwarder that the compiler inlines away, so `nros_parameter_*` remains the
455 * only exported symbol. That also means the old names are a SOURCE
456 * compatibility promise, not a binary one -- an object file built against the
457 * pre-rename library still refers to `nros_param_*` symbols that no longer
458 * exist, and must be recompiled.
459 *
460 * `static inline` (not a second `NROS_PUBLIC` declaration) is what keeps this
461 * from becoming a duplicate-symbol problem: an inline definition in a header
462 * has no external linkage, so every translation unit that includes this file
463 * may define it and none of them export it.
464 *
465 * WHY THIS SHAPE AND NOT ISSUE 0338'S. The `nros_executor_register_*` ->
466 * `_add_*` rename in `nros/executor.h` kept its old spellings alive as object
467 * MACROS. Macros are cheaper and they cover the struct-tagged spelling for
468 * free, but they cannot warn: a consumer on the old name gets a silent rewrite
469 * and never learns to migrate. A `NROS_DEPRECATED_MSG` forwarder does warn, and
470 * names its replacement in the diagnostic, which is why this family uses one.
471 *
472 * Define NROS_NO_DEPRECATED_PARAM_ALIASES to compile without any of it -- for a
473 * consumer whose build is `-Werror` and who wants the old names to be a hard
474 * error rather than a warning.
475 *
476 * These are scheduled for removal; migrate.
477 * =================================================================== */
478
479#ifndef NROS_NO_DEPRECATED_PARAM_ALIASES
480
481/* Type aliases.
482 *
483 * C cannot portably carry a deprecation attribute on a `typedef` -- GCC and
484 * Clang accept `__attribute__((deprecated))` there, MSVC rejects
485 * `__declspec(deprecated)` on one, and `[[deprecated]]` on a typedef is C23.
486 * So these four are plain aliases that compile SILENTLY. They are not a
487 * warning; they are a grace period, and the ledger rows are where the
488 * deprecation is recorded.
489 *
490 * One limit worth stating rather than discovering: a `typedef` aliases the
491 * TYPE NAME, not the struct/enum TAG. `nros_param_server_t server;` still
492 * compiles; `struct nros_param_server_t* server;` does not, because there is
493 * no such tag any more. Our own declarations used the tagged spelling, so a
494 * user who copied that style has to rename at the declaration site.
495 */
496typedef struct nros_parameter_server_t nros_param_server_t;
497typedef struct nros_parameter_array_t nros_param_array_t;
500
501/* Function forwarders. */
502
503NROS_DEPRECATED_MSG("nros_param_server_get_zero_initialized() is deprecated; use "
504 "nros_parameter_server_get_zero_initialized()")
505static inline struct nros_parameter_server_t nros_param_server_get_zero_initialized(void) {
507}
508
509NROS_DEPRECATED_MSG("nros_param_server_init() is deprecated; use nros_parameter_server_init()")
510static inline nros_ret_t nros_param_server_init(struct nros_parameter_server_t* server,
513}
514
516 "nros_param_server_set_callback() is deprecated; use nros_parameter_server_set_callback()")
517static inline nros_ret_t nros_param_server_set_callback(struct nros_parameter_server_t* server,
519 void* context) {
521}
522
523NROS_DEPRECATED_MSG("nros_param_declare_bool() is deprecated; use nros_parameter_declare_bool()")
524static inline nros_ret_t nros_param_declare_bool(struct nros_parameter_server_t* server,
525 const char* name, bool default_value) {
527}
528
530 "nros_param_declare_integer() is deprecated; use nros_parameter_declare_integer()")
531static inline nros_ret_t nros_param_declare_integer(struct nros_parameter_server_t* server,
532 const char* name, int64_t default_value) {
534}
535
537 "nros_param_declare_double() is deprecated; use nros_parameter_declare_double()")
538static inline nros_ret_t nros_param_declare_double(struct nros_parameter_server_t* server,
539 const char* name, double default_value) {
541}
542
544 "nros_param_declare_string() is deprecated; use nros_parameter_declare_string()")
545static inline nros_ret_t nros_param_declare_string(struct nros_parameter_server_t* server,
546 const char* name, const char* default_value) {
548}
549
550NROS_DEPRECATED_MSG("nros_param_get_bool() is deprecated; use nros_parameter_get_bool()")
551static inline nros_ret_t nros_param_get_bool(const struct nros_parameter_server_t* server,
552 const char* name, bool* value) {
553 return nros_parameter_get_bool(server, name, value);
554}
555
556NROS_DEPRECATED_MSG("nros_param_get_integer() is deprecated; use nros_parameter_get_integer()")
557static inline nros_ret_t nros_param_get_integer(const struct nros_parameter_server_t* server,
558 const char* name, int64_t* value) {
559 return nros_parameter_get_integer(server, name, value);
560}
561
562NROS_DEPRECATED_MSG("nros_param_get_double() is deprecated; use nros_parameter_get_double()")
563static inline nros_ret_t nros_param_get_double(const struct nros_parameter_server_t* server,
564 const char* name, double* value) {
565 return nros_parameter_get_double(server, name, value);
566}
567
568NROS_DEPRECATED_MSG("nros_param_get_string() is deprecated; use nros_parameter_get_string()")
569static inline nros_ret_t nros_param_get_string(const struct nros_parameter_server_t* server,
570 const char* name, char* value, size_t max_len) {
572}
573
574NROS_DEPRECATED_MSG("nros_param_set_bool() is deprecated; use nros_parameter_set_bool()")
575static inline nros_ret_t nros_param_set_bool(struct nros_parameter_server_t* server,
576 const char* name, bool value) {
577 return nros_parameter_set_bool(server, name, value);
578}
579
580NROS_DEPRECATED_MSG("nros_param_set_integer() is deprecated; use nros_parameter_set_integer()")
581static inline nros_ret_t nros_param_set_integer(struct nros_parameter_server_t* server,
582 const char* name, int64_t value) {
583 return nros_parameter_set_integer(server, name, value);
584}
585
586NROS_DEPRECATED_MSG("nros_param_set_double() is deprecated; use nros_parameter_set_double()")
587static inline nros_ret_t nros_param_set_double(struct nros_parameter_server_t* server,
588 const char* name, double value) {
589 return nros_parameter_set_double(server, name, value);
590}
591
592NROS_DEPRECATED_MSG("nros_param_set_string() is deprecated; use nros_parameter_set_string()")
593static inline nros_ret_t nros_param_set_string(struct nros_parameter_server_t* server,
594 const char* name, const char* value) {
595 return nros_parameter_set_string(server, name, value);
596}
597
599 "nros_param_declare_byte_array() is deprecated; use nros_parameter_declare_byte_array()")
600static inline nros_ret_t nros_param_declare_byte_array(struct nros_parameter_server_t* server,
601 const char* name, const uint8_t* data,
602 size_t len) {
604}
605
607 "nros_param_declare_bool_array() is deprecated; use nros_parameter_declare_bool_array()")
608static inline nros_ret_t nros_param_declare_bool_array(struct nros_parameter_server_t* server,
609 const char* name, const bool* data,
610 size_t len) {
612}
613
615 "nros_param_declare_integer_array() is deprecated; use nros_parameter_declare_integer_array()")
616static inline nros_ret_t nros_param_declare_integer_array(struct nros_parameter_server_t* server,
617 const char* name, const int64_t* data,
618 size_t len) {
620}
621
623 "nros_param_declare_double_array() is deprecated; use nros_parameter_declare_double_array()")
624static inline nros_ret_t nros_param_declare_double_array(struct nros_parameter_server_t* server,
625 const char* name, const double* data,
626 size_t len) {
628}
629
631 "nros_param_declare_string_array() is deprecated; use nros_parameter_declare_string_array()")
632static inline nros_ret_t nros_param_declare_string_array(struct nros_parameter_server_t* server,
633 const char* name, const char* const* data,
634 size_t len) {
636}
637
639 "nros_param_get_byte_array() is deprecated; use nros_parameter_get_byte_array()")
640static inline nros_ret_t nros_param_get_byte_array(const struct nros_parameter_server_t* server,
641 const char* name, const uint8_t** data,
642 size_t* len) {
643 return nros_parameter_get_byte_array(server, name, data, len);
644}
645
647 "nros_param_get_bool_array() is deprecated; use nros_parameter_get_bool_array()")
648static inline nros_ret_t nros_param_get_bool_array(const struct nros_parameter_server_t* server,
649 const char* name, const bool** data,
650 size_t* len) {
651 return nros_parameter_get_bool_array(server, name, data, len);
652}
653
655 "nros_param_get_integer_array() is deprecated; use nros_parameter_get_integer_array()")
656static inline nros_ret_t nros_param_get_integer_array(const struct nros_parameter_server_t* server,
657 const char* name, const int64_t** data,
658 size_t* len) {
660}
661
663 "nros_param_get_double_array() is deprecated; use nros_parameter_get_double_array()")
664static inline nros_ret_t nros_param_get_double_array(const struct nros_parameter_server_t* server,
665 const char* name, const double** data,
666 size_t* len) {
668}
669
671 "nros_param_get_string_array() is deprecated; use nros_parameter_get_string_array()")
672static inline nros_ret_t nros_param_get_string_array(const struct nros_parameter_server_t* server,
673 const char* name, const char* const** data,
674 size_t* len) {
676}
677
679 "nros_param_set_byte_array() is deprecated; use nros_parameter_set_byte_array()")
680static inline nros_ret_t nros_param_set_byte_array(struct nros_parameter_server_t* server,
681 const char* name, const uint8_t* data,
682 size_t len) {
683 return nros_parameter_set_byte_array(server, name, data, len);
684}
685
687 "nros_param_set_bool_array() is deprecated; use nros_parameter_set_bool_array()")
688static inline nros_ret_t nros_param_set_bool_array(struct nros_parameter_server_t* server,
689 const char* name, const bool* data, size_t len) {
690 return nros_parameter_set_bool_array(server, name, data, len);
691}
692
694 "nros_param_set_integer_array() is deprecated; use nros_parameter_set_integer_array()")
695static inline nros_ret_t nros_param_set_integer_array(struct nros_parameter_server_t* server,
696 const char* name, const int64_t* data,
697 size_t len) {
699}
700
702 "nros_param_set_double_array() is deprecated; use nros_parameter_set_double_array()")
703static inline nros_ret_t nros_param_set_double_array(struct nros_parameter_server_t* server,
704 const char* name, const double* data,
705 size_t len) {
707}
708
710 "nros_param_set_string_array() is deprecated; use nros_parameter_set_string_array()")
711static inline nros_ret_t nros_param_set_string_array(struct nros_parameter_server_t* server,
712 const char* name, const char* const* data,
713 size_t len) {
715}
716
717NROS_DEPRECATED_MSG("nros_param_has() is deprecated; use nros_parameter_has()")
718static inline bool nros_param_has(const struct nros_parameter_server_t* server, const char* name) {
719 return nros_parameter_has(server, name);
720}
721
722NROS_DEPRECATED_MSG("nros_param_get_type() is deprecated; use nros_parameter_get_type()")
723static inline enum nros_parameter_type_t
724nros_param_get_type(const struct nros_parameter_server_t* server, const char* name) {
725 return nros_parameter_get_type(server, name);
726}
727
729 "nros_param_server_get_count() is deprecated; use nros_parameter_server_get_count()")
730static inline size_t nros_param_server_get_count(const struct nros_parameter_server_t* server) {
731 return nros_parameter_server_get_count(server);
732}
733
734NROS_DEPRECATED_MSG("nros_param_server_fini() is deprecated; use nros_parameter_server_fini()")
735static inline nros_ret_t nros_param_server_fini(struct nros_parameter_server_t* server) {
736 return nros_parameter_server_fini(server);
737}
738
739#endif /* NROS_NO_DEPRECATED_PARAM_ALIASES */
740
741#ifdef __cplusplus
742}
743#endif
744
745#endif /* NROS_PARAMETER_H */
bool(* nros_parameter_callback_t)(const char *name, const struct nros_parameter_t *param, void *context)
Definition nros_generated.h:943
int nros_ret_t
Definition nros_generated.h:849
nros_parameter_server_state_t
Definition nros_generated.h:269
nros_parameter_type_t
Definition nros_generated.h:287
enum nros_parameter_type_t nros_parameter_get_type(const struct nros_parameter_server_t *server, const char *name)
Get the type of a parameter.
nros_ret_t nros_executor_register_parameter_services(struct nros_executor_t *executor)
Register the 6 ROS 2 parameter services on the executor's node.
nros_ret_t nros_parameter_set_string(struct nros_parameter_server_t *server, const char *name, const char *value)
Set a string parameter value.
nros_ret_t nros_parameter_get_bool_array(const struct nros_parameter_server_t *server, const char *name, const bool **data, size_t *len)
Get a boolean array parameter (returns stored pointer + length).
nros_ret_t nros_parameter_set_double(struct nros_parameter_server_t *server, const char *name, double value)
Set a double parameter value.
nros_ret_t nros_executor_set_param_double(struct nros_executor_t *executor, const char *name, double value)
Set a double parameter on the executor's server.
nros_ret_t nros_parameter_declare_integer(struct nros_parameter_server_t *server, const char *name, int64_t default_value)
Declare an integer parameter.
nros_ret_t nros_parameter_server_init(struct nros_parameter_server_t *server, struct nros_parameter_t *storage, size_t capacity)
Initialise a parameter server with user-provided storage.
struct nros_parameter_t size_t capacity
Definition parameter.h:511
nros_ret_t nros_parameter_server_set_callback(struct nros_parameter_server_t *server, nros_parameter_callback_t callback, void *context)
Set a parameter change callback.
size_t nros_parameter_server_get_count(const struct nros_parameter_server_t *server)
Get the number of declared parameters.
nros_ret_t nros_executor_set_param_integer(struct nros_executor_t *executor, const char *name, int64_t value)
Set an integer parameter on the executor's server.
nros_ret_t nros_parameter_set_bool(struct nros_parameter_server_t *server, const char *name, bool value)
Set a boolean parameter value.
nros_ret_t nros_executor_declare_param_bool(struct nros_executor_t *executor, const char *name, bool value)
Declare a boolean parameter on the executor's server.
bool nros_executor_has_param(struct nros_executor_t *executor, const char *name)
Check if a parameter exists on the executor's server.
nros_ret_t nros_parameter_set_bool_array(struct nros_parameter_server_t *server, const char *name, const bool *data, size_t len)
Set a boolean array parameter (replaces stored pointer + length).
struct nros_parameter_t * storage
Definition parameter.h:511
nros_ret_t nros_parameter_server_fini(struct nros_parameter_server_t *server)
Finalise a parameter server.
nros_ret_t nros_parameter_declare_bool(struct nros_parameter_server_t *server, const char *name, bool default_value)
Declare a boolean parameter.
nros_ret_t nros_executor_declare_param_string(struct nros_executor_t *executor, const char *name, const char *value)
Declare a string parameter on the executor's server.
nros_ret_t nros_parameter_declare_integer_array(struct nros_parameter_server_t *server, const char *name, const int64_t *data, size_t len)
Declare an integer array parameter (int64_t[]).
enum nros_parameter_server_state_t nros_param_server_state_t
Definition parameter.h:498
nros_ret_t nros_parameter_declare_string(struct nros_parameter_server_t *server, const char *name, const char *default_value)
Declare a string parameter.
nros_ret_t nros_parameter_set_string_array(struct nros_parameter_server_t *server, const char *name, const char *const *data, size_t len)
Set a string array parameter (replaces stored pointer + length).
const char const uint8_t size_t len
Definition parameter.h:602
nros_ret_t nros_executor_get_param_integer(struct nros_executor_t *executor, const char *name, int64_t *out_value)
Get an integer parameter from the executor's server.
const char const uint8_t * data
Definition parameter.h:601
nros_ret_t nros_parameter_get_byte_array(const struct nros_parameter_server_t *server, const char *name, const uint8_t **data, size_t *len)
Get a byte array parameter (returns stored pointer + length).
nros_ret_t nros_executor_get_param_bool(struct nros_executor_t *executor, const char *name, bool *out_value)
Get a boolean parameter from the executor's server.
nros_ret_t nros_executor_get_param_double(struct nros_executor_t *executor, const char *name, double *out_value)
Get a double parameter from the executor's server.
nros_ret_t nros_parameter_get_bool(const struct nros_parameter_server_t *server, const char *name, bool *value)
Get a boolean parameter value.
nros_ret_t nros_parameter_declare_bool_array(struct nros_parameter_server_t *server, const char *name, const bool *data, size_t len)
Declare a boolean array parameter (bool[]).
nros_ret_t nros_parameter_declare_double(struct nros_parameter_server_t *server, const char *name, double default_value)
Declare a double parameter.
const char char size_t max_len
Definition parameter.h:570
bool nros_parameter_has(const struct nros_parameter_server_t *server, const char *name)
Check if a parameter exists.
nros_ret_t nros_executor_declare_param_double(struct nros_executor_t *executor, const char *name, double value)
Declare a double parameter on the executor's server.
nros_ret_t nros_parameter_declare_string_array(struct nros_parameter_server_t *server, const char *name, const char *const *data, size_t len)
Declare a string array parameter (array of const char*).
nros_parameter_callback_t callback
Definition parameter.h:518
nros_ret_t nros_parameter_set_integer(struct nros_parameter_server_t *server, const char *name, int64_t value)
Set an integer parameter value.
nros_ret_t nros_parameter_set_integer_array(struct nros_parameter_server_t *server, const char *name, const int64_t *data, size_t len)
Set an integer array parameter (replaces stored pointer + length).
nros_ret_t nros_parameter_get_string_array(const struct nros_parameter_server_t *server, const char *name, const char *const **data, size_t *len)
Get a string array parameter (returns stored pointer + length).
const char bool default_value
Definition parameter.h:525
nros_ret_t nros_executor_set_param_bool(struct nros_executor_t *executor, const char *name, bool value)
Set a boolean parameter on the executor's server.
nros_ret_t nros_parameter_get_integer_array(const struct nros_parameter_server_t *server, const char *name, const int64_t **data, size_t *len)
Get an integer array parameter (returns stored pointer + length).
nros_ret_t nros_executor_set_param_string(struct nros_executor_t *executor, const char *name, const char *value)
Set a string parameter on the executor's server.
nros_ret_t nros_executor_get_param_string(struct nros_executor_t *executor, const char *name, char *out_value, size_t max_len)
Get a string parameter into a caller-provided null-terminated buffer.
nros_ret_t nros_parameter_declare_double_array(struct nros_parameter_server_t *server, const char *name, const double *data, size_t len)
Declare a double array parameter (double[]).
nros_ret_t nros_parameter_get_double_array(const struct nros_parameter_server_t *server, const char *name, const double **data, size_t *len)
Get a double array parameter (returns stored pointer + length).
nros_ret_t nros_parameter_set_byte_array(struct nros_parameter_server_t *server, const char *name, const uint8_t *data, size_t len)
Set a byte array parameter (replaces stored pointer + length).
nros_ret_t nros_parameter_get_integer(const struct nros_parameter_server_t *server, const char *name, int64_t *value)
Get an integer parameter value.
nros_ret_t nros_parameter_get_string(const struct nros_parameter_server_t *server, const char *name, char *value, size_t max_len)
Get a string parameter value.
nros_parameter_callback_t void * context
Definition parameter.h:519
nros_parameter_callback_t nros_param_callback_t
Definition parameter.h:499
nros_ret_t nros_parameter_set_double_array(struct nros_parameter_server_t *server, const char *name, const double *data, size_t len)
Set a double array parameter (replaces stored pointer + length).
const char bool * value
Definition parameter.h:552
struct nros_parameter_server_t nros_parameter_server_get_zero_initialized(void)
Get a zero-initialized parameter server.
nros_ret_t nros_executor_declare_param_integer(struct nros_executor_t *executor, const char *name, int64_t value)
Declare an integer parameter on the executor's server.
nros_ret_t nros_parameter_get_double(const struct nros_parameter_server_t *server, const char *name, double *value)
Get a double parameter value.
nros_ret_t nros_parameter_declare_byte_array(struct nros_parameter_server_t *server, const char *name, const uint8_t *data, size_t len)
Declare a byte array parameter (uint8_t[]).
const char * name
Definition parameter.h:525
Definition nros_generated.h:1036
Definition nros_generated.h:885
Definition nros_generated.h:950
Definition nros_generated.h:925
Shared types and constants for the nros C API.
#define NROS_DEPRECATED_MSG(msg)
Definition visibility.h:58
#define NROS_PUBLIC
Definition visibility.h:33