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."
102 const char *node_namespace,
const char *enclave);
108 const char *
const *types,
size_t types_count);
150#define NROS_RMW_VISITOR_DEFINED 1
214 uint32_t domain_id,
const char *node_name,
229 const char *topic_name,
242 const char *topic_name,
311 const char *service_name,
347 bool *out_has_request);
354 const char *service_name,
430 uint32_t deadline_ms,
502 uint32_t deadline_ms,
539 uint32_t *out_ms,
bool *has_deadline);
569 void (*cb)(
void *ctx),
606 size_t requested_len,
714 bool *out_available);
813 void (*size_cb)(
size_t *out_total_len,
void *user_ctx),
814 void (*chunk_cb)(uint8_t *out_buf,
size_t cap,
815 size_t *out_written,
void *user_ctx),
921 bool *out_processed);
958 const char *(*get_implementation_identifier)(void);
986 const char *(*get_serialization_format)(void);
1095 uint32_t timeout_ms);
1163 const char *node_name,
const char *node_namespace,
bool no_demangle,
1168 const char *node_name,
const char *node_namespace,
bool no_demangle,
1173 const char *node_name,
const char *node_namespace,
1178 const char *node_name,
const char *node_namespace,
1183 const char *topic_name,
bool no_mangle,
1188 const char *topic_name,
bool no_mangle,
1193 const char *topic_name,
size_t *count);
1197 const char *topic_name,
size_t *count);
1296 const char *name,
const char *namespace_,
1414 uint32_t *out_mask);
1450 const void *user_data);
1481 const char *service_name,
size_t *count);
1486 const char *service_name,
size_t *count);
1598 uint8_t *out_kind, int32_t *out_handle);
1603#define NROS_RMW_READINESS_NONE 0u
1604#define NROS_RMW_READINESS_NOTIFY 1u
1605#define NROS_RMW_READINESS_WAITABLE 2u
1704#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ZEPHYR__) && \
1705 !defined(__NuttX__) && !defined(ESP_PLATFORM) && !defined(__VXWORKS__)
1706#define NROS_RMW_REGISTER_BACKEND(REGISTER_FN) \
1707 __attribute__((constructor)) static void nros_rmw_ctor_##REGISTER_FN( \
1709 (void) REGISTER_FN(); \
1713#define NROS_RMW_REGISTER_BACKEND(REGISTER_FN)
Typed entity structs for the nros RMW C surface.
rmw_log_severity_t
Definition rmw_entity.h:567
rmw_feature_t
Definition rmw_entity.h:101
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:175
void(* rmw_status_event_callback_t)(rmw_event_type_t kind, const rmw_event_payload_t *payload, void *user_context)
Definition rmw_event.h:165
rmw_event_type_t
Definition rmw_event.h:41
Return-code constants for the nros RMW C vtable.
int32_t rmw_ret_t
Definition rmw_ret.h:72
size_t nros_rmw_cffi_registered_names(const char **buf, size_t cap)
nros_rmw_session_mode_t
Definition rmw_vtable.h:1631
@ NROS_RMW_SESSION_MODE_PEER
Definition rmw_vtable.h:1635
@ NROS_RMW_SESSION_MODE_CLIENT
Definition rmw_vtable.h:1633
struct rmw_loan_token_t rmw_loan_token_t
Definition rmw_vtable.h:129
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:107
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:111
bool(* rmw_node_visit_fn)(void *ctx, const char *node_name, const char *node_namespace, const char *enclave)
Definition rmw_vtable.h:101
Definition rmw_vtable.h:194
rmw_ret_t(* publisher_count_matched_subscriptions)(const rmw_publisher_t *publisher, size_t *subscription_count)
Definition rmw_vtable.h:1017
rmw_ret_t(* set_log_severity)(rmw_log_severity_t severity)
Definition rmw_vtable.h:1338
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:917
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:1126
rmw_ret_t(* count_publishers)(const rmw_session_t *session, const char *topic_name, size_t *count)
Definition rmw_vtable.h:1192
rmw_ret_t(* count_clients)(const rmw_session_t *session, const char *service_name, size_t *count)
Definition rmw_vtable.h:1480
rmw_ret_t(* destroy_publisher)(rmw_publisher_t *publisher)
Definition rmw_vtable.h:233
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:1119
rmw_ret_t(* send_response)(const rmw_service_t *server, int64_t seq, rmw_byte_span_t response)
Definition rmw_vtable.h:348
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:342
rmw_ret_t(* get_gid_for_client)(const rmw_client_t *client, rmw_gid_t *gid)
Definition rmw_vtable.h:1493
rmw_ret_t(* subscription_set_on_new_message_callback)(rmw_subscription_t *subscription, rmw_event_callback_t callback, const void *user_data)
Definition rmw_vtable.h:1448
rmw_ret_t(* get_service_names_and_types)(const rmw_session_t *session, rmw_names_and_types_visitor_t visitor)
Definition rmw_vtable.h:1158
rmw_ret_t(* publisher_assert_liveliness)(const rmw_publisher_t *publisher)
Definition rmw_vtable.h:512
rmw_ret_t(* next_deadline_ms)(const rmw_session_t *session, uint32_t *out_ms, bool *has_deadline)
Definition rmw_vtable.h:538
rmw_ret_t(* take_response_with_info)(const rmw_client_t *client, rmw_mut_byte_span_t *reply, int64_t *seq_out, bool *taken, rmw_service_info_t *service_info)
Definition rmw_vtable.h:1567
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:1154
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:417
rmw_ret_t(* get_gid_for_publisher)(const rmw_publisher_t *publisher, rmw_gid_t *gid)
Definition rmw_vtable.h:1009
rmw_ret_t(* service_response_publisher_get_actual_qos)(const rmw_service_t *service, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1080
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:213
rmw_ret_t(* publisher_wait_for_all_acked)(const rmw_publisher_t *publisher, uint32_t timeout_ms)
Definition rmw_vtable.h:1094
rmw_ret_t(* client_request_publisher_get_actual_qos)(const rmw_client_t *client, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1068
rmw_ret_t(* destroy_session)(rmw_session_t *session)
Definition rmw_vtable.h:217
rmw_ret_t(* set_wake_callback)(rmw_session_t *session, void(*cb)(void *ctx), void *ctx)
Definition rmw_vtable.h:568
rmw_ret_t(* publish_loaned_message)(const rmw_publisher_t *publisher, rmw_loan_token_t *token, size_t actual_len)
Definition rmw_vtable.h:618
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:496
rmw_ret_t(* return_loaned_message_from_subscription)(const rmw_subscription_t *subscription, rmw_loan_token_t *token)
Definition rmw_vtable.h:668
rmw_ret_t(* take_request_with_info)(const rmw_service_t *server, rmw_mut_byte_span_t *request, int64_t *seq_out, bool *taken, rmw_service_info_t *service_info)
Definition rmw_vtable.h:1537
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:227
rmw_ret_t(* subscription_count_matched_publishers)(const rmw_subscription_t *subscription, size_t *publisher_count)
Definition rmw_vtable.h:1021
bool(* event_type_is_supported)(rmw_event_type_t event_type)
Definition rmw_vtable.h:1512
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:1182
rmw_ret_t(* service_request_subscription_get_actual_qos)(const rmw_service_t *service, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1076
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:427
rmw_ret_t(* destroy_node)(rmw_node_t *node)
Definition rmw_vtable.h:1312
bool(* feature_supported)(rmw_feature_t feature)
Definition rmw_vtable.h:1004
rmw_ret_t(* drive_io)(rmw_session_t *session, int32_t timeout_ms)
Definition rmw_vtable.h:218
rmw_ret_t(* ping_session)(rmw_session_t *session, int32_t timeout_ms)
Definition rmw_vtable.h:846
rmw_ret_t(* count_subscribers)(const rmw_session_t *session, const char *topic_name, size_t *count)
Definition rmw_vtable.h:1196
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:309
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:490
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:1187
rmw_ret_t(* service_server_is_available)(const rmw_client_t *client, bool *out_available)
Definition rmw_vtable.h:712
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:240
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:1172
rmw_ret_t(* has_data)(rmw_subscription_t *subscription, bool *out_has_data)
Definition rmw_vtable.h:303
rmw_ret_t(* subscription_get_actual_qos)(const rmw_subscription_t *subscription, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1058
rmw_ret_t(* supported_qos_policies)(const rmw_session_t *session, uint32_t *out_mask)
Definition rmw_vtable.h:1413
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:1177
rmw_ret_t(* take)(const rmw_subscription_t *subscription, rmw_mut_byte_span_t *out, bool *taken)
Definition rmw_vtable.h:285
rmw_ret_t(* readiness_source)(const rmw_session_t *session, uint8_t *out_kind, int32_t *out_handle)
Definition rmw_vtable.h:1597
rmw_ret_t(* count_services)(const rmw_session_t *session, const char *service_name, size_t *count)
Definition rmw_vtable.h:1485
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:1162
rmw_ret_t(* destroy_service)(rmw_service_t *server)
Definition rmw_vtable.h:314
rmw_ret_t(* publish)(const rmw_publisher_t *publisher, rmw_byte_span_t payload)
Definition rmw_vtable.h:234
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:757
rmw_ret_t(* subscription_supports_in_place)(rmw_subscription_t *subscription, bool *out_supports)
Definition rmw_vtable.h:881
rmw_ret_t(* has_request)(rmw_service_t *server, bool *out_has_request)
Definition rmw_vtable.h:346
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:499
rmw_ret_t(* send_request)(const rmw_client_t *client, rmw_byte_span_t request, int64_t *sequence_id)
Definition rmw_vtable.h:388
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:1234
rmw_ret_t(* return_loaned_message_from_publisher)(const rmw_publisher_t *publisher, rmw_loan_token_t *token)
Definition rmw_vtable.h:628
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:811
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:352
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:656
rmw_ret_t(* get_node_names)(const rmw_session_t *session, rmw_node_visitor_t visitor)
Definition rmw_vtable.h:1150
rmw_ret_t(* create_node)(rmw_session_t *session, const char *name, const char *namespace_, rmw_node_t *out)
Definition rmw_vtable.h:1295
rmw_ret_t(* service_set_on_new_request_callback)(rmw_service_t *service, rmw_event_callback_t callback, const void *user_data)
Definition rmw_vtable.h:1455
rmw_ret_t(* destroy_client)(rmw_client_t *client)
Definition rmw_vtable.h:357
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:1167
rmw_ret_t(* client_set_on_new_response_callback)(rmw_client_t *client, rmw_event_callback_t callback, const void *user_data)
Definition rmw_vtable.h:1461
rmw_ret_t(* destroy_subscription)(rmw_subscription_t *subscription)
Definition rmw_vtable.h:246
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:605
rmw_ret_t(* publisher_get_actual_qos)(const rmw_publisher_t *publisher, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1054
rmw_ret_t(* client_response_subscription_get_actual_qos)(const rmw_client_t *client, rmw_qos_profile_t *qos)
Definition rmw_vtable.h:1072
Definition rmw_entity.h:142
Definition rmw_entity.h:1243
Definition rmw_entity.h:263
Definition rmw_entity.h:291
Definition rmw_entity.h:240
Definition rmw_entity.h:164
Definition rmw_vtable.h:160
rmw_names_and_types_visit_fn visit
Definition rmw_vtable.h:165
void * ctx
Definition rmw_vtable.h:166
Definition rmw_entity.h:1132
Definition rmw_vtable.h:151
void * ctx
Definition rmw_vtable.h:157
rmw_node_visit_fn visit
Definition rmw_vtable.h:156
Definition rmw_entity.h:766
Definition rmw_entity.h:1176
Definition rmw_entity.h:421
Definition rmw_entity.h:347
Definition rmw_entity.h:1228
Definition rmw_entity.h:256
Definition rmw_entity.h:739
Definition rmw_entity.h:1081
Definition rmw_entity.h:780
Definition rmw_entity.h:1198
Definition rmw_entity.h:588
Definition rmw_vtable.h:169
rmw_topic_endpoint_info_visit_fn visit
Definition rmw_vtable.h:174
void * ctx
Definition rmw_vtable.h:175
Definition rmw_event.h:123