7 #ifndef INCLUDED_UHD_DEVICE3_HPP 8 #define INCLUDED_UHD_DEVICE3_HPP 11 #include <uhd/rfnoc/graph.hpp> 12 #include <uhd/rfnoc/block_ctrl_base.hpp> 13 #include <boost/units/detail/utility.hpp> 14 #include <boost/thread/mutex.hpp> 29 typedef boost::shared_ptr<device3>
sptr;
32 static sptr make(
const device_addr_t &hint,
const size_t which = 0);
34 virtual rfnoc::graph::sptr create_graph(
const std::string &name=
"") = 0;
48 bool has_block(
const rfnoc::block_id_t &block_id)
const;
56 bool has_block(
const rfnoc::block_id_t &block_id)
const 58 if (has_block(block_id)) {
59 return bool(boost::dynamic_pointer_cast<T>(get_block_ctrl(block_id)));
73 rfnoc::block_ctrl_base::sptr get_block_ctrl(
const rfnoc::block_id_t &block_id)
const;
92 boost::shared_ptr<T> blk = boost::dynamic_pointer_cast<T>(get_block_ctrl(block_id));
96 throw uhd::lookup_error(str(boost::format(
"This device does not have a block of type %s with ID: %s")
97 % boost::units::detail::demangle(
typeid(T).name())
98 % block_id.to_string()));
114 std::vector<rfnoc::block_id_t> find_blocks(
const std::string &block_id_hint)
const;
118 template <
typename T>
119 std::vector<rfnoc::block_id_t>
find_blocks(
const std::string &block_id_hint)
const 121 std::vector<rfnoc::block_id_t> all_block_ids = find_blocks(block_id_hint);
122 std::vector<rfnoc::block_id_t> filt_block_ids;
123 for (
size_t i = 0; i < all_block_ids.size(); i++) {
124 if (has_block<T>(all_block_ids[i])) {
125 filt_block_ids.push_back(all_block_ids[i]);
128 return filt_block_ids;
Definition: exception.hpp:48
std::vector< rfnoc::block_id_t > find_blocks(const std::string &block_id_hint) const
Definition: device3.hpp:119
Extends uhd::device for third-generation USRP devices.
Definition: device3.hpp:26
Definition: build_info.hpp:14
boost::mutex _block_ctrl_mutex
Mutex to protect access to members.
Definition: device3.hpp:137
std::vector< rfnoc::block_ctrl_base::sptr > _rfnoc_block_ctrl
List of all RFNoC blocks available on this device.
Definition: device3.hpp:135
#define UHD_API
Definition: config.h:62
bool has_block(const rfnoc::block_id_t &block_id) const
Definition: device3.hpp:56
boost::shared_ptr< T > get_block_ctrl(const rfnoc::block_id_t &block_id) const
Definition: device3.hpp:90
Definition: device.hpp:27
boost::shared_ptr< device3 > sptr
Definition: device3.hpp:29
Definition: device_addr.hpp:36