1 #ifndef ARTDAQ_ARTDAQ_APPLICATION_BOARDREADERCORE_HH_
2 #define ARTDAQ_ARTDAQ_APPLICATION_BOARDREADERCORE_HH_
4 #include "artdaq-utilities/Plugins/MetricManager.hh"
5 #include "artdaq/Application/Commandable.hh"
6 #include "artdaq/DAQrate/DataSenderManager.hh"
7 #include "artdaq/DAQrate/StatisticsHelper.hh"
8 #include "artdaq/DAQrate/detail/RequestReceiver.hh"
9 #include "artdaq/Generators/CommandableFragmentGenerator.hh"
11 #include "canvas/Persistency/Provenance/RunID.h"
12 #include "fhiclcpp/ParameterSet.h"
17 class BoardReaderCore;
79 bool initialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
88 bool start(art::RunID
id, uint64_t timeout, uint64_t timestamp);
96 bool stop(uint64_t timeout, uint64_t timestamp);
104 bool pause(uint64_t timeout, uint64_t timestamp);
112 bool resume(uint64_t timeout, uint64_t timestamp);
128 bool soft_initialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
137 bool reinitialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
161 std::string
report(std::string
const& which)
const;
169 bool metaCommand(std::string
const& command, std::string
const& arg);
203 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_;
204 std::unique_ptr<RequestReceiver> request_receiver_ptr_;
205 std::unique_ptr<FragmentBuffer> fragment_buffer_ptr_;
208 fhicl::ParameterSet data_pset_;
210 bool skip_seqId_test_;
212 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
214 std::atomic<size_t> fragment_count_;
215 artdaq::Fragment::sequence_id_t prev_seq_id_;
216 std::atomic<bool> stop_requested_;
217 std::atomic<bool> pause_requested_;
220 std::atomic<bool> running_{
false};
221 std::atomic<bool> sender_thread_active_{
false};
222 std::atomic<bool> receiver_thread_active_{
false};
223 double start_transition_timeout_{10.0};
228 std::string buildStatisticsString_();
235 #endif // ARTDAQ_ARTDAQ_APPLICATION_BOARDREADERCORE_HH_
This class manages MonitoredQuantity instances for the *Core classes.
size_t GetFragmentsProcessed()
Get the number of Fragments processed this run
static const std::string BUFFER_WAIT_STAT_KEY
Key for the Fragment Buffer Wait MonitoredQuantity.
Commandable is the base class for all artdaq components which implement the artdaq state machine...
bool GetReceiverThreadActive()
Get whether the receiver thread is still running.
Sends Fragment objects using TransferInterface plugins. Uses Routing Tables if confgiured, otherwise will Round-Robin Fragments to the destinations.
bool initialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Initialize the BoardReaderCore.
static DataSenderManager * GetDataSenderManagerPtr()
Gets a handle to the DataSenderManager.
static const std::string FRAGMENTS_PROCESSED_STAT_KEY
Key for the Fragments Processed MonitoredQuantity.
bool reinitialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Reinitialize the BoardReader. No-Op.
static const std::string INPUT_WAIT_STAT_KEY
Key for the Input Wait MonitoredQuantity.
bool GetSenderThreadActive()
Get whether the sender thread is still running.
bool stop(uint64_t timeout, uint64_t timestamp)
Stop the BoardReader, and the CommandableFragmentGenerator.
BoardReaderCore implements the state machine for the BoardReader artdaq application. It contains a CommandableFragmentGenerator, which generates Fragments which are then sent to a DataSenderManager by BoardReaderCore.
virtual ~BoardReaderCore()
BoardReaderCore Destructor.
BoardReaderCore(Commandable &parent_application)
BoardReaderCore Constructor.
static const std::string BRSYNC_WAIT_STAT_KEY
Key for the Sync Wait MonitoredQuantity.
static const std::string FRAGMENTS_PER_READ_STAT_KEY
Key for the Fragments Per Read MonitoredQuantity.
static const std::string REQUEST_WAIT_STAT_KEY
Key for the Request Buffer Wait MonitoredQuantity.
static const std::string OUTPUT_WAIT_STAT_KEY
Key for the Output Wait MonitoredQuantity.
void send_fragments()
Main working loop of the BoardReaderCore, pt. 2.
bool soft_initialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Soft-Initialize the BoardReader. No-Op.
std::string report(std::string const &which) const
Send a report on a given run-time quantity.
bool shutdown(uint64_t timeout)
Shutdown the BoardReader, and the CommandableFragmentGenerator.
bool start(art::RunID id, uint64_t timeout, uint64_t timestamp)
Start the BoardReader, and the CommandableFragmentGenerator.
bool resume(uint64_t timeout, uint64_t timestamp)
Resume the BoardReader, and the CommandableFragmentGenerator.
void receive_fragments()
Main working loop of the BoardReaderCore.
bool pause(uint64_t timeout, uint64_t timestamp)
Pause the BoardReader, and the CommandableFragmentGenerator.
void SetStartTransitionTimeout(double timeout)
Set the timeout for starting the sender and receiver threads.
bool metaCommand(std::string const &command, std::string const &arg)
Run a user-defined command on the CommandableFragmentGenerator.
BoardReaderCore & operator=(BoardReaderCore const &)=delete
Copy Assignment Operator is deleted.