Line data Source code
1 : /**
2 : * @file daphneethstream.cpp Python bindings for the DAPHNEEthStreamFrame format
3 : *
4 : * This is part of the DUNE DAQ Software Suite, copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : #include "fddetdataformats/DAPHNEEthStreamFrame.hpp"
10 :
11 : #include <pybind11/pybind11.h>
12 : #include <pybind11/stl.h>
13 :
14 : namespace py = pybind11;
15 :
16 : namespace dunedaq::fddetdataformats::python {
17 :
18 : void
19 0 : register_daphneethstream(py::module& m)
20 : {
21 :
22 :
23 0 : py::class_<DAPHNEEthStreamFrame::ChannelWord>(m, "DAPHNEEthStreamChannelWord")
24 0 : .def_property("tbd",
25 0 : [](DAPHNEEthStreamFrame::ChannelWord& self) -> uint64_t {return self.tbd;},
26 0 : [](DAPHNEEthStreamFrame::ChannelWord& self, uint64_t tbd) {self.tbd = tbd;}
27 : )
28 0 : .def_property("version",
29 0 : [](DAPHNEEthStreamFrame::ChannelWord& self) -> uint64_t {return self.version;},
30 0 : [](DAPHNEEthStreamFrame::ChannelWord& self, uint64_t version) {self.version = version;}
31 : )
32 0 : .def_property("channel",
33 0 : [](DAPHNEEthStreamFrame::ChannelWord& self) -> uint64_t {return self.channel;},
34 0 : [](DAPHNEEthStreamFrame::ChannelWord& self, uint64_t channel) {self.channel = channel;}
35 : )
36 : ;
37 :
38 0 : py::class_<DAPHNEEthStreamFrame::Header>(m, "DAPHNEEthStreamHeader")
39 0 : .def_property("channel_words",
40 0 : [](DAPHNEEthStreamFrame::Header& self) -> py::list {
41 0 : py::list result;
42 0 : for (int i = 0; i < 4; i++) {
43 0 : result.append(self.channel_words[i]);
44 : }
45 0 : return result;
46 0 : },
47 0 : [](DAPHNEEthStreamFrame::Header& self, py::list channel_words) {
48 0 : for (int i = 0; i < 4 && i < len(channel_words); i++) {
49 0 : self.channel_words[i] = channel_words[i].cast<DAPHNEEthStreamFrame::ChannelWord>();
50 : }
51 0 : }
52 : )
53 : ;
54 :
55 0 : py::class_<DAPHNEEthStreamFrame>(m, "DAPHNEEthStreamFrame", py::buffer_protocol())
56 0 : .def(py::init())
57 0 : .def(py::init([](py::capsule capsule) {
58 0 : auto wfp = *static_cast<DAPHNEEthStreamFrame*>(capsule.get_pointer());
59 0 : return wfp;
60 : } ))
61 0 : .def(py::init([](py::bytes bytes){
62 0 : py::buffer_info info(py::buffer(bytes).request());
63 0 : auto wfp = *static_cast<DAPHNEEthStreamFrame*>(info.ptr);
64 0 : return wfp;
65 0 : }))
66 0 : .def("get_daqheader", [](DAPHNEEthStreamFrame& self) -> const detdataformats::DAQEthHeader& {return self.daq_header;}, py::return_value_policy::reference_internal)
67 0 : .def("get_daphneheader", [](DAPHNEEthStreamFrame& self) -> const DAPHNEEthStreamFrame::Header& {return self.header;}, py::return_value_policy::reference_internal)
68 0 : .def("get_adc", &DAPHNEEthStreamFrame::get_adc)
69 0 : .def("set_adc", &DAPHNEEthStreamFrame::set_adc)
70 0 : .def("get_timestamp", &DAPHNEEthStreamFrame::get_timestamp)
71 0 : .def("set_timestamp", &DAPHNEEthStreamFrame::set_timestamp)
72 0 : .def("get_channel", &DAPHNEEthStreamFrame::get_channel)
73 0 : .def("set_channel", &DAPHNEEthStreamFrame::set_channel)
74 0 : .def("get_channel0", &DAPHNEEthStreamFrame::get_channel0)
75 0 : .def("get_channel1", &DAPHNEEthStreamFrame::get_channel1)
76 0 : .def("get_channel2", &DAPHNEEthStreamFrame::get_channel2)
77 0 : .def("get_channel3", &DAPHNEEthStreamFrame::get_channel3)
78 0 : .def_static("sizeof", [](){ return sizeof(DAPHNEEthStreamFrame); })
79 0 : .def("get_bytes",
80 0 : [](DAPHNEEthStreamFrame* fr) -> py::bytes {
81 0 : return py::bytes(reinterpret_cast<char*>(fr), sizeof(DAPHNEEthStreamFrame));
82 : })
83 : ;
84 0 : }
85 :
86 : } // namespace dunedaq::fddetdataformats::python
|