From 3b093bb13ba04f03f1f078b986524eacb7d4a3f1 Mon Sep 17 00:00:00 2001 From: Tom Tsou Date: Tue, 3 May 2016 19:04:15 -0700 Subject: uhd: Set minimum UHD version requirement for E3XX Create runtime version check for minimum supported UHD driver when using USRP E3XX devices. The minimum version, 3.9.0, matches supported version on current E3XX release images. Signed-off-by: Tom Tsou --- Transceiver52M/UHDDevice.cpp | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp index 0c57222..1448da0 100644 --- a/Transceiver52M/UHDDevice.cpp +++ b/Transceiver52M/UHDDevice.cpp @@ -131,6 +131,7 @@ static struct uhd_dev_offset special_offsets[] = { { UMTRX, 4, 1, 5.2103e-5, "UmTRX diversity, 4 SPS" }, }; + /* * Select sample rate based on device type and requested samples-per-symbol. * The base rate is either GSM symbol rate, 270.833 kHz, or the minimum @@ -644,7 +645,7 @@ bool uhd_device::parse_dev_type() { std::string mboard_str, dev_str; uhd::property_tree::sptr prop_tree; - size_t usrp1_str, usrp2_str, e100_str, e110_str, e310_str, + size_t usrp1_str, usrp2_str, e100_str, e110_str, e310_str, e3xx_str, b100_str, b200_str, b210_str, x300_str, x310_str, umtrx_str; prop_tree = usrp_dev->get_device()->get_tree(); @@ -658,7 +659,8 @@ bool uhd_device::parse_dev_type() b210_str = mboard_str.find("B210"); e100_str = mboard_str.find("E100"); e110_str = mboard_str.find("E110"); - e310_str = mboard_str.find("E3XX"); + e310_str = mboard_str.find("E310"); + e3xx_str = mboard_str.find("E3XX"); x300_str = mboard_str.find("X300"); x310_str = mboard_str.find("X310"); umtrx_str = dev_str.find("UmTRX"); @@ -688,7 +690,8 @@ bool uhd_device::parse_dev_type() } else if (usrp2_str != std::string::npos) { tx_window = TX_WINDOW_FIXED; dev_type = USRP2; - } else if (e310_str != std::string::npos) { + } else if ((e310_str != std::string::npos) || + (e3xx_str != std::string::npos)) { tx_window = TX_WINDOW_FIXED; dev_type = E3XX; } else if (x300_str != std::string::npos) { @@ -717,6 +720,26 @@ bool uhd_device::parse_dev_type() return true; } +/* + * Check for UHD version > 3.9.0 for E3XX support + */ +static bool uhd_e3xx_version_chk() +{ + std::string ver = uhd::get_version_string(); + std::string major_str(ver.begin(), ver.begin() + 3); + std::string minor_str(ver.begin() + 4, ver.begin() + 7); + + int major_val = atoi(major_str.c_str()); + int minor_val = atoi(minor_str.c_str()); + + if (major_val < 3) + return false; + if (minor_val < 9) + return false; + + return true; +} + int uhd_device::open(const std::string &args, bool extref, bool swap_channels) { // Find UHD devices @@ -740,6 +763,11 @@ int uhd_device::open(const std::string &args, bool extref, bool swap_channels) if (!parse_dev_type()) return -1; + if ((dev_type == E3XX) && !uhd_e3xx_version_chk()) { + LOG(ALERT) << "E3XX requires UHD 003.009.000 or greater"; + return -1; + } + // Verify and set channels if ((dev_type == B210) && (chans == 2)) { } else if ((dev_type == UMTRX) && (chans == 2)) { -- cgit v1.2.3