RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
packetCombiner.hpp
Go to the documentation of this file.
1
11
12#include "fitsConverterIf.hpp"
13
14#include <llnetio/mudpi/mudpi.hpp>
15#include <llnetio/rtms/rtms.hpp>
16#include <taiclock/taiClock.hpp>
17
18#include <map>
19#include <vector>
20
25 int32_t topic_id;
26 uint16_t component_id;
28
29 bool operator<(const StreamIdentifier& rhs) const {
30 if (topic_id != rhs.topic_id) {
31 return topic_id < rhs.topic_id;
32 }
33 if (component_id != rhs.component_id) {
34 return component_id < rhs.component_id;
35 }
36
38 }
39 bool operator==(const StreamIdentifier& rhs) const {
40 return topic_id == rhs.topic_id && component_id == rhs.component_id &&
42 }
43 bool operator!=(const StreamIdentifier& rhs) const {
44 return not(*this == rhs);
45 }
46
47 explicit StreamIdentifier(int32_t new_topic_id,
48 uint16_t new_component_id,
49 uint16_t new_application_tag)
50 : topic_id{new_topic_id}
51 , component_id{new_component_id}
52 , application_tag{new_application_tag} {
53 }
56};
57
63 uint32_t sample_id;
64 bool operator<(const SampleIdentifier& rhs) const {
65 if (stream_id != rhs.stream_id) {
66 return stream_id < rhs.stream_id;
67 }
68 return sample_id < rhs.sample_id;
69 }
70 bool operator==(const SampleIdentifier& rhs) const {
71 return stream_id == rhs.stream_id && sample_id == rhs.sample_id;
72 }
73 bool operator!=(const SampleIdentifier& rhs) const {
74 return not(*this == rhs);
75 }
76 explicit SampleIdentifier(StreamIdentifier new_stream_id, uint32_t new_sample_id)
77 : stream_id{new_stream_id}, sample_id{new_sample_id} {
78 }
81};
82
88 uint16_t frame_id;
89
90 bool operator<(const FrameIdentifier& rhs) const {
91 if (sample_id != rhs.sample_id) {
92 return sample_id < rhs.sample_id;
93 }
94 return frame_id < rhs.frame_id;
95 }
96 bool operator==(const FrameIdentifier& rhs) const {
97 return sample_id == rhs.sample_id && frame_id == rhs.frame_id;
98 }
99 bool operator!=(const FrameIdentifier& rhs) const {
100 return not(*this == rhs);
101 }
102
103 explicit FrameIdentifier(SampleIdentifier new_sample_id, uint16_t new_frame_id)
104 : sample_id{new_sample_id}, frame_id{new_frame_id} {
105 }
108};
109
114 // MUDPI frame_id value
115 llnetio::mudpi::FrameId frame_id;
116 // MUDPI frame_count value
117 llnetio::mudpi::NumFrames frame_count;
118 // Frame type
119 llnetio::rtms::PacketType frame_type;
120 // rtms simulated flag
121 llnetio::rtms::Source source;
122 // rtms little_endian flag
123 llnetio::rtms::Endianness endianness;
124 // rtms status field
125 llnetio::rtms::Status status;
126 // mudpi timestamp
127 taiclock::TaiClock::time_point mudpi_timestamp;
128 // timestamp from the pcap capture
129 taiclock::TaiClock::time_point pcap_timestamp;
130
131 explicit FrameMetadata(uint16_t new_frame_id,
132 uint16_t new_frame_count,
133 enum llnetio::rtms::PacketType new_frame_type,
134 llnetio::rtms::Source new_source,
135 llnetio::rtms::Endianness new_endianness,
136 llnetio::rtms::Status new_status,
137 taiclock::TaiClock::time_point new_mudpi_timestamp,
138 taiclock::TaiClock::time_point new_pcap_timestamp)
139 : frame_id{new_frame_id}
140 , frame_count{new_frame_count}
141 , frame_type{new_frame_type}
142 , source{new_source}
143 , endianness{new_endianness}
144 , status{new_status}
145 , mudpi_timestamp{new_mudpi_timestamp}
146 , pcap_timestamp{new_pcap_timestamp} {
147 }
149 : frame_id{}
150 , frame_count{}
151 , frame_type{}
152 , source{}
153 , endianness{}
154 , status{}
156 , pcap_timestamp{} {
157 }
158};
159
165 std::vector<uint8_t> payload_data;
166 std::map<uint16_t, FrameMetadata> metadata;
167
168 explicit CombinedFrames(SampleIdentifier new_identifier,
169 std::vector<uint8_t> new_payload_data,
170 std::map<uint16_t, FrameMetadata> new_metadata)
171 : identifier{new_identifier}
172 , payload_data{std::move(new_payload_data)}
173 , metadata{std::move(new_metadata)} {
174 }
175 CombinedFrames() = default;
176};
177
182public:
187 explicit PacketCombiner(std::function<void(const CombinedFrames&)> callback);
192 void AddSample(const PacketData& data);
193
194private:
195 void CombineFrames(const SampleIdentifier& sample_id);
196
197 // cppcheck-suppress-begin unusedStructMember
198
199 std::map<SampleIdentifier, std::map<uint16_t, FrameMetadata>> m_packet_meta_data;
200 std::map<SampleIdentifier, std::map<uint16_t, std::vector<uint8_t>>> m_packet_payloads;
201 std::map<SampleIdentifier, uint16_t> m_frame_count;
202 std::function<void(const CombinedFrames&)> m_callback;
203
204 // cppcheck-suppress-end unusedStructMember
205};
void AddSample(const PacketData &data)
This function is called to add a new packet to be combined with the others.
Definition packetCombiner.cpp:19
PacketCombiner(std::function< void(const CombinedFrames &)> callback)
This creates a new Packet combiner.
Definition packetCombiner.cpp:15
Fits converter Interface.
Definition ddsSub.hpp:155
Data about the combined packets of a single sample.
Definition packetCombiner.hpp:163
std::vector< uint8_t > payload_data
Definition packetCombiner.hpp:165
CombinedFrames()=default
std::map< uint16_t, FrameMetadata > metadata
Definition packetCombiner.hpp:166
SampleIdentifier identifier
Definition packetCombiner.hpp:164
CombinedFrames(SampleIdentifier new_identifier, std::vector< uint8_t > new_payload_data, std::map< uint16_t, FrameMetadata > new_metadata)
Definition packetCombiner.hpp:168
uint16_t frame_id
Definition packetCombiner.hpp:88
FrameIdentifier(SampleIdentifier new_sample_id, uint16_t new_frame_id)
Definition packetCombiner.hpp:103
bool operator!=(const FrameIdentifier &rhs) const
Definition packetCombiner.hpp:99
FrameIdentifier()
Definition packetCombiner.hpp:106
bool operator<(const FrameIdentifier &rhs) const
Definition packetCombiner.hpp:90
SampleIdentifier sample_id
Definition packetCombiner.hpp:87
bool operator==(const FrameIdentifier &rhs) const
Definition packetCombiner.hpp:96
FrameMetadata()
Definition packetCombiner.hpp:148
taiclock::TaiClock::time_point pcap_timestamp
Definition packetCombiner.hpp:129
taiclock::TaiClock::time_point mudpi_timestamp
Definition packetCombiner.hpp:127
llnetio::mudpi::FrameId frame_id
Definition packetCombiner.hpp:115
llnetio::rtms::Status status
Definition packetCombiner.hpp:125
llnetio::rtms::Source source
Definition packetCombiner.hpp:121
FrameMetadata(uint16_t new_frame_id, uint16_t new_frame_count, enum llnetio::rtms::PacketType new_frame_type, llnetio::rtms::Source new_source, llnetio::rtms::Endianness new_endianness, llnetio::rtms::Status new_status, taiclock::TaiClock::time_point new_mudpi_timestamp, taiclock::TaiClock::time_point new_pcap_timestamp)
Definition packetCombiner.hpp:131
llnetio::rtms::Endianness endianness
Definition packetCombiner.hpp:123
llnetio::rtms::PacketType frame_type
Definition packetCombiner.hpp:119
llnetio::mudpi::NumFrames frame_count
Definition packetCombiner.hpp:117
Definition fitsConverterIf.hpp:33
Unique identifier for packets of a single sample.
Definition packetCombiner.hpp:61
bool operator!=(const SampleIdentifier &rhs) const
Definition packetCombiner.hpp:73
StreamIdentifier stream_id
Definition packetCombiner.hpp:62
SampleIdentifier(StreamIdentifier new_stream_id, uint32_t new_sample_id)
Definition packetCombiner.hpp:76
uint32_t sample_id
Definition packetCombiner.hpp:63
bool operator<(const SampleIdentifier &rhs) const
Definition packetCombiner.hpp:64
SampleIdentifier()
Definition packetCombiner.hpp:79
bool operator==(const SampleIdentifier &rhs) const
Definition packetCombiner.hpp:70
Unique identifier for packets of a single stream.
Definition packetCombiner.hpp:24
StreamIdentifier(int32_t new_topic_id, uint16_t new_component_id, uint16_t new_application_tag)
Definition packetCombiner.hpp:47
uint16_t component_id
Definition packetCombiner.hpp:26
int32_t topic_id
Definition packetCombiner.hpp:25
bool operator<(const StreamIdentifier &rhs) const
Definition packetCombiner.hpp:29
StreamIdentifier()
Definition packetCombiner.hpp:54
bool operator!=(const StreamIdentifier &rhs) const
Definition packetCombiner.hpp:43
bool operator==(const StreamIdentifier &rhs) const
Definition packetCombiner.hpp:39
uint16_t application_tag
Definition packetCombiner.hpp:27