DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
HermesCoreController.hpp
Go to the documentation of this file.
1
2#ifndef HERMESMODULES_INCLUDE_HERMESCORECONTROLLER_HPP_
3#define HERMESMODULES_INCLUDE_HERMESCORECONTROLLER_HPP_
4
5#include "ers/Issue.hpp"
6#include "logging/Logging.hpp" // NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG<<issue wont work.
7#include "uhal/uhal.hpp"
8
10namespace dunedaq {
11
13 LinkDoesNotExist,
14 "Hermes Link " << lid << " does not exist",
15 ((int)lid)
16 );
17
19 InputBufferDoesNotExist,
20 "Hermes Input Buffer " << bid << " does not exist",
21 ((int)bid)
22 );
23
25 MagicNumberError,
26 "Hermes Magic number failed " << found << " (" << expected << ")",
27 ((uint32_t)found)((uint32_t)expected)
28 );
29
30
32 LinkInError,
33 "Hermes Link " << link << " is in error (err:" << err << ", eth_rdy:" << eth_rdy << ", src_rdy:" << src_rdy << ", udp_rdy:" << udp_rdy <<" )",
34 ((uint16_t)link)((bool)err)((bool)eth_rdy)((bool)src_rdy)((bool)udp_rdy)
35 );
36
37namespace hermesmodules {
38
40
41public:
42
43 struct CoreInfo {
44 uint32_t design;
45 uint32_t major;
46 uint32_t minor;
47 uint32_t patch;
48 uint32_t n_mgt;
49 uint32_t n_src;
50 uint32_t ref_freq;
51 uint32_t srcs_per_mux;
52 };
53
54 struct LinkGeoInfo {
55 uint16_t detid;
56 uint16_t crateid;
57 uint16_t slotid;
58 };
59
60 explicit HermesCoreController(uhal::HwInterface, std::string readout_id="");
61 virtual ~HermesCoreController();
62
63 const CoreInfo& get_info() const { return m_core_info; }
64
65 void sel_tx_mux(uint16_t i) ;
66
67 void sel_tx_mux_buf(uint16_t i);
68
69 void sel_udp_core(uint16_t i);
70
71 void reset(bool nuke=false);
72
73 bool is_link_in_error(uint16_t link, bool do_throw=false);
74
75 void enable(uint16_t link, bool enable);
76
77 void config_mux(uint16_t link, uint16_t det, uint16_t crate, uint16_t slot);
78
79 void config_udp(uint16_t link, uint64_t src_mac, uint32_t src_ip, uint16_t src_port, uint64_t dst_mac, uint32_t dst_ip, uint16_t dst_port, uint32_t filters);
80
81 void config_fake_src(uint16_t link, uint16_t n_src, uint16_t data_len, uint16_t rate);
82
83 LinkGeoInfo read_link_geo_info(uint16_t link);
84
85 opmon::LinkInfo read_link_stats(uint16_t link);
86
87
88private:
89
90 void load_hw_info();
91
92 uhal::HwInterface m_hw;
93
94 const uhal::Node& m_readout;
95
97
98};
99
100}
101}
102
103#endif /* HERMESMODULES_INCLUDE_HERMESCORECONTROLLER_HPP_ */
#define ERS_DECLARE_ISSUE(namespace_name, class_name, message, attributes)
HermesCoreController(uhal::HwInterface, std::string readout_id="")
void config_udp(uint16_t link, uint64_t src_mac, uint32_t src_ip, uint16_t src_port, uint64_t dst_mac, uint32_t dst_ip, uint16_t dst_port, uint32_t filters)
void config_mux(uint16_t link, uint16_t det, uint16_t crate, uint16_t slot)
bool is_link_in_error(uint16_t link, bool do_throw=false)
void config_fake_src(uint16_t link, uint16_t n_src, uint16_t data_len, uint16_t rate)
Including Qt Headers.