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