DDS Client#

Variables

constexpr uint32_t STREAM_HISTORY = 16#

Number of reliable XRCE stream blocks kept in the output/input history.

constexpr uint32_t TRANSPORT_MTU = UXR_CONFIG_CUSTOM_TRANSPORT_MTU#

MTU used by the selected XRCE transport backend.

constexpr uint32_t BUFFER_SIZE = TRANSPORT_MTU * STREAM_HISTORY#

Total bytes reserved for each reliable XRCE stream buffer.

constexpr uint32_t RELIABLE_STREAM_BLOCK_SIZE = BUFFER_SIZE / STREAM_HISTORY#

Bytes available in one reliable stream history block.

constexpr uint32_t ESTIMATED_XRCE_WRITE_OVERHEAD = 32#

Conservative allowance for XRCE write framing when checking one-block writes.

class DDSClient#
#include <dds_client.hpp>

Public Types

using ReaderCallback = void (*)(const Topic &topic, const void *msg, uint16_t length, void *args)#

Public Functions

void init()#

Opens transport/session streams and creates the configured XRCE-DDS entities.

template<TopicId Id>
bool publish(const typename TopicMsg<Id>::Message &msg)#

Writes a sample for a writer topic matched by TopicId.

void update()#

Services incoming data and reliable stream bookkeeping.

bool set_reader_callback(TopicId topic_id, ReaderCallback callback, void *args)#

Binds a callback for a reader topic matched by name or TopicId.

Public Static Functions

static DDSClient &instance()#

Private Functions

DDSClient(const char *ip, const char *port)#

Stores the Agent address used when init() opens the XRCE transport.

DDSClient(const DDSClient&) = delete#
DDSClient &operator=(const DDSClient&) = delete#
void generate_topics(uint16_t requests[], std::size_t &request_count, uxrObjectId participant_id)#

Queues XRCE Topic create requests for every configured topic.

void generate_writers(uint16_t requests[], std::size_t &request_count, uxrObjectId publisher_id)#

Queues XRCE DataWriter create requests for configured writer topics.

void generate_readers(uint16_t requests[], std::size_t &request_count, uxrObjectId subscriber_id)#

Queues XRCE DataReader create and request-data requests for configured reader topics.

bool confirm_delivery()#

Runs the XRCE session until reliable output delivery is confirmed or times out.

void handle_topic(uxrSession *session, uxrObjectId object_id, uint16_t request_id, uxrStreamId stream_id, ucdrBuffer *ub, uint16_t length)#

Deserializes an incoming reader sample and forwards it to the bound callback.

Private Members

const char *ip_#

TODO: Compute a 32 bit unique key.

ip for UDP transport

const char *port_#

port for UDP transport

uxrCustomTransport transport_#
uxrSession session_#

the uxr session object. Interacts directly with DDS Agent

uint8_t output_reliable_stream_buffer_[BUFFER_SIZE]#

DDS stream buffer for reliable output.

uxrStreamId reliable_out_#

uxrStreamId associated with output reliable buffer

uint8_t input_reliable_stream_buffer_[BUFFER_SIZE]#

DDS stream buffer for reliable input.

uxrStreamId reliable_in_#

uxrStreamId associated with input reliable buffer

bool delivery_pending_ = false#
std::array<ReaderCallback, TOPIC_COUNT> reader_callbacks_ = {}#
std::array<void*, TOPIC_COUNT> reader_callback_args_ = {}#

Private Static Functions

static void on_topic_callback(uxrSession *session, uxrObjectId object_id, uint16_t request_id, uxrStreamId stream_id, ucdrBuffer *ub, uint16_t length, void *args)#

Static XRCE topic callback that routes incoming samples back to this DDSClient.