diff options
author | Trung N Tran <trung.tran@ettus.com> | 2017-11-15 13:49:39 -0800 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:05:06 -0800 |
commit | db7039f8be4240b60cf2688d7ae6b41613fc8a5a (patch) | |
tree | 7f1de9ea37847d8071814f6c75c2da50ae5e7ff6 /mpm/lib | |
parent | 9ea0d6da9e3756af91c7d1e99ee35e56bf2270d6 (diff) | |
download | uhd-db7039f8be4240b60cf2688d7ae6b41613fc8a5a.tar.gz uhd-db7039f8be4240b60cf2688d7ae6b41613fc8a5a.tar.bz2 uhd-db7039f8be4240b60cf2688d7ae6b41613fc8a5a.zip |
mpm: enable RX external LO set through args
This change allow user to set RX LO of ad9371 to external or internal from args
constructor of usrp device.
new args is rx_lo_source value can be either internal or external:
If there's no rx_lo_source specified or invalid value, default rx_lo is used; which is internal LO.
Usage example:
usrp_application --args "rx_lo_source=external"
Diffstat (limited to 'mpm/lib')
-rw-r--r-- | mpm/lib/mykonos/ad937x_ctrl.cpp | 16 | ||||
-rw-r--r-- | mpm/lib/mykonos/ad937x_device.cpp | 15 | ||||
-rw-r--r-- | mpm/lib/mykonos/ad937x_device.hpp | 6 | ||||
-rw-r--r-- | mpm/lib/mykonos/config/ad937x_config_t.cpp | 13 | ||||
-rw-r--r-- | mpm/lib/mykonos/config/ad937x_config_t.hpp | 5 |
5 files changed, 50 insertions, 5 deletions
diff --git a/mpm/lib/mykonos/ad937x_ctrl.cpp b/mpm/lib/mykonos/ad937x_ctrl.cpp index 0e76daac0..2594ac920 100644 --- a/mpm/lib/mykonos/ad937x_ctrl.cpp +++ b/mpm/lib/mykonos/ad937x_ctrl.cpp @@ -189,7 +189,23 @@ public: { /* nop */ } + virtual void update_rx_lo_source(uint8_t rx_lo_source){ + std::lock_guard<std::mutex> lock(*spi_mutex); + device.update_rx_lo_source(rx_lo_source); + } + virtual void update_tx_lo_source(uint8_t tx_lo_source){ + std::lock_guard<std::mutex> lock(*spi_mutex); + device.update_tx_lo_source(tx_lo_source); + } + virtual uint8_t get_rx_lo_source(){ + std::lock_guard<std::mutex> lock(*spi_mutex); + return device.get_rx_lo_source(); + } + virtual uint8_t get_tx_lo_source(){ + std::lock_guard<std::mutex> lock(*spi_mutex); + return device.get_tx_lo_source(); + } virtual void begin_initialization() { std::lock_guard<std::mutex> lock(*spi_mutex); diff --git a/mpm/lib/mykonos/ad937x_device.cpp b/mpm/lib/mykonos/ad937x_device.cpp index de3671849..ac7070df4 100644 --- a/mpm/lib/mykonos/ad937x_device.cpp +++ b/mpm/lib/mykonos/ad937x_device.cpp @@ -272,7 +272,20 @@ ad937x_device::ad937x_device( gain_ctrl(gain_pins) { } - +void ad937x_device::update_rx_lo_source(uint8_t rx_lo_source){ + mykonos_config.set_rx_pll_use_external_lo(rx_lo_source); + //TODO: should we re-init after this ? +} +void ad937x_device::update_tx_lo_source(uint8_t tx_lo_source){ + mykonos_config.set_tx_pll_use_external_lo(tx_lo_source); + //TODO: should we re-init after this ? +} +uint8_t ad937x_device::get_rx_lo_source(){ + return mykonos_config.get_rx_pll_use_external_lo(); +} +uint8_t ad937x_device::get_tx_lo_source(){ + return mykonos_config.get_tx_pll_use_external_lo(); +} void ad937x_device::_setup_rf(){ // TODO: add setRfPllLoopFilter here diff --git a/mpm/lib/mykonos/ad937x_device.hpp b/mpm/lib/mykonos/ad937x_device.hpp index 8dae6f2d3..c816680c4 100644 --- a/mpm/lib/mykonos/ad937x_device.hpp +++ b/mpm/lib/mykonos/ad937x_device.hpp @@ -51,7 +51,6 @@ public: mpm::types::regs_iface* iface, mpm::ad937x::gpio::gain_pins_t gain_pins ); - void begin_initialization(); void finish_initialization(); void setup_cal(uint32_t init_cals_mask, uint32_t tracking_cals_mask, uint32_t timeout); @@ -91,7 +90,10 @@ public: void set_enable_gain_pins(uhd::direction_t direction, mpm::ad937x::device::chain_t chain, bool enable); void set_gain_pin_step_sizes(uhd::direction_t direction, mpm::ad937x::device::chain_t chain, double inc_step, double dec_step); - + void update_rx_lo_source(uint8_t rxPllUseExternalLo); + void update_tx_lo_source(uint8_t rxPllUseExternalLo); + uint8_t get_rx_lo_source(); + uint8_t get_tx_lo_source(); const static double MIN_FREQ; const static double MAX_FREQ; const static double MIN_RX_GAIN; diff --git a/mpm/lib/mykonos/config/ad937x_config_t.cpp b/mpm/lib/mykonos/config/ad937x_config_t.cpp index 8a7ca76c3..68d1f27bf 100644 --- a/mpm/lib/mykonos/config/ad937x_config_t.cpp +++ b/mpm/lib/mykonos/config/ad937x_config_t.cpp @@ -83,7 +83,18 @@ ad937x_config_t::ad937x_config_t(spiSettings_t* sps) : device = &_device; } - +void ad937x_config_t::set_rx_pll_use_external_lo(uint8_t val){ + _rx.rxPllUseExternalLo = val; +} +uint8_t ad937x_config_t::get_rx_pll_use_external_lo(){ + return _rx.rxPllUseExternalLo; +} +void ad937x_config_t::set_tx_pll_use_external_lo(uint8_t val){ + _tx.txPllUseExternalLo = val; +} +uint8_t ad937x_config_t::get_tx_pll_use_external_lo(){ + return _tx.txPllUseExternalLo; +} // This function sets up all the pointers in all of our local members that represent the device struct // This function should only be called during construction. void ad937x_config_t::_init_pointers() diff --git a/mpm/lib/mykonos/config/ad937x_config_t.hpp b/mpm/lib/mykonos/config/ad937x_config_t.hpp index 9eba4992f..e44039ebe 100644 --- a/mpm/lib/mykonos/config/ad937x_config_t.hpp +++ b/mpm/lib/mykonos/config/ad937x_config_t.hpp @@ -20,7 +20,6 @@ #include "../adi/t_mykonos.h" #include "ad937x_fir.hpp" #include <boost/noncopyable.hpp> - // Allocates and links the entire mykonos config struct in a single class class ad937x_config_t : public boost::noncopyable { @@ -41,6 +40,10 @@ public: static const int16_t DEFAULT_RX_FIR[DEFAULT_RX_FIR_SIZE]; static const int16_t DEFAULT_OBSRX_FIR[DEFAULT_RX_FIR_SIZE]; static const int16_t DEFAULT_SNIFFER_FIR[DEFAULT_RX_FIR_SIZE]; + void set_rx_pll_use_external_lo(uint8_t val); + uint8_t get_rx_pll_use_external_lo(); + void set_tx_pll_use_external_lo(uint8_t val); + uint8_t get_tx_pll_use_external_lo(); private: // The top level device struct is non-const and contains all other structs, so everything is "public" |