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 {
41 0 : return py::bytes(reinterpret_cast<char*>(fr), sizeof(WIB2Frame));
42 : }
43 : )
44 : ;
45 :
46 0 : py::class_<WIB2Frame::Header>(m, "WIB2Header")
47 0 : .def_property_readonly("version", [](WIB2Frame::Header& self) -> uint32_t {return self.version;})
48 0 : .def_property_readonly("detector_id", [](WIB2Frame::Header& self) -> uint32_t {return self.detector_id;})
49 0 : .def_property_readonly("crate", [](WIB2Frame::Header& self) -> uint32_t {return self.crate;})
50 0 : .def_property_readonly("slot", [](WIB2Frame::Header& self) -> uint32_t {return self.slot;})
51 0 : .def_property_readonly("link", [](WIB2Frame::Header& self) -> uint32_t {return self.link;})
52 0 : .def_property_readonly("timestamp_1", [](WIB2Frame::Header& self) -> uint32_t {return self.timestamp_1;})
53 0 : .def_property_readonly("timestamp_2", [](WIB2Frame::Header& self) -> uint32_t {return self.timestamp_2;})
54 0 : .def_property_readonly("colddata_timestamp_id", [](WIB2Frame::Header& self) -> uint32_t {return self.colddata_timestamp_id;})
55 0 : .def_property_readonly("femb_valid", [](WIB2Frame::Header& self) -> uint32_t {return self.femb_valid;})
56 0 : .def_property_readonly("link_mask", [](WIB2Frame::Header& self) -> uint32_t {return self.link_mask;})
57 0 : .def_property_readonly("lock_output_status", [](WIB2Frame::Header& self) -> uint32_t {return self.lock_output_status;})
58 0 : .def_property_readonly("femb_pulser_frame_bits", [](WIB2Frame::Header& self) -> uint32_t {return self.femb_pulser_frame_bits;})
59 0 : .def_property_readonly("femb_sync_flags", [](WIB2Frame::Header& self) -> uint32_t {return self.femb_sync_flags;})
60 0 : .def_property_readonly("colddata_timestamp", [](WIB2Frame::Header& self) -> uint32_t {return self.colddata_timestamp;})
61 : ;
62 :
63 0 : py::class_<WIB2Frame::Trailer>(m, "WIB2Trailer")
64 0 : .def_property_readonly("flex_bits", [](WIB2Frame::Trailer& self) -> uint32_t {return self.flex_bits;})
65 0 : .def_property_readonly("ws", [](WIB2Frame::Trailer& self) -> uint32_t {return self.ws;})
66 0 : .def_property_readonly("psr_cal", [](WIB2Frame::Trailer& self) -> uint32_t {return self.psr_cal;})
67 0 : .def_property_readonly("ready", [](WIB2Frame::Trailer& self) -> uint32_t {return self.ready;})
68 0 : .def_property_readonly("context_code", [](WIB2Frame::Trailer& self) -> uint32_t {return self.context_code;})
69 : ;
70 :
71 0 : }
72 :
73 : } // namespace dunedaq::fddetdataformats::python
|