From 06bdef36dd5cfafe0d4c72a1d12488cd5599fca1 Mon Sep 17 00:00:00 2001 From: michael-west Date: Wed, 11 Feb 2015 16:32:27 -0800 Subject: UBX: Serialize SPI transactions --- host/lib/usrp/dboard/db_ubx.cpp | 58 ++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 27 deletions(-) (limited to 'host/lib/usrp/dboard/db_ubx.cpp') diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp index dd30cf534..45817f599 100644 --- a/host/lib/usrp/dboard/db_ubx.cpp +++ b/host/lib/usrp/dboard/db_ubx.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include 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 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 { @@ -918,10 +906,10 @@ public: ~ubx_xcvr(void) { // Shutdown synthesizers - _txlo1->shutdown(); - _txlo2->shutdown(); - _rxlo1->shutdown(); - _rxlo2->shutdown(); + _txlo1.reset(); + _txlo2.reset(); + _rxlo1.reset(); + _rxlo2.reset(); // Reset CPLD values _cpld_reg.value = 0; @@ -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 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 _txlo1; boost::shared_ptr _txlo2; -- cgit v1.2.3 From 956bf82d2800c346afe057e8c1ecf230900ee356 Mon Sep 17 00:00:00 2001 From: michael-west Date: Fri, 13 Feb 2015 17:49:48 -0800 Subject: UBX: Revert LO shutdown method in ubx_xcvr destructor --- host/lib/usrp/dboard/db_ubx.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'host/lib/usrp/dboard/db_ubx.cpp') diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp index 45817f599..b6cc1421c 100644 --- a/host/lib/usrp/dboard/db_ubx.cpp +++ b/host/lib/usrp/dboard/db_ubx.cpp @@ -906,10 +906,10 @@ public: ~ubx_xcvr(void) { // Shutdown synthesizers - _txlo1.reset(); - _txlo2.reset(); - _rxlo1.reset(); - _rxlo2.reset(); + _txlo1->shutdown(); + _txlo2->shutdown(); + _rxlo1->shutdown(); + _rxlo2->shutdown(); // Reset CPLD values _cpld_reg.value = 0; -- cgit v1.2.3 From fae746179cbb1d8ac146dcae9b5d6cb58b366a56 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 11 Mar 2015 16:14:00 -0700 Subject: uhd: Fixed multiple compiler warnings (unused variables, missing literal f) --- host/include/uhd/utils/math.hpp | 2 +- host/lib/usrp/b200/b200_impl.cpp | 2 +- host/lib/usrp/dboard/db_ubx.cpp | 2 +- host/lib/usrp/multi_usrp.cpp | 12 ++++++------ host/lib/usrp_clock/octoclock/octoclock_impl.cpp | 2 +- host/utils/b2xx_fx3_utils.cpp | 4 ++-- host/utils/query_gpsdo_sensors.cpp | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) (limited to 'host/lib/usrp/dboard/db_ubx.cpp') diff --git a/host/include/uhd/utils/math.hpp b/host/include/uhd/utils/math.hpp index 21825c3dc..e6ac4d3dc 100644 --- a/host/include/uhd/utils/math.hpp +++ b/host/include/uhd/utils/math.hpp @@ -60,7 +60,7 @@ namespace math { * values, a custom epsilon should be defined for those computations. This * use-case is provided for in the `fp_compare_epsilon` class constructor. */ - static const float SINGLE_PRECISION_EPSILON = 1.19e-7; + static const float SINGLE_PRECISION_EPSILON = 1.19e-7f; static const double DOUBLE_PRECISION_EPSILON = 2.22e-16; namespace fp_compare { diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp index e30853762..304a3fc48 100644 --- a/host/lib/usrp/b200/b200_impl.cpp +++ b/host/lib/usrp/b200/b200_impl.cpp @@ -1007,6 +1007,6 @@ sensor_value_t b200_impl::get_ref_locked(void) sensor_value_t b200_impl::get_fe_pll_locked(const bool is_tx) { const boost::uint32_t st = _local_ctrl->peek32(RB32_CORE_PLL); - const bool locked = is_tx ? st & 0x1 : st & 0x2; + const bool locked = is_tx ? bool(st & 0x1) : bool(st & 0x2); return sensor_value_t("LO", locked, "locked", "unlocked"); } diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp index b6cc1421c..5184d2ecb 100644 --- a/host/lib/usrp/dboard/db_ubx.cpp +++ b/host/lib/usrp/dboard/db_ubx.cpp @@ -84,7 +84,7 @@ protected: // Get only regs with changes try { changed_regs = get_changed_addrs(); - } catch (uhd::runtime_error& e) { + } catch (uhd::runtime_error&) { // No saved state - write all regs for (int addr = 5; addr >= 0; addr--) changed_regs.insert(boost::uint32_t(addr)); diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index 175633c4c..45e736757 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -823,7 +823,7 @@ public: void set_rx_gain(double gain, const std::string &name, size_t chan){ try { return rx_gain_group(chan)->set_value(gain, name); - } catch (uhd::key_error &e) { + } catch (uhd::key_error &) { THROW_GAIN_NAME_ERROR(name,chan,rx); } } @@ -831,7 +831,7 @@ public: double get_rx_gain(const std::string &name, size_t chan){ try { return rx_gain_group(chan)->get_value(name); - } catch (uhd::key_error &e) { + } catch (uhd::key_error &) { THROW_GAIN_NAME_ERROR(name,chan,rx); } } @@ -839,7 +839,7 @@ public: gain_range_t get_rx_gain_range(const std::string &name, size_t chan){ try { return rx_gain_group(chan)->get_range(name); - } catch (uhd::key_error &e) { + } catch (uhd::key_error &) { THROW_GAIN_NAME_ERROR(name,chan,rx); } } @@ -1024,7 +1024,7 @@ public: void set_tx_gain(double gain, const std::string &name, size_t chan){ try { return tx_gain_group(chan)->set_value(gain, name); - } catch (uhd::key_error &e) { + } catch (uhd::key_error &) { THROW_GAIN_NAME_ERROR(name,chan,tx); } } @@ -1032,7 +1032,7 @@ public: double get_tx_gain(const std::string &name, size_t chan){ try { return tx_gain_group(chan)->get_value(name); - } catch (uhd::key_error &e) { + } catch (uhd::key_error &) { THROW_GAIN_NAME_ERROR(name,chan,tx); } } @@ -1040,7 +1040,7 @@ public: gain_range_t get_tx_gain_range(const std::string &name, size_t chan){ try { return tx_gain_group(chan)->get_range(name); - } catch (uhd::key_error &e) { + } catch (uhd::key_error &) { THROW_GAIN_NAME_ERROR(name,chan,tx); } } diff --git a/host/lib/usrp_clock/octoclock/octoclock_impl.cpp b/host/lib/usrp_clock/octoclock/octoclock_impl.cpp index d55fab10e..b98d95725 100644 --- a/host/lib/usrp_clock/octoclock/octoclock_impl.cpp +++ b/host/lib/usrp_clock/octoclock/octoclock_impl.cpp @@ -417,7 +417,7 @@ std::string octoclock_impl::_get_images_help_message(const std::string &addr){ try{ image_location = uhd::find_image_path(image_name); } - catch(const std::exception &e){ + catch(const std::exception &){ return str(boost::format("Could not find %s in your images path.\n%s") % image_name % uhd::print_utility_error("uhd_images_downloader.py")); diff --git a/host/utils/b2xx_fx3_utils.cpp b/host/utils/b2xx_fx3_utils.cpp index 8b64be63e..572daef70 100644 --- a/host/utils/b2xx_fx3_utils.cpp +++ b/host/utils/b2xx_fx3_utils.cpp @@ -173,7 +173,7 @@ uhd::transport::usb_device_handle::sptr open_device(const boost::uint16_t vid, c if (!handle) std::cerr << "Cannot open device" << std::endl; } - catch(const std::exception &e) { + catch(const std::exception &) { std::cerr << "Failed to communicate with the device!" << std::endl; #ifdef UHD_PLATFORM_WIN32 std::cerr << "The necessary drivers are not installed. Read the UHD Transport Application Notes for details:\nhttp://files.ettus.com/manual/page_transport.html" << std::endl; @@ -195,7 +195,7 @@ b200_iface::sptr make_b200_iface(const uhd::transport::usb_device_handle::sptr & if (!b200) std::cerr << "Cannot create device interface" << std::endl; } - catch(const std::exception &e) { + catch(const std::exception &) { std::cerr << "Failed to communicate with the device!" << std::endl; #ifdef UHD_PLATFORM_WIN32 std::cerr << "The necessary drivers are not installed. Read the UHD Transport Application Notes for details:\nhttp://files.ettus.com/manual/page_transport.html" << std::endl; diff --git a/host/utils/query_gpsdo_sensors.cpp b/host/utils/query_gpsdo_sensors.cpp index 05f918eb4..9a40d2b42 100644 --- a/host/utils/query_gpsdo_sensors.cpp +++ b/host/utils/query_gpsdo_sensors.cpp @@ -118,7 +118,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ uhd::sensor_value_t rmc_string = usrp->get_mboard_sensor("gps_gprmc"); std::cout << boost::format("Printing available NMEA strings:\n"); std::cout << boost::format("%s\n%s\n%s\n") % gga_string.to_pp_string() % rmc_string.to_pp_string() % gps_time.to_pp_string(); - } catch (std::exception &e) { + } catch (std::exception &) { std::cout << "NMEA strings not implemented for this device." << std::endl; } std::cout << boost::format("UHD Device time: %.0f seconds\n") % (last_pps_time.get_real_secs()); -- cgit v1.2.3