DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
daphneethstream.cpp
Go to the documentation of this file.
1
8
10
11#include <pybind11/pybind11.h>
12#include <pybind11/stl.h>
13
14namespace py = pybind11;
15
17
18// NOLINTBEGIN(build/unsigned)
19
20void
22{
23
24 py::class_<DAPHNEEthStreamFrame::ChannelWord>(m, "DAPHNEEthStreamChannelWord")
25 .def_property(
26 "tbd",
27 [](DAPHNEEthStreamFrame::ChannelWord& self) -> uint64_t { return self.tbd; },
28 [](DAPHNEEthStreamFrame::ChannelWord& self, uint64_t tbd) { self.tbd = tbd; })
29 .def_property(
30 "version",
31 [](DAPHNEEthStreamFrame::ChannelWord& self) -> uint64_t { return self.version; },
32 [](DAPHNEEthStreamFrame::ChannelWord& self, uint64_t version) { self.version = version; })
33 .def_property(
34 "channel",
35 [](DAPHNEEthStreamFrame::ChannelWord& self) -> uint64_t { return self.channel; },
36 [](DAPHNEEthStreamFrame::ChannelWord& self, uint64_t channel) { self.channel = channel; })
37 .def_property_readonly_static("s_expected_bytes",
38 [](py::object /*self*/) { return sizeof(DAPHNEEthStreamFrame::ChannelWord); });
39
40 py::class_<DAPHNEEthStreamFrame::Header>(m, "DAPHNEEthStreamHeader")
41 .def_property(
42 "channel_words",
43 [](DAPHNEEthStreamFrame::Header& self) -> py::list {
44 py::list result;
45 for (int i = 0; i < 4; i++) {
46 result.append(self.channel_words[i]);
47 }
48 return result;
49 },
50 [](DAPHNEEthStreamFrame::Header& self, py::list channel_words) {
51 for (int i = 0; i < 4 && i < static_cast<int>(len(channel_words)); i++) {
52 self.channel_words[i] = channel_words[i].cast<DAPHNEEthStreamFrame::ChannelWord>();
53 }
54 })
55 .def_property_readonly_static("s_expected_bytes",
56 [](py::object /*self*/) { return sizeof(DAPHNEEthStreamFrame::Header); });
57
58 py::class_<DAPHNEEthStreamFrame>(m, "DAPHNEEthStreamFrame", py::buffer_protocol())
59 .def(py::init())
60 .def(py::init([](py::capsule capsule) {
61 auto wfp = *static_cast<DAPHNEEthStreamFrame*>(capsule.get_pointer());
62 return wfp;
63 }))
64 .def(py::init([](py::bytes bytes) {
65 py::buffer_info info(py::buffer(bytes).request());
66 auto wfp = *static_cast<DAPHNEEthStreamFrame*>(info.ptr);
67 return wfp;
68 }))
69 .def(
70 "get_daqheader",
71 [](DAPHNEEthStreamFrame& self) -> const detdataformats::DAQEthHeader& { return self.daq_header; },
72 py::return_value_policy::reference_internal)
73 .def(
74 "get_daphneheader",
75 [](DAPHNEEthStreamFrame& self) -> const DAPHNEEthStreamFrame::Header& { return self.header; },
76 py::return_value_policy::reference_internal)
77 .def(
78 "get_header",
79 [](DAPHNEEthStreamFrame& self) -> const DAPHNEEthStreamFrame::Header& { return self.header; },
80 py::return_value_policy::reference_internal)
81 .def_property_readonly(
82 "daq_header",
83 [](DAPHNEEthStreamFrame& self) -> detdataformats::DAQEthHeader& { return self.daq_header; },
84 py::return_value_policy::reference_internal)
85 .def_property_readonly(
86 "header",
87 [](DAPHNEEthStreamFrame& self) -> DAPHNEEthStreamFrame::Header& { return self.header; },
88 py::return_value_policy::reference_internal)
89 .def("get_adc", &DAPHNEEthStreamFrame::get_adc)
90 .def("set_adc", &DAPHNEEthStreamFrame::set_adc)
91 .def("get_timestamp", &DAPHNEEthStreamFrame::get_timestamp)
92 .def("set_timestamp", &DAPHNEEthStreamFrame::set_timestamp)
93 .def("__lt__", [](const DAPHNEEthStreamFrame& lhs, const DAPHNEEthStreamFrame& rhs) { return lhs < rhs; })
94 .def("get_channel", &DAPHNEEthStreamFrame::get_channel)
95 .def("set_channel", &DAPHNEEthStreamFrame::set_channel)
96 .def_property_readonly_static("version", [](py::object /*self*/) { return DAPHNEEthStreamFrame::version; })
97 .def_property_readonly_static("s_bits_per_adc",
98 [](py::object /*self*/) { return DAPHNEEthStreamFrame::s_bits_per_adc; })
99 .def_property_readonly_static("s_bits_per_word",
100 [](py::object /*self*/) { return DAPHNEEthStreamFrame::s_bits_per_word; })
101 .def_property_readonly_static("s_adcs_per_channel",
102 [](py::object /*self*/) { return DAPHNEEthStreamFrame::s_adcs_per_channel; })
103 .def_property_readonly_static("s_num_channels",
104 [](py::object /*self*/) { return DAPHNEEthStreamFrame::s_num_channels; })
105 .def_property_readonly_static("s_num_adc_words",
106 [](py::object /*self*/) { return DAPHNEEthStreamFrame::s_num_adc_words; })
107 .def_property_readonly_static("s_expected_bytes",
108 [](py::object /*self*/) { return DAPHNEEthStreamFrame::s_expected_bytes; })
109 .def("get_channel0", &DAPHNEEthStreamFrame::get_channel0)
110 .def("get_channel1", &DAPHNEEthStreamFrame::get_channel1)
111 .def("get_channel2", &DAPHNEEthStreamFrame::get_channel2)
112 .def("get_channel3", &DAPHNEEthStreamFrame::get_channel3)
113 .def_static("sizeof", []() { return sizeof(DAPHNEEthStreamFrame); })
114 .def("get_bytes", [](DAPHNEEthStreamFrame* fr) -> py::bytes {
115 return py::bytes(reinterpret_cast<char*>(fr), sizeof(DAPHNEEthStreamFrame)); // NOLINT reinterpret_cast
116 });
117} // NOLINT (defensible use of "overly long" function)
118
119// NOLINTEND(build/unsigned)
120
121} // namespace dunedaq::fddetdataformats::python
void register_daphneethstream(py::module &m)
DAQEthHeader is a versioned and unified structure for every FE electronics.
Struct for accessing raw DAPHNE eth stream frames.
uint8_t get_channel1() const
Get the channel 1 from the DAPHNE Stream frame header.
void set_timestamp(const uint64_t new_timestamp)
Set the starting 64-bit timestamp of the frame.
uint8_t get_channel0() const
Get the channel 0 from the DAPHNE Stream frame header.
uint8_t get_channel(const int i_channel) const
Get the channel identifier of the frame.
void set_channel(const int i_channel, const uint8_t new_channel_val)
Set the channel identifier of the frame.
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.
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.
uint8_t get_channel3() const
Get the channel 3 from the DAPHNE Stream frame header.
uint8_t get_channel2() const
Get the channel 2 from the DAPHNE Stream frame header.
uint64_t get_timestamp() const
Get the starting 64-bit timestamp of the frame.