USRP Hardware Driver and USRP Manual  Version: 4.1.0.4-3
UHD and USRP Manual
rfnoc_graph.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 
9 #include <uhd/config.hpp>
10 #include <uhd/rfnoc/block_id.hpp>
11 #include <uhd/rfnoc/graph_edge.hpp>
13 #include <uhd/stream.hpp>
16 #include <uhd/types/time_spec.hpp>
18 #include <boost/units/detail/utility.hpp> // for demangle
19 #include <memory>
20 #include <vector>
21 
22 namespace uhd { namespace rfnoc {
23 
24 class mb_controller;
25 
32 class UHD_API rfnoc_graph : public uhd::noncopyable, public std::enable_shared_from_this<rfnoc_graph>
33 {
34 public:
38  using sptr = std::shared_ptr<rfnoc_graph>;
39 
40  virtual ~rfnoc_graph() {}
41 
42  /******************************************
43  * Factory
44  ******************************************/
53  static sptr make(const device_addr_t& dev_addr);
54 
55  /******************************************
56  * Block Discovery/Retrieval
57  ******************************************/
77  virtual std::vector<block_id_t> find_blocks(
78  const std::string& block_id_hint) const = 0;
79 
82  template <typename T>
83  std::vector<block_id_t> find_blocks(const std::string& block_id_hint) const
84  {
85  std::vector<block_id_t> all_block_ids = find_blocks(block_id_hint);
86  std::vector<block_id_t> filt_block_ids;
87  for (size_t i = 0; i < all_block_ids.size(); i++) {
88  if (has_block<T>(all_block_ids[i])) {
89  filt_block_ids.push_back(all_block_ids[i]);
90  }
91  }
92  return filt_block_ids;
93  }
94 
101  virtual bool has_block(const block_id_t& block_id) const = 0;
102 
108  template <typename T>
109  bool has_block(const block_id_t& block_id) const
110  {
111  return has_block(block_id)
112  && bool(std::dynamic_pointer_cast<T>(get_block(block_id)));
113  }
114 
123  virtual noc_block_base::sptr get_block(const block_id_t& block_id) const = 0;
124 
139  template <typename T>
140  std::shared_ptr<T> get_block(const block_id_t& block_id) const
141  {
142  std::shared_ptr<T> blk = std::dynamic_pointer_cast<T>(get_block(block_id));
143  if (blk) {
144  return blk;
145  } else {
146  throw uhd::lookup_error(
147  std::string("This device does not have a block of type ")
148  + boost::units::detail::demangle(typeid(T).name())
149  + " with ID: " + block_id.to_string());
150  }
151  }
152 
153  /**************************************************************************
154  * Connection APIs
155  *************************************************************************/
164  virtual bool is_connectable(const block_id_t& src_blk,
165  size_t src_port,
166  const block_id_t& dst_blk,
167  size_t dst_port) = 0;
168 
184  virtual void connect(const block_id_t& src_blk,
185  size_t src_port,
186  const block_id_t& dst_blk,
187  size_t dst_port,
188  bool skip_property_propagation = false) = 0;
189 
201  virtual void connect(uhd::tx_streamer::sptr streamer,
202  size_t strm_port,
203  const block_id_t& dst_blk,
204  size_t dst_port,
205  uhd::transport::adapter_id_t adapter_id = uhd::transport::NULL_ADAPTER_ID) = 0;
206 
218  virtual void connect(const block_id_t& src_blk,
219  size_t src_port,
220  uhd::rx_streamer::sptr streamer,
221  size_t strm_port,
222  uhd::transport::adapter_id_t adapter_id = uhd::transport::NULL_ADAPTER_ID) = 0;
223 
234  virtual void disconnect(const block_id_t& src_blk,
235  size_t src_port,
236  const block_id_t& dst_blk,
237  size_t dst_port) = 0;
238 
248  virtual void disconnect(const std::string& streamer_id) = 0;
249 
260  virtual void disconnect(const std::string& streamer_id, size_t port) = 0;
261 
271  virtual std::vector<uhd::transport::adapter_id_t> enumerate_adapters_from_src(
272  const block_id_t& src_blk, size_t src_port) = 0;
273 
283  virtual std::vector<uhd::transport::adapter_id_t> enumerate_adapters_to_dst(
284  const block_id_t& dst_blk, size_t dst_port) = 0;
285 
290  virtual std::vector<graph_edge_t> enumerate_static_connections() const = 0;
291 
296  virtual std::vector<graph_edge_t> enumerate_active_connections() = 0;
297 
305  virtual void commit() = 0;
306 
312  virtual void release() = 0;
313 
314  /******************************************
315  * Streaming
316  ******************************************/
317 
329  const size_t num_ports, const stream_args_t& args) = 0;
330 
342  const size_t num_ports, const stream_args_t& args) = 0;
343 
344  /**************************************************************************
345  * Hardware Control
346  *************************************************************************/
347  virtual size_t get_num_mboards() const = 0;
349  //
350  // See also uhd::rfnoc::mb_controller
351  virtual std::shared_ptr<mb_controller> get_mb_controller(
352  const size_t mb_index = 0) = 0;
353 
374  virtual bool synchronize_devices(
375  const uhd::time_spec_t& time_spec, const bool quiet) = 0;
376 
378  virtual uhd::property_tree::sptr get_tree(void) const = 0;
379 }; // class rfnoc_graph
380 
381 }}; // namespace uhd::rfnoc
Definition: device_addr.hpp:38
std::shared_ptr< property_tree > sptr
Definition: property_tree.hpp:216
Definition: block_id.hpp:40
std::string to_string() const
Return a string like this: "0/FFT#1" (includes all components, if set)
std::shared_ptr< noc_block_base > sptr
Definition: noc_block_base.hpp:47
Definition: rfnoc_graph.hpp:33
virtual void commit()=0
virtual void disconnect(const std::string &streamer_id, size_t port)=0
virtual size_t get_num_mboards() const =0
bool has_block(const block_id_t &block_id) const
Definition: rfnoc_graph.hpp:109
virtual ~rfnoc_graph()
Definition: rfnoc_graph.hpp:40
virtual void release()=0
virtual void connect(uhd::tx_streamer::sptr streamer, size_t strm_port, const block_id_t &dst_blk, size_t dst_port, uhd::transport::adapter_id_t adapter_id=uhd::transport::NULL_ADAPTER_ID)=0
virtual bool is_connectable(const block_id_t &src_blk, size_t src_port, const block_id_t &dst_blk, size_t dst_port)=0
std::vector< block_id_t > find_blocks(const std::string &block_id_hint) const
Definition: rfnoc_graph.hpp:83
virtual std::vector< block_id_t > find_blocks(const std::string &block_id_hint) const =0
virtual std::vector< uhd::transport::adapter_id_t > enumerate_adapters_from_src(const block_id_t &src_blk, size_t src_port)=0
virtual tx_streamer::sptr create_tx_streamer(const size_t num_ports, const stream_args_t &args)=0
virtual std::vector< graph_edge_t > enumerate_active_connections()=0
virtual void connect(const block_id_t &src_blk, size_t src_port, uhd::rx_streamer::sptr streamer, size_t strm_port, uhd::transport::adapter_id_t adapter_id=uhd::transport::NULL_ADAPTER_ID)=0
virtual bool has_block(const block_id_t &block_id) const =0
Checks if a specific NoC block exists on the device.
virtual rx_streamer::sptr create_rx_streamer(const size_t num_ports, const stream_args_t &args)=0
virtual std::shared_ptr< mb_controller > get_mb_controller(const size_t mb_index=0)=0
Return a reference to a motherboard controller.
virtual void disconnect(const block_id_t &src_blk, size_t src_port, const block_id_t &dst_blk, size_t dst_port)=0
virtual std::vector< uhd::transport::adapter_id_t > enumerate_adapters_to_dst(const block_id_t &dst_blk, size_t dst_port)=0
virtual noc_block_base::sptr get_block(const block_id_t &block_id) const =0
Returns a block controller class for an NoC block.
std::shared_ptr< T > get_block(const block_id_t &block_id) const
Definition: rfnoc_graph.hpp:140
virtual void connect(const block_id_t &src_blk, size_t src_port, const block_id_t &dst_blk, size_t dst_port, bool skip_property_propagation=false)=0
virtual uhd::property_tree::sptr get_tree(void) const =0
Return a reference to the property tree.
virtual std::vector< graph_edge_t > enumerate_static_connections() const =0
static sptr make(const device_addr_t &dev_addr)
virtual void disconnect(const std::string &streamer_id)=0
virtual bool synchronize_devices(const uhd::time_spec_t &time_spec, const bool quiet)=0
std::shared_ptr< rfnoc_graph > sptr
Definition: rfnoc_graph.hpp:38
std::shared_ptr< rx_streamer > sptr
Definition: stream.hpp:172
Definition: time_spec.hpp:31
std::shared_ptr< tx_streamer > sptr
Definition: stream.hpp:250
#define UHD_API
Definition: config.h:70
size_t adapter_id_t
Host transport adapter ID.
Definition: adapter_id.hpp:14
Definition: build_info.hpp:12
boost::noncopyable noncopyable
Definition: noncopyable.hpp:45
Definition: exception.hpp:60
Definition: stream.hpp:59