DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TokenManager.hpp
Go to the documentation of this file.
1
9#ifndef TRIGGER_SRC_TRIGGER_TOKENMANAGER_HPP_
10#define TRIGGER_SRC_TRIGGER_TOKENMANAGER_HPP_
11
12#include "LivetimeCounter.hpp"
13
15#include "dfmessages/Types.hpp"
17
18#include <atomic>
19#include <chrono>
20#include <memory>
21#include <set>
22#include <string>
23#include <thread>
24
25namespace dunedaq {
26namespace trigger {
27
40{
41public:
42 TokenManager(const std::string& connection_name,
43 int initial_tokens,
45 std::shared_ptr<LivetimeCounter> livetime_counter);
46
47 virtual ~TokenManager();
48
49 TokenManager(TokenManager const&) = delete;
53
57 int get_n_tokens() const;
58
62 bool triggers_allowed() const { return get_n_tokens() > 0; }
63
73
74private:
75 // The main thread
77
78 std::string m_connection_name;
79
80 // Are we running?
81 std::atomic<bool> m_running_flag;
82 // How many tokens are currently available?
83 std::atomic<int> m_n_tokens;
84
85 // The currently-in-flight trigger decisions, and a mutex to guard it
86 std::set<dfmessages::trigger_number_t> m_open_trigger_decisions;
88
90 std::shared_ptr<LivetimeCounter> m_livetime_counter;
91
92 // open strigger report time
93 std::chrono::time_point<std::chrono::steady_clock> m_open_trigger_time;
94
95 // the IOManager receiver instance
96 std::shared_ptr<iomanager::ReceiverConcept<dfmessages::TriggerDecisionToken>> m_token_receiver;
97};
98
99} // namespace trigger
100} // namespace dunedaq
101
102#endif // TRIGGER_SRC_TRIGGER_TOKENMANAGER_HPP_
TokenManager keeps track of the number of in-flight trigger decisions.
std::shared_ptr< LivetimeCounter > m_livetime_counter
TokenManager(TokenManager &&)=default
std::shared_ptr< iomanager::ReceiverConcept< dfmessages::TriggerDecisionToken > > m_token_receiver
std::set< dfmessages::trigger_number_t > m_open_trigger_decisions
void receive_token(dfmessages::TriggerDecisionToken &token)
TokenManager & operator=(TokenManager const &)=delete
TokenManager(const std::string &connection_name, int initial_tokens, daqdataformats::run_number_t run_number, std::shared_ptr< LivetimeCounter > livetime_counter)
daqdataformats::run_number_t m_run_number
std::atomic< bool > m_running_flag
TokenManager(TokenManager const &)=delete
void trigger_sent(dfmessages::trigger_number_t)
std::chrono::time_point< std::chrono::steady_clock > m_open_trigger_time
TokenManager & operator=(TokenManager &&)=default
uint32_t run_number_t
Type used to represent run number.
Definition Types.hpp:20
daqdataformats::trigger_number_t trigger_number_t
Copy daqdataformats::trigger_number_t.
Definition Types.hpp:35
Including Qt Headers.
Represents a message indicating that the DataFlow has one additional buffer available.