DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
fddetdataformats
include
fddetdataformats
DAPHNEEthStreamFrame.hpp
Go to the documentation of this file.
1
13
14
#ifndef FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_DAPHNEETHSTREAMFRAME_HPP_
15
#define FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_DAPHNEETHSTREAMFRAME_HPP_
16
17
#include "
fddetdataformats/FrameConcepts.hpp
"
18
#include "
fddetdataformats/Utils.hpp
"
19
20
#include "
detdataformats/DAQEthHeader.hpp
"
21
22
#include <algorithm>
// For std::min
23
#include <cassert>
// For assert()
24
#include <cstdint>
// For uint32_t etc
25
#include <cstdio>
26
#include <cstdlib>
27
#include <format>
28
#include <stdexcept>
// For std::out_of_range
29
30
namespace
dunedaq::fddetdataformats
{
31
32
// NOLINTBEGIN(build/unsigned)
33
41
42
struct
DAPHNEEthStreamFrame
43
{
44
// The definition of the format is in terms of 64-bit words
45
using
word_t
= uint64_t;
46
47
// Dataframe format version
48
static
constexpr
uint8_t
version
= 1;
49
50
static
constexpr
int
s_bits_per_adc
= 14;
51
static
constexpr
int
s_bits_per_word
= 8 *
sizeof
(
word_t
);
52
static
constexpr
int
s_adcs_per_channel
= 280;
53
static
constexpr
int
s_num_channels
= 4;
54
static
constexpr
int
s_num_adc_words
=
s_num_channels
*
s_adcs_per_channel
*
s_bits_per_adc
/
s_bits_per_word
;
55
56
struct
ChannelWord
57
{
58
word_t
tbd
: 52;
59
word_t
version
: 4;
60
word_t
channel
: 8;
61
};
62
static_assert
(
sizeof
(
ChannelWord
) == 8);
63
64
struct
Header
65
{
66
ChannelWord
channel_words
[
s_num_channels
];
// NOLINT
67
};
68
static_assert
(
sizeof
(
Header
) ==
sizeof
(
ChannelWord
) *
s_num_channels
);
69
70
static
constexpr
std::size_t
s_expected_bytes
=
sizeof
(
detdataformats::DAQEthHeader
) +
sizeof
(
Header
) +
71
sizeof
(
word_t
) *
s_num_adc_words
;
72
74
uint16_t
get_adc
(
int
i_adc,
int
i_channel)
const
;
75
77
void
set_adc
(
int
i_adc,
int
i_channel, uint16_t val);
// NOLINT
78
80
uint64_t
get_timestamp
()
const
{
return
daq_header
.get_timestamp(); }
81
83
void
set_timestamp
(
const
uint64_t new_timestamp) {
daq_header
.timestamp = new_timestamp; }
84
86
uint8_t
get_channel
(
const
int
i_channel)
const
;
87
89
void
set_channel
(
const
int
i_channel,
const
uint8_t new_channel_val);
90
92
uint8_t
get_channel0
()
const
{
return
header
.channel_words[0].channel; }
93
95
uint8_t
get_channel1
()
const
{
return
header
.channel_words[1].channel; }
96
98
uint8_t
get_channel2
()
const
{
return
header
.channel_words[2].channel; }
99
101
uint8_t
get_channel3
()
const
{
return
header
.channel_words[3].channel; }
102
103
bool
operator<
(
const
DAPHNEEthStreamFrame
& other)
const
{
104
return
this->
get_timestamp
() < other.
get_timestamp
();
105
}
106
107
detdataformats::DAQEthHeader
daq_header
;
108
Header
header
;
109
word_t
adc_words
[
s_num_adc_words
];
// NOLINT
110
};
111
112
static_assert
(std::endian::native == std::endian::little,
113
"The DAPHNEEthStreamFrame bitfield layout assumes little-endian architecture"
);
114
115
static_assert
(
AdaptableFrameConcept<DAPHNEEthStreamFrame>
,
"DAPHNEEthStreamFrame does not satisfy the AdaptableFrameConcept"
);
116
117
}
// namespace dunedaq::fddetdataformats
118
119
#include "
detail/DAPHNEEthStreamFrame.hxx
"
120
121
// NOLINTEND(build/unsigned)
122
123
#endif
// FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_DAPHNEETHSTREAMFRAME_HPP_
DAPHNEEthStreamFrame.hxx
DAQEthHeader.hpp
FrameConcepts.hpp
dunedaq::fddetdataformats::AdaptableFrameConcept
Definition
FrameConcepts.hpp:96
Utils.hpp
dunedaq::fddetdataformats
Definition
CRTBernFrame.hpp:29
dunedaq::detdataformats::DAQEthHeader
DAQEthHeader is a versioned and unified structure for every FE electronics.
Definition
DAQEthHeader.hpp:23
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::ChannelWord
Definition
DAPHNEEthStreamFrame.hpp:57
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::ChannelWord::tbd
word_t tbd
Definition
DAPHNEEthStreamFrame.hpp:58
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::ChannelWord::version
word_t version
Definition
DAPHNEEthStreamFrame.hpp:59
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::ChannelWord::channel
word_t channel
Definition
DAPHNEEthStreamFrame.hpp:60
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::Header
Definition
DAPHNEEthStreamFrame.hpp:65
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::Header::channel_words
ChannelWord channel_words[s_num_channels]
Definition
DAPHNEEthStreamFrame.hpp:66
dunedaq::fddetdataformats::DAPHNEEthStreamFrame
Struct for accessing raw DAPHNE eth stream frames.
Definition
DAPHNEEthStreamFrame.hpp:43
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_channel1
uint8_t get_channel1() const
Get the channel 1 from the DAPHNE Stream frame header.
Definition
DAPHNEEthStreamFrame.hpp:95
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::s_expected_bytes
static constexpr std::size_t s_expected_bytes
Definition
DAPHNEEthStreamFrame.hpp:70
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::daq_header
detdataformats::DAQEthHeader daq_header
Definition
DAPHNEEthStreamFrame.hpp:107
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::s_adcs_per_channel
static constexpr int s_adcs_per_channel
Definition
DAPHNEEthStreamFrame.hpp:52
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::header
Header header
Definition
DAPHNEEthStreamFrame.hpp:108
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::adc_words
word_t adc_words[s_num_adc_words]
Definition
DAPHNEEthStreamFrame.hpp:109
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::set_timestamp
void set_timestamp(const uint64_t new_timestamp)
Set the starting 64-bit timestamp of the frame.
Definition
DAPHNEEthStreamFrame.hpp:83
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_channel0
uint8_t get_channel0() const
Get the channel 0 from the DAPHNE Stream frame header.
Definition
DAPHNEEthStreamFrame.hpp:92
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::s_bits_per_adc
static constexpr int s_bits_per_adc
Definition
DAPHNEEthStreamFrame.hpp:50
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::s_num_channels
static constexpr int s_num_channels
Definition
DAPHNEEthStreamFrame.hpp:53
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_channel
uint8_t get_channel(const int i_channel) const
Get the channel identifier of the frame.
Definition
DAPHNEEthStreamFrame.hxx:5
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::word_t
uint64_t word_t
Definition
DAPHNEEthStreamFrame.hpp:45
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::set_channel
void set_channel(const int i_channel, const uint8_t new_channel_val)
Set the channel identifier of the frame.
Definition
DAPHNEEthStreamFrame.hxx:16
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::version
static constexpr uint8_t version
Definition
DAPHNEEthStreamFrame.hpp:48
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_adc
uint16_t get_adc(int i_adc, int i_channel) const
Get the i_adc-th ADC value of i_channel-th channel in the frame.
Definition
DAPHNEEthStreamFrame.hxx:28
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::s_num_adc_words
static constexpr int s_num_adc_words
Definition
DAPHNEEthStreamFrame.hpp:54
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::operator<
bool operator<(const DAPHNEEthStreamFrame &other) const
Definition
DAPHNEEthStreamFrame.hpp:103
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::set_adc
void set_adc(int i_adc, int i_channel, uint16_t val)
Set the i_adc-th ADC value of i_channel-th channel in the frame to val.
Definition
DAPHNEEthStreamFrame.hxx:37
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_channel3
uint8_t get_channel3() const
Get the channel 3 from the DAPHNE Stream frame header.
Definition
DAPHNEEthStreamFrame.hpp:101
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::s_bits_per_word
static constexpr int s_bits_per_word
Definition
DAPHNEEthStreamFrame.hpp:51
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_channel2
uint8_t get_channel2() const
Get the channel 2 from the DAPHNE Stream frame header.
Definition
DAPHNEEthStreamFrame.hpp:98
dunedaq::fddetdataformats::DAPHNEEthStreamFrame::get_timestamp
uint64_t get_timestamp() const
Get the starting 64-bit timestamp of the frame.
Definition
DAPHNEEthStreamFrame.hpp:80
Generated on
for DUNE-DAQ by
1.17.0