DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
io.cpp
Go to the documentation of this file.
1
10#include "timing/IONode.hpp"
12#include "timing/FIBIONode.hpp"
14#include "timing/SIMIONode.hpp"
15#include "timing/TLUIONode.hpp"
16#include "timing/MIBIONode.hpp"
19#include "timing/GIBIONode.hpp"
21
22#include <pybind11/pybind11.h>
23#include <pybind11/stl.h>
24
25#include <string>
26
27namespace py = pybind11;
28
29namespace dunedaq {
30namespace timing {
31namespace python {
32
33void
34register_io(py::module& m)
35{
36
37 py::class_<timing::IONode, uhal::Node>(m, "IONode");
38
39 py::class_<timing::FMCIONode, timing::IONode, uhal::Node>(m, "FMCIONode")
40 .def(py::init<const uhal::Node&>())
41 .def<void (timing::FMCIONode::*)(const std::string&) const>(
42 "reset", &timing::FMCIONode::reset, py::arg("clock_config_file"))
43 .def<void (timing::FMCIONode::*)(const timing::ClockSource&) const>(
44 "reset", &timing::FMCIONode::reset, py::arg("clock_source"))
45 .def("soft_reset", &timing::FMCIONode::soft_reset)
46 .def("read_firmware_frequency", &timing::FMCIONode::read_firmware_frequency)
47 .def("get_clock_frequencies_table", &timing::FMCIONode::get_clock_frequencies_table, py::arg("print_out") = false)
48 .def("get_status", &timing::FMCIONode::get_status, py::arg("print_out") = false)
49 .def("get_pll_status", &timing::FMCIONode::get_pll_status, py::arg("print_out") = false)
50 .def("get_hardware_info", &timing::FMCIONode::get_hardware_info, py::arg("print_out") = false)
51 .def("get_sfp_status", &timing::FMCIONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
52 .def("switch_sfp_soft_tx_control_bit", &timing::FMCIONode::switch_sfp_soft_tx_control_bit)
53 .def("switch_sfp_tx", &timing::FMCIONode::switch_sfp_tx);
54
55 py::class_<timing::PC059IONode, timing::IONode, uhal::Node>(m, "PC059IONode")
56 .def(py::init<const uhal::Node&>())
57 .def<void (timing::PC059IONode::*)(const std::string&) const>(
58 "reset", &timing::PC059IONode::reset, py::arg("clock_config_file"))
59 .def<void (timing::PC059IONode::*)(const timing::ClockSource&) const>(
60 "reset", &timing::PC059IONode::reset, py::arg("clock_source"))
61 .def("soft_reset", &timing::PC059IONode::soft_reset)
62 .def("read_firmware_frequency", &timing::PC059IONode::read_firmware_frequency)
63 .def("get_clock_frequencies_table", &timing::PC059IONode::get_clock_frequencies_table, py::arg("print_out") = false)
64 .def("get_status", &timing::PC059IONode::get_status, py::arg("print_out") = false)
65 .def("get_pll_status", &timing::PC059IONode::get_pll_status, py::arg("print_out") = false)
66 .def("get_hardware_info", &timing::PC059IONode::get_hardware_info, py::arg("print_out") = false)
67 .def("get_sfp_status", &timing::PC059IONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
68 .def("switch_sfp_soft_tx_control_bit", &timing::PC059IONode::switch_sfp_soft_tx_control_bit)
69 .def("switch_sfp_mux_channel", &timing::PC059IONode::switch_sfp_mux_channel, py::arg("mux_channel"))
70 .def("read_active_sfp_mux_channel", &timing::PC059IONode::read_active_sfp_mux_channel)
71 .def("switch_sfp_tx", &timing::PC059IONode::switch_sfp_tx);
72
73 py::class_<timing::FIBIONode, timing::IONode, uhal::Node>(m, "FIBIONode")
74 .def(py::init<const uhal::Node&>())
75 .def<void (timing::FIBIONode::*)(const std::string&) const>(
76 "reset", &timing::FIBIONode::reset, py::arg("clock_config_file"))
77 .def<void (timing::FIBIONode::*)(const timing::ClockSource&) const>(
78 "reset", &timing::FIBIONode::reset, py::arg("clock_source"))
79 .def("soft_reset", &timing::FIBIONode::soft_reset)
80 .def("read_firmware_frequency", &timing::FIBIONode::read_firmware_frequency)
81 .def("get_clock_frequencies_table", &timing::FIBIONode::get_clock_frequencies_table, py::arg("print_out") = false)
82 .def("get_status", &timing::FIBIONode::get_status, py::arg("print_out") = false)
83 .def("get_pll_status", &timing::FIBIONode::get_pll_status, py::arg("print_out") = false)
84 .def("get_hardware_info", &timing::FIBIONode::get_hardware_info, py::arg("print_out") = false)
85 .def("get_sfp_status", &timing::FIBIONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
86 .def("switch_sfp_soft_tx_control_bit", &timing::FIBIONode::switch_sfp_soft_tx_control_bit)
87 .def("switch_sfp_mux_channel", &timing::FIBIONode::switch_sfp_mux_channel, py::arg("mux_channel"))
88 .def("read_active_sfp_mux_channel", &timing::FIBIONode::read_active_sfp_mux_channel)
89 .def("switch_sfp_tx", &timing::FIBIONode::switch_sfp_tx);
90
91 py::class_<timing::FIBV2IONode, timing::IONode, uhal::Node>(m, "FIBV2IONode")
92 .def(py::init<const uhal::Node&>())
93 .def<void (timing::FIBV2IONode::*)(const timing::ClockSource&) const>(
94 "reset", &timing::FIBV2IONode::reset, py::arg("clock_source"))
95 .def("soft_reset", &timing::FIBV2IONode::soft_reset)
96 .def("read_firmware_frequency", &timing::FIBV2IONode::read_firmware_frequency)
97 .def("get_clock_frequencies_table", &timing::FIBV2IONode::get_clock_frequencies_table, py::arg("print_out") = false)
98 .def("get_status", &timing::FIBV2IONode::get_status, py::arg("print_out") = false)
99 .def("get_pll_status", &timing::FIBV2IONode::get_pll_status, py::arg("print_out") = false)
100 .def("get_hardware_info", &timing::FIBV2IONode::get_hardware_info, py::arg("print_out") = false)
101 .def("get_sfp_status", &timing::FIBV2IONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
102 .def("switch_sfp_soft_tx_control_bit", &timing::FIBV2IONode::switch_sfp_soft_tx_control_bit)
103 .def("switch_sfp_tx", &timing::FIBV2IONode::switch_sfp_tx)
104 .def("read_board_temperature", &timing::FIBV2IONode::read_board_temperature)
105 ;
106
107 py::class_<timing::TLUIONode, timing::IONode, uhal::Node>(m, "TLUIONode")
108 .def(py::init<const uhal::Node&>())
109 .def<void (timing::TLUIONode::*)(const std::string&) const>(
110 "reset", &timing::TLUIONode::reset, py::arg("clock_config_file"))
111 .def<void (timing::TLUIONode::*)(const timing::ClockSource&) const>(
112 "reset", &timing::TLUIONode::reset, py::arg("clock_source"))
113 .def("soft_reset", &timing::TLUIONode::soft_reset)
114 .def("read_firmware_frequency", &timing::TLUIONode::read_firmware_frequency)
115 .def("get_clock_frequencies_table", &timing::TLUIONode::get_clock_frequencies_table, py::arg("print_out") = false)
116 .def("get_status", &timing::TLUIONode::get_status, py::arg("print_out") = false)
117 .def("get_pll_status", &timing::TLUIONode::get_pll_status, py::arg("print_out") = false)
118 .def("get_hardware_info", &timing::TLUIONode::get_hardware_info, py::arg("print_out") = false)
119 .def("get_sfp_status", &timing::TLUIONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
120 .def("switch_sfp_soft_tx_control_bit", &timing::TLUIONode::switch_sfp_soft_tx_control_bit)
121 .def("configure_dac",
123 py::arg("dac_id"),
124 py::arg("dac_value"),
125 py::arg("internal_ref") = false)
126 .def("switch_sfp_tx", &timing::TLUIONode::switch_sfp_tx);
127
128 py::class_<timing::SIMIONode, timing::IONode, uhal::Node>(m, "SIMIONode")
129 .def(py::init<const uhal::Node&>())
130 .def<void (timing::SIMIONode::*)(const std::string&) const>(
131 "reset", &timing::SIMIONode::reset, py::arg("clock_config_file"))
132 .def<void (timing::SIMIONode::*)(const timing::ClockSource&) const>(
133 "reset", &timing::SIMIONode::reset, py::arg("clock_source"))
134 .def("soft_reset", &timing::SIMIONode::soft_reset)
135 .def("read_firmware_frequency", &timing::SIMIONode::read_firmware_frequency)
136 .def("get_clock_frequencies_table", &timing::SIMIONode::get_clock_frequencies_table, py::arg("print_out") = false)
137 .def("get_status", &timing::SIMIONode::get_status, py::arg("print_out") = false)
138 .def("get_pll_status", &timing::SIMIONode::get_pll_status, py::arg("print_out") = false)
139 .def("get_hardware_info", &timing::SIMIONode::get_hardware_info, py::arg("print_out") = false)
140 .def("get_sfp_status", &timing::SIMIONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
141 .def("switch_sfp_soft_tx_control_bit", &timing::SIMIONode::switch_sfp_soft_tx_control_bit)
142 .def("switch_sfp_tx", &timing::SIMIONode::switch_sfp_tx);
143
144 py::class_<timing::MIBIONode, timing::IONode, uhal::Node>(m, "MIBIONode")
145 .def(py::init<const uhal::Node&>())
146 .def<void (timing::MIBIONode::*)(const std::string&) const>(
147 "reset", &timing::MIBIONode::reset, py::arg("clock_config_file"))
148 .def<void (timing::MIBIONode::*)(const timing::ClockSource&) const>(
149 "reset", &timing::MIBIONode::reset, py::arg("clock_source"))
150 .def("soft_reset", &timing::MIBIONode::soft_reset)
151 .def("read_firmware_frequency", &timing::MIBIONode::read_firmware_frequency)
152 .def("get_clock_frequencies_table", &timing::MIBIONode::get_clock_frequencies_table, py::arg("print_out") = false)
153 .def("get_status", &timing::MIBIONode::get_status, py::arg("print_out") = false)
154 .def("get_pll_status", &timing::MIBIONode::get_pll_status, py::arg("print_out") = false)
155 .def("get_pll", &timing::MIBIONode::get_pll)
156 .def("get_hardware_info", &timing::MIBIONode::get_hardware_info, py::arg("print_out") = false)
157 .def("get_sfp_status", &timing::MIBIONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
158 .def("switch_sfp_soft_tx_control_bit", &timing::MIBIONode::switch_sfp_soft_tx_control_bit)
159 .def("switch_sfp_tx", &timing::MIBIONode::switch_sfp_tx)
160 ;
161
162 py::class_<timing::SwitchyardNode, uhal::Node>(m, "SwitchyardNode")
163 .def("get_status", &timing::SwitchyardNode::get_status, py::arg("print_out") = false)
164 .def("configure_master_source", &timing::SwitchyardNode::configure_master_source, py::arg("master_source"), py::arg("dispatch") = true)
165 .def("configure_endpoint_source", &timing::SwitchyardNode::configure_endpoint_source, py::arg("endpoint_source"), py::arg("dispatch") = true);
166
167 py::class_<timing::MIBV2IONode, timing::IONode, uhal::Node>(m, "MIBV2IONode")
168 .def(py::init<const uhal::Node&>())
169 .def<void (timing::MIBV2IONode::*)(const std::string&) const>(
170 "reset", &timing::MIBV2IONode::reset, py::arg("clock_config_file"))
171 .def<void (timing::MIBV2IONode::*)(const timing::ClockSource&) const>(
172 "reset", &timing::MIBV2IONode::reset, py::arg("clock_source"))
173 .def("soft_reset", &timing::MIBV2IONode::soft_reset)
174 .def("read_firmware_frequency", &timing::MIBV2IONode::read_firmware_frequency)
175 .def("get_clock_frequencies_table", &timing::MIBV2IONode::get_clock_frequencies_table, py::arg("print_out") = false)
176 .def("get_status", &timing::MIBV2IONode::get_status, py::arg("print_out") = false)
177 .def("get_pll_status", &timing::MIBV2IONode::get_pll_status, py::arg("print_out") = false)
178 .def("get_pll", &timing::MIBV2IONode::get_pll)
179 .def("get_hardware_info", &timing::MIBV2IONode::get_hardware_info, py::arg("print_out") = false)
180 .def("get_sfp_status", &timing::MIBV2IONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
181 .def("switch_sfp_soft_tx_control_bit", &timing::MIBV2IONode::switch_sfp_soft_tx_control_bit)
182 .def("switch_sfp_tx", &timing::MIBV2IONode::switch_sfp_tx)
183 ;
184
185 py::class_<timing::GIBIONode, timing::IONode, uhal::Node>(m, "GIBIONode")
186 .def(py::init<const uhal::Node&>())
187 .def<void (timing::GIBIONode::*)(const std::string&) const>(
188 "reset", &timing::GIBIONode::reset, py::arg("clock_config_file"))
189 .def<void (timing::GIBIONode::*)(const timing::ClockSource&) const>(
190 "reset", &timing::GIBIONode::reset, py::arg("clock_source"))
191 .def("soft_reset", &timing::GIBIONode::soft_reset)
192 .def("read_firmware_frequency", &timing::GIBIONode::read_firmware_frequency)
193 .def("get_clock_frequencies_table", &timing::GIBIONode::get_clock_frequencies_table, py::arg("print_out") = false)
194 .def("get_status", &timing::GIBIONode::get_status, py::arg("print_out") = false)
195 .def("get_pll_status", &timing::GIBIONode::get_pll_status, py::arg("print_out") = false)
196 .def("get_pll", &timing::GIBIONode::get_pll)
197 .def("get_hardware_info", &timing::GIBIONode::get_hardware_info, py::arg("print_out") = false)
198 .def("get_sfp_status", &timing::GIBIONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
199 .def("switch_sfp_soft_tx_control_bit", &timing::GIBIONode::switch_sfp_soft_tx_control_bit)
200 .def("set_i2c_mux_channels", &timing::GIBIONode::set_i2c_mux_channels)
201 .def("switch_sfp_tx", &timing::GIBIONode::switch_sfp_tx)
202 ;
203
204 py::class_<timing::GIBV2IONode, timing::IONode, uhal::Node>(m, "GIBV2IONode")
205 .def(py::init<const uhal::Node&>())
206 .def<void (timing::GIBV2IONode::*)(const std::string&) const>(
207 "reset", &timing::GIBV2IONode::reset, py::arg("clock_config_file"))
208 .def<void (timing::GIBV2IONode::*)(const timing::ClockSource&) const>(
209 "reset", &timing::GIBV2IONode::reset, py::arg("clock_source"))
210 .def("soft_reset", &timing::GIBV2IONode::soft_reset)
211 .def("read_firmware_frequency", &timing::GIBV2IONode::read_firmware_frequency)
212 .def("get_clock_frequencies_table", &timing::GIBV2IONode::get_clock_frequencies_table, py::arg("print_out") = false)
213 .def("get_status", &timing::GIBV2IONode::get_status, py::arg("print_out") = false)
214 .def("get_pll_status", &timing::GIBV2IONode::get_pll_status, py::arg("print_out") = false)
215 .def("get_pll", &timing::GIBV2IONode::get_pll)
216 .def("get_hardware_info", &timing::GIBV2IONode::get_hardware_info, py::arg("print_out") = false)
217 .def("get_sfp_status", &timing::GIBV2IONode::get_sfp_status, py::arg("sfp_id"), py::arg("print_out") = false)
218 .def("switch_sfp_soft_tx_control_bit", &timing::GIBV2IONode::switch_sfp_soft_tx_control_bit)
219 .def("set_i2c_mux_channels", &timing::GIBV2IONode::set_i2c_mux_channels)
220 .def("switch_sfp_tx", &timing::GIBV2IONode::switch_sfp_tx)
221 ;
222
223} // NOLINT
224
225} // namespace python
226} // namespace timing
227} // namespace dunedaq
Class for the FIB board.
Definition FIBIONode.hpp:32
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
void reset(const std::string &clock_config_file) const override
Reset FIB node.
Definition FIBIONode.cpp:67
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
reset on-board SFP flags using I2C IO expanders
uint32_t read_active_sfp_mux_channel() const override
Read the active SFP mux channel.
void switch_sfp_mux_channel(uint32_t mux_channel) const override
Switch the SFP mux channel.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition FIBIONode.cpp:43
Class for the FIB board.
std::string get_pll_status(bool print_out=false) const override
Print status of on-board PLL.
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
Switch on or off the SFP tx laser via the I2C IO expander controlling the sfp tx disable pin....
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
void reset(const ClockSource &clock_source) const override
Reset IO, with clock file look up.
float read_board_temperature() const
Read data from on-board temperature monitor.
Class for the timing FMC board.
Definition FMCIONode.hpp:33
std::string get_clock_frequencies_table(bool print_out=false) const override
Print frequencies of on-board clocks.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition FMCIONode.cpp:45
void reset(const std::string &clock_config_file) const override
Reset FMC IO.
Definition FMCIONode.cpp:60
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP
Class for the timing FMC board.
Definition GIBIONode.hpp:33
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
void set_i2c_mux_channels(uint8_t mux_channel_bitmask) const
Fill hardware monitoring structure.
void reset(const std::string &clock_config_file) const override
Reset GIB IO.
std::unique_ptr< const SI534xSlave > get_pll() const override
GET PLL I2C interface.
Definition GIBIONode.cpp:61
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
std::string get_hardware_info(bool print_out) const override
Print hardware information.
Definition GIBIONode.cpp:71
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition GIBIONode.cpp:41
Class for the timing FMC board.
virtual void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const
control tx laser of on-board SFP softly (I2C command)
Definition IONode.cpp:337
virtual std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const
Print status of on-board SFP.
Definition IONode.cpp:318
virtual std::string get_hardware_info(bool print_out=false) const
Print hardware information.
Definition IONode.cpp:118
virtual void soft_reset() const
Reset timing node.
Definition IONode.cpp:296
virtual std::unique_ptr< const SI534xSlave > get_pll() const
Get the PLL chip.
Definition IONode.cpp:230
virtual uint32_t read_firmware_frequency() const
Read the word identifying the frequency [units of Hz] of the firmware in the FPGA.
Definition IONode.cpp:78
virtual std::string get_clock_frequencies_table(bool print_out=false) const
Print frequencies of on-board clocks.
Definition IONode.cpp:263
virtual std::string get_pll_status(bool print_out=false) const
Print status of on-board PLL.
Definition IONode.cpp:279
Class for the timing FMC board.
Definition MIBIONode.hpp:34
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Switch the SFP mux channel.
void reset(const std::string &clock_config_file) const override
Reset MIB IO.
Definition MIBIONode.cpp:77
void switch_sfp_tx(uint32_t, bool) const override
control tx laser of on-board SFP
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition MIBIONode.cpp:40
std::string get_pll_status(bool print_out=false) const override
Print status of on-board PLL.
Definition MIBIONode.cpp:66
Class for the timing FMC board.
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
void reset(const std::string &clock_config_file) const override
Reset MIB v2 IO.
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP
Class for the PC059 board.
uint32_t read_active_sfp_mux_channel() const override
Read the active SFP mux channel.
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
void switch_sfp_mux_channel(uint32_t mux_channel) const override
Switch the SFP mux channel.
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
control tx laser of on-board SFP softly (I2C command)
void reset(const std::string &clock_config_file) const override
Reset pc059 node.
Class for the timing simulation IO.
Definition SIMIONode.hpp:34
std::string get_clock_frequencies_table(bool print_out=false) const override
Print frequencies of on-board clocks.
void switch_sfp_soft_tx_control_bit(uint32_t sfp_id, bool turn_on) const override
Control tx laser of on-board SFP softly (I2C command)
std::string get_pll_status(bool print_out=false) const override
Print status of on-board PLL.
std::string get_hardware_info(bool print_out=false) const override
Print hardware information.
Definition SIMIONode.cpp:73
void reset(const std::string &clock_config_file) const override
Reset IO.
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition SIMIONode.cpp:42
void switch_sfp_tx(uint32_t sfp_id, bool turn_on) const override
Control tx laser of on-board SFP softly (I2C command)
void configure_endpoint_source(uint8_t endpoint_source, bool dispatch=true) const
Configure endpoint source.
void configure_master_source(uint8_t master_source, bool dispatch=true) const
Configure master source.
std::string get_status(bool print_out=false) const override
Print the status of the timing node.
Class for the TLU board.
Definition TLUIONode.hpp:34
void reset(const std::string &clock_config_file) const override
Reset IO node.
Definition TLUIONode.cpp:53
void switch_sfp_tx(uint32_t, bool) const override
Control tx laser of on-board SFP softly (I2C command)
void configure_dac(uint32_t dac_id, uint32_t dac_value, bool internal_ref=false) const
Configure on-board DAC.
std::string get_status(bool print_out=false) const
Print the status of the timing node.
Definition TLUIONode.cpp:39
void switch_sfp_soft_tx_control_bit(uint32_t, bool) const override
Control tx laser of on-board SFP softly (I2C command)
std::string get_sfp_status(uint32_t sfp_id, bool print_out=false) const override
Print status of on-board SFP.
void register_io(py::module &m)
Definition io.cpp:34
The DUNE-DAQ namespace.
Definition DataStore.hpp:57