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.
 
TimingEndpointControllerBaseoperator= (const TimingEndpointControllerBase &)=delete
 TimingEndpointControllerBase is not copy-assignable.
 
 TimingEndpointControllerBase (TimingEndpointControllerBase &&)=delete
 TimingEndpointControllerBase is not move-constructible.
 
TimingEndpointControllerBaseoperator= (TimingEndpointControllerBase &&)=delete
 TimingEndpointControllerBase is not move-assignable.
 

Protected Member Functions

void do_configure (const nlohmann::json &data) override
 
void send_configure_hardware_commands (const nlohmann::json &data) override
 
timingcmd::TimingHwCmd construct_endpoint_hw_cmd (const std::string &cmd_id, uint endpoint_id)
 
virtual void do_endpoint_enable (const nlohmann::json &data)
 
virtual void do_endpoint_disable (const nlohmann::json &data)
 
virtual void do_endpoint_reset (const nlohmann::json &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, number_hw_commands) // 2nd arg: how many hw commands can this module send?
36{
37 // timing endpoint hardware commands
38 register_command("endpoint_enable", &TimingEndpointControllerBase::do_endpoint_enable);
39 register_command("endpoint_disable", &TimingEndpointControllerBase::do_endpoint_disable);
40 register_command("endpoint_reset", &TimingEndpointControllerBase::do_endpoint_reset);
41}
virtual void do_endpoint_disable(const nlohmann::json &data)
virtual void do_endpoint_enable(const nlohmann::json &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 67 of file TimingEndpointControllerBase.cpp.

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

◆ do_configure()

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

Definition at line 44 of file TimingEndpointControllerBase.cpp.

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

◆ do_endpoint_disable()

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

Definition at line 96 of file TimingEndpointControllerBase.cpp.

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

◆ do_endpoint_enable()

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

Definition at line 81 of file TimingEndpointControllerBase.cpp.

82{
83 timingcmd::TimingHwCmd hw_cmd =
84 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:112
void from_json(const data_t &j, EndpointLocation &obj)
Definition Nljs.hpp:26

◆ do_endpoint_reset()

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

Definition at line 105 of file TimingEndpointControllerBase.cpp.

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

◆ 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 131 of file TimingEndpointControllerBase.cpp.

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

◆ send_configure_hardware_commands()

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

Definition at line 59 of file TimingEndpointControllerBase.cpp.

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

Member Data Documentation

◆ m_endpoint_state

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

Definition at line 69 of file TimingEndpointControllerBase.hpp.

◆ m_managed_endpoint_id

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

Definition at line 54 of file TimingEndpointControllerBase.hpp.


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