USRP Hardware Driver and USRP Manual Version: 3.15.0.0-MacPorts-Release
UHD and USRP Manual
 
Loading...
Searching...
No Matches
device3.hpp
Go to the documentation of this file.
1//
2// Copyright 2014-2016 Ettus Research LLC
3// Copyright 2018 Ettus Research, a National Instruments Company
4// Copyright 2019 Ettus Research, a National Instruments Brand
5//
6// SPDX-License-Identifier: GPL-3.0-or-later
7//
8
9#ifndef INCLUDED_UHD_DEVICE3_HPP
10#define INCLUDED_UHD_DEVICE3_HPP
11
12#include <uhd/device.hpp>
14#include <uhd/rfnoc/graph.hpp>
15#include <boost/core/demangle.hpp>
16#include <boost/thread/mutex.hpp>
17#include <vector>
18
19namespace uhd {
20
29{
30public:
31 typedef boost::shared_ptr<device3> sptr;
32
34 static sptr make(const device_addr_t& hint, const size_t which = 0);
35
36 virtual rfnoc::graph::sptr create_graph(const std::string& name = "") = 0;
37
42 void clear();
43
50 bool has_block(const rfnoc::block_id_t& block_id) const;
51
57 template <typename T> bool has_block(const rfnoc::block_id_t& block_id) const
58 {
59 if (has_block(block_id)) {
60 return bool(boost::dynamic_pointer_cast<T>(get_block_ctrl(block_id)));
61 } else {
62 return false;
63 }
64 }
65
75
91 template <typename T>
92 boost::shared_ptr<T> get_block_ctrl(const rfnoc::block_id_t& block_id) const
93 {
94 boost::shared_ptr<T> blk =
95 boost::dynamic_pointer_cast<T>(get_block_ctrl(block_id));
96 if (blk) {
97 return blk;
98 } else {
99 throw uhd::lookup_error(str(
100 boost::format("This device does not have a block of type %s with ID: %s")
101 % boost::core::demangle(typeid(T).name()) % block_id.to_string()));
102 }
103 }
104
128 std::vector<rfnoc::block_id_t> find_blocks(const std::string& block_id_hint) const;
129
132 template <typename T>
133 std::vector<rfnoc::block_id_t> find_blocks(const std::string& block_id_hint) const
134 {
135 std::vector<rfnoc::block_id_t> all_block_ids = find_blocks(block_id_hint);
136 std::vector<rfnoc::block_id_t> filt_block_ids;
137 for (size_t i = 0; i < all_block_ids.size(); i++) {
138 if (has_block<T>(all_block_ids[i])) {
139 filt_block_ids.push_back(all_block_ids[i]);
140 }
141 }
142 return filt_block_ids;
143 }
144
145protected:
147 // It is the responsibility of the deriving class to make
148 // sure this gets correctly populated.
149 std::vector<rfnoc::block_ctrl_base::sptr> _rfnoc_block_ctrl;
151 boost::mutex _block_ctrl_mutex;
152};
153
154} // namespace uhd
155
156#endif /* INCLUDED_UHD_DEVICE3_HPP */
Extends uhd::device for third-generation USRP devices.
Definition device3.hpp:29
boost::mutex _block_ctrl_mutex
Mutex to protect access to members.
Definition device3.hpp:151
std::vector< rfnoc::block_ctrl_base::sptr > _rfnoc_block_ctrl
List of all RFNoC blocks available on this device.
Definition device3.hpp:149
boost::shared_ptr< device3 > sptr
Definition device3.hpp:31
virtual rfnoc::graph::sptr create_graph(const std::string &name="")=0
rfnoc::block_ctrl_base::sptr get_block_ctrl(const rfnoc::block_id_t &block_id) const
Returns a block controller class for an RFNoC block.
std::vector< rfnoc::block_id_t > find_blocks(const std::string &block_id_hint) const
static sptr make(const device_addr_t &hint, const size_t which=0)
Same as uhd::device::make(), but will fail if not actually a device3.
std::vector< rfnoc::block_id_t > find_blocks(const std::string &block_id_hint) const
Definition device3.hpp:133
boost::shared_ptr< T > get_block_ctrl(const rfnoc::block_id_t &block_id) const
Definition device3.hpp:92
bool has_block(const rfnoc::block_id_t &block_id) const
Checks if an RFNoC block exists on the device.
bool has_block(const rfnoc::block_id_t &block_id) const
Definition device3.hpp:57
Definition device_addr.hpp:39
Definition device.hpp:29
boost::shared_ptr< block_ctrl_base > sptr
Definition block_ctrl_base.hpp:93
Definition block_id.hpp:40
std::string to_string() const
Return a string like this: "0/FFT_1" (includes all components, if set)
boost::shared_ptr< uhd::rfnoc::graph > sptr
Definition graph.hpp:20
#define UHD_API
Definition config.h:68
Definition build_info.hpp:13
Definition exception.hpp:61