nros rmw-cffi
C vtable for plugging a third-party RMW backend into nros
Loading...
Searching...
No Matches
rmw_vtable.h
Go to the documentation of this file.
1#ifndef NROS_RMW_VTABLE_H
2#define NROS_RMW_VTABLE_H
3
4#include <stdint.h>
5#include <stddef.h>
6
7#include "nros/rmw_ret.h"
8#include "nros/rmw_entity.h"
9#include "nros/rmw_event.h"
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
44typedef struct nros_rmw_vtable_t {
45 /* ---- Session lifecycle ---- */
50 nros_rmw_ret_t (*open)(const char *locator, uint8_t mode,
51 uint32_t domain_id, const char *node_name,
54 nros_rmw_ret_t (*drive_io)(nros_rmw_session_t *session, int32_t timeout_ms);
55
56 /* ---- Publisher ---- */
61 const char *topic_name, const char *type_name, const char *type_hash,
62 uint32_t domain_id, const nros_rmw_qos_t *qos,
66 const uint8_t *data, size_t len);
67
68 /* ---- Subscriber ---- */
70 const char *topic_name, const char *type_name, const char *type_hash,
71 uint32_t domain_id, const nros_rmw_qos_t *qos,
74 int32_t (*try_recv_raw)(nros_rmw_subscriber_t *subscriber,
75 uint8_t *buf, size_t buf_len);
76 int32_t (*has_data)(nros_rmw_subscriber_t *subscriber);
77
78 /* ---- Service Server ---- */
79 /* Phase 193.1b — `qos` applies to both the request + reply endpoints
80 (one profile per service, mirrors create_publisher/subscriber). */
82 const char *service_name, const char *type_name, const char *type_hash,
83 uint32_t domain_id, const nros_rmw_qos_t *qos,
87 uint8_t *buf, size_t buf_len, int64_t *seq_out);
90 int64_t seq, const uint8_t *data, size_t len);
91
92 /* ---- Service Client ---- */
94 const char *service_name, const char *type_name, const char *type_hash,
95 uint32_t domain_id, const nros_rmw_qos_t *qos,
99 const uint8_t *request, size_t req_len,
100 uint8_t *reply_buf, size_t reply_buf_len);
101
113 const uint8_t *request, size_t req_len);
114
124 uint8_t *reply_buf, size_t reply_buf_len);
125
126 /* ---- Phase 108 — status events (optional) ---- */
134 nros_rmw_subscriber_t *subscriber,
136 uint32_t deadline_ms,
138 void *user_context);
139
144 nros_rmw_publisher_t *publisher,
146 uint32_t deadline_ms,
148 void *user_context);
149
157 nros_rmw_publisher_t *publisher);
158
171 int32_t (*next_deadline_ms)(const nros_rmw_session_t *session);
172
192 void (*cb)(void *ctx),
193 void *ctx);
194
213 size_t requested_len,
214 uint8_t **out_buf,
215 size_t *out_cap,
216 void **out_token);
217
227 void *token,
228 size_t actual_len);
229
236 void (*pub_discard)(nros_rmw_publisher_t *publisher, void *token);
237
252 int32_t (*sub_borrow)(nros_rmw_subscriber_t *subscriber,
253 const uint8_t **out_buf,
254 size_t *out_len,
255 void **out_token);
256
264 void (*sub_release)(nros_rmw_subscriber_t *subscriber, void *token);
265
288
313 uint8_t *buf,
314 size_t per_msg_cap,
315 size_t max_msgs,
316 size_t *out_lens);
317
349 nros_rmw_publisher_t *publisher,
350 void (*size_cb)(size_t *out_total_len, void *user_ctx),
351 void (*chunk_cb)(uint8_t *out_buf, size_t cap,
352 size_t *out_written, void *user_ctx),
353 void *user_ctx);
354
380 nros_rmw_session_t *session,
381 int32_t timeout_ms);
382
383 /* ---- Phase 231 (RFC-0038) — zero-copy in-place subscription take ---- */
384
390 nros_rmw_subscriber_t *subscriber);
391
399 nros_rmw_subscriber_t *subscriber,
400 void *ctx,
401 void (*cb)(void *ctx, const uint8_t *ptr, size_t len));
403
413
433 const nros_rmw_vtable_t *vtable);
434
439
445size_t nros_rmw_cffi_registered_names(const char **buf, size_t cap);
446
456
488#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ZEPHYR__) && \
489 !defined(__NuttX__) && !defined(ESP_PLATFORM) && !defined(__VXWORKS__)
490#define NROS_RMW_REGISTER_BACKEND(REGISTER_FN) \
491 __attribute__((constructor)) static void nros_rmw_ctor_##REGISTER_FN( \
492 void) { \
493 (void) REGISTER_FN(); \
494 }
495#else
496/* Embedded / unsupported toolchain: board calls nros_rmw_<x>_register(). */
497#define NROS_RMW_REGISTER_BACKEND(REGISTER_FN)
498#endif
499
500#ifdef __cplusplus
501}
502#endif
503
504#endif /* NROS_RMW_VTABLE_H */
Typed entity structs for the nros RMW C surface.
Tier-1 status events: liveliness changes, deadline misses, message loss.
nros_rmw_event_kind_t
Definition rmw_event.h:36
void(* nros_rmw_event_callback_t)(nros_rmw_event_kind_t kind, const nros_rmw_event_payload_t *payload, void *user_context)
Definition rmw_event.h:86
Return-code constants for the nros RMW C vtable.
int32_t nros_rmw_ret_t
Definition rmw_ret.h:34
size_t nros_rmw_cffi_registered_names(const char **buf, size_t cap)
const nros_rmw_vtable_t * nros_rmw_cffi_lookup(const char *name)
nros_rmw_ret_t nros_rmw_cffi_register_named(const char *name, const nros_rmw_vtable_t *vtable)
nros_rmw_ret_t nros_rmw_cffi_register(const nros_rmw_vtable_t *vtable)
size_t nros_rmw_cffi_walk_init_section(void)
Definition rmw_entity.h:234
Definition rmw_entity.h:88
Definition rmw_entity.h:297
Definition rmw_entity.h:282
Definition rmw_entity.h:207
Definition rmw_entity.h:254
Definition rmw_vtable.h:44
nros_rmw_ret_t(* create_subscriber)(nros_rmw_session_t *session, const char *topic_name, const char *type_name, const char *type_hash, uint32_t domain_id, const nros_rmw_qos_t *qos, nros_rmw_subscriber_t *out)
Definition rmw_vtable.h:69
void(* destroy_publisher)(nros_rmw_publisher_t *publisher)
Definition rmw_vtable.h:64
nros_rmw_ret_t(* create_service_server)(nros_rmw_session_t *session, const char *service_name, const char *type_name, const char *type_hash, uint32_t domain_id, const nros_rmw_qos_t *qos, nros_rmw_service_server_t *out)
Definition rmw_vtable.h:81
int32_t(* subscriber_supports_in_place)(nros_rmw_subscriber_t *subscriber)
Definition rmw_vtable.h:389
void(* destroy_service_server)(nros_rmw_service_server_t *server)
Definition rmw_vtable.h:85
nros_rmw_ret_t(* send_reply)(nros_rmw_service_server_t *server, int64_t seq, const uint8_t *data, size_t len)
Definition rmw_vtable.h:89
int32_t(* service_server_available)(nros_rmw_service_client_t *client)
Definition rmw_vtable.h:286
int32_t(* try_recv_sequence)(nros_rmw_subscriber_t *subscriber, uint8_t *buf, size_t per_msg_cap, size_t max_msgs, size_t *out_lens)
Definition rmw_vtable.h:312
int32_t(* try_recv_request)(nros_rmw_service_server_t *server, uint8_t *buf, size_t buf_len, int64_t *seq_out)
Definition rmw_vtable.h:86
nros_rmw_ret_t(* assert_publisher_liveliness)(nros_rmw_publisher_t *publisher)
Definition rmw_vtable.h:156
nros_rmw_ret_t(* register_publisher_event)(nros_rmw_publisher_t *publisher, nros_rmw_event_kind_t kind, uint32_t deadline_ms, nros_rmw_event_callback_t cb, void *user_context)
Definition rmw_vtable.h:143
nros_rmw_ret_t(* register_subscriber_event)(nros_rmw_subscriber_t *subscriber, nros_rmw_event_kind_t kind, uint32_t deadline_ms, nros_rmw_event_callback_t cb, void *user_context)
Definition rmw_vtable.h:133
int32_t(* has_request)(nros_rmw_service_server_t *server)
Definition rmw_vtable.h:88
nros_rmw_ret_t(* send_request_raw)(nros_rmw_service_client_t *client, const uint8_t *request, size_t req_len)
Definition rmw_vtable.h:112
nros_rmw_ret_t(* pub_commit)(nros_rmw_publisher_t *publisher, void *token, size_t actual_len)
Definition rmw_vtable.h:226
int32_t(* try_recv_reply_raw)(nros_rmw_service_client_t *client, uint8_t *reply_buf, size_t reply_buf_len)
Definition rmw_vtable.h:123
nros_rmw_ret_t(* create_publisher)(nros_rmw_session_t *session, const char *topic_name, const char *type_name, const char *type_hash, uint32_t domain_id, const nros_rmw_qos_t *qos, nros_rmw_publisher_t *out)
Definition rmw_vtable.h:60
int32_t(* process_raw_in_place)(nros_rmw_subscriber_t *subscriber, void *ctx, void(*cb)(void *ctx, const uint8_t *ptr, size_t len))
Definition rmw_vtable.h:398
int32_t(* next_deadline_ms)(const nros_rmw_session_t *session)
Definition rmw_vtable.h:171
int32_t(* sub_borrow)(nros_rmw_subscriber_t *subscriber, const uint8_t **out_buf, size_t *out_len, void **out_token)
Definition rmw_vtable.h:252
int32_t(* try_recv_raw)(nros_rmw_subscriber_t *subscriber, uint8_t *buf, size_t buf_len)
Definition rmw_vtable.h:74
nros_rmw_ret_t(* ping_session)(nros_rmw_session_t *session, int32_t timeout_ms)
Definition rmw_vtable.h:379
nros_rmw_ret_t(* create_service_client)(nros_rmw_session_t *session, const char *service_name, const char *type_name, const char *type_hash, uint32_t domain_id, const nros_rmw_qos_t *qos, nros_rmw_service_client_t *out)
Definition rmw_vtable.h:93
void(* destroy_service_client)(nros_rmw_service_client_t *client)
Definition rmw_vtable.h:97
int32_t(* call_raw)(nros_rmw_service_client_t *client, const uint8_t *request, size_t req_len, uint8_t *reply_buf, size_t reply_buf_len)
Definition rmw_vtable.h:98
nros_rmw_ret_t(* pub_loan)(nros_rmw_publisher_t *publisher, size_t requested_len, uint8_t **out_buf, size_t *out_cap, void **out_token)
Definition rmw_vtable.h:212
nros_rmw_ret_t(* publish_streamed)(nros_rmw_publisher_t *publisher, void(*size_cb)(size_t *out_total_len, void *user_ctx), void(*chunk_cb)(uint8_t *out_buf, size_t cap, size_t *out_written, void *user_ctx), void *user_ctx)
Definition rmw_vtable.h:348
void(* pub_discard)(nros_rmw_publisher_t *publisher, void *token)
Definition rmw_vtable.h:236
nros_rmw_ret_t(* set_wake_callback)(nros_rmw_session_t *session, void(*cb)(void *ctx), void *ctx)
Definition rmw_vtable.h:191
void(* sub_release)(nros_rmw_subscriber_t *subscriber, void *token)
Definition rmw_vtable.h:264
void(* destroy_subscriber)(nros_rmw_subscriber_t *subscriber)
Definition rmw_vtable.h:73
int32_t(* has_data)(nros_rmw_subscriber_t *subscriber)
Definition rmw_vtable.h:76
nros_rmw_ret_t(* publish_raw)(nros_rmw_publisher_t *publisher, const uint8_t *data, size_t len)
Definition rmw_vtable.h:65
nros_rmw_ret_t(* close)(nros_rmw_session_t *session)
Definition rmw_vtable.h:53
nros_rmw_ret_t(* open)(const char *locator, uint8_t mode, uint32_t domain_id, const char *node_name, nros_rmw_session_t *out)
Definition rmw_vtable.h:50
nros_rmw_ret_t(* drive_io)(nros_rmw_session_t *session, int32_t timeout_ms)
Definition rmw_vtable.h:54