Architecture

DDS discovery datacentric memory execution serialization platform protocol transport portable system toolchain

The architecture of Safe DDS is characterized by a layered structure, which relies on interfaces. Each layer within this architecture offers a set of interfaces that are utilized by the layer above in order to implement its designated functionality.

Two distinct types of layers can be identified within this structure: functional layers and support layers.

Possible errors that may occur while using the different interfaces are communicated through error codes called ReturnCode.

Functional layers serve as the primary providers of the library’s core functionality. These layers consist of:

  • Transport module

    This layer offers abstractions for lower-level communication protocols, handling message reception and transmission to and from destinations (locators).

  • Protocol module

    This layer introduces a low-level concept of the publication-subscription communication paradigm, encompassing the notions of sample, endpoint, reliability, acknowledgements, fragmentation, and transport message processing. By default, an RTPS implementation of the protocol layer interfaces is provided.

  • Datacentric module

    This layer abstracts the publication-subscription paradigm, delivering the concepts of topic history, serialization, and deserialization. In conjunction with the protocol layer, it establishes a type-agnostic publication-subscription paradigm without DDS concepts.

  • Discovery module

    This layer separates the notions of remote communication node discovery from remote endpoint discovery, offering default implementations for the two phases of the default DDS standard Simple Discovery Protocol (SDP), i.e. Simple Participant Discovery Phase (SPDP), and Simple Endpoint Discovery Phase (SEDP).

  • DDS module

    This layer constructs a DDS-compliant API on top of the Datacentric module, incorporating the DDS concepts of domain, topic, publisher, subscriber, datawriter, datareader, QoS policies, status, and listener, as documented in the DDS Layer section.

Support layers, on the other hand, are responsible for providing assistance to the functional layers. These layers include:

  • Portable module

    This layer offers abstractions for the toolchain, encapsulating elements typically provided by a standard library but not universally available across all supported/available toolchains.

  • Platform module

    This module encapsulates platform-specific code, presenting abstractions for the operating system, fatal error handling, timing, and memory management.

  • Memory module

    This layer abstracts memory access to avoid the use of memory pointers, introducing the concepts of buffer view, memory mutability, and constancy.

  • Execution module

    This layer outlines the execution model of Safe DDS, delivering a flexible and configurable means of executing entities, timers, and events that can be built upon various platform threading or execution paradigms.

  • Serialization module

    This layer abstracts the serialization and deserialization of data, offering the concepts of serializer and deserializer as well as implementations for the CDR specification.