DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::timing::MasterMuxDesign Class Reference

Class for PDI timing master design on mux board. More...

#include <MasterMuxDesign.hpp>

Inheritance diagram for dunedaq::timing::MasterMuxDesign:
[legend]
Collaboration diagram for dunedaq::timing::MasterMuxDesign:
[legend]

Public Member Functions

 MasterMuxDesign (const uhal::Node &node)
 
virtual ~MasterMuxDesign ()
 
std::string get_status (bool print_out=false) const override
 Get status string, optionally print.
 
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.
 
std::vector< uint32_t > scan_sfp_mux () const override
 Scan SFP for alive timing transmitters.
 
void resync_active_cdr () const override
 Resync active cdr.
 
- Public Member Functions inherited from dunedaq::timing::SFPMuxDesignInterface
 SFPMuxDesignInterface (const uhal::Node &node)
 
virtual ~SFPMuxDesignInterface ()
 
void switch_mux (uint8_t mux_channel, bool resync_cdr=false) const override
 Switch the SFP mux channel.
 
uint8_t read_active_mux () const override
 Read the active SFP mux channel.
 
- Public Member Functions inherited from dunedaq::timing::MuxDesignInterface
 MuxDesignInterface (const uhal::Node &node)
 
virtual ~MuxDesignInterface ()
 
- Public Member Functions inherited from dunedaq::timing::TopDesignInterface
 TopDesignInterface (const uhal::Node &node)
 
virtual ~TopDesignInterface ()
 
template<class IO >
const IO * get_io_node () const
 
- Public Member Functions inherited from dunedaq::timing::TimingNode
 TimingNode (const uhal::Node &node)
 
virtual ~TimingNode ()
 
std::map< std::string, uhal::ValWord< uint32_t > > read_sub_nodes (const uhal::Node &node, bool dispatch=true) const
 Read subnodes.
 
void reset_sub_nodes (const uhal::Node &node, uint32_t aValue=0x0, bool dispatch=true) const
 Reset subnodes.
 
- Public Member Functions inherited from dunedaq::timing::MasterDesign
 MasterDesign (const uhal::Node &node)
 
virtual ~MasterDesign ()
 
void configure (ClockSource clock_source, TimestampSource ts_source) const override
 Prepare the timing master for data taking.
 
uint64_t read_master_timestamp () const override
 Read the current timestamp.
 
void sync_timestamp (TimestampSource source) const override
 Sync timestamp to current machine value.
 
void enable_periodic_fl_cmd (uint32_t channel, double rate, bool poisson=false) const override
 Configure fake trigger generator.
 
void enable_periodic_fl_cmd (uint32_t command, uint32_t channel, double rate, bool poisson=false) const override
 Configure fake trigger generator.
 
const MasterNodeInterfaceget_master_node_plain () const override
 Get master node pointer.
 
uint32_t read_firmware_version () const override
 Read master firmware version.
 
void validate_firmware_version () const override
 Validate master firmware version.
 
void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
 Give info to collector.
 
void get_info (timingfirmwareinfo::MasterMonitorData &mon_data) const override
 Give info to collector.
 
- Public Member Functions inherited from dunedaq::timing::TopDesign
 TopDesign (const uhal::Node &node)
 
virtual ~TopDesign ()
 
const IONodeget_io_node_plain () const override
 Get io node pointer.
 
void soft_reset_io () const override
 Reset timing node.
 
void reset_io (const std::string &clock_config_file) const override
 Reset timing node.
 
void reset_io (const ClockSource &clock_source) const override
 Reset timing node.
 
void configure (ClockSource clock_source) const override
 Prepare the timing device for data taking.
 
std::string get_hardware_info (bool print_out=false) const override
 Print hardware information.
 
void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
 Give info to collector.
 
- Public Member Functions inherited from dunedaq::timing::MasterDesignInterface
 MasterDesignInterface (const uhal::Node &node)
 
virtual ~MasterDesignInterface ()
 
template<class MST >
const MST * get_master_node () const
 
virtual void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const=0
 Give info to collector.
 

Detailed Description

Class for PDI timing master design on mux board.

Definition at line 34 of file MasterMuxDesign.hpp.

Constructor & Destructor Documentation

◆ MasterMuxDesign()

dunedaq::timing::MasterMuxDesign::MasterMuxDesign ( const uhal::Node & node)
explicit

Definition at line 11 of file MasterMuxDesign.cpp.

12 : TopDesignInterface(node)
13 , MuxDesignInterface(node)
16 , MasterDesign(node)
17{}
MasterDesign(const uhal::Node &node)

◆ ~MasterMuxDesign()

dunedaq::timing::MasterMuxDesign::~MasterMuxDesign ( )
virtual

Definition at line 21 of file MasterMuxDesign.cpp.

22{}

Member Function Documentation

