#ifndef HDDS_H
#define HDDS_H
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#ifdef HDDS_WITH_ROS2
#include <rosidl_runtime_c/message_type_support_struct.h>
#include <rosidl_runtime_c/string.h>
#include <rosidl_runtime_c/u16string.h>
#else
typedef struct rosidl_runtime_c__String {
char *data;
size_t size;
size_t capacity;
} rosidl_runtime_c__String;
typedef struct rosidl_runtime_c__U16String {
uint16_t *data;
size_t size;
size_t capacity;
} rosidl_runtime_c__U16String;
typedef struct rosidl_message_type_support_t rosidl_message_type_support_t;
#endif
typedef enum HddsError {
HDDS_OK = 0,
HDDS_INVALID_ARGUMENT = 1,
HDDS_NOT_FOUND = 2,
HDDS_OPERATION_FAILED = 3,
HDDS_OUT_OF_MEMORY = 4,
HDDS_CONFIG_ERROR = 10,
HDDS_INVALID_DOMAIN_ID = 11,
HDDS_INVALID_PARTICIPANT_ID = 12,
HDDS_NO_AVAILABLE_PARTICIPANT_ID = 13,
HDDS_INVALID_STATE = 14,
HDDS_IO_ERROR = 20,
HDDS_TRANSPORT_ERROR = 21,
HDDS_REGISTRATION_FAILED = 22,
HDDS_WOULD_BLOCK = 23,
HDDS_TYPE_MISMATCH = 30,
HDDS_SERIALIZATION_ERROR = 31,
HDDS_BUFFER_TOO_SMALL = 32,
HDDS_ENDIAN_MISMATCH = 33,
HDDS_QOS_INCOMPATIBLE = 40,
HDDS_UNSUPPORTED = 41,
HDDS_PERMISSION_DENIED = 50,
HDDS_AUTHENTICATION_FAILED = 51,
} HddsError;
typedef enum HddsLivelinessKind {
HDDS_LIVELINESS_AUTOMATIC = 0,
HDDS_LIVELINESS_MANUAL_BY_PARTICIPANT = 1,
HDDS_LIVELINESS_MANUAL_BY_TOPIC = 2,
} HddsLivelinessKind;
typedef enum HddsLogLevel {
HDDS_LOG_OFF = 0,
HDDS_LOG_ERROR = 1,
HDDS_LOG_WARN = 2,
HDDS_LOG_INFO = 3,
HDDS_LOG_DEBUG = 4,
HDDS_LOG_TRACE = 5,
} HddsLogLevel;
typedef enum HddsShmPolicy {
HDDS_SHM_PREFER = 0,
HDDS_SHM_REQUIRE = 1,
HDDS_SHM_DISABLE = 2,
} HddsShmPolicy;
typedef enum HddsTcpRole {
HDDS_TCP_ROLE_AUTO = 0,
HDDS_TCP_ROLE_SERVER_ONLY = 1,
HDDS_TCP_ROLE_CLIENT_ONLY = 2,
} HddsTcpRole;
typedef enum HddsTransportMode {
HDDS_TRANSPORT_INTRA_PROCESS = 0,
HDDS_TRANSPORT_UDP_MULTICAST = 1,
} HddsTransportMode;
typedef enum HddsTransportPreference {
HDDS_TRANSPORT_PREF_UDP_ONLY = 0,
HDDS_TRANSPORT_PREF_TCP_ONLY = 1,
HDDS_TRANSPORT_PREF_UDP_DISCOVERY_TCP_DATA = 2,
HDDS_TRANSPORT_PREF_SHM_PREFERRED = 3,
HDDS_TRANSPORT_PREF_SHM_LOCAL_TCP_REMOTE = 4,
} HddsTransportPreference;
typedef struct Option_HddsLocatorVisitor Option_HddsLocatorVisitor;
typedef struct Option_HddsTopicVisitor Option_HddsTopicVisitor;
typedef struct HddsParticipant {
uint8_t PRIVATE[0];
} HddsParticipant;
typedef struct HddsGuardCondition {
uint8_t PRIVATE[0];
} HddsGuardCondition;
typedef struct HddsTypeObject {
uint8_t PRIVATE[0];
} HddsTypeObject;
typedef struct HddsDataWriter {
uint8_t PRIVATE[0];
} HddsDataWriter;
typedef struct HddsQoS {
uint8_t PRIVATE[0];
} HddsQoS;
typedef struct HddsDataReader {
uint8_t PRIVATE[0];
} HddsDataReader;
typedef struct HddsStatusCondition {
uint8_t PRIVATE[0];
} HddsStatusCondition;
typedef struct HddsWaitSet {
uint8_t PRIVATE[0];
} HddsWaitSet;
#if defined(HDDS_WITH_ROS2)
typedef struct HddsRmwContext {
uint8_t PRIVATE[0];
} HddsRmwContext;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct HddsRmwQosProfile {
uint8_t HISTORY;
uint32_t DEPTH;
uint8_t RELIABILITY;
uint8_t DURABILITY;
uint64_t DEADLINE_NS;
uint64_t LIFESPAN_NS;
uint8_t LIVELINESS;
uint64_t LIVELINESS_LEASE_NS;
bool AVOID_ROS_NAMESPACE_CONVENTIONS;
} HddsRmwQosProfile;
#endif
#if defined(HDDS_WITH_ROS2)
typedef void (*HddsNodeVisitor)(const char*, const char*, void*);
#endif
#if defined(HDDS_WITH_ROS2)
typedef void (*HddsNodeEnclaveVisitor)(const char*, const char*, const char*, void*);
#endif
#if defined(HDDS_WITH_ROS2)
typedef void (*HddsEndpointVisitor)(const char*,
const char*,
const uint8_t*,
const struct HddsRmwQosProfile*,
void*);
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct HddsRmwWaitSet {
uint8_t PRIVATE[0];
} HddsRmwWaitSet;
#endif
typedef void (*HddsOnDataAvailable)(const uint8_t *data, uintptr_t len, void *user_data);
typedef struct HddsSubscriptionMatchedStatus {
uint32_t TOTAL_COUNT;
int32_t TOTAL_COUNT_CHANGE;
uint32_t CURRENT_COUNT;
int32_t CURRENT_COUNT_CHANGE;
} HddsSubscriptionMatchedStatus;
typedef void (*HddsOnSubscriptionMatched)(const struct HddsSubscriptionMatchedStatus *status,
void *user_data);
typedef struct HddsLivelinessChangedStatus {
uint32_t ALIVE_COUNT;
int32_t ALIVE_COUNT_CHANGE;
uint32_t NOT_ALIVE_COUNT;
int32_t NOT_ALIVE_COUNT_CHANGE;
} HddsLivelinessChangedStatus;
typedef void (*HddsOnLivelinessChanged)(const struct HddsLivelinessChangedStatus *status,
void *user_data);
typedef struct HddsSampleLostStatus {
uint32_t TOTAL_COUNT;
int32_t TOTAL_COUNT_CHANGE;
} HddsSampleLostStatus;
typedef void (*HddsOnSampleLost)(const struct HddsSampleLostStatus *status, void *user_data);
typedef struct HddsSampleRejectedStatus {
uint32_t TOTAL_COUNT;
int32_t TOTAL_COUNT_CHANGE;
uint32_t LAST_REASON;
} HddsSampleRejectedStatus;
typedef void (*HddsOnSampleRejected)(const struct HddsSampleRejectedStatus *status, void *user_data);
typedef struct HddsDeadlineMissedStatus {
uint32_t TOTAL_COUNT;
int32_t TOTAL_COUNT_CHANGE;
} HddsDeadlineMissedStatus;
typedef void (*HddsOnDeadlineMissed)(const struct HddsDeadlineMissedStatus *status, void *user_data);
typedef struct HddsIncompatibleQosStatus {
uint32_t TOTAL_COUNT;
int32_t TOTAL_COUNT_CHANGE;
uint32_t LAST_POLICY_ID;
} HddsIncompatibleQosStatus;
typedef void (*HddsOnIncompatibleQos)(const struct HddsIncompatibleQosStatus *status,
void *user_data);
typedef struct HddsReaderListener {
HddsOnDataAvailable ON_DATA_AVAILABLE;
HddsOnSubscriptionMatched ON_SUBSCRIPTION_MATCHED;
HddsOnLivelinessChanged ON_LIVELINESS_CHANGED;
HddsOnSampleLost ON_SAMPLE_LOST;
HddsOnSampleRejected ON_SAMPLE_REJECTED;
HddsOnDeadlineMissed ON_DEADLINE_MISSED;
HddsOnIncompatibleQos ON_INCOMPATIBLE_QOS;
void *USER_DATA;
} HddsReaderListener;
typedef void (*HddsOnSampleWritten)(const uint8_t *data,
uintptr_t len,
uint64_t sequence_number,
void *user_data);
typedef struct HddsPublicationMatchedStatus {
uint32_t TOTAL_COUNT;
int32_t TOTAL_COUNT_CHANGE;
uint32_t CURRENT_COUNT;
int32_t CURRENT_COUNT_CHANGE;
} HddsPublicationMatchedStatus;
typedef void (*HddsOnPublicationMatched)(const struct HddsPublicationMatchedStatus *status,
void *user_data);
typedef void (*HddsOnOfferedDeadlineMissed)(uint64_t instance_handle, void *user_data);
typedef void (*HddsOnOfferedIncompatibleQos)(uint32_t policy_id,
const char *policy_name,
void *user_data);
typedef void (*HddsOnLivelinessLost)(void *user_data);
typedef struct HddsWriterListener {
HddsOnSampleWritten ON_SAMPLE_WRITTEN;
HddsOnPublicationMatched ON_PUBLICATION_MATCHED;
HddsOnOfferedDeadlineMissed ON_OFFERED_DEADLINE_MISSED;
HddsOnOfferedIncompatibleQos ON_OFFERED_INCOMPATIBLE_QOS;
HddsOnLivelinessLost ON_LIVELINESS_LOST;
void *USER_DATA;
} HddsWriterListener;
typedef struct HddsPublisher {
uint8_t PRIVATE[0];
} HddsPublisher;
typedef struct HddsSubscriber {
uint8_t PRIVATE[0];
} HddsSubscriber;
#if defined(HDDS_WITH_ROS2)
typedef struct RosString {
char *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} RosString;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct RosStringSequence {
struct RosString *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} RosStringSequence;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct RosOctetSequence {
uint8_t *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} RosOctetSequence;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct RosBoolSequence {
bool *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} RosBoolSequence;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct RosInt64Sequence {
int64_t *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} RosInt64Sequence;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct RosDoubleSequence {
double *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} RosDoubleSequence;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct ParameterValue {
uint8_t TYPE;
bool BOOL_VALUE;
int64_t INTEGER_VALUE;
double DOUBLE_VALUE;
struct RosString STRING_VALUE;
struct RosOctetSequence BYTE_ARRAY_VALUE;
struct RosBoolSequence BOOL_ARRAY_VALUE;
struct RosInt64Sequence INTEGER_ARRAY_VALUE;
struct RosDoubleSequence DOUBLE_ARRAY_VALUE;
struct RosStringSequence STRING_ARRAY_VALUE;
} ParameterValue;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct Parameter {
struct RosString NAME;
struct ParameterValue VALUE;
} Parameter;
#endif
#if defined(HDDS_WITH_ROS2)
typedef struct ParameterSequence {
struct Parameter *DATA;
uintptr_t SIZE;
uintptr_t CAPACITY;
} ParameterSequence;
#endif
typedef struct HddsSecurityConfig {
uint8_t PRIVATE[0];
} HddsSecurityConfig;
typedef struct HddsMetrics {
uint8_t PRIVATE[0];
} HddsMetrics;
typedef struct HddsMetricsSnapshot {
uint64_t TIMESTAMP_NS;
uint64_t MESSAGES_SENT;
uint64_t MESSAGES_RECEIVED;
uint64_t MESSAGES_DROPPED;
uint64_t BYTES_SENT;
uint64_t LATENCY_P50_NS;
uint64_t LATENCY_P99_NS;
uint64_t LATENCY_P999_NS;
uint64_t MERGE_FULL_COUNT;
uint64_t WOULD_BLOCK_COUNT;
} HddsMetricsSnapshot;
typedef struct HddsTelemetryExporter {
uint8_t PRIVATE[0];
} HddsTelemetryExporter;
typedef struct HddsParticipantConfig {
uint8_t PRIVATE[0];
} HddsParticipantConfig;
struct HddsParticipant *hdds_participant_create(const char *aName);
struct HddsParticipant *hdds_participant_create_with_transport(const char *aName,
enum HddsTransportMode aTransport);
void hdds_participant_destroy(struct HddsParticipant *aParticipant);
const struct HddsGuardCondition *hdds_participant_graph_guard_condition(struct HddsParticipant *aParticipant);
enum HddsError hdds_participant_register_type_support(struct HddsParticipant *aParticipant,
uint32_t aDistro,
const rosidl_message_type_support_t *aTypeSupport,
const struct HddsTypeObject **aOutHandle);
void hdds_type_object_release(const struct HddsTypeObject *aHandle);
enum HddsError hdds_type_object_hash(const struct HddsTypeObject *aHandle,
uint8_t *aOutVersion,
uint8_t *aOutValue,
uintptr_t aValueLen);
const char *hdds_version(void);
struct HddsDataWriter *hdds_writer_create(struct HddsParticipant *aParticipant,
const char *aTopicName);
enum HddsError hdds_writer_write(struct HddsDataWriter *aWriter,
const void *aData,
uintptr_t aLen);
void hdds_writer_destroy(struct HddsDataWriter *aWriter);
struct HddsDataWriter *hdds_writer_create_with_qos(struct HddsParticipant *aParticipant,
const char *aTopicName,
const struct HddsQoS *aQos);
struct HddsDataWriter *hdds_writer_create_with_type(struct HddsParticipant *aParticipant,
const char *aTopicName,
const char *aTypeName,
const struct HddsQoS *aQos);
struct HddsDataReader *hdds_reader_create(struct HddsParticipant *aParticipant,
const char *aTopicName);
struct HddsDataReader *hdds_reader_create_with_qos(struct HddsParticipant *aParticipant,
const char *aTopicName,
const struct HddsQoS *aQos);
struct HddsDataReader *hdds_reader_create_with_type(struct HddsParticipant *aParticipant,
const char *aTopicName,
const char *aTypeName,
const struct HddsQoS *aQos);
enum HddsError hdds_reader_take(struct HddsDataReader *aReader,
void *aDataOut,
uintptr_t aMaxLen,
uintptr_t *aLenOut);
void hdds_reader_destroy(struct HddsDataReader *aReader);
const struct HddsStatusCondition *hdds_reader_get_status_condition(struct HddsDataReader *aReader);
void hdds_status_condition_release(const struct HddsStatusCondition *aCondition);
const struct HddsGuardCondition *hdds_guard_condition_create(void);
void hdds_guard_condition_release(const struct HddsGuardCondition *aCondition);
void hdds_guard_condition_set_trigger(const struct HddsGuardCondition *aCondition, bool aActive);
bool hdds_guard_condition_get_trigger(const struct HddsGuardCondition *aCondition);
struct HddsWaitSet *hdds_waitset_create(void);
void hdds_waitset_destroy(struct HddsWaitSet *aWaitset);
enum HddsError hdds_waitset_attach_status_condition(struct HddsWaitSet *aWaitset,
const struct HddsStatusCondition *aCondition);
enum HddsError hdds_waitset_attach_guard_condition(struct HddsWaitSet *aWaitset,
const struct HddsGuardCondition *aCondition);
enum HddsError hdds_waitset_detach_condition(struct HddsWaitSet *aWaitset, const void *aCondition);
enum HddsError hdds_waitset_wait(struct HddsWaitSet *aWaitset,
int64_t aTimeoutNs,
const void **aOutConditions,
uintptr_t aMaxConditions,
uintptr_t *aOutLen);
#if defined(HDDS_WITH_ROS2)
struct HddsRmwContext *hdds_rmw_context_create(const char *aName);
#endif
#if defined(HDDS_WITH_ROS2)
void hdds_rmw_context_destroy(struct HddsRmwContext *aCtx);
#endif
#if defined(HDDS_WITH_ROS2)
uint64_t hdds_rmw_context_graph_guard_key(struct HddsRmwContext *aCtx);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_guid_prefix(struct HddsRmwContext *aCtx, uint8_t *aOutPrefix);
#endif
#if defined(HDDS_WITH_ROS2)
const struct HddsGuardCondition *hdds_rmw_context_graph_guard_condition(struct HddsRmwContext *aCtx);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_attach_guard_condition(struct HddsRmwContext *aCtx,
const struct HddsGuardCondition *aGuard,
uint64_t *aOutKey);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_attach_status_condition(struct HddsRmwContext *aCtx,
const struct HddsStatusCondition *aStatus,
uint64_t *aOutKey);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_attach_reader(struct HddsRmwContext *aCtx,
struct HddsDataReader *aReader,
uint64_t *aOutKey);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_create_reader(struct HddsRmwContext *aCtx,
const char *aTopicName,
struct HddsDataReader **aOutReader);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_create_reader_with_qos(struct HddsRmwContext *aCtx,
const char *aTopicName,
const struct HddsQoS *aQos,
struct HddsDataReader **aOutReader);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_destroy_reader(struct HddsRmwContext *aCtx,
struct HddsDataReader *aReader);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_create_writer(struct HddsRmwContext *aCtx,
const char *aTopicName,
struct HddsDataWriter **aOutWriter);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_create_writer_with_qos(struct HddsRmwContext *aCtx,
const char *aTopicName,
const struct HddsQoS *aQos,
struct HddsDataWriter **aOutWriter);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_bind_topic_type(struct HddsRmwContext *aCtx,
const char *aTopicName,
const rosidl_message_type_support_t *aTypeSupport);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_destroy_writer(struct HddsRmwContext *aCtx,
struct HddsDataWriter *aWriter);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_register_node(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
const char *aNodeEnclave);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_unregister_node(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_register_publisher_endpoint(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
const char *aTopicName,
const rosidl_message_type_support_t *aTypeSupport,
const uint8_t *aEndpointGid,
const struct HddsRmwQosProfile *aQosProfile);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_unregister_publisher_endpoint(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
const char *aTopicName,
const uint8_t *aEndpointGid);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_register_subscription_endpoint(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
const char *aTopicName,
const rosidl_message_type_support_t *aTypeSupport,
const uint8_t *aEndpointGid,
const struct HddsRmwQosProfile *aQosProfile);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_unregister_subscription_endpoint(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
const char *aTopicName,
const uint8_t *aEndpointGid);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_for_each_node(struct HddsRmwContext *aCtx,
HddsNodeVisitor aVisitor,
void *aUserData,
uint64_t *aOutVersion,
uintptr_t *aOutCount);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_for_each_node_with_enclave(struct HddsRmwContext *aCtx,
HddsNodeEnclaveVisitor aVisitor,
void *aUserData,
uint64_t *aOutVersion,
uintptr_t *aOutCount);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_for_each_publisher_endpoint(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
HddsEndpointVisitor aVisitor,
void *aUserData,
uint64_t *aOutVersion,
uintptr_t *aOutCount);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_for_each_subscription_endpoint(struct HddsRmwContext *aCtx,
const char *aNodeName,
const char *aNodeNamespace,
HddsEndpointVisitor aVisitor,
void *aUserData,
uint64_t *aOutVersion,
uintptr_t *aOutCount);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_for_each_topic(struct HddsRmwContext *aCtx,
struct Option_HddsTopicVisitor aVisitor,
void *aUserData,
uint64_t *aOutVersion);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_for_each_user_locator(struct HddsRmwContext *aCtx,
struct Option_HddsLocatorVisitor aVisitor,
void *aUserData,
uintptr_t *aOutCount);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_publish(struct HddsRmwContext *aCtx,
struct HddsDataWriter *aWriter,
const rosidl_message_type_support_t *aTypeSupport,
const void *aRosMessage);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_publish_with_codec(struct HddsRmwContext *aCtx,
struct HddsDataWriter *aWriter,
uint8_t aCodecKind,
const void *aRosMessage);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_shm_try_take(struct HddsRmwContext *aCtx,
const char *aTopic,
void *aDataOut,
uintptr_t aMaxLen,
uintptr_t *aLenOut);
#endif
#if defined(HDDS_WITH_ROS2)
bool hdds_rmw_context_shm_has_data(struct HddsRmwContext *aCtx, const char *aTopic);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_deserialize_with_codec(uint8_t aCodecKind,
const uint8_t *aData,
uintptr_t aDataLen,
void *aRosMessage);
#endif
#if defined(HDDS_WITH_ROS2)
bool hdds_rmw_has_type_descriptor(const char *aTypeName);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_deserialize_dynamic(const char *aTypeName,
const uint8_t *aData,
uintptr_t aDataLen,
void *aRosMessage);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_detach_condition(struct HddsRmwContext *aCtx, uint64_t aKey);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_detach_reader(struct HddsRmwContext *aCtx,
struct HddsDataReader *aReader);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_wait(struct HddsRmwContext *aCtx,
int64_t aTimeoutNs,
uint64_t *aOutKeys,
const void **aOutConditions,
uintptr_t aMaxConditions,
uintptr_t *aOutLen);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_context_wait_readers(struct HddsRmwContext *aCtx,
int64_t aTimeoutNs,
struct HddsDataReader **aOutReaders,
uintptr_t aMaxReaders,
uintptr_t *aOutLen,
bool *aOutGuardTriggered);
#endif
#if defined(HDDS_WITH_ROS2)
struct HddsRmwWaitSet *hdds_rmw_waitset_create(struct HddsRmwContext *aCtx);
#endif
#if defined(HDDS_WITH_ROS2)
void hdds_rmw_waitset_destroy(struct HddsRmwWaitSet *aWaitset);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_waitset_attach_reader(struct HddsRmwWaitSet *aWaitset,
struct HddsDataReader *aReader);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_waitset_detach_reader(struct HddsRmwWaitSet *aWaitset,
struct HddsDataReader *aReader);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_waitset_wait(struct HddsRmwWaitSet *aWaitset,
int64_t aTimeoutNs,
struct HddsDataReader **aOutReaders,
uintptr_t aMaxReaders,
uintptr_t *aOutLen,
bool *aOutGuardTriggered);
#endif
const char *hdds_participant_name(struct HddsParticipant *aParticipant);
uint32_t hdds_participant_domain_id(struct HddsParticipant *aParticipant);
uint8_t hdds_participant_id(struct HddsParticipant *aParticipant);
enum HddsError hdds_writer_topic_name(struct HddsDataWriter *aWriter,
char *aBuf,
uintptr_t aBufLen,
uintptr_t *aOutLen);
enum HddsError hdds_reader_topic_name(struct HddsDataReader *aReader,
char *aBuf,
uintptr_t aBufLen,
uintptr_t *aOutLen);
enum HddsError hdds_reader_set_listener(struct HddsDataReader *aReader,
const struct HddsReaderListener *aListener);
enum HddsError hdds_reader_clear_listener(struct HddsDataReader *aReader);
enum HddsError hdds_writer_set_listener(struct HddsDataWriter *aWriter,
const struct HddsWriterListener *aListener);
enum HddsError hdds_writer_clear_listener(struct HddsDataWriter *aWriter);
enum HddsError hdds_logging_init(enum HddsLogLevel aLevel);
enum HddsError hdds_logging_init_env(enum HddsLogLevel aDefaultLevel);
enum HddsError hdds_logging_init_with_filter(const char *aFilter);
struct HddsPublisher *hdds_publisher_create(struct HddsParticipant *aParticipant);
struct HddsPublisher *hdds_publisher_create_with_qos(struct HddsParticipant *aParticipant,
const struct HddsQoS *aQos);
void hdds_publisher_destroy(struct HddsPublisher *aPublisher);
struct HddsSubscriber *hdds_subscriber_create(struct HddsParticipant *aParticipant);
struct HddsSubscriber *hdds_subscriber_create_with_qos(struct HddsParticipant *aParticipant,
const struct HddsQoS *aQos);
void hdds_subscriber_destroy(struct HddsSubscriber *aSubscriber);
struct HddsDataWriter *hdds_publisher_create_writer(struct HddsPublisher *aPublisher,
const char *aTopicName);
struct HddsDataWriter *hdds_publisher_create_writer_with_qos(struct HddsPublisher *aPublisher,
const char *aTopicName,
const struct HddsQoS *aQos);
struct HddsDataReader *hdds_subscriber_create_reader(struct HddsSubscriber *aSubscriber,
const char *aTopicName);
struct HddsDataReader *hdds_subscriber_create_reader_with_qos(struct HddsSubscriber *aSubscriber,
const char *aTopicName,
const struct HddsQoS *aQos);
struct HddsQoS *hdds_qos_default(void);
struct HddsQoS *hdds_qos_best_effort(void);
struct HddsQoS *hdds_qos_reliable(void);
struct HddsQoS *hdds_qos_rti_defaults(void);
void hdds_qos_destroy(struct HddsQoS *aQos);
struct HddsQoS *hdds_qos_load_fastdds_xml(const char *aPath);
struct HddsQoS *hdds_qos_from_xml(const char *aPath);
enum HddsError hdds_qos_set_history_depth(struct HddsQoS *aQos, uint32_t aDepth);
enum HddsError hdds_qos_set_history_keep_all(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_volatile(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_transient_local(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_persistent(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_reliable(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_best_effort(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_deadline_ns(struct HddsQoS *aQos, uint64_t aPeriodNs);
enum HddsError hdds_qos_set_lifespan_ns(struct HddsQoS *aQos, uint64_t aDurationNs);
enum HddsError hdds_qos_set_ownership_shared(struct HddsQoS *aQos);
enum HddsError hdds_qos_set_ownership_exclusive(struct HddsQoS *aQos, int32_t aStrength);
enum HddsError hdds_qos_add_partition(struct HddsQoS *aQos, const char *aPartition);
bool hdds_qos_is_reliable(const struct HddsQoS *aQos);
bool hdds_qos_is_transient_local(const struct HddsQoS *aQos);
uint32_t hdds_qos_get_history_depth(const struct HddsQoS *aQos);
uint64_t hdds_qos_get_deadline_ns(const struct HddsQoS *aQos);
uint64_t hdds_qos_get_lifespan_ns(const struct HddsQoS *aQos);
bool hdds_qos_is_ownership_exclusive(const struct HddsQoS *aQos);
int32_t hdds_qos_get_ownership_strength(const struct HddsQoS *aQos);
enum HddsLivelinessKind hdds_qos_get_liveliness_kind(const struct HddsQoS *aQos);
uint64_t hdds_qos_get_liveliness_lease_ns(const struct HddsQoS *aQos);
uint64_t hdds_qos_get_time_based_filter_ns(const struct HddsQoS *aQos);
uint64_t hdds_qos_get_latency_budget_ns(const struct HddsQoS *aQos);
int32_t hdds_qos_get_transport_priority(const struct HddsQoS *aQos);
uintptr_t hdds_qos_get_max_samples(const struct HddsQoS *aQos);
uintptr_t hdds_qos_get_max_instances(const struct HddsQoS *aQos);
uintptr_t hdds_qos_get_max_samples_per_instance(const struct HddsQoS *aQos);
enum HddsError hdds_qos_set_liveliness_automatic_ns(struct HddsQoS *aQos, uint64_t aLeaseNs);
enum HddsError hdds_qos_set_liveliness_manual_participant_ns(struct HddsQoS *aQos,
uint64_t aLeaseNs);
enum HddsError hdds_qos_set_liveliness_manual_topic_ns(struct HddsQoS *aQos, uint64_t aLeaseNs);
enum HddsError hdds_qos_set_time_based_filter_ns(struct HddsQoS *aQos, uint64_t aMinSeparationNs);
enum HddsError hdds_qos_set_latency_budget_ns(struct HddsQoS *aQos, uint64_t aBudgetNs);
enum HddsError hdds_qos_set_transport_priority(struct HddsQoS *aQos, int32_t aPriority);
enum HddsError hdds_qos_set_resource_limits(struct HddsQoS *aQos,
uintptr_t aMaxSamples,
uintptr_t aMaxInstances,
uintptr_t aMaxSamplesPerInstance);
struct HddsQoS *hdds_qos_clone(const struct HddsQoS *aQos);
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__String__init(rosidl_runtime_c__String *aStr);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__String__fini(rosidl_runtime_c__String *aStr);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__String__assign(rosidl_runtime_c__String *aStr, const char *aValue);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__U16String__init(rosidl_runtime_c__U16String *aStr);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__U16String__fini(rosidl_runtime_c__U16String *aStr);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__U16String__assignn(rosidl_runtime_c__U16String *aStr,
const uint16_t *aValue,
uintptr_t aLen);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_deserialize_ros_message(const rosidl_message_type_support_t *aTypeSupport,
const uint8_t *aData,
uintptr_t aLen,
void *aRosMessage);
#endif
#if defined(HDDS_WITH_ROS2)
enum HddsError hdds_rmw_serialize_ros_message(const rosidl_message_type_support_t *aTypeSupport,
const void *aRosMessage,
uint8_t *aBuffer,
uintptr_t aCapacity,
uintptr_t *aOutLen);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__String__assignn(struct RosString *aStr,
const char *aValue,
uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__String__Sequence__init(struct RosStringSequence *aSeq,
uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__String__Sequence__fini(struct RosStringSequence *aSeq);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__octet__Sequence__init(struct RosOctetSequence *aSeq, uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__octet__Sequence__fini(struct RosOctetSequence *aSeq);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__boolean__Sequence__init(struct RosBoolSequence *aSeq,
uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__boolean__Sequence__fini(struct RosBoolSequence *aSeq);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__int64__Sequence__init(struct RosInt64Sequence *aSeq, uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__int64__Sequence__fini(struct RosInt64Sequence *aSeq);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__double__Sequence__init(struct RosDoubleSequence *aSeq,
uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rosidl_runtime_c__double__Sequence__fini(struct RosDoubleSequence *aSeq);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rcl_interfaces__msg__Parameter__Sequence__init(struct ParameterSequence *aSeq,
uintptr_t aSize);
#endif
#if defined(HDDS_WITH_ROS2)
extern void rcl_interfaces__msg__Parameter__Sequence__fini(struct ParameterSequence *aSeq);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__String__assign(rosidl_runtime_c__String *aStr, const char *aValue);
#endif
#if defined(HDDS_WITH_ROS2)
extern bool rosidl_runtime_c__U16String__assignn(rosidl_runtime_c__U16String *aStr,
const uint16_t *aValue,
uintptr_t aLen);
#endif
struct HddsSecurityConfig *hdds_security_config_create(void);
void hdds_security_config_destroy(struct HddsSecurityConfig *aConfig);
enum HddsError hdds_security_config_set_identity_cert(struct HddsSecurityConfig *aConfig,
const char *aPath);
enum HddsError hdds_security_config_set_private_key(struct HddsSecurityConfig *aConfig,
const char *aPath);
enum HddsError hdds_security_config_set_ca_cert(struct HddsSecurityConfig *aConfig,
const char *aPath);
enum HddsError hdds_security_config_set_governance_xml(struct HddsSecurityConfig *aConfig,
const char *aPath);
enum HddsError hdds_security_config_set_permissions_xml(struct HddsSecurityConfig *aConfig,
const char *aPath);
enum HddsError hdds_security_config_enable_encryption(struct HddsSecurityConfig *aConfig,
bool aEnabled);
enum HddsError hdds_security_config_enable_audit_log(struct HddsSecurityConfig *aConfig,
bool aEnabled);
enum HddsError hdds_security_config_set_audit_log_path(struct HddsSecurityConfig *aConfig,
const char *aPath);
enum HddsError hdds_security_config_require_authentication(struct HddsSecurityConfig *aConfig,
bool aRequired);
enum HddsError hdds_security_config_check_revocation(struct HddsSecurityConfig *aConfig,
bool aEnabled);
struct HddsMetrics *hdds_telemetry_init(void);
struct HddsMetrics *hdds_telemetry_get(void);
void hdds_telemetry_release(struct HddsMetrics *aMetrics);
enum HddsError hdds_telemetry_snapshot(struct HddsMetrics *aMetrics,
struct HddsMetricsSnapshot *aOut);
void hdds_telemetry_record_latency(struct HddsMetrics *aMetrics,
uint64_t aStartNs,
uint64_t aEndNs);
struct HddsTelemetryExporter *hdds_telemetry_start_exporter(const char *aBindAddr, uint16_t aPort);
void hdds_telemetry_stop_exporter(struct HddsTelemetryExporter *aExporter);
struct HddsParticipantConfig *hdds_config_create(const char *aName);
void hdds_config_destroy(struct HddsParticipantConfig *aConfig);
enum HddsError hdds_config_set_domain_id(struct HddsParticipantConfig *aConfig,
uint32_t aDomainId);
enum HddsError hdds_config_set_participant_id(struct HddsParticipantConfig *aConfig,
uint8_t aParticipantId);
enum HddsError hdds_config_set_transport_mode(struct HddsParticipantConfig *aConfig,
enum HddsTransportMode aMode);
enum HddsError hdds_config_set_discovery_ports(struct HddsParticipantConfig *aConfig,
uint16_t aSpdpMulticast,
uint16_t aSedpUnicast,
uint16_t aUserUnicast);
enum HddsError hdds_config_add_static_peer(struct HddsParticipantConfig *aConfig,
const char *aAddr);
enum HddsError hdds_config_set_shm_policy(struct HddsParticipantConfig *aConfig,
enum HddsShmPolicy aPolicy);
enum HddsError hdds_config_enable_tcp(struct HddsParticipantConfig *aConfig, uint16_t aListenPort);
enum HddsError hdds_config_set_tcp_role(struct HddsParticipantConfig *aConfig,
enum HddsTcpRole aRole);
enum HddsError hdds_config_add_tcp_peer(struct HddsParticipantConfig *aConfig, const char *aAddr);
enum HddsError hdds_config_set_tcp_nodelay(struct HddsParticipantConfig *aConfig, bool aNodelay);
enum HddsError hdds_config_enable_tls(struct HddsParticipantConfig *aConfig);
enum HddsError hdds_config_set_transport_preference(struct HddsParticipantConfig *aConfig,
enum HddsTransportPreference aPref);
enum HddsError hdds_config_set_security(struct HddsParticipantConfig *aConfig,
struct HddsSecurityConfig *aSecurity);
struct HddsParticipant *hdds_config_build(struct HddsParticipantConfig *aConfig);
#endif