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 = 4; // 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_error_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 error_bits{ s_default_error_bits }; // NOLINT(build/unsigned)
84
89
98
102 uint32_t unused{ 0xFFFFFFFF }; // NOLINT(build/unsigned)
103
105};
106
107 static_assert(TriggerRecordHeaderData::s_trigger_record_header_version == 4, "This is intentionally designed to tell the developer to update the static_assert checks (including this one) when the version is bumped");
108
109static_assert(sizeof(TriggerRecordHeaderData) == 64, "TriggerRecordHeaderData struct size different than expected!");
110static_assert(offsetof(TriggerRecordHeaderData, trigger_record_header_marker) == 0,
111 "TriggerRecordHeaderData trigger_record_header_marker field not at expected offset!");
112static_assert(offsetof(TriggerRecordHeaderData, version) == 4,
113 "TriggerRecordHeaderData version field not at expected offset!");
114static_assert(offsetof(TriggerRecordHeaderData, trigger_number) == 8,
115 "TriggerRecordHeaderData trigger_number field not at expected offset!");
116static_assert(offsetof(TriggerRecordHeaderData, trigger_timestamp) == 16,
117 "TriggerRecordHeaderData trigger_timestamp field not at expected offset!");
118static_assert(offsetof(TriggerRecordHeaderData, num_requested_components) == 24,
119 "TriggerRecordHeaderData num_requested_components field not at expected offset!");
120static_assert(offsetof(TriggerRecordHeaderData, run_number) == 32,
121 "TriggerRecordHeaderData run_number field not at expected offset!");
122static_assert(offsetof(TriggerRecordHeaderData, error_bits) == 36,
123 "TriggerRecordHeaderData error_bits field not at expected offset!");
124static_assert(offsetof(TriggerRecordHeaderData, trigger_type) == 40,
125 "TriggerRecordHeaderData trigger_type field not at expected offset!");
126static_assert(offsetof(TriggerRecordHeaderData, sequence_number) == 48,
127 "TriggerRecordHeaderData sequence_number field not at expected offset!");
128static_assert(offsetof(TriggerRecordHeaderData, max_sequence_number) == 50,
129 "TriggerRecordHeaderData max_sequence_number field not at expected offset!");
130static_assert(offsetof(TriggerRecordHeaderData, unused) == 52,
131 "TriggerRecordHeaderData unused field not at expected offset!");
132static_assert(offsetof(TriggerRecordHeaderData, element_id) == 56,
133 "TriggerRecordHeaderData source_id field not at expected offset!");
134
138enum class TriggerRecordErrorBits : size_t
139{
140 kIncomplete = 0,
141 kMismatch = 1,
142 kUnassigned2 = 2,
143 kUnassigned3 = 3,
144 kUnassigned4 = 4,
145 kUnassigned5 = 5,
146 kUnassigned6 = 6,
147 kUnassigned7 = 7,
148 kUnassigned8 = 8,
149 kUnassigned9 = 9,
150 kUnassigned10 = 10,
151 kUnassigned11 = 11,
152 kUnassigned12 = 12,
153 kUnassigned13 = 13,
154 kUnassigned14 = 14,
155 kUnassigned15 = 15,
156 kUnassigned16 = 16,
157 kUnassigned17 = 17,
158 kUnassigned18 = 18,
159 kUnassigned19 = 19,
160 kUnassigned20 = 20,
161 kUnassigned21 = 21,
162 kUnassigned22 = 22,
163 kUnassigned23 = 23,
164 kUnassigned24 = 24,
165 kUnassigned25 = 25,
166 kUnassigned26 = 26,
167 kUnassigned27 = 27,
168 kUnassigned28 = 28,
169 kUnassigned29 = 29,
170 kUnassigned30 = 30,
171 kUnassigned31 = 31,
172 kInvalid = 32
173};
174
181inline std::ostream&
182operator<<(std::ostream& o, TriggerRecordHeaderData const& hdr)
183{
184 return o << "check_word: " << std::hex << hdr.trigger_record_header_marker << std::dec << ", "
185 << "version: " << hdr.version << ", "
186
187 << "trigger_number: " << hdr.trigger_number << ", "
188 << "run_number: " << hdr.run_number << ", "
189 << "trigger_timestamp: " << hdr.trigger_timestamp << ", "
190 << "trigger_type: " << hdr.trigger_type << ", "
191
192 << "error_bits: " << hdr.error_bits << ", "
193
194 << "num_requested_components: " << hdr.num_requested_components << ", "
195 << "sequence_number: " << hdr.sequence_number << ", "
196 << "max_sequence_number: " << hdr.max_sequence_number << ", "
197 << "element_id: { " << hdr.element_id << " }";
198}
199
206inline std::istream&
208{
209 std::string tmp;
210 return o >> tmp >> std::hex >> hdr.trigger_record_header_marker >> std::dec >> tmp >> tmp >> hdr.version >> tmp >>
211 tmp >> hdr.trigger_number >> tmp >> tmp >> hdr.run_number >> tmp >> tmp >> hdr.trigger_timestamp >> tmp >>
212 tmp >> hdr.trigger_type >> tmp >> tmp >> hdr.error_bits >> tmp >> tmp >> hdr.num_requested_components >> tmp >>
213 tmp >> hdr.sequence_number >> tmp >> tmp >> hdr.max_sequence_number >> tmp >> tmp >> tmp >> 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:71
static constexpr trigger_type_t s_invalid_trigger_type
An invalid trigger type.
Definition Types.hpp:69
static constexpr trigger_number_t s_invalid_trigger_number
An invalid trigger number.
Definition Types.hpp:59
static constexpr timestamp_t s_invalid_timestamp
An invalid timestamp.
Definition Types.hpp:65
static constexpr run_number_t s_invalid_run_number
An invalid run number.
Definition Types.hpp:57
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
uint16_t sequence_number_t
Type used to represent sequence within a trigger record.
Definition Types.hpp:45
TriggerRecordErrorBits
This enumeration should list all defined error bits, as well as a short documentation of their meanin...
@ kMismatch
We have as many fragments as requested but they do not match the requested components.
@ kUnassigned2
Error bit 2 is not assigned.
uint64_t timestamp_t
Type used to represent DUNE timing system timestamps.
Definition Types.hpp:36
@ kUnassigned20
Error bit 20 is not assigned.
@ kUnassigned13
Error bit 13 is not assigned.
@ kUnassigned26
Error bit 26 is not assigned.
@ kUnassigned6
Error bit 6 is not assigned.
@ kUnassigned14
Error bit 14 is not assigned.
@ kUnassigned4
Error bit 4 is not assigned.
@ kUnassigned16
Error bit 16 is not assigned.
@ kUnassigned27
Error bit 27 is not assigned.
@ kUnassigned10
Error bit 10 is not assigned.
@ kIncomplete
Only part of the requested data is present in the fragment.
@ kUnassigned9
Error bit 9 is not assigned.
@ kUnassigned24
Error bit 24 is not assigned.
@ kUnassigned7
Error bit 7 is not assigned.
@ kUnassigned28
Error bit 28 is not assigned.
@ kUnassigned21
Error bit 21 is not assigned.
@ kUnassigned3
Error bit 3 is not assigned.
@ kUnassigned31
Error bit 31 is not assigned.
@ kInvalid
Error bit 32 and higher are not valid (error_bits is only 32 bits)
@ kUnassigned18
Error bit 18 is not assigned.
@ kUnassigned25
Error bit 25 is not assigned.
@ kUnassigned19
Error bit 19 is not assigned.
@ kUnassigned5
Error bit 5 is not assigned.
@ kUnassigned29
Error bit 29 is not assigned.
@ kUnassigned23
Error bit 23 is not assigned.
@ kUnassigned11
Error bit 11 is not assigned.
@ kUnassigned15
Error bit 15 is not assigned.
@ kUnassigned17
Error bit 17 is not assigned.
@ kUnassigned22
Error bit 22 is not assigned.
@ kUnassigned12
Error bit 12 is not assigned.
@ kUnassigned30
Error bit 30 is not assigned.
@ kUnassigned8
Error bit 8 is not assigned.
uint64_t trigger_type_t
Type used to represent Trigger Decision trigger types.
Definition Types.hpp:41
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.
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.
static constexpr uint32_t s_default_error_bits
By default, all error bits are unset.
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.
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 uint64_t s_invalid_number_components
An invalid number of components.
uint32_t error_bits
Error bits for the TriggerRecord.