◆ apply_endpoint_delay()

void dunedaq::timing::MasterMuxDesign::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
overridevirtual

Apply delay to endpoint.

Reimplemented from dunedaq::timing::MasterDesign.

Definition at line 61 of file MasterMuxDesign.cpp.

68{
69 if (sfp_mux > -1)
70 {
71 if (control_sfp && measure_rtt)
72 {
73 // set fanout rtt mux channel, and do not wait for fanout rtt ept to be in a good state
74 switch_mux(sfp_mux);
75 }
76 // gets master rtt ept in a good state, and sends echo command
77 get_master_node_plain()->apply_endpoint_delay(address, coarse_delay, fine_delay, phase_delay, measure_rtt, control_sfp);
78 }
79 else
80 {
81 get_master_node_plain()->apply_endpoint_delay(address, coarse_delay, fine_delay, phase_delay, measure_rtt, control_sfp);
82 }
83}
const MasterNodeInterface * get_master_node_plain() const override
Get master node pointer.
virtual 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) const =0
Apply delay to endpoint.
void switch_mux(uint8_t mux_channel, bool resync_cdr=false) const override
Switch the SFP mux channel.

◆ get_status()

std::string dunedaq::timing::MasterMuxDesign::get_status ( bool print_out = false) const
overridevirtual

Get status string, optionally print.

Implements dunedaq::timing::TimingNode.

Reimplemented in dunedaq::timing::OuroborosMuxDesign.

Definition at line 27 of file MasterMuxDesign.cpp.

28{
29 std::stringstream status;
32 // TODO mux specific status
33 if (print_out)
34 TLOG() << status.str();
35 return status.str();
36}
virtual std::string get_pll_status(bool print_out=false) const
Print status of on-board PLL.
Definition IONode.cpp:288
virtual std::string get_status(bool print_out=false) const =0
Get the status string of the timing node. Optionally print it.
const IONode * get_io_node_plain() const override
Get io node pointer.
Definition TopDesign.hpp:48
#define TLOG(...)
Definition macro.hpp:22

◆ measure_endpoint_rtt()

uint32_t dunedaq::timing::MasterMuxDesign::measure_endpoint_rtt ( uint32_t address,
bool control_sfp = true,
int sfp_mux = -1 ) const
overridevirtual

Measure the endpoint round trip time.

Returns
{ description_of_the_return_value }

Reimplemented from dunedaq::timing::MasterDesign.

Definition at line 41 of file MasterMuxDesign.cpp.

42{
43
44 if (sfp_mux > -1) {
45 if (control_sfp)
46 {
47 // set fanout rtt mux channel, and do not wait for fanout rtt ept to be in a good state
48 switch_mux(sfp_mux);
49 }
50 // gets master rtt ept in a good state, and sends echo command
51 uint32_t rtt = get_master_node_plain()->measure_endpoint_rtt(address, control_sfp);
52 return rtt;
53 } else {
55 }
56}
virtual uint32_t measure_endpoint_rtt(uint32_t address, bool control_sfp=true) const =0
Measure the endpoint round trip time.

◆ resync_active_cdr()

void dunedaq::timing::MasterMuxDesign::resync_active_cdr ( ) const
overridevirtual

Resync active cdr.

Returns
{ description_of_the_return_value }

Implements dunedaq::timing::MuxDesignInterface.

Definition at line 122 of file MasterMuxDesign.cpp.

123{
125}
virtual void enable_upstream_endpoint() const =0
Enable RTT endpoint.

◆ scan_sfp_mux()

std::vector< uint32_t > dunedaq::timing::MasterMuxDesign::scan_sfp_mux ( ) const
overridevirtual

Scan SFP for alive timing transmitters.

Implements dunedaq::timing::SFPMuxDesignInterface.

Definition at line 88 of file MasterMuxDesign.cpp.

89{
90 std::vector<uint32_t> locked_channels;
91
92 // TODO will this be right for every fanout board, need to check the IO board
93 uint32_t number_of_mux_channels = 8;
94 for (uint32_t i = 0; i < number_of_mux_channels; ++i)
95 {
96 TLOG_DEBUG(0) << "Scanning slot " << i;
97
98 try
99 {
100 switch_mux(i);
102 } catch (...) {
103 TLOG_DEBUG(0) << "Slot " << i << " not locked";
104 }
105 // TODO catch right except
106
107 TLOG_DEBUG(0) << "Slot " << i << " locked";
108 locked_channels.push_back(i);
109 }
110
111 if (locked_channels.size()) {
112 TLOG() << "Slots locked: " << vec_fmt(locked_channels);
113 } else {
114 TLOG() << "No slots locked";
115 }
116 return locked_channels;
117}
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
std::string vec_fmt(const std::vector< T > &vec)
Definition toolbox.hxx:382

The documentation for this class was generated from the following files: