1 #ifndef ARTDAQ_ARTDAQ_APPLICATION_BOARDREADERCORE_HH_
2 #define ARTDAQ_ARTDAQ_APPLICATION_BOARDREADERCORE_HH_
4 #include "artdaq/Application/Commandable.hh"
5 #include "artdaq/DAQrate/DataSenderManager.hh"
6 #include "artdaq/DAQrate/StatisticsHelper.hh"
7 #include "artdaq/DAQrate/detail/RequestReceiver.hh"
8 #include "artdaq/Generators/CommandableFragmentGenerator.hh"
10 #include "canvas/Persistency/Provenance/RunID.h"
11 #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);
186 return generator_ptr_.get();
211 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_;
212 std::unique_ptr<RequestReceiver> request_receiver_ptr_;
213 std::shared_ptr<FragmentBuffer> fragment_buffer_ptr_;
216 fhicl::ParameterSet data_pset_;
218 bool skip_seqId_test_;
220 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
222 std::atomic<size_t> fragment_count_;
223 artdaq::Fragment::sequence_id_t prev_seq_id_;
224 std::atomic<bool> stop_requested_;
225 std::atomic<bool> pause_requested_;
228 std::atomic<bool> running_{
false};
229 std::atomic<bool> sender_thread_active_{
false};
230 std::atomic<bool> receiver_thread_active_{
false};
231 double start_transition_timeout_{10.0};
236 std::string buildStatisticsString_();
243 #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.
CommandableFragmentGenerator is a FragmentGenerator-derived abstract class that defines the interface...
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.