aboutsummaryrefslogtreecommitdiffstats
path: root/host
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2015-02-16 11:52:04 +0100
committerMartin Braun <martin.braun@ettus.com>2015-02-16 11:52:04 +0100
commit120951bffce3e6b8ed9eda52c73203ead74392de (patch)
tree6299c67ce567fe25b5d0f41b96a811ddf91af138 /host
parent7d97ab60012b99ed92fb122a3a68d68515a404fa (diff)
parent8ec775e936b15404b34d34fd08cc5b3b3489055b (diff)
downloaduhd-120951bffce3e6b8ed9eda52c73203ead74392de.tar.gz
uhd-120951bffce3e6b8ed9eda52c73203ead74392de.tar.bz2
uhd-120951bffce3e6b8ed9eda52c73203ead74392de.zip
Merge branch 'maint'
Diffstat (limited to 'host')
-rw-r--r--host/lib/usrp/b200/b200_impl.cpp4
-rw-r--r--host/lib/usrp/dboard/db_ubx.cpp50
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp2
3 files changed, 31 insertions, 25 deletions
diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp
index f07b7fc6f..c1729ead3 100644
--- a/host/lib/usrp/b200/b200_impl.cpp
+++ b/host/lib/usrp/b200/b200_impl.cpp
@@ -86,7 +86,9 @@ static device_addrs_t b200_find(const device_addr_t &hint)
//Return an empty list of addresses when an address or resource is specified,
//since an address and resource is intended for a different, non-USB, device.
- if (hint.has_key("addr") || hint.has_key("resource")) return b200_addrs;
+ BOOST_FOREACH(device_addr_t hint_i, separate_device_addr(hint)) {
+ if (hint_i.has_key("addr") || hint_i.has_key("resource")) return b200_addrs;
+ }
size_t found = 0;
std::vector<usb_device_handle::vid_pid_pair_t> vid_pid_pair_list;//vid pid pair search list for devices.
diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp
index dd30cf534..b6cc1421c 100644
--- a/host/lib/usrp/dboard/db_ubx.cpp
+++ b/host/lib/usrp/dboard/db_ubx.cpp
@@ -32,6 +32,7 @@
#include <boost/math/special_functions/round.hpp>
#include <boost/thread.hpp>
#include <boost/algorithm/string.hpp>
+#include <boost/thread/mutex.hpp>
#include <map>
using namespace uhd;
@@ -691,7 +692,7 @@ static const ubx_gpio_field_info_t ubx_v1_gpio_info[] = {
};
/***********************************************************************
- * Macros and helper functions for routing and writing SPI registers
+ * Macros for routing and writing SPI registers
**********************************************************************/
#define ROUTE_SPI(iface, dest) \
iface->set_gpio_out(dboard_iface::UNIT_TX, dest, 0x7);
@@ -699,19 +700,6 @@ static const ubx_gpio_field_info_t ubx_v1_gpio_info[] = {
#define WRITE_SPI(iface, val) \
iface->write_spi(dboard_iface::UNIT_TX, spi_config_t::EDGE_RISE, val, 32);
-UHD_INLINE void write_spi_reg(dboard_iface::sptr iface, spi_dest_t dest, boost::uint32_t value)
-{
- ROUTE_SPI(iface, dest);
- WRITE_SPI(iface, value);
-}
-
-UHD_INLINE void write_spi_regs(dboard_iface::sptr iface, spi_dest_t dest, std::vector<boost::uint32_t> values)
-{
- ROUTE_SPI(iface, dest);
- for (size_t i = 0; i < values.size(); i++)
- WRITE_SPI(iface, values[i]);
-}
-
/***********************************************************************
* UBX Class Definition
**********************************************************************/
@@ -813,17 +801,17 @@ public:
// Initialize LOs
if (_rev == 0)
{
- _txlo1.reset(new max2870(boost::bind(&write_spi_regs, _iface, TXLO1, _1)));
- _txlo2.reset(new max2870(boost::bind(&write_spi_regs, _iface, TXLO2, _1)));
- _rxlo1.reset(new max2870(boost::bind(&write_spi_regs, _iface, RXLO1, _1)));
- _rxlo2.reset(new max2870(boost::bind(&write_spi_regs, _iface, RXLO2, _1)));
+ _txlo1.reset(new max2870(boost::bind(&ubx_xcvr::write_spi_regs, this, TXLO1, _1)));
+ _txlo2.reset(new max2870(boost::bind(&ubx_xcvr::write_spi_regs, this, TXLO2, _1)));
+ _rxlo1.reset(new max2870(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO1, _1)));
+ _rxlo2.reset(new max2870(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO2, _1)));
}
else if (_rev == 1)
{
- _txlo1.reset(new max2871(boost::bind(&write_spi_regs, _iface, TXLO1, _1)));
- _txlo2.reset(new max2871(boost::bind(&write_spi_regs, _iface, TXLO2, _1)));
- _rxlo1.reset(new max2871(boost::bind(&write_spi_regs, _iface, RXLO1, _1)));
- _rxlo2.reset(new max2871(boost::bind(&write_spi_regs, _iface, RXLO2, _1)));
+ _txlo1.reset(new max2871(boost::bind(&ubx_xcvr::write_spi_regs, this, TXLO1, _1)));
+ _txlo2.reset(new max2871(boost::bind(&ubx_xcvr::write_spi_regs, this, TXLO2, _1)));
+ _rxlo1.reset(new max2871(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO1, _1)));
+ _rxlo2.reset(new max2871(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO2, _1)));
}
else
{
@@ -948,6 +936,21 @@ private:
/***********************************************************************
* Helper Functions
**********************************************************************/
+ void write_spi_reg(spi_dest_t dest, boost::uint32_t value)
+ {
+ boost::mutex::scoped_lock lock(_spi_lock);
+ ROUTE_SPI(_iface, dest);
+ WRITE_SPI(_iface, value);
+ }
+
+ void write_spi_regs(spi_dest_t dest, std::vector<boost::uint32_t> values)
+ {
+ boost::mutex::scoped_lock lock(_spi_lock);
+ ROUTE_SPI(_iface, dest);
+ BOOST_FOREACH(boost::uint32_t value, values)
+ WRITE_SPI(_iface, value);
+ }
+
void set_cpld_field(ubx_cpld_field_id_t id, boost::uint32_t value)
{
_cpld_reg.set_field(id, value);
@@ -955,7 +958,7 @@ private:
void write_cpld_reg()
{
- write_spi_reg(_iface, CPLD, _cpld_reg.value);
+ write_spi_reg(CPLD, _cpld_reg.value);
}
void set_gpio_field(ubx_gpio_field_id_t id, boost::uint32_t value)
@@ -1389,6 +1392,7 @@ private:
* Variables
**********************************************************************/
dboard_iface::sptr _iface;
+ boost::mutex _spi_lock;
ubx_cpld_reg_t _cpld_reg;
boost::shared_ptr<max287x_synthesizer_iface> _txlo1;
boost::shared_ptr<max287x_synthesizer_iface> _txlo2;
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index 65cf90a17..2f2c345be 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -387,7 +387,7 @@ public:
//create the burner commands
if (this->get_rev() == USRP2_REV3 or this->get_rev() == USRP2_REV4){
- const std::string card_burner = (fs::path(uhd::get_pkg_path()) / UHD_LIB_DIR / "uhd" / "utils" / "usrp2_card_burner.py").string();
+ const std::string card_burner = (fs::path(uhd::get_pkg_path()) / UHD_LIB_DIR / "uhd" / "utils" / "usrp2_card_burner_gui.py").string();
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_utility_error("uhd_images_downloader.py") % card_burner_cmd);
}