diff options
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/usrp/b100/b100_impl.cpp | 16 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_impl.cpp | 6 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_iface.cpp | 24 | ||||
| -rw-r--r-- | host/lib/utils/images.cpp | 18 | 
4 files changed, 39 insertions, 25 deletions
diff --git a/host/lib/usrp/b100/b100_impl.cpp b/host/lib/usrp/b100/b100_impl.cpp index b1d828cf1..eec777842 100644 --- a/host/lib/usrp/b100/b100_impl.cpp +++ b/host/lib/usrp/b100/b100_impl.cpp @@ -35,6 +35,7 @@  #include <boost/lexical_cast.hpp>  #include "b100_regs.hpp"  #include <cstdio> +#include <iostream>  using namespace uhd;  using namespace uhd::usrp; @@ -85,13 +86,10 @@ static device_addrs_t b100_find(const device_addr_t &hint)              b100_fw_image = find_image_path(hint.get("fw", B100_FW_FILE_NAME));          }          catch(...){ -            UHD_MSG(warning) << boost::format( -                "Could not locate B100 firmware.\n" -                "Please install the images package.\n" -            ); +            UHD_MSG(warning) << boost::format("Could not locate B100 firmware. %s\n") % print_images_error();              return b100_addrs;          } -        UHD_LOG << "the  firmware image: " << b100_fw_image << std::endl; +        UHD_LOG << "the firmware image: " << b100_fw_image << std::endl;          usb_control::sptr control;          try{control = usb_control::make(handle, 0);} @@ -497,8 +495,9 @@ void b100_impl::check_fw_compat(void){      if (fw_compat_num != B100_FW_COMPAT_NUM){          throw uhd::runtime_error(str(boost::format(              "Expected firmware compatibility number 0x%x, but got 0x%x:\n" -            "The firmware build is not compatible with the host code build." -        ) % B100_FW_COMPAT_NUM % fw_compat_num)); +            "The firmware build is not compatible with the host code build.\n" +            "%s" +        ) % B100_FW_COMPAT_NUM % fw_compat_num % print_images_error()));      }  } @@ -513,7 +512,8 @@ void b100_impl::check_fpga_compat(void){          throw uhd::runtime_error(str(boost::format(              "Expected FPGA compatibility number %d, but got %d:\n"              "The FPGA build is not compatible with the host code build." -        ) % int(B100_FPGA_COMPAT_NUM) % fpga_major)); +            "%s" +        ) % int(B100_FPGA_COMPAT_NUM) % fpga_major % print_images_error()));      }      _tree->create<std::string>("/mboards/0/fpga_version").set(str(boost::format("%u.%u") % fpga_major % fpga_minor));  } diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index f1c11a492..ffe25b81e 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -89,11 +89,7 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)              usrp1_fw_image = find_image_path(hint.get("fw", "usrp1_fw.ihx"));          }          catch(...){ -            UHD_MSG(warning) << boost::format( -                "Could not locate USRP1 firmware.\n" -                "Please install the images package.\n" -            ); -            return usrp1_addrs; +            UHD_MSG(warning) << boost::format("Could not locate USRP1 firmware. %s") % print_images_error();          }          UHD_LOG << "USRP1 firmware image: " << usrp1_fw_image << std::endl; diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index a05710891..7c26e2e71 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -376,6 +376,13 @@ public:          }          if (fw_image.empty() or fpga_image.empty()) return ""; +        //does your platform use sudo? +        std::string sudo; +        #if defined(UHD_PLATFORM_LINUX) || defined(UHD_PLATFORM_MACOS) +            sudo = "sudo "; +        #endif + +          //look up the real FS path to the images          std::string fw_image_path, fpga_image_path;          try{ @@ -383,15 +390,9 @@ public:              fpga_image_path = uhd::find_image_path(fpga_image);          }          catch(const std::exception &){ -            return str(boost::format("Could not find %s and %s in your images path!") % fw_image % fpga_image); +            return str(boost::format("Could not find %s and %s in your images path!\n%s") % fw_image % fpga_image % print_images_error());          } -        //does your platform use sudo? -        std::string sudo; -        #if defined(UHD_PLATFORM_LINUX) || defined(UHD_PLATFORM_MACOS) -            sudo = "sudo"; -        #endif -          //escape char for multi-line cmd + newline + indent?          #ifdef UHD_PLATFORM_WIN32              const std::string ml = "^\n    "; @@ -399,15 +400,18 @@ public:              const std::string ml = "\\\n    ";          #endif -        //create the burner command +        //create the images downloader and burner commands +        const std::string images_downloader_cmd = str(boost::format("%s\"%s\"") % sudo % find_images_downloader());          if (this->get_rev() == USRP2_REV3 or this->get_rev() == USRP2_REV4){              const std::string card_burner = (fs::path(fw_image_path).branch_path().branch_path() / "utils" / "usrp2_card_burner_gui.py").string(); -            return str(boost::format("Please run:\n%s \"%s\" %s--fpga=\"%s\" %s--fw=\"%s\"") % sudo % card_burner % ml % fpga_image_path % ml % fw_image_path); +            const std::string card_burner_cmd = str(boost::format("\"%s%s\" %s--fpga=\"%s\" %s--fw=\"%s\"") % sudo % card_burner % ml % fpga_image_path % ml % fw_image_path); +            return str(boost::format("%s\n%s") % print_images_error() % card_burner_cmd);          }          else{              const std::string addr = _ctrl_transport->get_recv_addr();              const std::string net_burner = (fs::path(fw_image_path).branch_path().branch_path() / "utils" / "usrp_n2xx_net_burner_gui.py").string(); -            return str(boost::format("Please run:\n\"%s\" %s--fpga=\"%s\" %s--fw=\"%s\" %s--addr=\"%s\"") % net_burner % ml % fpga_image_path % ml % fw_image_path % ml % addr); +            const std::string net_burner_cmd = str(boost::format("\"%s\" %s--fpga=\"%s\" %s--fw=\"%s\" %s--addr=\"%s\"") % net_burner % ml % fpga_image_path % ml % fw_image_path % ml % addr); +            return str(boost::format("%s\n%s") % print_images_error() % net_burner_cmd);          }      } diff --git a/host/lib/utils/images.cpp b/host/lib/utils/images.cpp index a124cc208..654e31179 100644 --- a/host/lib/utils/images.cpp +++ b/host/lib/utils/images.cpp @@ -1,5 +1,5 @@  // -// Copyright 2010-2011 Ettus Research LLC +// Copyright 2010-2012 Ettus Research LLC  //  // This program is free software: you can redistribute it and/or modify  // it under the terms of the GNU General Public License as published by @@ -17,16 +17,18 @@  #include <uhd/utils/images.hpp>  #include <uhd/exception.hpp> +#include <uhd/utils/paths.hpp>  #include <boost/foreach.hpp>  #include <boost/filesystem.hpp>  #include <vector> +#include <iostream>  namespace fs = boost::filesystem;  std::vector<fs::path> get_image_paths(void); //defined in paths.cpp  /*********************************************************************** - * Find a image in the image paths + * Find an image in the image paths   **********************************************************************/  std::string uhd::find_image_path(const std::string &image_name){      if (fs::exists(image_name)){ @@ -38,3 +40,15 @@ std::string uhd::find_image_path(const std::string &image_name){      }      throw uhd::io_error("Could not find path for image: " + image_name);  } + +std::string uhd::find_images_downloader(void){ +    return fs::path((fs::path(get_pkg_data_path()) / "utils" / "uhd_images_downloader.py")).string(); +} + +std::string uhd::print_images_error(void){ +    #ifdef UHD_PLATFORM_WIN32 +    return "As an Administrator, please run:\n\n\"" + find_images_downloader() + "\""; +    #else +    return "Please run:\n\nsudo \"" + find_images_downloader() + "\""; +    #endif +}  | 
