aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/include/uhd/rfnoc_graph.hpp12
-rw-r--r--host/lib/rfnoc/block_container.cpp5
-rw-r--r--host/lib/usrp/multi_usrp_rfnoc.cpp37
3 files changed, 16 insertions, 38 deletions
diff --git a/host/include/uhd/rfnoc_graph.hpp b/host/include/uhd/rfnoc_graph.hpp
index 34091ddbd..c62eaf558 100644
--- a/host/include/uhd/rfnoc_graph.hpp
+++ b/host/include/uhd/rfnoc_graph.hpp
@@ -57,17 +57,23 @@ public:
* Block Discovery/Retrieval
******************************************/
/*! Returns the block ids of all blocks that match the specified hint
+ *
* Uses block_id_t::match() internally.
* If no matching block is found, it returns an empty vector.
*
- * To access specialized block controller classes (i.e. derived from noc_block_base),
- * use the templated version of this function, e.g.
+ * The returned vector is sorted lexicographically.
+ *
+ * To access specialized block controller classes (i.e. derived from
+ * uhd::rfnoc::noc_block_base), use the templated version of this function:
* \code{.cpp}
* // Assume DEV is an rfnoc_graph::sptr
- * auto null_blocks = DEV->find_blocks<null_noc_block>("NullSrcSink");
+ * auto null_blocks = DEV->find_blocks<null_block_control>("NullSrcSink");
* if (null_blocks.empty()) { cout << "No null blocks found!" << endl; }
* \endcode
+ *
* \note this access is not thread safe if performed during block enumeration
+ *
+ * \returns A sorted list of block IDs that match the hint
*/
virtual std::vector<block_id_t> find_blocks(
const std::string& block_id_hint) const = 0;
diff --git a/host/lib/rfnoc/block_container.cpp b/host/lib/rfnoc/block_container.cpp
index e7fd396ba..5b68134ab 100644
--- a/host/lib/rfnoc/block_container.cpp
+++ b/host/lib/rfnoc/block_container.cpp
@@ -48,6 +48,11 @@ std::vector<block_id_t> block_container_t::find_blocks(
block_ids.push_back(id);
}
}
+ std::sort(block_ids.begin(),
+ block_ids.end(),
+ [](const uhd::rfnoc::block_id_t& i, const uhd::rfnoc::block_id_t& j) {
+ return i < j;
+ });
return block_ids;
}
diff --git a/host/lib/usrp/multi_usrp_rfnoc.cpp b/host/lib/usrp/multi_usrp_rfnoc.cpp
index 5242da965..99c07dc8c 100644
--- a/host/lib/usrp/multi_usrp_rfnoc.cpp
+++ b/host/lib/usrp/multi_usrp_rfnoc.cpp
@@ -96,20 +96,9 @@ public:
multi_usrp_rfnoc(rfnoc_graph::sptr graph, const device_addr_t& addr)
: _args(addr), _graph(graph), _tree(_graph->get_tree())
{
- // Discover all of the radios on our devices and create a mapping between radio
- // chains and channel numbers
+ // Discover all of the radios on our devices and create a mapping between
+ // radio chains and channel numbers. The result is sorted.
auto radio_blk_ids = _graph->find_blocks("Radio");
- // find_blocks doesn't sort, so we need to
- std::sort(radio_blk_ids.begin(),
- radio_blk_ids.end(),
- [](uhd::rfnoc::block_id_t i, uhd::rfnoc::block_id_t j) -> bool {
- if (i.get_device_no() != j.get_device_no()) {
- return i.get_device_no() < j.get_device_no();
- } else {
- return i.get_block_count() < j.get_block_count();
- }
- });
-
// If we don't find any radios, we don't have a multi_usrp object
if (radio_blk_ids.empty()) {
throw uhd::runtime_error(
@@ -895,17 +884,6 @@ public:
// Discover all of the radios on our devices and create a mapping between radio
// chains and channel numbers
auto radio_blk_ids = _graph->find_blocks(std::to_string(mboard) + "/Radio");
- // find_blocks doesn't sort, so we need to
- std::sort(radio_blk_ids.begin(),
- radio_blk_ids.end(),
- [](uhd::rfnoc::block_id_t i, uhd::rfnoc::block_id_t j) -> bool {
- if (i.get_device_no() != j.get_device_no()) {
- return i.get_device_no() < j.get_device_no();
- } else {
- return i.get_block_count() < j.get_block_count();
- }
- });
-
// If we don't find any radios, we don't have a multi_usrp object
if (radio_blk_ids.empty()) {
throw uhd::runtime_error(
@@ -1515,17 +1493,6 @@ public:
// Discover all of the radios on our devices and create a mapping between radio
// chains and channel numbers
auto radio_blk_ids = _graph->find_blocks(std::to_string(mboard) + "/Radio");
- // find_blocks doesn't sort, so we need to
- std::sort(radio_blk_ids.begin(),
- radio_blk_ids.end(),
- [](uhd::rfnoc::block_id_t i, uhd::rfnoc::block_id_t j) -> bool {
- if (i.get_device_no() != j.get_device_no()) {
- return i.get_device_no() < j.get_device_no();
- } else {
- return i.get_block_count() < j.get_block_count();
- }
- });
-
// If we don't find any radios, we don't have a multi_usrp object
if (radio_blk_ids.empty()) {
throw uhd::runtime_error(