LCOV - code coverage report
Current view: top level - fdreadoutlibs/src/daphneeth - DAPHNEEthStreamFrameProcessor.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 23 0
Test Date: 2025-12-21 13:07:08 Functions: 0.0 % 5 0

            Line data    Source code
       1              : /**
       2              :  * @file DAPHNEEthStreamFrameProcessor.hpp DAPHNE specific Task based raw processor
       3              :  * implementation for streaming mode
       4              :  *
       5              :  * This is part of the DUNE DAQ , copyright 2020.
       6              :  * Licensing/copyright details are in the COPYING file that you should have
       7              :  * received with this code.
       8              :  */
       9              : #include "fddetdataformats/DAPHNEEthStreamFrame.hpp"
      10              : #include "fdreadoutlibs/daphneeth/DAPHNEEthStreamFrameProcessor.hpp"
      11              : 
      12              : #include <atomic>
      13              : #include <functional>
      14              : #include <memory>
      15              : #include <string>
      16              : 
      17              : using dunedaq::datahandlinglibs::logging::TLVL_BOOKKEEPING;
      18              : using dunedaq::datahandlinglibs::logging::TLVL_FRAME_RECEIVED;
      19              : 
      20              : namespace dunedaq {
      21              : namespace fdreadoutlibs {
      22              : 
      23              : void 
      24            0 : DAPHNEEthStreamFrameProcessor::conf(const appmodel::DataHandlerModule* conf)
      25              : {
      26            0 :   datahandlinglibs::TaskRawDataProcessorModel<types::DAPHNEEthStreamTypeAdapter>::add_preprocess_task(
      27            0 :     std::bind(&DAPHNEEthStreamFrameProcessor::timestamp_check, this, std::placeholders::_1));
      28              :   // m_tasklist.push_back( std::bind(&DAPHNEStreamFrameProcessor::frame_error_check, this, std::placeholders::_1) );
      29            0 :   TaskRawDataProcessorModel<types::DAPHNEEthStreamTypeAdapter>::conf(conf);
      30            0 : }
      31              : 
      32              : /**
      33              :  * Pipeline Stage 1.: Check proper timestamp increments in DAPHNE frame
      34              :  * */
      35              : void 
      36            0 : DAPHNEEthStreamFrameProcessor::timestamp_check(frameptr fp)
      37              : {
      38              : /* Let Source Emulator deal with this
      39              :   // If EMU data, emulate perfectly incrementing timestamp
      40              :   if (inherited::m_emulator_mode) { // emulate perfectly incrementing timestamp
      41              :     uint64_t ts_next = m_previous_ts + 64; // NOLINT(build/unsigned)
      42              :     auto df = reinterpret_cast<daphneframeptr>(((uint8_t*)fp));  // NOLINT
      43              :     for (unsigned int i = 0; i < fp->get_num_frames(); ++i) { // NOLINT(build/unsigned)
      44              :       //auto wfh = const_cast<dunedaq::fddetdataformats::WIB2Header*>(wf->get_wib_header());
      45              :       df->set_timestamp(ts_next);
      46              :       ts_next += 64;
      47              :       df++;
      48              :     }
      49              :   }
      50              : */
      51              :   // Acquire timestamp
      52            0 :   m_current_ts = fp->get_timestamp();
      53            0 :   uint64_t k_clock_frequency = 62500000; // NOLINT(build/unsigned)
      54            0 :   uint16_t tick_difference = types::DAPHNEEthStreamTypeAdapter::expected_tick_difference;
      55            0 :   uint16_t frame_tick_difference = tick_difference * fp->get_num_frames();
      56            0 :   TLOG_DEBUG(TLVL_FRAME_RECEIVED) << "Received DAPHNEEthStream frame timestamp value of " << m_current_ts << " ticks (..." << std::fixed << std::setprecision(8) << (static_cast<double>(m_current_ts % (k_clock_frequency*1000)) / static_cast<double>(k_clock_frequency)) << " sec)"; // NOLINT
      57              : 
      58              :   // Check timestamp
      59              :   // RS warning : not fixed rate!
      60            0 :   if (m_current_ts - m_previous_ts != frame_tick_difference) {
      61            0 :     ++m_ts_error_ctr;
      62              :   }
      63              : 
      64            0 :   if (m_ts_error_ctr > 1000) {
      65            0 :     if (!m_problem_reported) {
      66            0 :       TLOG() << "*** Data Integrity ERROR *** Timestamp continuity is completely broken! "
      67            0 :              << "Something is wrong with the FE source or with the configuration!";
      68            0 :       m_problem_reported = true;
      69              :     }
      70              :   }
      71              : 
      72            0 :   m_previous_ts = m_current_ts;
      73            0 :   m_last_processed_daq_ts = m_current_ts;
      74            0 : }
      75              : 
      76              : /**
      77              :  * Pipeline Stage 2.: Check DAPHNE headers for error flags
      78              :  * */
      79              : void 
      80            0 : DAPHNEEthStreamFrameProcessor::frame_error_check(frameptr /*fp*/)
      81              : {
      82              :   // check error fields
      83            0 : }
      84              : 
      85              : } // namespace fdreadoutlibs
      86              : } // namespace dunedaq
        

Generated by: LCOV version 2.0-1