DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
MasterNode.hpp
Go to the documentation of this file.
1
12#ifndef TIMING_INCLUDE_TIMING_MASTERNODE_HPP_
13#define TIMING_INCLUDE_TIMING_MASTERNODE_HPP_
14
15// PDT Headers
17#include "timing/toolbox.hpp"
21
24
25// uHal Headers
26#include "uhal/DerivedNode.hpp"
27
28// C++ Headers
29#include <chrono>
30#include <string>
31
32namespace dunedaq {
33namespace timing {
34
39{
40 UHAL_DERIVEDNODE(MasterNode)
41public:
42 explicit MasterNode(const uhal::Node& node);
43 virtual ~MasterNode();
44
48 std::string get_status(bool print_out = false) const override;
49
53 std::string get_status_with_date(uint32_t clock_frequency_hz, bool print_out = false) const; // NOLINT(build/unsigned)
54
58 void switch_endpoint_sfp(uint32_t address, bool turn_on) const override; // NOLINT(build/unsigned)
59
63 void enable_upstream_endpoint() const override;
64
68 void send_fl_cmd(uint32_t command, // NOLINT(build/unsigned)
69 uint32_t channel, // NOLINT(build/unsigned)
70 uint32_t number_of_commands = 1) const override; // NOLINT(build/unsigned)
71
77 uint32_t measure_endpoint_rtt(uint32_t address, bool control_sfp = true) const override; // NOLINT(build/unsigned)
78
82 void apply_endpoint_delay(uint32_t address, // NOLINT(build/unsigned)
83 uint32_t coarse_delay, // NOLINT(build/unsigned)
84 uint32_t fine_delay, // NOLINT(build/unsigned)
85 uint32_t phase_delay, // NOLINT(build/unsigned)
86 bool measure_rtt = false,
87 bool control_sfp = true) const override;
88
90
94 void sync_timestamp(TimestampSource source) const override; // NOLINT(build/unsigned)
95
101 uint64_t read_timestamp() const override; // NOLINT(build/unsigned)
102
106 void set_timestamp(TimestampSource source) const override; // NOLINT(build/unsigned)
107
112
116 void reset_command_counters() const;
117
121 std::vector<uint32_t> transmit_async_packet(const std::vector<uint32_t>& packet, int timeout=500) const;
122
126 void write_endpoint_data(uint16_t endpoint_address, uint8_t reg_address, std::vector<uint8_t> data, bool address_mode) const;
127
131 std::vector<uint32_t> read_endpoint_data(uint16_t endpoint_address, uint8_t reg_address, uint8_t data_length, bool address_mode) const;
132
136 void disable_timestamp_broadcast() const;
137
141 void enable_timestamp_broadcast() const;
142
146 timingfirmware::EndpointCheckResult scan_endpoint(uint16_t endpoint_address, bool control_sfp) const override;
147
151 void configure_endpoint_command_decoder(uint16_t endpoint_address, uint8_t slot, uint8_t command) const;
152
157
162
167
168 const static uint32_t required_major_firmware_version = 7;
169 const static uint32_t required_minor_firmware_version = 5;
170 const static uint32_t required_patch_firmware_version = 0;
171private:
175 std::string get_status_tables() const;
176};
177
178} // namespace timing
179} // namespace dunedaq
180
181#endif // TIMING_INCLUDE_TIMING_PDIMASTERNODE_HPP_
Base class for timing IO nodes.
virtual void apply_endpoint_delay(uint32_t address, uint32_t coarse_delay, uint32_t fine_delay, uint32_t phase_delay, bool measure_rtt=false, bool control_sfp=true) const =0
Apply delay to endpoint.
Class for PD-II/DUNE master timing nodes.
uint32_t get_required_minor_firmware_version() const override
Required minor firmware version.
static const uint32_t required_minor_firmware_version
static const uint32_t required_major_firmware_version
std::string get_status_tables() const
Get the status tables.
uint32_t get_required_major_firmware_version() const override
Required major firmware version.
void set_timestamp(TimestampSource source) const override
Set the timestamp to current time.
std::string get_status(bool print_out=false) const override
Print the status of the timing node.
std::string get_status_with_date(uint32_t clock_frequency_hz, bool print_out=false) const
Print the status of the timing node.
std::vector< uint32_t > transmit_async_packet(const std::vector< uint32_t > &packet, int timeout=500) const
Send an async packet.
void enable_timestamp_broadcast() const
Enable timestamp sending.
uint64_t read_timestamp() const override
Read the current timestamp word.
void apply_endpoint_delay(uint32_t address, uint32_t coarse_delay, uint32_t fine_delay, uint32_t phase_delay, bool measure_rtt=false, bool control_sfp=true) const override
Apply delay to endpoint.
std::vector< uint32_t > read_endpoint_data(uint16_t endpoint_address, uint8_t reg_address, uint8_t data_length, bool address_mode) const
Read some data from endpoint registers.
uint32_t measure_endpoint_rtt(uint32_t address, bool control_sfp=true) const override
Measure the endpoint round trip time.
void switch_endpoint_sfp(uint32_t address, bool turn_on) const override
Control the tx line of endpoint sfp.
void disable_timestamp_broadcast() const
Disable timestamp sending.
static const uint32_t required_patch_firmware_version
timingfirmware::EndpointCheckResult scan_endpoint(uint16_t endpoint_address, bool control_sfp) const override
Scan endpoint.
void enable_upstream_endpoint() const override
Enable RTT endpoint.
void sync_timestamp(TimestampSource source) const override
Set timestamp to current machine time.
void configure_endpoint_command_decoder(uint16_t endpoint_address, uint8_t slot, uint8_t command) const
Configure endpoint command decoder.
void get_info(timingfirmwareinfo::MasterMonitorData &mon_data) const
Fill the PD-I master monitoring structure.
MasterNode(const uhal::Node &node)
void reset_command_counters() const
Read some data from endpoint registers.
uint32_t get_required_patch_firmware_version() const override
Required patch firmware version.
void write_endpoint_data(uint16_t endpoint_address, uint8_t reg_address, std::vector< uint8_t > data, bool address_mode) const
Write some data to endpoint registers.
void send_fl_cmd(uint32_t command, uint32_t channel, uint32_t number_of_commands=1) const override
Send a fixed length command.
Including Qt Headers.