CommRaT 2.0.0
C++20 Real-Time Messaging Framework
Loading...
Searching...
No Matches
commrat::Inputs< Ts > Struct Template Reference

Multiple continuous inputs specification. More...

#include <commrat/module/io_spec.hpp>

Public Types

using PayloadTypes = std::tuple< Ts... >
 

Static Public Attributes

static constexpr size_t count = sizeof...(Ts)
 

Detailed Description

template<typename... Ts>
struct commrat::Inputs< Ts >

Multiple continuous inputs specification.

Specifies that a module receives multiple input types from different sources. Automatically handles timestamp-based synchronization for sensor fusion.

How Multi-Input Works:

  1. First type in Inputs<T, U, V> is automatically PRIMARY (drives execution)
  2. Module blocks on PRIMARY input receive()
  3. Secondary inputs synchronized via getData(primary_timestamp, tolerance)
  4. All inputs time-aligned before process() is called
Template Parameters
Ts...The payload types to receive (first is primary)

Process Signature:

  • Single output: void process(const T& in1, const U& in2, ..., OutputType& output)
  • Multi output: void process(const T& in1, const U& in2, ..., O1& out1, O2& out2, ...)

Configuration:

ModuleConfig fusion_config{
.name = "SensorFusion",
.system_id = 30,
.instance_id = 1,
.period = Milliseconds(10), // Primary input rate (100Hz)
.input_sources = {
{10, 1}, // IMU source (primary)
{11, 1} // GPS source (secondary)
},
.sync_tolerance_ns = 50'000'000 // 50ms tolerance for getData
};
std::chrono::milliseconds Milliseconds
Definition timestamp.hpp:39
// Fuse high-rate IMU with low-rate GPS
class FusionModule : public Module<Registry,
Output<FusedData>,
Inputs<IMUData, GPSData>> { // IMU first = primary
protected:
void process(const IMUData& imu, // Blocking receive (100Hz)
const GPSData& gps, // getData at imu.timestamp (10Hz)
FusedData& output) override {
// Check freshness
if (!has_new_data<1>()) {
std::cout << "GPS data is stale\n";
}
output = ekf_update(imu, gps);
}
};
Timestamp Management Architecture.
Note
Secondary inputs use HistoricalMailbox with circular buffering
Metadata accessors available: get_input_metadata<N>(), has_new_data<N>()
See also
HistoricalMailbox for getData implementation details
InputMetadata for metadata structure

Definition at line 205 of file io_spec.hpp.

Member Typedef Documentation

◆ PayloadTypes

template<typename... Ts>
using commrat::Inputs< Ts >::PayloadTypes = std::tuple<Ts...>

Definition at line 206 of file io_spec.hpp.

Member Data Documentation

◆ count

template<typename... Ts>
constexpr size_t commrat::Inputs< Ts >::count = sizeof...(Ts)
staticconstexpr

Definition at line 207 of file io_spec.hpp.


The documentation for this struct was generated from the following file: