aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/b200
diff options
context:
space:
mode:
authorNicholas Corgan <nick.corgan@ettus.com>2015-08-05 08:46:28 -0700
committerMartin Braun <martin.braun@ettus.com>2015-08-05 13:04:04 -0700
commitbb62ab84fdad6f7cf18ea55d395dfbd7f11ed79d (patch)
treeab9bb3a78f10661e12b832c9c341d027463739ba /host/lib/usrp/b200
parentc3c9513b9b5f67afe4233659222fdfc5bbb2511c (diff)
downloaduhd-bb62ab84fdad6f7cf18ea55d395dfbd7f11ed79d.tar.gz
uhd-bb62ab84fdad6f7cf18ea55d395dfbd7f11ed79d.tar.bz2
uhd-bb62ab84fdad6f7cf18ea55d395dfbd7f11ed79d.zip
image_loader: force user to specify device
* On utility level, force user to use --args=type=foo * In each loader, throw an error if args are ambiguous
Diffstat (limited to 'host/lib/usrp/b200')
-rw-r--r--host/lib/usrp/b200/b200_image_loader.cpp33
1 files changed, 28 insertions, 5 deletions
diff --git a/host/lib/usrp/b200/b200_image_loader.cpp b/host/lib/usrp/b200/b200_image_loader.cpp
index 87010244c..9eaeeff63 100644
--- a/host/lib/usrp/b200/b200_image_loader.cpp
+++ b/host/lib/usrp/b200/b200_image_loader.cpp
@@ -40,27 +40,50 @@ static b200_iface::sptr get_b200_iface(const image_loader::image_loader_args_t &
bool user_specified){
std::vector<usb_device_handle::sptr> dev_handles = get_b200_device_handles(image_loader_args.args);
+ std::vector<usb_device_handle::sptr> applicable_dev_handles;
b200_iface::sptr iface;
+ mboard_eeprom_t eeprom; // Internal use
if(dev_handles.size() > 0){
BOOST_FOREACH(usb_device_handle::sptr dev_handle, dev_handles){
if(dev_handle->firmware_loaded()){
iface = b200_iface::make(usb_control::make(dev_handle,0));
- mb_eeprom = mboard_eeprom_t(*iface, "B200");
+ eeprom = mboard_eeprom_t(*iface, "B200");
if(user_specified){
if(image_loader_args.args.has_key("serial") and
- mb_eeprom.get("serial") != image_loader_args.args.get("serial")){
+ eeprom.get("serial") != image_loader_args.args.get("serial")){
continue;
}
if(image_loader_args.args.has_key("name") and
- mb_eeprom.get("name") != image_loader_args.args.get("name")){
+ eeprom.get("name") != image_loader_args.args.get("name")){
continue;
}
- return iface;
+ applicable_dev_handles.push_back(dev_handle);
}
- else return iface; // Just return first found
+ else applicable_dev_handles.push_back(dev_handle);
}
}
+
+ // At this point, we should have a single B2XX
+ if(applicable_dev_handles.size() == 1){
+ mb_eeprom = eeprom;
+ return iface;
+ }
+ else if(applicable_dev_handles.size() > 1){
+ std::string err_msg = "Could not resolve given args to a single B2XX device.\n"
+ "Applicable devices:\n";
+
+ BOOST_FOREACH(usb_device_handle::sptr dev_handle, applicable_dev_handles){
+ eeprom = mboard_eeprom_t(*b200_iface::make(usb_control::make(dev_handle,0)), "B200");
+ err_msg += str(boost::format(" * %s (serial=%s)\n")
+ % B2X0_STR_NAMES.get(get_b200_type(mb_eeprom), "B2XX")
+ % mb_eeprom.get("serial"));
+ }
+
+ err_msg += "\nSpecify one of these devices with the given args to load an image onto it.";
+
+ throw uhd::runtime_error(err_msg);
+ }
}
// No applicable devices found, return empty sptr so we can exit