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).
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.