DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TriggerRecordHeaderData.hpp
Go to the documentation of this file.
1
9#ifndef DAQDATAFORMATS_INCLUDE_DAQDATAFORMATS_TRIGGERRECORDHEADERDATA_HPP_
10#define DAQDATAFORMATS_INCLUDE_DAQDATAFORMATS_TRIGGERRECORDHEADERDATA_HPP_
11
15
16#include <cstddef>
17#include <limits>
18#include <ostream>
19#include <string>
20#include <vector>
21
23
28{
32 static constexpr uint32_t s_trigger_record_header_magic = 0x33334444; // NOLINT(build/unsigned)
33
37 static constexpr uint32_t s_trigger_record_header_version = 5; // NOLINT(build/unsigned)
38
42 static constexpr uint64_t s_invalid_number_components = // NOLINT(build/unsigned)
43 std::numeric_limits<uint64_t>::max(); // NOLINT(build/unsigned)
44
48 static constexpr uint32_t s_default_status_bits = 0; // NOLINT(build/unsigned)
49
53 uint32_t trigger_record_header_marker = s_trigger_record_header_magic; // NOLINT(build/unsigned)
54
58 uint32_t version = s_trigger_record_header_version; // NOLINT(build/unsigned)
59
64
69
73 uint64_t num_requested_components{ s_invalid_number_components }; // NOLINT(build/unsigned)
74
79
83 uint32_t status_bits{ s_default_status_bits }; // NOLINT(build/unsigned)
84
89
98
102 uint32_t unused{ 0xFFFFFFFF }; // NOLINT(build/unsigned)
103
105};
106
108 "This is intentionally designed to tell the developer to update the static_assert checks (including this "
109 "one) when the version is bumped");
110
111static_assert(sizeof(TriggerRecordHeaderData) == 64, "TriggerRecordHeaderData struct size different than expected!");
112static_assert(offsetof(TriggerRecordHeaderData, trigger_record_header_marker) == 0,
113 "TriggerRecordHeaderData trigger_record_header_marker field not at expected offset!");
114static_assert(offsetof(TriggerRecordHeaderData, version) == 4,
115 "TriggerRecordHeaderData version field not at expected offset!");
116static_assert(offsetof(TriggerRecordHeaderData, trigger_number) == 8,
117 "TriggerRecordHeaderData trigger_number field not at expected offset!");
118static_assert(offsetof(TriggerRecordHeaderData, trigger_timestamp) == 16,
119 "TriggerRecordHeaderData trigger_timestamp field not at expected offset!");
120static_assert(offsetof(TriggerRecordHeaderData, num_requested_components) == 24,
121 "TriggerRecordHeaderData num_requested_components field not at expected offset!");
122static_assert(offsetof(TriggerRecordHeaderData, run_number) == 32,
123 "TriggerRecordHeaderData run_number field not at expected offset!");
124static_assert(offsetof(TriggerRecordHeaderData, status_bits) == 36,
125 "TriggerRecordHeaderData status_bits field not at expected offset!");
126static_assert(offsetof(TriggerRecordHeaderData, trigger_type) == 40,
127 "TriggerRecordHeaderData trigger_type field not at expected offset!");
128static_assert(offsetof(TriggerRecordHeaderData, sequence_number) == 48,
129 "TriggerRecordHeaderData sequence_number field not at expected offset!");
130static_assert(offsetof(TriggerRecordHeaderData, max_sequence_number) == 50,
131 "TriggerRecordHeaderData max_sequence_number field not at expected offset!");
132static_assert(offsetof(TriggerRecordHeaderData, unused) == 52,
133 "TriggerRecordHeaderData unused field not at expected offset!");
134static_assert(offsetof(TriggerRecordHeaderData, element_id) == 56,
135 "TriggerRecordHeaderData source_id field not at expected offset!");
136
140enum class TriggerRecordStatusBits : size_t
141{
142 kIncomplete = 0,
143 kMismatch = 1,
144 kUnassigned2 = 2,
145 kUnassigned3 = 3,
146 kUnassigned4 = 4,
147 kUnassigned5 = 5,
148 kUnassigned6 = 6,
149 kUnassigned7 = 7,
150 kUnassigned8 = 8,
151 kUnassigned9 = 9,
152 kUnassigned10 = 10,
153 kUnassigned11 = 11,
154 kUnassigned12 = 12,
155 kUnassigned13 = 13,
156 kUnassigned14 = 14,
157 kUnassigned15 = 15,
158 kUnassigned16 = 16,
159 kUnassigned17 = 17,
160 kUnassigned18 = 18,
161 kUnassigned19 = 19,
162 kUnassigned20 = 20,
163 kUnassigned21 = 21,
164 kUnassigned22 = 22,
165 kUnassigned23 = 23,
166 kUnassigned24 = 24,
167 kUnassigned25 = 25,
168 kUnassigned26 = 26,
169 kUnassigned27 = 27,
170 kUnassigned28 = 28,
171 kUnassigned29 = 29,
172 kUnassigned30 = 30,
173 kUnassigned31 = 31,
174 kInvalid = 32
175};
176
183inline std::ostream&
184operator<<(std::ostream& o, TriggerRecordHeaderData const& hdr)
185{
186 return o << "check_word: " << std::hex << hdr.trigger_record_header_marker << std::dec << ", "
187 << "version: " << hdr.version << ", "
188
189 << "trigger_number: " << hdr.trigger_number << ", " << "run_number: " << hdr.run_number << ", "
190 << "trigger_timestamp: " << hdr.trigger_timestamp << ", " << "trigger_type: " << hdr.trigger_type << ", "
191
192 << "status_bits: " << hdr.status_bits << ", "
193
194 << "num_requested_components: " << hdr.num_requested_components << ", "
195 << "sequence_number: " << hdr.sequence_number << ", " << "max_sequence_number: " << hdr.max_sequence_number
196 << ", " << "element_id: { " << hdr.element_id << " }";
197}
198
205inline std::istream&
207{
208 std::string tmp;
209 return o >> tmp >> std::hex >> hdr.trigger_record_header_marker >> std::dec >> tmp >> tmp >> hdr.version >> tmp >>
210 tmp >> hdr.trigger_number >> tmp >> tmp >> hdr.run_number >> tmp >> tmp >> hdr.trigger_timestamp >> tmp >>
211 tmp >> hdr.trigger_type >> tmp >> tmp >> hdr.status_bits >> tmp >> tmp >> hdr.num_requested_components >>
212 tmp >> tmp >> hdr.sequence_number >> tmp >> tmp >> hdr.max_sequence_number >> tmp >> tmp >> tmp >>
213 hdr.element_id;
214}
215
216} // namespace dunedaq::daqdataformats
217
218#endif // DAQDATAFORMATS_INCLUDE_DAQDATAFORMATS_TRIGGERRECORDHEADERDATA_HPP_
static constexpr sequence_number_t s_invalid_sequence_number
Definition Types.hpp:74
static constexpr trigger_type_t s_invalid_trigger_type
An invalid trigger type.
Definition Types.hpp:72
static constexpr trigger_number_t s_invalid_trigger_number
An invalid trigger number.
Definition Types.hpp:62
static constexpr timestamp_t s_invalid_timestamp
An invalid timestamp.
Definition Types.hpp:68
static constexpr run_number_t s_invalid_run_number
An invalid run number.
Definition Types.hpp:60
uint32_t run_number_t
Type used to represent run number.
Definition Types.hpp:20
uint64_t trigger_number_t
Type used to represent trigger number.
Definition Types.hpp:24
TriggerRecordStatusBits
This enumeration should list all defined status bits, as well as a short documentation of their meani...
@ kUnassigned6
Status bit 6 is not assigned.
@ kMismatch
We have as many fragments as requested but they do not match the requested components.
@ kUnassigned4
Status bit 4 is not assigned.
@ kUnassigned2
Status bit 2 is not assigned.
@ kUnassigned3
Status bit 3 is not assigned.
@ kUnassigned5
Status bit 5 is not assigned.
uint16_t sequence_number_t
Type used to represent sequence within a trigger record.
Definition Types.hpp:48
uint64_t timestamp_t
Type used to represent DUNE timing system timestamps.
Definition Types.hpp:36
uint64_t trigger_type_t
Type used to represent Trigger Decision trigger types.
Definition Types.hpp:44
std::ostream & operator<<(std::ostream &o, ComponentRequest const &cr)
Write out a ComponentRequest in human-readable form.
std::istream & operator>>(std::istream &is, ComponentRequest &cr)
Read a ComponentRequest from a string stream.
@ kUnassigned20
Status bit 20 is not assigned.
@ kUnassigned13
Status bit 13 is not assigned.
@ kUnassigned26
Status bit 26 is not assigned.
@ kUnassigned14
Status bit 14 is not assigned.
@ kUnassigned16
Status bit 16 is not assigned.
@ kUnassigned27
Status bit 27 is not assigned.
@ kUnassigned10
Status bit 10 is not assigned.
@ kIncomplete
Only part of the requested data is present in the fragment.
@ kUnassigned9
Status bit 9 is not assigned.
@ kUnassigned24
Status bit 24 is not assigned.
@ kUnassigned7
Status bit 7 is not assigned.
@ kUnassigned28
Status bit 28 is not assigned.
@ kUnassigned21
Status bit 21 is not assigned.
@ kUnassigned31
Status bit 31 is not assigned.
@ kInvalid
Status bit 32 and higher are not valid (status_bits is only 32 bits)
@ kUnassigned18
Status bit 18 is not assigned.
@ kUnassigned25
Status bit 25 is not assigned.
@ kUnassigned19
Status bit 19 is not assigned.
@ kUnassigned29
Status bit 29 is not assigned.
@ kUnassigned23
Status bit 23 is not assigned.
@ kUnassigned11
Status bit 11 is not assigned.
@ kUnassigned15
Status bit 15 is not assigned.
@ kUnassigned17
Status bit 17 is not assigned.
@ kUnassigned22
Status bit 22 is not assigned.
@ kUnassigned12
Status bit 12 is not assigned.
@ kUnassigned30
Status bit 30 is not assigned.
@ kUnassigned8
Status bit 8 is not assigned.
SourceID is a generalized representation of the source of a piece of data in the DAQ....
Definition SourceID.hpp:32
Additional data fields associated with a TriggerRecordHeader.
uint32_t version
Version of the TriggerRecordHeaderData structure.
sequence_number_t max_sequence_number
Maximum sequence number of TriggerRecords corresponding to this trigger.
sequence_number_t sequence_number
Sequence number of this TriggerRecord within the trigger response.
timestamp_t trigger_timestamp
Timestamp of the TriggerDecision.
uint64_t num_requested_components
Number of ComponentRequest objects stored in the TriggerRecordHeader.
uint32_t status_bits
Status bits for the TriggerRecord.
trigger_type_t trigger_type
Type of the TriggerDecision.
static constexpr uint32_t s_trigger_record_header_version
The current version of the TriggerRecordHeader.
uint32_t trigger_record_header_marker
Magic bytes used to identify a TriggerRecordHeaderData struct in a raw data stream.
static constexpr uint32_t s_trigger_record_header_magic
Magic bytes to identify a TriggerRecordHeader entry in a raw data stream.
run_number_t run_number
Run Number for the TriggerRecord.
uint32_t unused
Padding to ensure 64-bit alignment.
static constexpr uint32_t s_default_status_bits
By default, all status bits are unset.
static constexpr uint64_t s_invalid_number_components
An invalid number of components.