LCOV - code coverage report
Current view: top level - crtmodules/plugins - CRTGrenobleFrameBuilderModule.hpp (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 2 0
Test Date: 2026-10-11 15:05:20 Functions: 0.0 % 2 0

            Line data    Source code
       1              : /**
       2              :  * @file CRTGrenobleFrameBuilderModule.hpp
       3              :  *
       4              :  * Reads data from the HW then puts it in a queue
       5              :  *
       6              :  * This is part of the DUNE DAQ Software Suite, copyright 2020.
       7              :  * Licensing/copyright details are in the COPYING file that you should have
       8              :  * received with this code.
       9              :  */
      10              : 
      11              : #ifndef CRTMODULES_PLUGINS_CRTGRENOBLEFRAMEBUILDERMODULE_HPP_
      12              : #define CRTMODULES_PLUGINS_CRTGRENOBLEFRAMEBUILDERMODULE_HPP_
      13              : 
      14              : #include "appfwk/DAQModule.hpp"
      15              : #include "fddetdataformats/CRTGrenobleFrame.hpp"
      16              : #include "utilities/ReusableThread.hpp"
      17              : 
      18              : #include <map>
      19              : #include <memory>
      20              : #include <string>
      21              : #include <vector>
      22              : 
      23              : namespace dunedaq::crtmodules {
      24              : 
      25              : class CRTGrenobleFrameBuilderModule : public dunedaq::appfwk::DAQModule
      26              : {
      27              : public:
      28              :   /**
      29              :    * @brief CRTGrenobleFrameBuilderModule constructor
      30              :    * @param name DAQ module instance name
      31              :    */
      32              :   explicit CRTGrenobleFrameBuilderModule(const std::string& name);
      33              : 
      34              :   CRTGrenobleFrameBuilderModule(const CRTGrenobleFrameBuilderModule&) =
      35              :     delete; ///< CRTGrenobleFrameBuilderModule is not copy-constructible
      36              :   CRTGrenobleFrameBuilderModule& operator=(const CRTGrenobleFrameBuilderModule&) =
      37              :     delete; ///< CRTGrenobleFrameBuilderModule is not copy-assignable
      38              :   CRTGrenobleFrameBuilderModule(CRTGrenobleFrameBuilderModule&&) =
      39              :     delete; ///< CRTGrenobleFrameBuilderModule is not move-constructible
      40              :   CRTGrenobleFrameBuilderModule& operator=(CRTGrenobleFrameBuilderModule&&) =
      41              :     delete; ///< CRTGrenobleFrameBuilderModule is not move-assignable
      42              : 
      43              :   /**
      44              :    * @brief Handles initialization on boot
      45              :    * @param mcfg DAQ configuration data
      46              :    */
      47              :   void init(const std::shared_ptr<appfwk::ConfigurationManager> mcfg) override;
      48              : 
      49              : private:
      50              :   // Commands
      51              :   void do_conf(const CommandData_t& obj);
      52              :   void do_start(const CommandData_t& obj);
      53              :   void do_stop(const CommandData_t& obj);
      54              :   void do_scrap(const CommandData_t& obj);
      55              : 
      56              :   void generate_opmon_data() override;
      57              : 
      58              :   /**
      59              :    * @brief Data produce thread function
      60              :    * @param fake_stream_id Fake packet stream ID
      61              :    */
      62              :   void run_produce(uint32_t fake_stream_id); // NOLINT(build/unsigned)
      63              : 
      64              :   /**
      65              :    * @brief Sets run marker
      66              :    * @param should_run Whether producer thread should continue
      67              :    */
      68              :   void set_running(bool /*should_run*/);
      69              : 
      70              :   /**
      71              :    * @brief Enables data taking
      72              :    */
      73            0 :   void enable_flow() { m_enable_flow.store(true); }
      74              : 
      75              :   /**
      76              :    * @brief Disables data taking
      77              :    */
      78            0 :   void disable_flow() { m_enable_flow.store(false); }
      79              : 
      80              :   /**
      81              :    * @brief Whether producer thread should continue
      82              :    */
      83              :   std::atomic<bool> m_run_marker{ false };
      84              : 
      85              :   /**
      86              :    * @brief Whether data taking should continue
      87              :    */
      88              :   std::atomic<bool> m_enable_flow{ false }; // this is for queue ops
      89              : 
      90              :   // PRODUCER
      91              :   /**
      92              :    * @brief Data producer threads
      93              :    */
      94              :   std::vector<std::unique_ptr<utilities::ReusableThread>> m_producer_threads;
      95              : 
      96              :   /**
      97              :    * @brief Data sender
      98              :    */
      99              :   std::shared_ptr<iomanager::SenderConcept<fddetdataformats::CRTGrenobleFrame>> m_sender;
     100              : 
     101              :   /**
     102              :    * @brief Fake packet stream IDs
     103              :    */
     104              :   std::vector<uint32_t> m_fake_stream_ids; // NOLINT(build/unsigned)
     105              : 
     106              :   /**
     107              :    * @brief Configured packet transmission rate in kHz
     108              :    */
     109              :   double m_configured_packet_rate_khz{ 10 };
     110              : 
     111              :   /**
     112              :    * @brief Counts packets since last opmon data generation
     113              :    */
     114              :   std::atomic<int> m_packet_count{ 0 };
     115              : 
     116              :   // RUN START T0
     117              :   /**
     118              :    * @brief Timestamp used to measure time between opmon reports
     119              :    */
     120              :   std::chrono::time_point<std::chrono::steady_clock> m_t0;
     121              : };
     122              : } // namespace dunedaq::crtmodules
     123              : 
     124              : #endif // CRTMODULES_PLUGINS_CRTGRENOBLEFRAMEBUILDERMODULE_HPP_
        

Generated by: LCOV version 2.0-1