aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp')
-rw-r--r--host/lib/usrp/b200/b200_impl.cpp1
-rw-r--r--host/lib/usrp/common/ad9361_ctrl.cpp9
-rw-r--r--host/lib/usrp/common/ad9361_ctrl.hpp3
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_device.cpp17
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_device.h3
-rw-r--r--host/lib/usrp/e300/e300_impl.cpp1
6 files changed, 31 insertions, 3 deletions
diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp
index bd07fcaee..bac904a31 100644
--- a/host/lib/usrp/b200/b200_impl.cpp
+++ b/host/lib/usrp/b200/b200_impl.cpp
@@ -684,6 +684,7 @@ void b200_impl::setup_radio(const size_t dspno)
_tree->create<meta_range_t>(rf_fe_path / "bandwidth" / "range")
.publish(boost::bind(&ad9361_ctrl::get_bw_filter_range, key));
_tree->create<double>(rf_fe_path / "freq" / "value")
+ .publish(boost::bind(&ad9361_ctrl::get_freq, _codec_ctrl, key))
.coerce(boost::bind(&ad9361_ctrl::tune, _codec_ctrl, key, _1))
.subscribe(boost::bind(&b200_impl::update_bandsel, this, key, _1))
.set(B200_DEFAULT_FREQ);
diff --git a/host/lib/usrp/common/ad9361_ctrl.cpp b/host/lib/usrp/common/ad9361_ctrl.cpp
index bedd2eb32..65e8e2df9 100644
--- a/host/lib/usrp/common/ad9361_ctrl.cpp
+++ b/host/lib/usrp/common/ad9361_ctrl.cpp
@@ -149,6 +149,15 @@ public:
return _device.tune(direction, value);
}
+ //! get the current frequency for the given frontend
+ double get_freq(const std::string &which)
+ {
+ boost::lock_guard<boost::mutex> lock(_mutex);
+
+ ad9361_device_t::direction_t direction = _get_direction_from_antenna(which);
+ return _device.get_freq(direction);
+ }
+
//! turn on/off data port loopback
void data_port_loopback(const bool on)
{
diff --git a/host/lib/usrp/common/ad9361_ctrl.hpp b/host/lib/usrp/common/ad9361_ctrl.hpp
index c5718302f..b7d7b8e26 100644
--- a/host/lib/usrp/common/ad9361_ctrl.hpp
+++ b/host/lib/usrp/common/ad9361_ctrl.hpp
@@ -95,6 +95,9 @@ public:
//! tune the given frontend, return the exact value
virtual double tune(const std::string &which, const double value) = 0;
+ //! get the current frequency for the given frontend
+ virtual double get_freq(const std::string &which) = 0;
+
//! turn on/off data port loopback
virtual void data_port_loopback(const bool on) = 0;
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
index 413ec75a2..e63460730 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
@@ -1050,7 +1050,7 @@ double ad9361_device_t::_tune_bbvco(const double rate)
const double vcomin = 672e6;
double vcorate;
int vcodiv;
-
+
/* Iterate over VCO dividers until appropriate divider is found. */
int i = 1;
for (; i <= 6; i++) {
@@ -1855,10 +1855,21 @@ double ad9361_device_t::tune(direction_t direction, const double value)
return tune_freq;
}
+/* Get the current RX or TX frequency. */
+double ad9361_device_t::get_freq(direction_t direction)
+{
+ boost::lock_guard<boost::recursive_mutex> lock(_mutex);
+
+ if (direction == RX)
+ return _rx_freq;
+ else
+ return _tx_freq;
+}
+
/* Set the gain of RX1, RX2, TX1, or TX2.
*
- * Note that the 'value' passed to this function is the gain index
- * for RX. Also note that the RX chains are done in terms of gain, and
+ * Note that the 'value' passed to this function is the gain index
+ * for RX. Also note that the RX chains are done in terms of gain, and
* the TX chains are done in terms of attenuation. */
double ad9361_device_t::set_gain(direction_t direction, chain_t chain, const double value)
{
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_device.h b/host/lib/usrp/common/ad9361_driver/ad9361_device.h
index a42c5ac9a..71ce78da7 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_device.h
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_device.h
@@ -49,6 +49,9 @@ public:
* After tuning, it runs any appropriate calibrations. */
double tune(direction_t direction, const double value);
+ /* Get the current RX or TX frequency. */
+ double get_freq(direction_t direction);
+
/* Set the gain of RX1, RX2, TX1, or TX2.
*
* Note that the 'value' passed to this function is the actual gain value,
diff --git a/host/lib/usrp/e300/e300_impl.cpp b/host/lib/usrp/e300/e300_impl.cpp
index 693aa5734..41e8eacf3 100644
--- a/host/lib/usrp/e300/e300_impl.cpp
+++ b/host/lib/usrp/e300/e300_impl.cpp
@@ -1053,6 +1053,7 @@ void e300_impl::_setup_radio(const size_t dspno)
_tree->create<meta_range_t>(rf_fe_path / "bandwidth" / "range")
.publish(boost::bind(&ad9361_ctrl::get_bw_filter_range, key));
_tree->create<double>(rf_fe_path / "freq" / "value")
+ .publish(boost::bind(&ad9361_ctrl::get_freq, _codec_ctrl, key))
.coerce(boost::bind(&ad9361_ctrl::tune, _codec_ctrl, key, _1))
.subscribe(boost::bind(&e300_impl::_update_fe_lo_freq, this, key, _1))
.set(e300::DEFAULT_FE_FREQ);