Line data Source code
1 : /**
2 : * @file HSIDataHandlerModule.cpp HSIDataHandlerModule class implementation
3 : *
4 : * This is part of the DUNE DAQ , copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : #include "HSIDataHandlerModule.hpp"
10 :
11 : #include "HSIFrameProcessor.hpp"
12 : #include "hsilibs/Types.hpp"
13 :
14 : #include "datahandlinglibs/ReadoutLogging.hpp"
15 : #include "datahandlinglibs/concepts/DataHandlingConcept.hpp"
16 : #include "datahandlinglibs/models/BinarySearchQueueModel.hpp"
17 : #include "datahandlinglibs/models/DataHandlingModel.hpp"
18 : #include "datahandlinglibs/models/DefaultRequestHandlerModel.hpp"
19 :
20 : #include "appfwk/cmd/Nljs.hpp"
21 : #include "logging/Logging.hpp"
22 : #include "rcif/cmd/Nljs.hpp"
23 :
24 : #include <memory>
25 : #include <sstream>
26 : #include <string>
27 : #include <vector>
28 :
29 : using namespace dunedaq::datahandlinglibs::logging;
30 :
31 : namespace dunedaq {
32 : namespace hsilibs {
33 :
34 0 : HSIDataHandlerModule::HSIDataHandlerModule(const std::string& name)
35 : : DAQModule(name)
36 0 : , m_configured(false)
37 0 : , m_readout_impl(nullptr)
38 0 : , m_run_marker{ false }
39 : {
40 0 : register_command("conf", &HSIDataHandlerModule::do_conf);
41 0 : register_command("scrap", &HSIDataHandlerModule::do_scrap);
42 0 : register_command("start", &HSIDataHandlerModule::do_start);
43 0 : register_command("stop_trigger_sources", &HSIDataHandlerModule::do_stop);
44 0 : register_command("record", &HSIDataHandlerModule::do_record);
45 0 : }
46 :
47 : void
48 0 : HSIDataHandlerModule::init(std::shared_ptr<appfwk::ConfigurationManager> mcfg)
49 : {
50 :
51 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering init() method";
52 :
53 0 : namespace rol = dunedaq::datahandlinglibs;
54 :
55 0 : m_readout_impl = std::make_unique<rol::DataHandlingModel<
56 : hsilibs::HSI_FRAME_STRUCT,
57 : rol::DefaultRequestHandlerModel<hsilibs::HSI_FRAME_STRUCT, rol::BinarySearchQueueModel<hsilibs::HSI_FRAME_STRUCT>>,
58 : rol::BinarySearchQueueModel<hsilibs::HSI_FRAME_STRUCT>,
59 0 : hsilibs::HSIFrameProcessor>>(m_run_marker);
60 0 : m_readout_impl->init(mcfg->get_dal<appmodel::DataHandlerModule>(get_name()));
61 :
62 0 : if (m_readout_impl == nullptr) {
63 0 : TLOG() << get_name() << "Initialize HSIDataHandlerModule FAILED! ";
64 0 : throw datahandlinglibs::FailedReadoutInitialization(ERS_HERE, get_name(), "OKS Config"); // 4 json ident
65 : }
66 :
67 0 : register_node("data_handler", m_readout_impl);
68 :
69 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting init() method";
70 0 : }
71 :
72 : void
73 0 : HSIDataHandlerModule::do_conf(const CommandData_t& args)
74 : {
75 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering do_conf() method";
76 0 : m_readout_impl->conf(args);
77 0 : m_configured = true;
78 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting do_conf() method";
79 0 : }
80 :
81 : void
82 0 : HSIDataHandlerModule::do_scrap(const CommandData_t& args)
83 : {
84 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering do_scrap() method";
85 0 : m_readout_impl->scrap(args);
86 0 : m_configured = false;
87 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting do_scrap() method";
88 0 : }
89 : void
90 0 : HSIDataHandlerModule::do_start(const CommandData_t& args)
91 : {
92 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering do_start() method";
93 0 : m_run_marker.store(true);
94 0 : m_readout_impl->start(args);
95 :
96 0 : rcif::cmd::StartParams start_params = args.get<rcif::cmd::StartParams>();
97 0 : m_run_number = start_params.run;
98 0 : TLOG() << get_name() << " successfully started for run number " << m_run_number;
99 :
100 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting do_start() method";
101 0 : }
102 :
103 : void
104 0 : HSIDataHandlerModule::do_stop(const CommandData_t& args)
105 : {
106 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering do_stop() method";
107 0 : m_run_marker.store(false);
108 0 : m_readout_impl->stop(args);
109 0 : TLOG() << get_name() << " successfully stopped for run number " << m_run_number;
110 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting do_stop() method";
111 0 : }
112 :
113 : void
114 0 : HSIDataHandlerModule::do_record(const CommandData_t& args)
115 : {
116 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering do_issue_recording() method";
117 0 : m_readout_impl->record(args);
118 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting do_issue_recording() method";
119 0 : }
120 :
121 : } // namespace hsilibs
122 : } // namespace dunedaq
123 :
124 0 : DEFINE_DUNE_DAQ_MODULE(dunedaq::hsilibs::HSIDataHandlerModule)
|