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-07-12 15:23:06 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 "utilities/ReusableThread.hpp"
      16              : #include "fddetdataformats/CRTGrenobleFrame.hpp"
      17              : 
      18              : #include <memory>
      19              : #include <map>
      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&) = delete;            ///< CRTGrenobleFrameBuilderModule is not copy-constructible
      35              :   CRTGrenobleFrameBuilderModule& operator=(const CRTGrenobleFrameBuilderModule&) = delete; ///< CRTGrenobleFrameBuilderModule is not copy-assignable
      36              :   CRTGrenobleFrameBuilderModule(CRTGrenobleFrameBuilderModule&&) = delete;                 ///< CRTGrenobleFrameBuilderModule is not move-constructible
      37              :   CRTGrenobleFrameBuilderModule& operator=(CRTGrenobleFrameBuilderModule&&) = delete;      ///< CRTGrenobleFrameBuilderModule is not move-assignable
      38              : 
      39              :   /**
      40              :    * @brief Handles initialization on boot
      41              :    * @param mcfg DAQ configuration data
      42              :    */  
      43              :   void init(const std::shared_ptr<appfwk::ConfigurationManager> mcfg) override;
      44              : 
      45              : private:
      46              :   // Commands
      47              :   void do_conf(const CommandData_t& obj);
      48              :   void do_start(const CommandData_t& obj);
      49              :   void do_stop(const CommandData_t& obj);
      50              :   void do_scrap(const CommandData_t& obj);
      51              :   
      52              :   void generate_opmon_data() override;
      53              : 
      54              :   /**
      55              :    * @brief Data produce thread function
      56              :    * @param fake_stream_id Fake packet stream ID
      57              :    */     
      58              :   void run_produce(uint32_t fake_stream_id); // NOLINT(build/unsigned)
      59              : 
      60              :   /**
      61              :    * @brief Sets run marker
      62              :    * @param should_run Whether producer thread should continue
      63              :    */    
      64              :   void set_running(bool /*should_run*/);
      65              : 
      66              :   /**
      67              :    * @brief Enables data taking
      68              :    */   
      69            0 :   void enable_flow() { m_enable_flow.store(true); }
      70              : 
      71              :   /**
      72              :    * @brief Disables data taking
      73              :    */   
      74            0 :   void disable_flow() { m_enable_flow.store(false); }  
      75              : 
      76              :   /**
      77              :    * @brief Whether producer thread should continue
      78              :    */      
      79              :   std::atomic<bool> m_run_marker{ false };
      80              : 
      81              :   /**
      82              :    * @brief Whether data taking should continue
      83              :    */        
      84              :   std::atomic<bool> m_enable_flow{ false }; // this is for queue ops
      85              : 
      86              :   // PRODUCER
      87              :   /**
      88              :    * @brief Data producer threads
      89              :    */       
      90              :   std::vector<std::unique_ptr<utilities::ReusableThread>> m_producer_threads;  
      91              : 
      92              :   /**
      93              :    * @brief Data sender
      94              :    */
      95              :   std::shared_ptr<iomanager::SenderConcept<fddetdataformats::CRTGrenobleFrame>> m_sender;
      96              : 
      97              :   /**
      98              :    * @brief Fake packet stream IDs
      99              :    */  
     100              :   std::vector<uint32_t> m_fake_stream_ids; // NOLINT(build/unsigned)
     101              : 
     102              :   /**
     103              :    * @brief Configured packet transmission rate in kHz
     104              :    */
     105              :   double m_configured_packet_rate_khz{ 10 };
     106              :     
     107              :   /**
     108              :    * @brief Counts packets since last opmon data generation
     109              :    */
     110              :   std::atomic<int> m_packet_count{ 0 };   
     111              : 
     112              :   // RUN START T0
     113              :   /**
     114              :    * @brief Timestamp used to measure time between opmon reports
     115              :    */   
     116              :   std::chrono::time_point<std::chrono::steady_clock> m_t0;      
     117              : };
     118              : } // namespace dunedaq::crtmodules
     119              : 
     120              : #endif // CRTMODULES_PLUGINS_CRTGRENOBLEFRAMEBUILDERMODULE_HPP_
        

Generated by: LCOV version 2.0-1