LCOV - code coverage report
Current view: top level - timing/src - KerberosDesign.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 39 0
Test Date: 2025-12-21 13:07:08 Functions: 0.0 % 7 0

            Line data    Source code
       1              : #include "timing/KerberosDesign.hpp"
       2              : 
       3              : #include <sstream>
       4              : #include <string>
       5              : 
       6              : namespace dunedaq::timing {
       7              : 
       8            0 : UHAL_REGISTER_DERIVED_NODE(KerberosDesign)
       9              : 
      10              : //-----------------------------------------------------------------------------
      11            0 : KerberosDesign::KerberosDesign(const uhal::Node& node)
      12              :   : TopDesignInterface(node)
      13              :   , MasterDesignInterface(node)
      14              :   , MuxDesignInterface(node)
      15              :   , MasterDesign(node)
      16              :   , EndpointDesignInterface(node)
      17              :   , CDRMuxDesignInterface(node)
      18            0 :   , TimingSourceMuxDesignInterface(node)
      19            0 : {}
      20              : //-----------------------------------------------------------------------------
      21              : 
      22              : //-----------------------------------------------------------------------------
      23            0 : KerberosDesign::~KerberosDesign()
      24            0 : {}
      25              : //-----------------------------------------------------------------------------
      26              : 
      27              : //-----------------------------------------------------------------------------
      28              : std::string
      29            0 : KerberosDesign::get_status(bool print_out) const
      30              : {
      31            0 :   std::stringstream status;
      32            0 :   status << get_io_node_plain()->get_pll_status();
      33            0 :   status << MasterDesign::get_master_node_plain()->get_status();
      34              :   // TODO fanout specific status
      35            0 :   if (print_out)
      36            0 :     TLOG() << status.str();
      37            0 :   return status.str();
      38            0 : }
      39              : //-----------------------------------------------------------------------------
      40              : 
      41              : //-----------------------------------------------------------------------------
      42              : void
      43            0 : KerberosDesign::configure(ClockSource clock_source, TimestampSource ts_source) const
      44              : {
      45            0 :   if (clock_source == kFreeRun)
      46              :   {
      47            0 :     TopDesign::configure(clock_source); // kerberos normally takes clock from upstream SFP
      48            0 :     this->sync_timestamp(ts_source);
      49              :   }
      50              :   else
      51              :   {
      52            0 :     switch_timing_source(clock_source);
      53              : 
      54            0 :     for (uint i=0; i <  get_number_of_endpoint_nodes(); ++i)
      55              :     {
      56            0 :       try
      57              :       {
      58            0 :         get_endpoint_node_plain(i)->reset(0x10+i);
      59            0 :         std::this_thread::sleep_for(std::chrono::milliseconds(1500));
      60            0 :         get_endpoint_node_plain(i)->get_status(true);
      61              : 
      62            0 :         if (!get_endpoint_node_plain(i)->endpoint_ready())
      63              :         {
      64            0 :           if (i==clock_source)
      65              :           {
      66            0 :             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            0 :             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            0 :       catch (const std::exception& e)
      75              :       {
      76            0 :         if (i==clock_source)
      77              :         {
      78            0 :           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            0 :           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            0 :       }
      85              :     }
      86              : 
      87            0 :     this->sync_timestamp(ts_source);
      88              :   }
      89            0 : }
      90              : //-----------------------------------------------------------------------------
      91              : 
      92              : //-----------------------------------------------------------------------------
      93              : void
      94            0 : KerberosDesign::switch_timing_source(ClockSource clock_source) const
      95              : {
      96              :   // Hard reset
      97            0 :   TopDesign::configure(clock_source); //TODO add option not to reprogram pll config
      98              : 
      99            0 :   switch_timing_source_mux(clock_source);
     100            0 : }
     101              : //-----------------------------------------------------------------------------
     102              : 
     103              : //-----------------------------------------------------------------------------
     104              : //void
     105              : //KerberosDesign::get_info(opmonlib::InfoCollector& ci, int level) const
     106              : //{ 
     107              : //  opmonlib::InfoCollector master_collector;
     108              : //  this->get_master_node_plain()->get_info(master_collector, level);
     109              : //  ci.add("master", master_collector);
     110              : 
     111              : //  opmonlib::InfoCollector hardware_collector;
     112              : //  this->get_io_node_plain()->get_info(hardware_collector, level);
     113              : //  ci.add("io", hardware_collector);
     114              : 
     115              : //  opmonlib::InfoCollector endpoint_collector;
     116              : //  get_endpoint_node_plain(0)->get_info(endpoint_collector, level);
     117              : //  ci.add("endpoint", endpoint_collector);
     118              : // }
     119              : //-----------------------------------------------------------------------------
     120              : 
     121              : }
        

Generated by: LCOV version 2.0-1