From 782e20505f0df15d644763738390f7fa11bc464d Mon Sep 17 00:00:00 2001 From: Ashish Chaudhari Date: Sat, 18 Jul 2015 22:44:39 -0700 Subject: x300: Made all X300 revision related errors fatal - product code, revision and revision compat errors are now exceptions - Added recover_mb_eeprom arg to recover from a corrupt/uninitialized EEPROM --- host/lib/usrp/x300/x300_impl.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp index 3cfb18a38..5d0d5ee16 100644 --- a/host/lib/usrp/x300/x300_impl.cpp +++ b/host/lib/usrp/x300/x300_impl.cpp @@ -558,6 +558,13 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr) .set(mb_eeprom) .subscribe(boost::bind(&x300_impl::set_mb_eeprom, this, mb.zpu_i2c, _1)); + bool recover_mb_eeprom = dev_addr.has_key("recover_mb_eeprom"); + if (recover_mb_eeprom) { + UHD_MSG(warning) << "UHD is operating in EEPROM Recovery Mode which disables hardware version " + "checks. Operating in this mode may cause hardware damage and unstable " + "radio performance!"<< std::endl; + } + //////////////////////////////////////////////////////////////////// // parse the product number //////////////////////////////////////////////////////////////////// @@ -570,9 +577,10 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr) product_name = "X310"; break; default: - throw uhd::runtime_error("Unrecognized product type. \n" - "Either the software does not support this device or it is too old for the hardware.\n" - "Please update your UHD/NI-USRP version and retry."); + if (not recover_mb_eeprom) + throw uhd::runtime_error("Unrecognized product type.\n" + "Either the software does not support this device in which case please update UHD/NI-USRP to the latest version and retry OR\n" + "The product code in the EEPROM is corrupt and may require reprogramming."); } _tree->create(mb_path / "name").set(product_name); _tree->create(mb_path / "codename").set("Yetti"); @@ -611,15 +619,12 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr) try { mb.hw_rev = boost::lexical_cast(mb_eeprom["revision"]); } catch(...) { - UHD_MSG(warning) << "Revision in EEPROM is invalid! Please reprogram your EEPROM." << std::endl; + if (not recover_mb_eeprom) + throw uhd::runtime_error("Revision in EEPROM is invalid! Please reprogram your EEPROM."); } } else { - UHD_MSG(warning) << "No revision detected MB EEPROM must be reprogrammed!" << std::endl; - } - - if(mb.hw_rev == 0) { - UHD_MSG(warning) << "Defaulting to X300 RevD Clock Settings. This will result in non-optimal lock times." << std::endl; - mb.hw_rev = X300_REV("D"); + if (not recover_mb_eeprom) + throw uhd::runtime_error("No revision detected MB EEPROM must be reprogrammed!"); } if (mb_eeprom.has_key("revision_compat") and not mb_eeprom["revision_compat"].empty()) { @@ -627,7 +632,8 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr) try { hw_rev_compat = boost::lexical_cast(mb_eeprom["revision_compat"]); } catch(...) { - UHD_MSG(warning) << "Revision compat in EEPROM is invalid! Please reprogram your EEPROM." << std::endl; + if (not recover_mb_eeprom) + throw uhd::runtime_error("Revision compat in EEPROM is invalid! Please reprogram your EEPROM."); } if (hw_rev_compat > X300_REVISION_COMPAT) { @@ -636,11 +642,12 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr) % mb.hw_rev)); } else if (hw_rev_compat < X300_REVISION_COMPAT) { throw uhd::runtime_error(str(boost::format( - "Hardware is too new for this software. Please downgrade to a UHD/NI-USRP that supports hardware revision %d.") + "Software is too new for this hardware. Please downgrade to a UHD/NI-USRP that supports hardware revision %d.") % mb.hw_rev)); } } else if (mb.hw_rev >= 7) { //Revision compat was added with revision 7 - UHD_MSG(warning) << "No revision compat detected MB EEPROM must be reprogrammed!" << std::endl; + if (not recover_mb_eeprom) + throw uhd::runtime_error("No revision compat detected MB EEPROM must be reprogrammed!"); } //////////////////////////////////////////////////////////////////// -- cgit v1.2.3