DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::timinglibs::TimingEndpointControllerBase Class Reference

TimingEndpointControllerBase is a DAQModule implementation that provides that provides a control interface for a timing endpoint. More...

#include <TimingEndpointControllerBase.hpp>

Inheritance diagram for dunedaq::timinglibs::TimingEndpointControllerBase:
[legend]
Collaboration diagram for dunedaq::timinglibs::TimingEndpointControllerBase:
[legend]

Public Member Functions

 TimingEndpointControllerBase (const std::string &name, uint number_hw_commands)
 TimingEndpointControllerBase Constructor.
 TimingEndpointControllerBase (const TimingEndpointControllerBase &)=delete
 TimingEndpointControllerBase is not copy-constructible.
TimingEndpointControllerBase & operator= (const TimingEndpointControllerBase &)=delete
 TimingEndpointControllerBase is not copy-assignable.
 TimingEndpointControllerBase (TimingEndpointControllerBase &&)=delete
 TimingEndpointControllerBase is not move-constructible.
TimingEndpointControllerBase & operator= (TimingEndpointControllerBase &&)=delete
 TimingEndpointControllerBase is not move-assignable.

Protected Member Functions

void do_configure (const CommandData_t &data) override
void send_configure_hardware_commands (const CommandData_t &data) override
timingcmd::TimingHwCmd construct_endpoint_hw_cmd (const std::string &cmd_id, uint endpoint_id)
virtual void do_endpoint_enable (const CommandData_t &data)
virtual void do_endpoint_disable (const CommandData_t &data)
virtual void do_endpoint_reset (const CommandData_t &data)
void process_device_info (nlohmann::json info) override

Protected Attributes

uint m_managed_endpoint_id
std::atomic< uint > m_endpoint_state

Detailed Description

TimingEndpointControllerBase is a DAQModule implementation that provides that provides a control interface for a timing endpoint.

Definition at line 36 of file TimingEndpointControllerBase.hpp.

Constructor & Destructor Documentation

◆ TimingEndpointControllerBase() [1/3]

dunedaq::timinglibs::TimingEndpointControllerBase::TimingEndpointControllerBase ( const std::string & name,
uint number_hw_commands )
explicit

TimingEndpointControllerBase Constructor.

Parameters
nameInstance name for this TimingEndpointControllerBase instance

Definition at line 34 of file TimingEndpointControllerBase.cpp.

35 : dunedaq::timinglibs::TimingController(name,
36 number_hw_commands) // 2nd arg: how many hw commands can this module send?
37{
38 // timing endpoint hardware commands
39 register_command("endpoint_enable", &TimingEndpointControllerBase::do_endpoint_enable);
40 register_command("endpoint_disable", &TimingEndpointControllerBase::do_endpoint_disable);
41 register_command("endpoint_reset", &TimingEndpointControllerBase::do_endpoint_reset);
42}
virtual void do_endpoint_disable(const CommandData_t &data)

◆ TimingEndpointControllerBase() [2/3]

dunedaq::timinglibs::TimingEndpointControllerBase::TimingEndpointControllerBase ( const TimingEndpointControllerBase & )
delete

TimingEndpointControllerBase is not copy-constructible.

◆ TimingEndpointControllerBase() [3/3]

dunedaq::timinglibs::TimingEndpointControllerBase::TimingEndpointControllerBase ( TimingEndpointControllerBase && )
delete

TimingEndpointControllerBase is not move-constructible.

Member Function Documentation

◆ construct_endpoint_hw_cmd()

timingcmd::TimingHwCmd dunedaq::timinglibs::TimingEndpointControllerBase::construct_endpoint_hw_cmd ( const std::string & cmd_id,
uint endpoint_id )
protected

Definition at line 68 of file TimingEndpointControllerBase.cpp.

69{
70 timingcmd::TimingHwCmd hw_cmd;
71 timingcmd::TimingEndpointCmdPayload cmd_payload;
72 // where to check endpoint id validity
73 cmd_payload.endpoint_id = endpoint_id;
74 timingcmd::to_json(hw_cmd.payload, cmd_payload);
75
76 hw_cmd.id = cmd_id;
77 hw_cmd.device = m_timing_device;
78 return hw_cmd;
79}
void to_json(data_t &j, const EndpointLocation &obj)
Definition Nljs.hpp:20

◆ do_configure()

void dunedaq::timinglibs::TimingEndpointControllerBase::do_configure ( const CommandData_t & data)
overrideprotected

Definition at line 45 of file TimingEndpointControllerBase.cpp.

