From aeaf0e75c0744d63752ab7177869237489f0486b Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Sun, 15 Jan 2023 19:45:44 +0000 Subject: [PATCH] Speed up enumeration / opening USRP B210 by using hardcoded values. --- devices/usrp/deviceusrp.cpp | 40 +++++++++++++++++++++++--------- devices/usrp/deviceusrpparam.cpp | 6 +++++ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/devices/usrp/deviceusrp.cpp b/devices/usrp/deviceusrp.cpp index fd43e2894..899d4c9ff 100644 --- a/devices/usrp/deviceusrp.cpp +++ b/devices/usrp/deviceusrp.cpp @@ -47,22 +47,40 @@ void DeviceUSRP::enumOriginDevices(const QString& hardwareId, PluginInterface::O QString id = QString::fromStdString(dev_addrs[i].to_string()); QString name = QString::fromStdString(dev_addrs[i].get("name", "N/A")); QString serial = QString::fromStdString(dev_addrs[i].get("serial", "N/A")); + QString product = QString::fromStdString(dev_addrs[i].get("product", "N/A")); QString displayedName(QString("%1[%2:$1] %3").arg(name).arg(i).arg(serial)); qDebug() << "DeviceUSRP::enumOriginDevices: found USRP device " << displayedName; - DeviceUSRPParams usrpParams; - usrpParams.open(id, true); - usrpParams.close(); + // Opening some devices can be a little slow, so use hardcoded number of channels, + // for known devices + static const QMap channelMap{{"B200", 1}, {"B205", 1}, {"B210", 2}}; + if (channelMap.contains(product)) + { + originDevices.append(PluginInterface::OriginDevice( + displayedName, + hardwareId, + id, + (int)i, + channelMap[product], + channelMap[product] + )); + } + else + { + DeviceUSRPParams usrpParams; + usrpParams.open(id, true); + usrpParams.close(); - originDevices.append(PluginInterface::OriginDevice( - displayedName, - hardwareId, - id, - (int)i, - usrpParams.m_nbRxChannels, - usrpParams.m_nbTxChannels - )); + originDevices.append(PluginInterface::OriginDevice( + displayedName, + hardwareId, + id, + (int)i, + usrpParams.m_nbRxChannels, + usrpParams.m_nbTxChannels + )); + } } } catch (const std::exception& e) diff --git a/devices/usrp/deviceusrpparam.cpp b/devices/usrp/deviceusrpparam.cpp index c0793e680..daec79e6e 100644 --- a/devices/usrp/deviceusrpparam.cpp +++ b/devices/usrp/deviceusrpparam.cpp @@ -71,6 +71,12 @@ bool DeviceUSRPParams::open(const QString &deviceStr, bool channelNumOnly) m_srRangeTx = m_dev->get_tx_rates(); } } + else if (deviceStr.contains("product=B210")) + { + // Auto-calculation below can be slow, so use hardcoded values for B210 + m_srRangeRx = uhd::meta_range_t(1e5, 61.444e6); + m_srRangeTx = uhd::meta_range_t(1e5, 61.444e6); + } else { // Find max and min sample rate, for max and min master clock rates