diff options
| author | Nicholas Corgan <nick.corgan@ettus.com> | 2013-11-19 15:51:45 -0800 | 
|---|---|---|
| committer | Nicholas Corgan <nick.corgan@ettus.com> | 2013-11-19 15:51:45 -0800 | 
| commit | 621f9c93f345b7f2f6d061fe503ac71b042c4d32 (patch) | |
| tree | f829a580204fb0a223eb39ed46a356304f2a7791 /host/lib/usrp/b200 | |
| parent | 465da9a7d38a6f651213b8189992dd65c800d61a (diff) | |
| parent | 60108e3ca8fdab91d9e0e133c96f3e06916ac934 (diff) | |
| download | uhd-621f9c93f345b7f2f6d061fe503ac71b042c4d32.tar.gz uhd-621f9c93f345b7f2f6d061fe503ac71b042c4d32.tar.bz2 uhd-621f9c93f345b7f2f6d061fe503ac71b042c4d32.zip  | |
Merge branch 'bug182'
Diffstat (limited to 'host/lib/usrp/b200')
| -rw-r--r-- | host/lib/usrp/b200/b200_iface.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/b200/b200_iface.hpp | 16 | ||||
| -rw-r--r-- | host/lib/usrp/b200/b200_impl.cpp | 17 | ||||
| -rw-r--r-- | host/lib/usrp/b200/b200_impl.hpp | 4 | 
4 files changed, 28 insertions, 13 deletions
diff --git a/host/lib/usrp/b200/b200_iface.cpp b/host/lib/usrp/b200/b200_iface.cpp index a74e058d0..5c512c1d9 100644 --- a/host/lib/usrp/b200/b200_iface.cpp +++ b/host/lib/usrp/b200/b200_iface.cpp @@ -245,10 +245,12 @@ public:          size_t num_bytes      ){          byte_vector_t recv_bytes(num_bytes); -        fx3_control_read(B200_VREQ_EEPROM_READ, +        int bytes_read = fx3_control_read(B200_VREQ_EEPROM_READ,                           0, offset | (boost::uint16_t(addr) << 8),                           (unsigned char*) &recv_bytes[0],                           num_bytes); +        if (bytes_read != num_bytes) +            throw uhd::io_error("Failed to read data from EEPROM.");          return recv_bytes;      } diff --git a/host/lib/usrp/b200/b200_iface.hpp b/host/lib/usrp/b200/b200_iface.hpp index 1247d1f86..5b6eeede4 100644 --- a/host/lib/usrp/b200/b200_iface.hpp +++ b/host/lib/usrp/b200/b200_iface.hpp @@ -25,7 +25,17 @@  #include <boost/utility.hpp>  #include "ad9361_ctrl.hpp" -class b200_iface: boost::noncopyable, public virtual uhd::i2c_iface, +const static boost::uint16_t B200_VENDOR_ID  = 0x2500; +const static boost::uint16_t B200_PRODUCT_ID = 0x0020; +const static boost::uint16_t FX3_VID = 0x04b4; +const static boost::uint16_t FX3_DEFAULT_PID = 0x00f3; +const static boost::uint16_t FX3_REENUM_PID = 0x00f0; + +static const std::string     B200_FW_FILE_NAME = "usrp_b200_fw.hex"; +static const std::string     B200_FPGA_FILE_NAME = "usrp_b200_fpga.bin"; +static const std::string     B210_FPGA_FILE_NAME = "usrp_b210_fpga.bin"; + +class UHD_API b200_iface: boost::noncopyable, public virtual uhd::i2c_iface,                    public ad9361_ctrl_iface_type {  public:      typedef boost::shared_ptr<b200_iface> sptr; @@ -64,6 +74,10 @@ public:      //! send SPI through the FX3      virtual void transact_spi( unsigned char *tx_data, size_t num_tx_bits, \              unsigned char *rx_data, size_t num_rx_bits) = 0; + +    virtual void write_eeprom(boost::uint16_t addr, boost::uint16_t offset, const uhd::byte_vector_t &bytes) = 0; + +    virtual uhd::byte_vector_t read_eeprom(boost::uint16_t addr, boost::uint16_t offset, size_t num_bytes) = 0;  }; diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp index 66ab813c2..132b1198d 100644 --- a/host/lib/usrp/b200/b200_impl.cpp +++ b/host/lib/usrp/b200/b200_impl.cpp @@ -37,10 +37,6 @@ using namespace uhd;  using namespace uhd::usrp;  using namespace uhd::transport; -const boost::uint16_t B200_VENDOR_ID  = 0x2500; -const boost::uint16_t B200_PRODUCT_ID = 0x0020; -const boost::uint16_t INIT_PRODUCT_ID = 0x00f0; -  static const boost::posix_time::milliseconds REENUMERATION_TIMEOUT_MS(3000);  //! mapping of frontend to radio perif index @@ -99,7 +95,7 @@ static device_addrs_t b200_find(const device_addr_t &hint)          catch(const uhd::exception &){continue;} //ignore claimed          //check if fw was already loaded -        if (handle->get_manufacturer() != "Ettus Research LLC") +        if (!(handle->firmware_loaded()))          {              b200_iface::make(control)->load_firmware(b200_fw_image);          } @@ -160,8 +156,15 @@ b200_impl::b200_impl(const device_addr_t &device_addr)      const fs_path mb_path = "/mboards/0";      //try to match the given device address with something on the USB bus +    uint16_t vid = B200_VENDOR_ID; +    uint16_t pid = B200_PRODUCT_ID; +    if (device_addr.has_key("vid")) +            sscanf(device_addr.get("vid").c_str(), "%x", &vid); +    if (device_addr.has_key("pid")) +            sscanf(device_addr.get("pid").c_str(), "%x", &pid); +      std::vector<usb_device_handle::sptr> device_list = -        usb_device_handle::get_device_list(B200_VENDOR_ID, B200_PRODUCT_ID); +        usb_device_handle::get_device_list(vid, pid);      //locate the matching handle in the device list      usb_device_handle::sptr handle; @@ -612,7 +615,7 @@ void b200_impl::setup_radio(const size_t dspno)  /***********************************************************************   * loopback tests   **********************************************************************/ -  +  void b200_impl::register_loopback_self_test(wb_iface::sptr iface)  {      bool test_fail = false; diff --git a/host/lib/usrp/b200/b200_impl.hpp b/host/lib/usrp/b200/b200_impl.hpp index 59a047e01..362c45347 100644 --- a/host/lib/usrp/b200/b200_impl.hpp +++ b/host/lib/usrp/b200/b200_impl.hpp @@ -44,10 +44,6 @@  #include <uhd/transport/bounded_buffer.hpp>  #include <boost/weak_ptr.hpp>  #include "recv_packet_demuxer_3000.hpp" - -static const std::string     B200_FW_FILE_NAME = "usrp_b200_fw.hex"; -static const std::string     B200_FPGA_FILE_NAME = "usrp_b200_fpga.bin"; -static const std::string     B210_FPGA_FILE_NAME = "usrp_b210_fpga.bin";  static const boost::uint8_t  B200_FW_COMPAT_NUM_MAJOR = 0x03;  static const boost::uint8_t  B200_FW_COMPAT_NUM_MINOR = 0x00;  static const boost::uint16_t B200_FPGA_COMPAT_NUM = 0x02;  | 