46{
47 auto mdal = m_params->cast<dal::TimingEndpointControllerConf>();
48
49 TimingController::do_configure(data); // configure hw command connection
50
51 // endpoint per device in config for now...
52 m_managed_endpoint_id = { mdal->get_endpoint_id() };
53
54 configure_hardware_or_recover_state<TimingEndpointNotReady>(data, "Timing endpoint", m_endpoint_state);
55
56 TLOG() << get_name() << " conf done for endpoint, device: " << m_timing_device;
57}
#define TLOG(...)
Definition macro.hpp:21

◆ do_endpoint_disable()

void dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_disable ( const CommandData_t & data)
protectedvirtual

Definition at line 96 of file TimingEndpointControllerBase.cpp.

97{
98 timingcmd::TimingHwCmd hw_cmd = construct_hw_cmd("endpoint_disable", data);
99 send_hw_cmd(std::move(hw_cmd));
100 ++(m_sent_hw_command_counters.at(3).atomic);
101}

◆ do_endpoint_enable()

void dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_enable ( const CommandData_t & data)
protectedvirtual

Definition at line 82 of file TimingEndpointControllerBase.cpp.

83{
84 timingcmd::TimingHwCmd hw_cmd = construct_hw_cmd("endpoint_enable", data);
85
86 // print out some debug info
87 timingcmd::TimingEndpointConfigureCmdPayload cmd_payload;
88 timingcmd::from_json(data, cmd_payload);
89
90 TLOG_DEBUG(0) << "ept enable hw cmd; a: " << cmd_payload.address;
91 send_hw_cmd(std::move(hw_cmd));
92 ++(m_sent_hw_command_counters.at(2).atomic);
93}
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:116
void from_json(const data_t &j, EndpointLocation &obj)
Definition Nljs.hpp:28

◆ do_endpoint_reset()

void dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_reset ( const CommandData_t & data)
protectedvirtual

Definition at line 104 of file TimingEndpointControllerBase.cpp.

105{
106 timingcmd::TimingHwCmd hw_cmd = construct_hw_cmd("endpoint_reset", data);
107
108 send_hw_cmd(std::move(hw_cmd));
109 ++(m_sent_hw_command_counters.at(4).atomic);
110}

◆ operator=() [1/2]

TimingEndpointControllerBase & dunedaq::timinglibs::TimingEndpointControllerBase::operator= ( const TimingEndpointControllerBase & )
delete

TimingEndpointControllerBase is not copy-assignable.

◆ operator=() [2/2]

TimingEndpointControllerBase & dunedaq::timinglibs::TimingEndpointControllerBase::operator= ( TimingEndpointControllerBase && )
delete

TimingEndpointControllerBase is not move-assignable.

◆ process_device_info()

void dunedaq::timinglibs::TimingEndpointControllerBase::process_device_info ( nlohmann::json info)
overrideprotected

Definition at line 129 of file TimingEndpointControllerBase.cpp.

130{
131 ++m_device_infos_received_count;
132
133 timing::timingfirmwareinfo::TimingDeviceInfo device_info;
134 from_json(info, device_info);
135
136 auto ept_info = device_info.endpoint_info;
137
138 m_endpoint_state = ept_info.state;
139 bool ready = ept_info.ready;
140
141 TLOG_DEBUG(3) << "state: 0x" << std::hex << m_endpoint_state << ", ready: " << ready << std::dec
142 << ", infos received: " << m_device_infos_received_count;
143
144 if (m_endpoint_state == 0x8 && ready) {
145 if (!m_device_ready) {
146 m_device_ready = true;
147 TLOG_DEBUG(2) << "Timing endpoint became ready";
148 }
149 } else {
150 if (m_device_ready) {
151 m_device_ready = false;
152 TLOG_DEBUG(2) << "Timing endpoint no longer ready";
153 }
154 }
155}
void from_json(const data_t &j, Link &obj)
Definition Nljs.hpp:29

◆ send_configure_hardware_commands()

void dunedaq::timinglibs::TimingEndpointControllerBase::send_configure_hardware_commands ( const CommandData_t & data)
overrideprotected

Definition at line 60 of file TimingEndpointControllerBase.cpp.

61{
62 do_io_reset(data);
63 std::this_thread::sleep_for(std::chrono::microseconds(7000000));
65}

Member Data Documentation

◆ m_endpoint_state

std::atomic<uint> dunedaq::timinglibs::TimingEndpointControllerBase::m_endpoint_state
protected

Definition at line 70 of file TimingEndpointControllerBase.hpp.

◆ m_managed_endpoint_id

uint dunedaq::timinglibs::TimingEndpointControllerBase::m_managed_endpoint_id
protected

Definition at line 55 of file TimingEndpointControllerBase.hpp.


The documentation for this class was generated from the following files: