USRP Hardware Driver and USRP Manual  Version: 4.9.0.HEAD-11-gcf78e1cf
UHD and USRP Manual
register_iface.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2019 Ettus Research, a National Instruments Brand
3 //
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 //
6 
7 #pragma once
8 
10 #include <uhd/types/time_spec.hpp>
11 #include <boost/optional.hpp>
12 #include <cstdint>
13 #include <functional>
14 #include <memory>
15 #include <vector>
16 
17 namespace uhd { namespace rfnoc {
18 
23 {
24  uint32_t end_addr;
25  std::function<void(uint32_t, uint32_t)> poke_fn;
26  std::function<uint32_t(uint32_t)> peek_fn;
27 };
28 
48 {
50  uint64_t ctrl_packets_sent = 0;
52  uint64_t ack_packets_received = 0;
54  uint64_t async_packets_received = 0;
56  uint64_t ack_packets_sent = 0;
58  uint64_t ctrl_dropped = 0;
60  uint64_t ctrl_out_of_sequence = 0;
62  ssize_t buffer_fullness = 0;
63 
64  std::string UHD_API to_string() const;
65 };
66 
77 {
78 public:
79  using sptr = std::shared_ptr<register_iface>;
80 
81  virtual ~register_iface() = default;
82 
92  std::function<bool(uint32_t addr, const std::vector<uint32_t>& data)>;
93 
104  using async_msg_callback_t = std::function<void(
105  uint32_t addr, const std::vector<uint32_t>& data, boost::optional<uint64_t>)>;
106 
119  virtual void poke32(uint32_t addr,
120  uint32_t data,
122  bool ack = false) = 0;
123 
141  void poke64(uint32_t addr,
142  uint64_t data,
144  bool ack = false)
145  {
146  block_poke32(addr,
147  {uint32_t(data & 0xFFFFFFFF), uint32_t((data >> 32) & 0xFFFFFFFF)},
148  time,
149  ack);
150  }
151 
170  virtual void multi_poke32(const std::vector<uint32_t> addrs,
171  const std::vector<uint32_t> data,
173  bool ack = false) = 0;
174 
195  virtual void block_poke32(uint32_t first_addr,
196  const std::vector<uint32_t> data,
198  bool ack = false) = 0;
199 
209  virtual uint32_t peek32(uint32_t addr, time_spec_t time = uhd::time_spec_t::ASAP) = 0;
210 
226  uint64_t peek64(uint32_t addr, time_spec_t time = uhd::time_spec_t::ASAP)
227  {
228  const auto vals = block_peek32(addr, 2, time);
229  return uint64_t(vals[0]) | (uint64_t(vals[1]) << 32);
230  }
231 
251  virtual std::vector<uint32_t> block_peek32(uint32_t first_addr,
252  size_t length,
254 
292  virtual void poll32(uint32_t addr,
293  uint32_t data,
294  uint32_t mask,
295  time_spec_t timeout,
297  bool ack = false) = 0;
298 
299 
310  virtual void sleep(time_spec_t duration, bool ack = false) = 0;
311 
332 
340  virtual void register_async_msg_handler(async_msg_callback_t callback_f) = 0;
341 
349  virtual void set_policy(const std::string& name, const uhd::device_addr_t& args) = 0;
350 
356  virtual uint16_t get_src_epid() const = 0;
357 
363  virtual uint16_t get_port_num() const = 0;
364 
377  virtual void define_custom_register_space(const uint32_t start_addr,
378  const uint32_t length,
379  std::function<void(uint32_t, uint32_t)> poke_fn,
380  std::function<uint32_t(uint32_t)> peek_fn) = 0;
381 
382  virtual register_iface_stats get_stats() const = 0;
383 
384 }; // class register_iface
385 
386 }} /* namespace uhd::rfnoc */
Definition: device_addr.hpp:39
Definition: register_iface.hpp:77
virtual void register_async_msg_handler(async_msg_callback_t callback_f)=0
virtual void block_poke32(uint32_t first_addr, const std::vector< uint32_t > data, uhd::time_spec_t time=uhd::time_spec_t::ASAP, bool ack=false)=0
uint64_t peek64(uint32_t addr, time_spec_t time=uhd::time_spec_t::ASAP)
Definition: register_iface.hpp:226
std::shared_ptr< register_iface > sptr
Definition: register_iface.hpp:79
virtual register_iface_stats get_stats() const =0
std::function< void(uint32_t addr, const std::vector< uint32_t > &data, boost::optional< uint64_t >)> async_msg_callback_t
Definition: register_iface.hpp:105
virtual void poll32(uint32_t addr, uint32_t data, uint32_t mask, time_spec_t timeout, time_spec_t time=uhd::time_spec_t::ASAP, bool ack=false)=0
virtual void multi_poke32(const std::vector< uint32_t > addrs, const std::vector< uint32_t > data, uhd::time_spec_t time=uhd::time_spec_t::ASAP, bool ack=false)=0
virtual void register_async_msg_validator(async_msg_validator_t callback_f)=0
std::function< bool(uint32_t addr, const std::vector< uint32_t > &data)> async_msg_validator_t
Definition: register_iface.hpp:92
virtual uint16_t get_port_num() const =0
virtual std::vector< uint32_t > block_peek32(uint32_t first_addr, size_t length, time_spec_t time=uhd::time_spec_t::ASAP)=0
virtual ~register_iface()=default
virtual void set_policy(const std::string &name, const uhd::device_addr_t &args)=0
virtual uint32_t peek32(uint32_t addr, time_spec_t time=uhd::time_spec_t::ASAP)=0
virtual uint16_t get_src_epid() const =0
virtual void define_custom_register_space(const uint32_t start_addr, const uint32_t length, std::function< void(uint32_t, uint32_t)> poke_fn, std::function< uint32_t(uint32_t)> peek_fn)=0
void poke64(uint32_t addr, uint64_t data, time_spec_t time=uhd::time_spec_t::ASAP, bool ack=false)
Definition: register_iface.hpp:141
virtual void sleep(time_spec_t duration, bool ack=false)=0
virtual void poke32(uint32_t addr, uint32_t data, uhd::time_spec_t time=uhd::time_spec_t::ASAP, bool ack=false)=0
Definition: time_spec.hpp:31
static constexpr double ASAP
Definition: time_spec.hpp:34
#define UHD_API
Definition: include/uhd/config.h:87
UHD_INLINE data_t mask(const soft_reg_field_t field)
Definition: soft_register.hpp:86
Definition: build_info.hpp:12
Definition: register_iface.hpp:23
std::function< void(uint32_t, uint32_t)> poke_fn
Definition: register_iface.hpp:25
uint32_t end_addr
Definition: register_iface.hpp:24
std::function< uint32_t(uint32_t)> peek_fn
Definition: register_iface.hpp:26
Definition: register_iface.hpp:48
uint64_t ctrl_dropped
Number of control packets dropped (or ACKs not received)
Definition: register_iface.hpp:58
uint64_t ctrl_out_of_sequence
Number of out-of-sequence control packets.
Definition: register_iface.hpp:60
uint64_t ack_packets_received
Number of ACK packets received.
Definition: register_iface.hpp:52
uint64_t async_packets_received
Number of async packets received.
Definition: register_iface.hpp:54
ssize_t buffer_fullness
The fullness of the buffer in the FPGA, as calculated by the software.
Definition: register_iface.hpp:62
std::string UHD_API to_string() const
uint64_t ack_packets_sent
Number of ACK packets sent.
Definition: register_iface.hpp:56
uint64_t ctrl_packets_sent
Number of control packets sent.
Definition: register_iface.hpp:50