Line data Source code
1 : /**
2 : * @file wib2.cpp Python bindings for the WIB2Frame 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/WIB2Frame.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_wib2(py::module& m)
20 : {
21 :
22 0 : py::class_<WIB2Frame>(m, "WIB2Frame", py::buffer_protocol())
23 0 : .def(py::init())
24 0 : .def(py::init([](py::capsule capsule) {
25 0 : auto wfp = *static_cast<WIB2Frame*>(capsule.get_pointer());
26 0 : return wfp;
27 : }))
28 0 : .def(py::init([](py::bytes bytes) {
29 0 : py::buffer_info info(py::buffer(bytes).request());
30 0 : auto wfp = *static_cast<WIB2Frame*>(info.ptr);
31 0 : return wfp;
32 0 : }))
33 0 : .def("get_adc", static_cast<uint16_t (WIB2Frame::*)(const int) const>(&WIB2Frame::get_adc))
34 0 : .def("set_adc", static_cast<void (WIB2Frame::*)(int, uint16_t)>(&WIB2Frame::set_adc))
35 0 : .def("get_timestamp", &WIB2Frame::get_timestamp)
36 0 : .def("get_header", [](WIB2Frame& self) -> const WIB2Frame::Header& { return self.header; })
37 0 : .def("get_trailer", [](WIB2Frame& self) -> const WIB2Frame::Trailer& { return self.trailer; })
38 0 : .def_static("sizeof", []() { return sizeof(WIB2Frame); })
39 0 : .def("get_bytes",
40 0 : [](WIB2Frame* fr) -> py::bytes { return py::bytes(reinterpret_cast<char*>(fr), sizeof(WIB2Frame)); });
41 :
42 0 : py::class_<WIB2Frame::Header>(m, "WIB2Header")
43 0 : .def_property_readonly("version", [](WIB2Frame::Header& self) -> uint32_t { return self.version; })
44 0 : .def_property_readonly("detector_id", [](WIB2Frame::Header& self) -> uint32_t { return self.detector_id; })
45 0 : .def_property_readonly("crate", [](WIB2Frame::Header& self) -> uint32_t { return self.crate; })
46 0 : .def_property_readonly("slot", [](WIB2Frame::Header& self) -> uint32_t { return self.slot; })
47 0 : .def_property_readonly("link", [](WIB2Frame::Header& self) -> uint32_t { return self.link; })
48 0 : .def_property_readonly("timestamp_1", [](WIB2Frame::Header& self) -> uint32_t { return self.timestamp_1; })
49 0 : .def_property_readonly("timestamp_2", [](WIB2Frame::Header& self) -> uint32_t { return self.timestamp_2; })
50 0 : .def_property_readonly("colddata_timestamp_id",
51 0 : [](WIB2Frame::Header& self) -> uint32_t { return self.colddata_timestamp_id; })
52 0 : .def_property_readonly("femb_valid", [](WIB2Frame::Header& self) -> uint32_t { return self.femb_valid; })
53 0 : .def_property_readonly("link_mask", [](WIB2Frame::Header& self) -> uint32_t { return self.link_mask; })
54 0 : .def_property_readonly("lock_output_status",
55 0 : [](WIB2Frame::Header& self) -> uint32_t { return self.lock_output_status; })
56 0 : .def_property_readonly("femb_pulser_frame_bits",
57 0 : [](WIB2Frame::Header& self) -> uint32_t { return self.femb_pulser_frame_bits; })
58 0 : .def_property_readonly("femb_sync_flags", [](WIB2Frame::Header& self) -> uint32_t { return self.femb_sync_flags; })
59 0 : .def_property_readonly("colddata_timestamp",
60 0 : [](WIB2Frame::Header& self) -> uint32_t { return self.colddata_timestamp; });
61 :
62 0 : py::class_<WIB2Frame::Trailer>(m, "WIB2Trailer")
63 0 : .def_property_readonly("flex_bits", [](WIB2Frame::Trailer& self) -> uint32_t { return self.flex_bits; })
64 0 : .def_property_readonly("ws", [](WIB2Frame::Trailer& self) -> uint32_t { return self.ws; })
65 0 : .def_property_readonly("psr_cal", [](WIB2Frame::Trailer& self) -> uint32_t { return self.psr_cal; })
66 0 : .def_property_readonly("ready", [](WIB2Frame::Trailer& self) -> uint32_t { return self.ready; })
67 0 : .def_property_readonly("context_code", [](WIB2Frame::Trailer& self) -> uint32_t { return self.context_code; });
68 0 : }
69 :
70 : } // namespace dunedaq::fddetdataformats::python
|