LCOV - code coverage report
Current view: top level - fddetdataformats/pybindsrc - tdeeth.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 59 0
Test Date: 2026-07-12 15:23:06 Functions: 0.0 % 19 0

            Line data    Source code
       1              : /**
       2              :  * @file tdeeth.cpp Python bindings for the TDEEthFrame 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/TDEEthFrame.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              : // NOLINTBEGIN(build/unsigned)
      19              :   
      20              : void
      21            0 : register_tdeeth(py::module& m)
      22              : {
      23            0 :   py::class_<TDEEthFrame::TDEEthHeader>(m, "TDEEthHeader")
      24            0 :     .def_property(
      25              :       "channel",
      26            0 :       [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.channel; },
      27            0 :       [](TDEEthFrame::TDEEthHeader& self, uint16_t channel) { self.channel = channel; })
      28            0 :     .def_property(
      29              :       "version",
      30            0 :       [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.version; },
      31            0 :       [](TDEEthFrame::TDEEthHeader& self, uint16_t version) { self.version = version; })
      32            0 :     .def_property(
      33              :       "tde_header",
      34            0 :       [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.tde_header; },
      35            0 :       [](TDEEthFrame::TDEEthHeader& self, uint16_t tde_header) { self.tde_header = tde_header; })
      36            0 :     .def_property(
      37              :       "tde_errors",
      38            0 :       [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.tde_errors; },
      39            0 :       [](TDEEthFrame::TDEEthHeader& self, uint16_t tde_errors) { self.tde_errors = tde_errors; })
      40            0 :     .def_property(
      41              :       "TAItime",
      42            0 :       [](TDEEthFrame::TDEEthHeader& self) -> uint64_t { return self.TAItime; },
      43            0 :       [](TDEEthFrame::TDEEthHeader& self, uint64_t TAItime) { self.TAItime = TAItime; })
      44            0 :     .def_property_readonly_static("s_expected_bytes", [](py::object /*self*/) {
      45              :       return TDEEthFrame::TDEEthHeader::s_expected_bytes;
      46              :     });
      47              : 
      48            0 :   py::class_<TDEEthFrame>(m, "TDEEthFrame", py::buffer_protocol())
      49            0 :     .def(py::init())
      50            0 :     .def(py::init([](py::capsule capsule) {
      51            0 :       auto tfp = *static_cast<TDEEthFrame*>(capsule.get_pointer());
      52            0 :       return tfp;
      53              :     }))
      54            0 :     .def(py::init([](py::bytes bytes) {
      55            0 :       py::buffer_info info(py::buffer(bytes).request());
      56            0 :       auto tfp = *static_cast<TDEEthFrame*>(info.ptr);
      57            0 :       return tfp;
      58            0 :     }))
      59            0 :     .def(
      60              :       "get_daqheader",
      61            0 :       [](TDEEthFrame& self) -> const detdataformats::DAQEthHeader& { return self.daq_header; },
      62            0 :       py::return_value_policy::reference_internal)
      63            0 :     .def(
      64              :       "get_tdeheader",
      65            0 :       [](TDEEthFrame& self) -> const TDEEthFrame::TDEEthHeader& { return self.header; },
      66            0 :       py::return_value_policy::reference_internal)
      67            0 :     .def_property_readonly(
      68              :       "daq_header",
      69            0 :       [](TDEEthFrame& self) -> detdataformats::DAQEthHeader& { return self.daq_header; },
      70            0 :       py::return_value_policy::reference_internal)
      71            0 :     .def_property_readonly(
      72              :       "header",
      73            0 :       [](TDEEthFrame& self) -> TDEEthFrame::TDEEthHeader& { return self.header; },
      74            0 :       py::return_value_policy::reference_internal)
      75            0 :     .def("get_adc", &TDEEthFrame::get_adc)
      76            0 :     .def("set_adc", &TDEEthFrame::set_adc)
      77            0 :     .def("get_timestamp", &TDEEthFrame::get_timestamp)
      78            0 :     .def("set_timestamp", &TDEEthFrame::set_timestamp)
      79            0 :     .def("get_channel", &TDEEthFrame::get_channel)
      80            0 :     .def("set_channel", &TDEEthFrame::set_channel)
      81            0 :     .def("__lt__", [](const TDEEthFrame& lhs, const TDEEthFrame& rhs) { return lhs < rhs; })
      82            0 :     .def_property_readonly_static("s_bits_per_adc", [](py::object /*self*/) {
      83              :       return TDEEthFrame::s_bits_per_adc;
      84              :     })
      85            0 :     .def_property_readonly_static("s_bits_per_word", [](py::object /*self*/) {
      86              :       return TDEEthFrame::s_bits_per_word;
      87              :     })
      88            0 :     .def_property_readonly_static("s_time_samples_per_frame", [](py::object /*self*/) {
      89              :       return TDEEthFrame::s_time_samples_per_frame;
      90              :     })
      91            0 :     .def_property_readonly_static("s_channels_per_half_femb", [](py::object /*self*/) {
      92              :       return TDEEthFrame::s_channels_per_half_femb;
      93              :     })
      94            0 :     .def_property_readonly_static("s_half_fembs_per_frame", [](py::object /*self*/) {
      95              :       return TDEEthFrame::s_half_fembs_per_frame;
      96              :     })
      97            0 :     .def_property_readonly_static("s_num_channels", [](py::object /*self*/) {
      98              :       return TDEEthFrame::s_num_channels;
      99              :     })
     100            0 :     .def_property_readonly_static("s_num_adc_words_per_ts", [](py::object /*self*/) {
     101              :       return TDEEthFrame::s_num_adc_words_per_ts;
     102              :     })
     103            0 :     .def_property_readonly_static("s_expected_bytes", [](py::object /*self*/) {
     104              :       return TDEEthFrame::s_expected_bytes;
     105              :     })
     106            0 :     .def_static("sizeof", []() { return sizeof(TDEEthFrame); })
     107            0 :     .def("get_bytes", [](TDEEthFrame* fr) -> py::bytes {
     108            0 :       return py::bytes(reinterpret_cast<char*>(fr), sizeof(TDEEthFrame)); // NOLINT reinterpret_cast
     109              :     });
     110            0 : } // NOLINT (defensible use of "overly long" function)
     111              : 
     112              : // NOLINTEND(build/unsigned)
     113              : 
     114              : } // namespace dunedaq::fddetdataformats::python
        

Generated by: LCOV version 2.0-1