Implements DDS communication using FastDDS.
Constructs a DDS subscriber from given configuration parameters.
The constructor will initialise the DDS subsystem and allocate necessary resources by constructing appropriate rtctk::componentFramework::DdsSub object. Individual DDS topic objects and DDS readers are created inside rtctk::componentFramework::DdsSub for each topic found in the params.m_topics vector.
There is a one to one correspondence between the topic in params.m_topics and the DDS reader and DDS topic object created. The order of the topics matters and is preserved, meaning that the n'th topic in params.m_topics will equal GetTopicName(n) after successful construction. In addition, the TakeSamples method will return DDS samples for the n'th DDS reader in its output parameter samples[n], which also corresponds to the configured topic GetTopicName(n).
- Parameters
-
| params | The structure containing all needed parameters to construct the DDS objects. |
| alloc | The memory allocator to use for memory management. |
- Postcondition
- GetNumberOfTopics() == params.m_topics.size(), i.e. the number of topics and corresponding DDS readers created will match the topic names passed in as configuration parameters.
| std::optional< DdsWaitSetError > rtctk::telSub::DdsWaitSet::Take |
( |
std::chrono::nanoseconds | timeout | ) |
|
|
overridevirtualnoexcept |
Takes new samples from DDS readers and updates data structure accessable from GetSamples()
The method waits for new DDS samples to become available on one or more of the DDS topic readers as needed to fill up AgnosticDataSamples from GetSamples() with a non-empty sample sequence for each topic.
An empty / zero error code is returned if the operation completed successfully, meaning at least one non-empty sample sequence was taken.
If no samples were available within the timeout period then a std::errc::timed_out error code is returned. If some other error occurred, an appropriate error code is returned.
It is expected that the caller processes the samples and when done with them calls AgnosticAgnosticDataSamples::Clear() to return the samples to DDS. It is not required that all sample sequences are cleared at the same time.
- Parameters
-
| [in] | timeout | The maximum amount of time to wait for this operation to complete, measured in nanoseconds. |
- Returns
- An error code indicating success, failure or timeout of the operation.
The following is the list of possible error codes returned:
0
- At least one samples was successfully returned.
std::errc::timed_out
- The operation timed out while waiting for DDS samples.
std::errc::protocol_error
- A call to the DDS API failed.
std::errc::bad_address
- Could not identify the associated topic reader for a sample.
- See also
- GetSamples()
Implements rtctk::telSub::DdsWaitSetIf.