19#include <pybind11/pybind11.h>
20#include <pybind11/stl.h>
22namespace py = pybind11;
32 py::class_<timing::BoreasDesign, uhal::Node>(m,
"BoreasDesign")
42 .def<void (
timing::BoreasDesign::*)(uint32_t, uint32_t, double, bool)
const>(
"enable_periodic_fl_cmd",
48 .def(
"apply_endpoint_delay",
51 py::arg(
"coarse_delay"),
52 py::arg(
"fine_delay"),
53 py::arg(
"phase_delay"),
54 py::arg(
"measure_rtt") =
false,
55 py::arg(
"control_sfp") =
true,
56 py::arg(
"sfp_mux") = -1)
57 .def(
"measure_endpoint_rtt",
60 py::arg(
"control_sfp") =
true,
61 py::arg(
"sfp_mux") = -1)
70 py::arg(
"dispatch") =
true)
75 py::class_<timing::FanoutDesign, uhal::Node>(m,
"FanoutDesign")
84 py::class_<timing::OuroborosMuxDesign, uhal::Node>(m,
"OuroborosMuxDesign")
101 .def(
"apply_endpoint_delay",
104 py::arg(
"coarse_delay"),
105 py::arg(
"fine_delay"),
106 py::arg(
"phase_delay"),
107 py::arg(
"measure_rtt") =
false,
108 py::arg(
"control_sfp") =
true,
109 py::arg(
"sfp_mux") = -1)
110 .def(
"measure_endpoint_rtt",
113 py::arg(
"control_sfp") =
true,
114 py::arg(
"sfp_mux") = -1)
120 py::class_<timing::MasterMuxDesign, uhal::Node>(m,
"MasterMuxDesign")
137 .def(
"apply_endpoint_delay",
140 py::arg(
"coarse_delay"),
141 py::arg(
"fine_delay"),
142 py::arg(
"phase_delay"),
143 py::arg(
"measure_rtt") =
false,
144 py::arg(
"control_sfp") =
true,
145 py::arg(
"sfp_mux") = -1)
146 .def(
"measure_endpoint_rtt",
149 py::arg(
"control_sfp") =
true,
150 py::arg(
"sfp_mux") = -1)
156 py::class_<timing::MasterDesign, uhal::Node>(m,
"MasterDesign")
166 .def<void (
timing::MasterDesign::*)(uint32_t, uint32_t, double, bool)
const>(
"enable_periodic_fl_cmd",
172 .def(
"apply_endpoint_delay",
175 py::arg(
"coarse_delay"),
176 py::arg(
"fine_delay"),
177 py::arg(
"phase_delay"),
178 py::arg(
"measure_rtt") =
false,
179 py::arg(
"control_sfp") =
true,
180 py::arg(
"sfp_mux") = -1)
181 .def(
"measure_endpoint_rtt",
184 py::arg(
"control_sfp") =
true,
185 py::arg(
"sfp_mux") = -1)
190 py::class_<timing::OuroborosDesign, uhal::Node>(m,
"OuroborosDesign")
206 .def(
"apply_endpoint_delay",
209 py::arg(
"coarse_delay"),
210 py::arg(
"fine_delay"),
211 py::arg(
"phase_delay"),
212 py::arg(
"measure_rtt") =
false,
213 py::arg(
"control_sfp") =
true,
214 py::arg(
"sfp_mux") = -1)
215 .def(
"measure_endpoint_rtt",
218 py::arg(
"control_sfp") =
true,
219 py::arg(
"sfp_mux") = -1)
224 py::class_<timing::EndpointDesign, uhal::Node>(m,
"EndpointDesign")
232 py::class_<timing::ChronosDesign, uhal::Node>(m,
"ChronosDesign")
237 .def(
"configure_hsi",
244 py::arg(
"dispatch") =
true)
249 py::class_<timing::HadesDesign, uhal::Node>(m,
"HadesDesign")
254 .def(
"configure_hsi",
261 py::arg(
"dispatch") =
true)
266 py::class_<timing::KerberosDesign, uhal::Node>(m,
"KerberosDesign")
281 .def(
"apply_endpoint_delay",
284 py::arg(
"coarse_delay"),
285 py::arg(
"fine_delay"),
286 py::arg(
"phase_delay"),
287 py::arg(
"measure_rtt") =
false,
288 py::arg(
"control_sfp") =
true,
289 py::arg(
"sfp_mux") = -1)
290 .def(
"measure_endpoint_rtt",
293 py::arg(
"control_sfp") =
true,
294 py::arg(
"sfp_mux") = -1)
301 py::class_<timing::GaiaDesign, uhal::Node>(m,
"GaiaDesign")
305 .def<void (
timing::GaiaDesign::*)(uint32_t, double, bool)
const>(
"enable_periodic_fl_cmd",
310 .def<void (
timing::GaiaDesign::*)(uint32_t, uint32_t, double, bool)
const>(
"enable_periodic_fl_cmd",
316 .def(
"apply_endpoint_delay",
319 py::arg(
"coarse_delay"),
320 py::arg(
"fine_delay"),
321 py::arg(
"phase_delay"),
322 py::arg(
"measure_rtt") =
false,
323 py::arg(
"control_sfp") =
true,
324 py::arg(
"sfp_mux") = -1)
325 .def(
"measure_endpoint_rtt",
328 py::arg(
"control_sfp") =
true,
329 py::arg(
"sfp_mux") = -1)
Class for timing master with integrated HSI designs.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void configure(ClockSource clock_source, TimestampSource ts_source) const override
Prepare the timing master for data taking.
uint8_t read_active_mux() const override
Read cdr mux.
void switch_mux(uint8_t mux_channel, bool resync_cdr=false) const override
Switch cdr mux.
uint32_t read_firmware_version() const override
Read endpoint firmware version.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void configure(ClockSource clock_source) const override
Prepare the timing endpoint for data taking.
void validate_firmware_version() const override
Validate endpoint firmware version.
uint32_t read_firmware_version() const override
Give info to collector.
void configure(ClockSource clock_source) const override
Prepare the timing endpoint for data taking.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void validate_firmware_version() const override
Validate endpoint firmware version.
void configure(ClockSource clock_source) const override
Give info to collector.
uint32_t read_firmware_version() const override
Read firmware version.
void validate_firmware_version() const override
Validate endpoint firmware version.
Class for timing fanout designs.
void configure(ClockSource clock_source, TimestampSource ts_source, IRIGEpoch epoch) const
Give info to collector.
virtual void configure_hsi(uint32_t src, uint32_t re_mask, uint32_t fe_mask, uint32_t inv_mask, double rate, bool dispatch=true) const
Configure the HSI node.
virtual const HSINode & get_hsi_node() const
Get the HSI node.
Class for timing fanout designs.
void configure(ClockSource clock_source, TimestampSource ts_source) const override
Give info to collector.
Base class for timing master designs.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
void apply_endpoint_delay(uint32_t address, uint32_t coarse_delay, uint32_t fine_delay, uint32_t phase_delay, bool measure_rtt=false, bool control_sfp=true, int sfp_mux=-1) const override
Apply delay to endpoint.
uint32_t measure_endpoint_rtt(uint32_t address, bool control_sfp=true, int sfp_mux=-1) const override
Measure the endpoint round trip time.
void sync_timestamp(TimestampSource source) const override
Sync timestamp to current machine value.
void validate_firmware_version() const override
Validate master firmware version.
void enable_periodic_fl_cmd(uint32_t channel, double rate, bool poisson=false) const override
Configure fake trigger generator.
uint32_t read_firmware_version() const override
Read master firmware version.
void configure(ClockSource clock_source, TimestampSource ts_source) const override
Prepare the timing master for data taking.
Class for PDI timing master design on mux board.
std::vector< uint32_t > scan_sfp_mux() const override
Scan SFP for alive timing transmitters.
uint32_t measure_endpoint_rtt(uint32_t address, bool control_sfp=true, int sfp_mux=-1) const override
Measure the endpoint round trip time.
void apply_endpoint_delay(uint32_t address, uint32_t coarse_delay, uint32_t fine_delay, uint32_t phase_delay, bool measure_rtt=false, bool control_sfp=true, int sfp_mux=-1) const override
Apply delay to endpoint.
virtual uint8_t read_active_mux() const =0
Read cdr mux.
virtual void switch_mux(uint8_t mux_channel, bool resync_cdr=false) const =0
Switch cdr mux.
Class for PDI timing master design (known as overlord).
void configure(ClockSource clock_source, TimestampSource ts_source) const override
Prepare the timing master for data taking.
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Class for PDI ouroboros timing master design.
void register_top_designs(py::module &)