vmayoral / freeDDS

An open source Data Distribution Service (DDS) for embedded devices implemented for ROS
http://vmayoral.github.io/freeDDS_gitbook/
Apache License 2.0
11 stars 6 forks source link

freeDDS


This work has moved to https://github.com/ros2/ros2_embedded_nuttx


freeDDS is an open source Data Distribution Service (DDS) minimal implementation for embedded devices that should run on bare-metal.

Milestones

This section gives an overview of the milestones needed to complete freeDDS. It also provides an effort to approximate the time needs for each one of the tasks:

Total estimated 20 weeks.

Code structure

The code has been designed according to the DDS specification and it is structured in 5 modules ("Data Distribution Service for Real-time Systems, v1.2", pg. 24):

  • The Infrastructure Module (src/infrastructure) defines the abstract classes and the interfaces that are refined by the other modules. It also provides support for the two interaction styles (notification- and wait- based) with the middleware.
  • The Domain Module (src/domain) contains the DomainParticipant class that acts as an entry-point of the Service and acts as a factory for many of the classes. The DomainParticipant also acts as a container for the other objects that make up the Service.
  • The Topic-Definition Module (src/topic) contains the Topic, ContentFilteredTopic, and MultiTopic classes, the TopicListener interface, and more generally, all that is needed by the application to define Topic objects and attach QoS policies to them.
  • The Publication Module (src/publication) contains the Publisher and DataWriter classes as well as the PublisherListener and DataWriterListener interfaces, and more generally, all that is needed on the publication side.
  • The Subscription Module (src/subscription) contains the Subscriber, DataReader, ReadCondition, and QueryCondition classes, as well as the SubscriberListener and DataReaderListener interfaces, and more generally, all that is needed on the subscription side.

Design considerations:

typedef struct Topic {
  /* pseudo-attributes */
  char *name;
  QoSPolicy* qos;
  DomainParticipant* domain_participant;

} Topic;

  /* pseudo-methods */
Topic * new_Topic(const char *);
void delete_Topic(Topic *);
void set_qos_Topic(struct Topic *, QoSPolicy*);
QoSPolicy* get_qos_Topic(struct Topic *);