diff options
Diffstat (limited to 'host')
-rw-r--r-- | host/utils/usrp_burn_db_eeprom.cpp | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/host/utils/usrp_burn_db_eeprom.cpp b/host/utils/usrp_burn_db_eeprom.cpp index cfb80fd42..c55128d74 100644 --- a/host/utils/usrp_burn_db_eeprom.cpp +++ b/host/utils/usrp_burn_db_eeprom.cpp @@ -6,10 +6,10 @@ // -#include <uhd/device.hpp> #include <uhd/property_tree.hpp> #include <uhd/types/dict.hpp> #include <uhd/usrp/dboard_eeprom.hpp> +#include <uhd/usrp/multi_usrp.hpp> #include <uhd/utils/assert_has.hpp> #include <uhd/utils/safe_main.hpp> #include <boost/algorithm/string.hpp> @@ -22,6 +22,31 @@ using namespace uhd; using namespace uhd::usrp; namespace po = boost::program_options; + +uhd::fs_path get_radio_path(uhd::property_tree::sptr tree, std::string& slot) +{ + // RFNoC devices: + if (tree->exists("/blocks")) { + if (slot.empty()) { + slot = "0"; + } + const uhd::fs_path radio_path = + uhd::fs_path("/blocks/0/Radio#" + slot) / "dboard"; + if (!tree->exists(radio_path)) { + throw uhd::assertion_error("Invalid slot index: " + slot); + } + return radio_path; + } + // Other devices: + const uhd::fs_path db_root = "/mboards/0/dboards"; + std::vector<std::string> dboard_names = tree->list(db_root); + if (dboard_names.size() == 1 and slot.empty()) { + slot = dboard_names.front(); + } + uhd::assert_has(dboard_names, slot, "dboard slot name"); + return db_root / slot; +} + int UHD_SAFE_MAIN(int argc, char* argv[]) { // command line variables @@ -32,7 +57,7 @@ int UHD_SAFE_MAIN(int argc, char* argv[]) desc.add_options() ("help", "help message") ("args", po::value<std::string>(&args)->default_value(""), "device address args [default = \"\"]") - ("slot", po::value<std::string>(&slot)->default_value(""), "dboard slot name [default is blank for automatic]") + ("slot", po::value<std::string>(&slot)->default_value(""), "dboard slot name/index [default is blank for automatic]") ("unit", po::value<std::string>(&unit)->default_value(""), "which unit [RX, TX, or GDB]") ("id", po::value<std::string>(), "dboard id to burn, omit for readback") ("ser", po::value<std::string>(), "serial to burn, omit for readback") @@ -48,25 +73,23 @@ int UHD_SAFE_MAIN(int argc, char* argv[]) if (vm.count("help")) { std::cout << boost::format("USRP Burn Daughterboard EEPROM %s") % desc << std::endl; - std::cout << boost::format("Omit the ID argument to perform readback,\n" - "Or specify a new ID to burn into the EEPROM.\n") + std::cout << "Omit the ID argument to perform readback,\n" + "Or specify a new ID to burn into the EEPROM.\n" << std::endl; + return EXIT_SUCCESS; + } + if (unit.empty()) { + std::cout << "Error: --unit must be specified!" << std::endl; return EXIT_FAILURE; } // make the device and extract the dboard w/ property - device::sptr dev = device::make(args, device::USRP); - uhd::property_tree::sptr tree = dev->get_tree(); - const uhd::fs_path db_root = "/mboards/0/dboards"; - std::vector<std::string> dboard_names = tree->list(db_root); - if (dboard_names.size() == 1 and slot.empty()) - slot = dboard_names.front(); - uhd::assert_has(dboard_names, slot, "dboard slot name"); - - std::cout << boost::format("Reading %s EEPROM on %s dboard...") % unit % slot - << std::endl; + auto dev = multi_usrp::make(args); + auto tree = dev->get_tree(); + const auto radio_path = get_radio_path(tree, slot); + std::cout << "Reading " << unit << " EEPROM on dboard " << slot << "..." << std::endl; boost::to_lower(unit); - const uhd::fs_path db_path = db_root / slot / (unit + "_eeprom"); + const uhd::fs_path db_path = radio_path / (unit + "_eeprom"); dboard_eeprom_t db_eeprom = tree->access<dboard_eeprom_t>(db_path).get(); //------------- handle the dboard ID -----------------------------// |