1#ifndef NROS_RMW_VTABLE_H
2#define NROS_RMW_VTABLE_H
17#if defined(RMW_RMW_H_) || defined(RMW__RMW_H_)
18#error "nros/rmw_vtable.h defines the generic RMW ABI and cannot share a translation unit with upstream <rmw/rmw.h>. Include one or the other."
100 const char *node_namespace,
const char *enclave);
106 const char *
const *types,
size_t types_count);
148#define NROS_RMW_VISITOR_DEFINED 1
212 uint32_t domain_id,
const char *node_name,
227 const char *topic_name,
240 const char *topic_name,
304 const char *service_name,
324 bool *out_has_request);
331 const char *service_name,
389 uint32_t deadline_ms,
460 uint32_t deadline_ms,
497 uint32_t *out_ms,
bool *has_deadline);
518 void (*cb)(
void *ctx),
539 size_t requested_len,
658 bool *out_available);
758 void (*size_cb)(
size_t *out_total_len,
void *user_ctx),
759 void (*chunk_cb)(uint8_t *out_buf,
size_t cap,
760 size_t *out_written,
void *user_ctx),
862 bool *out_processed);
889 const char *(*get_implementation_identifier)(void);
917 const char *(*get_serialization_format)(void);
1019 uint32_t timeout_ms);
1081 const char *node_name,
const char *node_namespace,
bool no_demangle,
1086 const char *node_name,
const char *node_namespace,
bool no_demangle,
1091 const char *node_name,
const char *node_namespace,
1096 const char *node_name,
const char *node_namespace,
1101 const char *topic_name,
bool no_mangle,
1106 const char *topic_name,
bool no_mangle,
1111 const char *topic_name,
size_t *count);
1115 const char *topic_name,
size_t *count);
1193 const char *name,
const char *namespace_,
1334 const char *type_hash,
size_t hint,
size_t *out_bytes);
1444#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ZEPHYR__) && \
1445 !defined(__NuttX__) && !defined(ESP_PLATFORM) && !defined(__VXWORKS__)
1446#define NROS_RMW_REGISTER_BACKEND(REGISTER_FN) \
1447 __attribute__((constructor)) static void nros_rmw_ctor_##REGISTER_FN( \
1449 (void) REGISTER_FN(); \
1453#define NROS_RMW_REGISTER_BACKEND(REGISTER_FN)
Typed entity structs for the nros RMW C surface.
rmw_log_severity_t
Definition rmw_entity.h:464
rmw_feature_t
Definition rmw_entity.h:92
Tier-1 status events: liveliness changes, deadline misses, message loss.
void(* rmw_event_callback_t)(const void *user_data, size_t number_of_events)
Definition rmw_event.h:119
void(* rmw_status_event_callback_t)(rmw_event_type_t kind, const rmw_event_payload_t *payload, void *user_context)
Definition rmw_event.h:109
rmw_event_type_t
Definition rmw_event.h:36
Return-code constants for the nros RMW C vtable.
int32_t rmw_ret_t
Definition rmw_ret.h:58
rmw_ret_t nros_rmw_cffi_register(const nros_rmw_vtable_t *vtable)
size_t nros_rmw_cffi_registered_names(const char **buf, size_t cap)
nros_rmw_session_mode_t
Definition rmw_vtable.h:1362
@ NROS_RMW_SESSION_MODE_PEER
Definition rmw_vtable.h:1366
@ NROS_RMW_SESSION_MODE_CLIENT
Definition rmw_vtable.h:1364
struct rmw_loan_token_t rmw_loan_token_t
Definition rmw_vtable.h:127
const nros_rmw_vtable_t * nros_rmw_cffi_lookup(const char *name)
bool(* rmw_names_and_types_visit_fn)(void *ctx, const char *name, const char *const *types, size_t types_count)
Definition rmw_vtable.h:105
rmw_ret_t nros_rmw_cffi_register_named(const char *name, const nros_rmw_vtable_t *vtable)
bool(* rmw_topic_endpoint_info_visit_fn)(void *ctx, const rmw_topic_endpoint_info_t *info)
Definition rmw_vtable.h:109
bool(* rmw_node_visit_fn)(void *ctx, const char *node_name, const char *node_namespace, const char *enclave)
Definition rmw_vtable.h:99
Definition rmw_vtable.h:192
rmw_ret_t(* publisher_count_matched_subscriptions)(const rmw_publisher_t *publisher, size_t *subscription_count)
Definition rmw_vtable.h:941
rmw_ret_t(* set_log_severity)(rmw_log_severity_t severity)
Definition rmw_vtable.h:1235
rmw_ret_t(* process_raw_in_place)(rmw_subscription_t *subscription, void *ctx, void(*cb)(void *ctx, rmw_byte_span_t message), bool *out_processed)
Definition rmw_vtable.h:858
rmw_ret_t(* take_loaned_message_with_info)(const rmw_subscription_t *subscription, rmw_byte_span_t *out_view, rmw_loan_token_t **out_token, bool *taken, rmw_message_info_t *message_info)
Definition rmw_vtable.h:1045
rmw_ret_t(* count_publishers)(const rmw_session_t *session, const char *topic_name, size_t *count)
Definition rmw_vtable.h:1110
rmw_ret_t(* required_rx_bytes)(const char *type_name, const char *type_hash, size_t hint, size_t *out_bytes)
Definition rmw_vtable.h:1333
rmw_ret_t(* destroy_publisher)(rmw_publisher_t *publisher)
Definition rmw_vtable.h:231
rmw_ret_t(* take_with_info)(const rmw_subscription_t *subscription, rmw_mut_byte_span_t *message, bool *taken, rmw_message_info_t *message_info)
Definition rmw_vtable.h:1038
rmw_ret_t(* send_response)(const rmw_service_t *server, int64_t seq, rmw_byte_span_t response)
Definition rmw_vtable.h:325
rmw_ret_t(* take_request)(const rmw_service_t *server, rmw_mut_byte_span_t *request, int64_t *seq_out, bool *taken)
Definition rmw_vtable.h:319
rmw_ret_t(* get_service_names_and_types)(const rmw_session_t *session, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1076
rmw_ret_t(* publisher_assert_liveliness)(const rmw_publisher_t *publisher)
Definition rmw_vtable.h:470
rmw_ret_t(* next_deadline_ms)(const rmw_session_t *session, uint32_t *out_ms, bool *has_deadline)
Definition rmw_vtable.h:496
rmw_ret_t(* get_topic_names_and_types)(const rmw_session_t *session, bool no_demangle, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1072
rmw_ret_t(* take_response)(const rmw_client_t *client, rmw_mut_byte_span_t *reply, int64_t *seq_out, bool *taken)
Definition rmw_vtable.h:376
rmw_ret_t(* get_gid_for_publisher)(const rmw_publisher_t *publisher, rmw_gid_t *gid)
Definition rmw_vtable.h:933
rmw_ret_t(* service_response_publisher_get_actual_qos)(const rmw_service_t *service, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1004
rmw_ret_t(* create_session)(const char *locator, uint8_t mode, uint32_t domain_id, const char *node_name, const rmw_session_options_t *options, rmw_session_t *out)
Definition rmw_vtable.h:211
rmw_ret_t(* publisher_wait_for_all_acked)(const rmw_publisher_t *publisher, uint32_t timeout_ms)
Definition rmw_vtable.h:1018
rmw_ret_t(* client_request_publisher_get_actual_qos)(const rmw_client_t *client, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:992
rmw_ret_t(* destroy_session)(rmw_session_t *session)
Definition rmw_vtable.h:215
rmw_ret_t(* set_wake_callback)(rmw_session_t *session, void(*cb)(void *ctx), void *ctx)
Definition rmw_vtable.h:517
rmw_ret_t(* publish_loaned_message)(const rmw_publisher_t *publisher, rmw_loan_token_t *token, size_t actual_len)
Definition rmw_vtable.h:551
rmw_ret_t(* publisher_take_event)(const rmw_publisher_t *publisher, rmw_event_type_t kind, rmw_event_payload_t *out, bool *taken)
Definition rmw_vtable.h:454
rmw_ret_t(* return_loaned_message_from_subscription)(const rmw_subscription_t *subscription, rmw_loan_token_t *token)
Definition rmw_vtable.h:615
rmw_ret_t(* create_publisher)(const rmw_node_t *node, const rmw_message_type_support_t *type_support, const char *topic_name, uint32_t domain_id, const rmw_qos_profile_t *qos, const rmw_publisher_options_t *options, rmw_publisher_t *out)
Definition rmw_vtable.h:225
rmw_ret_t(* subscription_count_matched_publishers)(const rmw_subscription_t *subscription, size_t *publisher_count)
Definition rmw_vtable.h:945
rmw_ret_t(* get_publishers_info_by_topic)(const rmw_session_t *session, const char *topic_name, bool no_mangle, rmw_topic_endpoint_info_visitor_t visitor)
Definition rmw_vtable.h:1100
rmw_ret_t(* service_request_subscription_get_actual_qos)(const rmw_service_t *service, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1000
rmw_ret_t(* subscription_event_init)(const rmw_subscription_t *subscription, rmw_event_type_t kind, uint32_t deadline_ms, rmw_status_event_callback_t cb, void *user_context)
Definition rmw_vtable.h:386
rmw_ret_t(* destroy_node)(rmw_node_t *node)
Definition rmw_vtable.h:1209
bool(* feature_supported)(rmw_feature_t feature)
Definition rmw_vtable.h:928
rmw_ret_t(* drive_io)(rmw_session_t *session, int32_t timeout_ms)
Definition rmw_vtable.h:216
rmw_ret_t(* ping_session)(rmw_session_t *session, int32_t timeout_ms)
Definition rmw_vtable.h:787
rmw_ret_t(* count_subscribers)(const rmw_session_t *session, const char *topic_name, size_t *count)
Definition rmw_vtable.h:1114
rmw_ret_t(* create_service)(const rmw_node_t *node, const rmw_service_type_support_t *type_support, const char *service_name, uint32_t domain_id, const rmw_qos_profile_t *qos, rmw_service_t *out)
Definition rmw_vtable.h:302
rmw_ret_t(* subscription_take_event)(const rmw_subscription_t *subscription, rmw_event_type_t kind, rmw_event_payload_t *out, bool *taken)
Definition rmw_vtable.h:448
rmw_ret_t(* get_subscriptions_info_by_topic)(const rmw_session_t *session, const char *topic_name, bool no_mangle, rmw_topic_endpoint_info_visitor_t visitor)
Definition rmw_vtable.h:1105
rmw_ret_t(* service_server_is_available)(const rmw_client_t *client, bool *out_available)
Definition rmw_vtable.h:656
rmw_ret_t(* create_subscription)(const rmw_node_t *node, const rmw_message_type_support_t *type_support, const char *topic_name, uint32_t domain_id, const rmw_qos_profile_t *qos, const rmw_subscription_options_t *options, rmw_subscription_t *out)
Definition rmw_vtable.h:238
rmw_ret_t(* get_service_names_and_types_by_node)(const rmw_session_t *session, const char *node_name, const char *node_namespace, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1090
rmw_ret_t(* has_data)(rmw_subscription_t *subscription, bool *out_has_data)
Definition rmw_vtable.h:296
rmw_ret_t(* subscription_get_actual_qos)(const rmw_subscription_t *subscription, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:982
rmw_ret_t(* get_client_names_and_types_by_node)(const rmw_session_t *session, const char *node_name, const char *node_namespace, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1095
rmw_ret_t(* take)(const rmw_subscription_t *subscription, rmw_mut_byte_span_t *out, bool *taken)
Definition rmw_vtable.h:278
rmw_ret_t(* get_publisher_names_and_types_by_node)(const rmw_session_t *session, const char *node_name, const char *node_namespace, bool no_demangle, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1080
rmw_ret_t(* destroy_service)(rmw_service_t *server)
Definition rmw_vtable.h:307
rmw_ret_t(* publish)(const rmw_publisher_t *publisher, rmw_byte_span_t payload)
Definition rmw_vtable.h:232
rmw_ret_t(* take_sequence)(const rmw_subscription_t *subscription, uint8_t *buf, size_t per_msg_cap, size_t max_msgs, size_t *out_lens, size_t *taken)
Definition rmw_vtable.h:708
rmw_ret_t(* subscription_supports_in_place)(rmw_subscription_t *subscription, bool *out_supports)
Definition rmw_vtable.h:822
rmw_ret_t(* has_request)(rmw_service_t *server, bool *out_has_request)
Definition rmw_vtable.h:323
rmw_ret_t(* publisher_event_init)(const rmw_publisher_t *publisher, rmw_event_type_t kind, uint32_t deadline_ms, rmw_status_event_callback_t cb, void *user_context)
Definition rmw_vtable.h:457
rmw_ret_t(* send_request)(const rmw_client_t *client, rmw_byte_span_t request, int64_t *sequence_id)
Definition rmw_vtable.h:360
rmw_ret_t(* node_get_graph_guard_condition)(rmw_session_t *session, rmw_event_callback_t callback, const void *user_data)
Definition rmw_vtable.h:1132
rmw_ret_t(* return_loaned_message_from_publisher)(const rmw_publisher_t *publisher, rmw_loan_token_t *token)
Definition rmw_vtable.h:561
rmw_ret_t(* publish_streamed)(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:756
rmw_ret_t(* create_client)(const rmw_node_t *node, const rmw_service_type_support_t *type_support, const char *service_name, uint32_t domain_id, const rmw_qos_profile_t *qos, rmw_client_t *out)
Definition rmw_vtable.h:329
rmw_ret_t(* take_loaned_message)(const rmw_subscription_t *subscription, rmw_byte_span_t *out_view, rmw_loan_token_t **out_token, bool *taken)
Definition rmw_vtable.h:603
rmw_ret_t(* get_node_names)(const rmw_session_t *session, rmw_node_visitor_t visitor)
Definition rmw_vtable.h:1068
rmw_ret_t(* create_node)(rmw_session_t *session, const char *name, const char *namespace_, rmw_node_t *out)
Definition rmw_vtable.h:1192
rmw_ret_t(* destroy_client)(rmw_client_t *client)
Definition rmw_vtable.h:334
rmw_ret_t(* get_subscriber_names_and_types_by_node)(const rmw_session_t *session, const char *node_name, const char *node_namespace, bool no_demangle, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1085
rmw_ret_t(* destroy_subscription)(rmw_subscription_t *subscription)
Definition rmw_vtable.h:244
rmw_ret_t(* borrow_loaned_message)(const rmw_publisher_t *publisher, size_t requested_len, rmw_mut_byte_span_t *out_slot, rmw_loan_token_t **out_token)
Definition rmw_vtable.h:538
rmw_ret_t(* publisher_get_actual_qos)(const rmw_publisher_t *publisher, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:978
rmw_ret_t(* client_response_subscription_get_actual_qos)(const rmw_client_t *client, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:996
Definition rmw_entity.h:133
Definition rmw_entity.h:995
Definition rmw_entity.h:212
Definition rmw_entity.h:238
Definition rmw_entity.h:189
Definition rmw_entity.h:155
Definition rmw_vtable.h:158
rmw_names_and_types_visit_fn visit
Definition rmw_vtable.h:163
void * ctx
Definition rmw_vtable.h:164
Definition rmw_entity.h:884
Definition rmw_vtable.h:149
void * ctx
Definition rmw_vtable.h:155
rmw_node_visit_fn visit
Definition rmw_vtable.h:154
Definition rmw_entity.h:654
Definition rmw_entity.h:928
Definition rmw_entity.h:318
Definition rmw_entity.h:980
Definition rmw_entity.h:205
Definition rmw_entity.h:627
Definition rmw_entity.h:833
Definition rmw_entity.h:668
Definition rmw_entity.h:950
Definition rmw_entity.h:485
Definition rmw_vtable.h:167
rmw_topic_endpoint_info_visit_fn visit
Definition rmw_vtable.h:172
void * ctx
Definition rmw_vtable.h:173
Definition rmw_event.h:69