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

Class for timing fanout designs. More...

#include <KerberosDesign.hpp>

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

Public Member Functions

 KerberosDesign (const uhal::Node &node)
 
virtual ~KerberosDesign ()
 
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
 Give info to collector.
 
void switch_timing_source (ClockSource clock_source) const override
 Switch timing source.
 
- Public Member Functions inherited from dunedaq::timing::MasterDesign
 MasterDesign (const uhal::Node &node)
 
virtual ~MasterDesign ()
 
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.
 
uint64_t read_master_timestamp () const override
 Read the current timestamp.
 
void sync_timestamp (TimestampSource source) const override
 Sync timestamp to current machine value.
 
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.
 
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::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::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.
 
- Public Member Functions inherited from dunedaq::timing::EndpointDesignInterface
 EndpointDesignInterface (const uhal::Node &node)
 
virtual ~EndpointDesignInterface ()
 
virtual const EndpointNodeInterfaceget_endpoint_node_plain (uint32_t ept_id) const
 Return the timing endpoint node.
 
virtual uint32_t get_number_of_endpoint_nodes () const
 Return the timing endpoint node.
 
virtual void get_info (uint32_t ept_id, timingendpointinfo::TimingEndpointInfo &mon_data) const
 Give info to collector.
 
virtual void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const=0
 Give info to collector.
 
- Public Member Functions inherited from dunedaq::timing::CDRMuxDesignInterface
 CDRMuxDesignInterface (const uhal::Node &node)
 
virtual ~CDRMuxDesignInterface ()
 
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.
 
void resync_active_cdr () const override
 Resync active cdr.
 
- Public Member Functions inherited from dunedaq::timing::MuxDesignInterface
 MuxDesignInterface (const uhal::Node &node)
 
virtual ~MuxDesignInterface ()
 
- Public Member Functions inherited from dunedaq::timing::TimingSourceMuxDesignInterface
 TimingSourceMuxDesignInterface (const uhal::Node &node)
 
virtual ~TimingSourceMuxDesignInterface ()
 
virtual uint8_t read_active_timing_source_mux () const
 Read timing source mux.
 
virtual void switch_timing_source_mux (uint8_t mux_channel) const
 Switch timing source mux.
 

Detailed Description

Class for timing fanout designs.

Definition at line 37 of file KerberosDesign.hpp.

Constructor & Destructor Documentation

◆ KerberosDesign()

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

◆ ~KerberosDesign()

dunedaq::timing::KerberosDesign::~KerberosDesign ( )
virtual

Definition at line 23 of file KerberosDesign.cpp.

24{}

Member Function Documentation

◆ configure()

void dunedaq::timing::KerberosDesign::configure ( ClockSource clock_source,
TimestampSource ts_source ) const
overridevirtual

Give info to collector.

Prepare the timing fanout for data taking.

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 43 of file KerberosDesign.cpp.

44{
45 if (clock_source == kFreeRun)
46 {
47 TopDesign::configure(clock_source); // kerberos normally takes clock from upstream SFP
48 this->sync_timestamp(ts_source);
49 }
50 else
51 {
52 switch_timing_source(clock_source);
53
54 for (uint i=0; i < get_number_of_endpoint_nodes(); ++i)
55 {
56 try
57 {
59 std::this_thread::sleep_for(std::chrono::milliseconds(1500));
61
62 if (!get_endpoint_node_plain(i)->endpoint_ready())
63 {
64 if (i==clock_source)
65 {
66 ers::error(EndpointNotReady(ERS_HERE, "MIB endpoint "+std::to_string(i)+" not ready!", get_endpoint_node_plain(i)->read_endpoint_state()));
67 }
68 else
69 {
70 ers::warning(EndpointNotReady(ERS_HERE, "MIB endpoint "+std::to_string(i)+" not ready!", get_endpoint_node_plain(i)->read_endpoint_state()));
71 }
72 }
73 }
74 catch (const std::exception& e)
75 {
76 if (i==clock_source)
77 {
78 ers::error(EndpointNotReady(ERS_HERE, "MIB endpoint "+std::to_string(i)+" has no clock!", get_endpoint_node_plain(i)->read_endpoint_state(),e));
79 }
80 else
81 {
82 ers::warning(EndpointNotReady(ERS_HERE, "MIB endpoint "+std::to_string(i)+" has no clock!", get_endpoint_node_plain(i)->read_endpoint_state(), e));
83 }
84 }
85 }
86
87 this->sync_timestamp(ts_source);
88 }
89}
#define ERS_HERE
virtual const EndpointNodeInterface * get_endpoint_node_plain(uint32_t ept_id) const
Return the timing endpoint node.
virtual uint32_t get_number_of_endpoint_nodes() const
Return the timing endpoint node.
virtual void reset(uint32_t address=0, uint32_t partition=0) const =0
Reset the endpoint.
void switch_timing_source(ClockSource clock_source) const override
Switch timing source.
void sync_timestamp(TimestampSource source) const override
Sync timestamp to current machine value.
virtual std::string get_status(bool print_out=false) const =0
Get the status string of the timing node. Optionally print it.
void configure(ClockSource clock_source) const override
Prepare the timing device for data taking.
Definition TopDesign.hpp:81
void warning(const Issue &issue)
Definition ers.hpp:115
void error(const Issue &issue)
Definition ers.hpp:81

◆ get_status()

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

Get status string, optionally print.

Implements dunedaq::timing::TimingNode.

Definition at line 29 of file KerberosDesign.cpp.

30{
31 std::stringstream status;
34 // TODO fanout specific status
35 if (print_out)
36 TLOG() << status.str();
37 return status.str();
38}
virtual std::string get_pll_status(bool print_out=false) const
Print status of on-board PLL.
Definition IONode.cpp:288
const MasterNodeInterface * get_master_node_plain() const override
Get master node pointer.
const IONode * get_io_node_plain() const override
Get io node pointer.
Definition TopDesign.hpp:48
#define TLOG(...)
Definition macro.hpp:22

◆ switch_timing_source()

void dunedaq::timing::KerberosDesign::switch_timing_source ( ClockSource clock_source) const
overridevirtual

Switch timing source.

Implements dunedaq::timing::TimingSourceMuxDesignInterface.

Definition at line 94 of file KerberosDesign.cpp.

95{
96 // Hard reset
97 TopDesign::configure(clock_source); //TODO add option not to reprogram pll config
98
99 switch_timing_source_mux(clock_source);
100}
virtual void switch_timing_source_mux(uint8_t mux_channel) const
Switch timing source mux.

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