aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2011-02-22 10:59:21 -0800
committerJosh Blum <josh@joshknows.com>2011-02-22 10:59:21 -0800
commit557d62ee648cef2a8edfd15602544064550f82fc (patch)
tree0614b00317b55a5a2b09315924cc43865ad6dc73
parentde35e125bc6e09fbe4da60f8f18390c137c77c43 (diff)
parent4613f454c781d258d6d9b210ff1b9043a2125981 (diff)
downloaduhd-557d62ee648cef2a8edfd15602544064550f82fc.tar.gz
uhd-557d62ee648cef2a8edfd15602544064550f82fc.tar.bz2
uhd-557d62ee648cef2a8edfd15602544064550f82fc.zip
Merge branch 'sensors' into dboard_serial
-rw-r--r--host/examples/rx_samples_to_file.cpp1
-rw-r--r--host/examples/rx_samples_to_udp.cpp1
-rw-r--r--host/include/uhd/types/sensors.hpp19
-rw-r--r--host/include/uhd/usrp/codec_props.hpp12
-rw-r--r--host/include/uhd/usrp/dboard_props.hpp16
-rw-r--r--host/include/uhd/usrp/device_props.hpp8
-rw-r--r--host/include/uhd/usrp/dsp_props.hpp14
-rw-r--r--host/include/uhd/usrp/mboard_props.hpp40
-rw-r--r--host/include/uhd/usrp/multi_usrp.hpp58
-rw-r--r--host/include/uhd/usrp/subdev_props.hpp30
-rw-r--r--host/lib/types/sensors.cpp17
-rw-r--r--host/lib/usrp/dboard/db_basic_and_lf.cpp8
-rw-r--r--host/lib/usrp/dboard/db_dbsrx.cpp10
-rw-r--r--host/lib/usrp/dboard/db_dbsrx2.cpp10
-rw-r--r--host/lib/usrp/dboard/db_rfx.cpp19
-rw-r--r--host/lib/usrp/dboard/db_tvrx.cpp5
-rw-r--r--host/lib/usrp/dboard/db_unknown.cpp8
-rw-r--r--host/lib/usrp/dboard/db_wbx.cpp19
-rw-r--r--host/lib/usrp/dboard/db_xcvr2450.cpp25
-rw-r--r--host/lib/usrp/multi_usrp.cpp36
20 files changed, 232 insertions, 124 deletions
diff --git a/host/examples/rx_samples_to_file.cpp b/host/examples/rx_samples_to_file.cpp
index 296f480b0..e202fcb1c 100644
--- a/host/examples/rx_samples_to_file.cpp
+++ b/host/examples/rx_samples_to_file.cpp
@@ -78,7 +78,6 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
std::cout << boost::format("Actual RX Gain: %f dB...") % usrp->get_rx_gain() << std::endl << std::endl;
boost::this_thread::sleep(boost::posix_time::seconds(1)); //allow for some setup time
- std::cout << "LO Locked = " << usrp->get_rx_lo_locked() << std::endl;
//setup streaming
uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
diff --git a/host/examples/rx_samples_to_udp.cpp b/host/examples/rx_samples_to_udp.cpp
index 801d8e361..7ea775764 100644
--- a/host/examples/rx_samples_to_udp.cpp
+++ b/host/examples/rx_samples_to_udp.cpp
@@ -80,7 +80,6 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
std::cout << boost::format("Actual RX Gain: %f dB...") % usrp->get_rx_gain() << std::endl << std::endl;
boost::this_thread::sleep(boost::posix_time::seconds(1)); //allow for some setup time
- std::cout << "LO Locked = " << usrp->get_rx_lo_locked() << std::endl;
//setup streaming
uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
diff --git a/host/include/uhd/types/sensors.hpp b/host/include/uhd/types/sensors.hpp
index 6f003bb40..b6215367f 100644
--- a/host/include/uhd/types/sensors.hpp
+++ b/host/include/uhd/types/sensors.hpp
@@ -37,12 +37,6 @@ namespace uhd{
*/
struct UHD_API sensor_value_t{
- //! typedef for the signed integer type
- typedef signed int_type;
-
- //! typedef for the real number type
- typedef double real_type;
-
/*!
* Create a sensor value from a boolean.
* \param name the name of the sensor
@@ -66,7 +60,7 @@ namespace uhd{
*/
sensor_value_t(
const std::string &name,
- int_type value,
+ signed value,
const std::string &unit,
const std::string &formatter = "%d"
);
@@ -80,7 +74,7 @@ namespace uhd{
*/
sensor_value_t(
const std::string &name,
- real_type value,
+ double value,
const std::string &unit,
const std::string &formatter = "%f"
);
@@ -97,6 +91,15 @@ namespace uhd{
const std::string &unit
);
+ //! convert the sensor value to a boolean
+ bool to_bool(void) const;
+
+ //! convert the sensor value to an integer
+ signed to_int(void) const;
+
+ //! convert the sensor value to real number
+ double to_real(void) const;
+
//! The name of the sensor value
const std::string name;
diff --git a/host/include/uhd/usrp/codec_props.hpp b/host/include/uhd/usrp/codec_props.hpp
index 5d0a2913c..b0a79e3f6 100644
--- a/host/include/uhd/usrp/codec_props.hpp
+++ b/host/include/uhd/usrp/codec_props.hpp
@@ -28,12 +28,12 @@ namespace uhd{ namespace usrp{
* Other properties can be discovered through the others prop.
*/
enum codec_prop_t{
- CODEC_PROP_NAME = 'n', //ro, std::string
- CODEC_PROP_OTHERS = 'o', //ro, prop_names_t
- CODEC_PROP_GAIN_I = 'i', //rw, double
- CODEC_PROP_GAIN_Q = 'q', //rw, double
- CODEC_PROP_GAIN_RANGE = 'r', //ro, gain_range_t
- CODEC_PROP_GAIN_NAMES = 'G' //ro, prop_names_t
+ CODEC_PROP_NAME, //ro, std::string
+ CODEC_PROP_OTHERS, //ro, prop_names_t
+ CODEC_PROP_GAIN_I, //rw, double
+ CODEC_PROP_GAIN_Q , //rw, double
+ CODEC_PROP_GAIN_RANGE, //ro, gain_range_t
+ CODEC_PROP_GAIN_NAMES //ro, prop_names_t
};
diff --git a/host/include/uhd/usrp/dboard_props.hpp b/host/include/uhd/usrp/dboard_props.hpp
index aab6c31ce..32ec1c1bf 100644
--- a/host/include/uhd/usrp/dboard_props.hpp
+++ b/host/include/uhd/usrp/dboard_props.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010 Ettus Research LLC
+// Copyright 2010-2011 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -28,13 +28,13 @@ namespace uhd{ namespace usrp{
* A dboard is considered to be unidirectional (RX or TX).
*/
enum dboard_prop_t{
- DBOARD_PROP_NAME = 'n', //ro, std::string
- DBOARD_PROP_SUBDEV = 's', //ro, wax::obj
- DBOARD_PROP_SUBDEV_NAMES = 'S', //ro, prop_names_t
- DBOARD_PROP_DBOARD_ID = 'i', //rw, dboard_id_t
- DBOARD_PROP_DBOARD_IFACE = 'f', //ro, dboard_iface::sptr
- DBOARD_PROP_CODEC = 'c', //ro, wax::obj
- DBOARD_PROP_GAIN_GROUP = 'g' //ro, gain_group
+ DBOARD_PROP_NAME, //ro, std::string
+ DBOARD_PROP_SUBDEV, //ro, wax::obj
+ DBOARD_PROP_SUBDEV_NAMES, //ro, prop_names_t
+ DBOARD_PROP_DBOARD_ID, //rw, dboard_id_t
+ DBOARD_PROP_DBOARD_IFACE, //ro, dboard_iface::sptr
+ DBOARD_PROP_CODEC, //ro, wax::obj
+ DBOARD_PROP_GAIN_GROUP //ro, gain_group
};
}} //namespace
diff --git a/host/include/uhd/usrp/device_props.hpp b/host/include/uhd/usrp/device_props.hpp
index 346eec179..3c8f7e225 100644
--- a/host/include/uhd/usrp/device_props.hpp
+++ b/host/include/uhd/usrp/device_props.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010 Ettus Research LLC
+// Copyright 2010-2011 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -29,9 +29,9 @@ namespace uhd{ namespace usrp{
* will be present in the interface for configuration.
*/
enum device_prop_t{
- DEVICE_PROP_NAME = 'n', //ro, std::string
- DEVICE_PROP_MBOARD = 'm', //ro, wax::obj
- DEVICE_PROP_MBOARD_NAMES = 'M' //ro, prop_names_t
+ DEVICE_PROP_NAME, //ro, std::string
+ DEVICE_PROP_MBOARD, //ro, wax::obj
+ DEVICE_PROP_MBOARD_NAMES, //ro, prop_names_t
};
}} //namespace
diff --git a/host/include/uhd/usrp/dsp_props.hpp b/host/include/uhd/usrp/dsp_props.hpp
index 54ea5666b..3e1690317 100644
--- a/host/include/uhd/usrp/dsp_props.hpp
+++ b/host/include/uhd/usrp/dsp_props.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010 Ettus Research LLC
+// Copyright 2010-2011 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -37,12 +37,12 @@ namespace uhd{ namespace usrp{
* Set the shift property and read it back to get actual shift.
*/
enum dsp_prop_t{
- DSP_PROP_NAME = 'n', //ro, std::string
- DSP_PROP_OTHERS = 'o', //ro, prop_names_t
- DSP_PROP_FREQ_SHIFT = 'f', //rw, double Hz
- DSP_PROP_FREQ_SHIFT_NAMES = 'F', //ro, prop_names_t
- DSP_PROP_CODEC_RATE = 'c', //ro, double Sps
- DSP_PROP_HOST_RATE = 'h' //rw, double Sps
+ DSP_PROP_NAME, //ro, std::string
+ DSP_PROP_OTHERS, //ro, prop_names_t
+ DSP_PROP_FREQ_SHIFT, //rw, double Hz
+ DSP_PROP_FREQ_SHIFT_NAMES, //ro, prop_names_t
+ DSP_PROP_CODEC_RATE, //ro, double Sps
+ DSP_PROP_HOST_RATE //rw, double Sps
};
}} //namespace
diff --git a/host/include/uhd/usrp/mboard_props.hpp b/host/include/uhd/usrp/mboard_props.hpp
index d04ad012c..559c96ecb 100644
--- a/host/include/uhd/usrp/mboard_props.hpp
+++ b/host/include/uhd/usrp/mboard_props.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010 Ettus Research LLC
+// Copyright 2010-2011 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -29,24 +29,26 @@ namespace uhd{ namespace usrp{
* and discovered though the others property.
*/
enum mboard_prop_t{
- MBOARD_PROP_NAME = 'n', //ro, std::string
- MBOARD_PROP_OTHERS = 'o', //ro, prop_names_t
- MBOARD_PROP_CLOCK_RATE = 'c', //rw, double
- MBOARD_PROP_RX_DSP = 'd', //ro, wax::obj
- MBOARD_PROP_RX_DSP_NAMES = 'D', //ro, prop_names_t
- MBOARD_PROP_TX_DSP = 'u', //ro, wax::obj
- MBOARD_PROP_TX_DSP_NAMES = 'U', //ro, prop_names_t
- MBOARD_PROP_RX_DBOARD = 'e', //ro, wax::obj
- MBOARD_PROP_RX_DBOARD_NAMES = 'E', //ro, prop_names_t
- MBOARD_PROP_TX_DBOARD = 'v', //ro, wax::obj
- MBOARD_PROP_TX_DBOARD_NAMES = 'V', //ro, prop_names_t
- MBOARD_PROP_RX_SUBDEV_SPEC = 'r', //rw, subdev_spec_t
- MBOARD_PROP_TX_SUBDEV_SPEC = 'R', //rw, subdev_spec_t
- MBOARD_PROP_CLOCK_CONFIG = 'C', //rw, clock_config_t
- MBOARD_PROP_TIME_NOW = 't', //rw, time_spec_t
- MBOARD_PROP_TIME_PPS = 'T', //wo, time_spec_t
- MBOARD_PROP_STREAM_CMD = 's', //wo, stream_cmd_t
- MBOARD_PROP_EEPROM_MAP = 'M' //wr, mboard_eeprom_t::sptr
+ MBOARD_PROP_NAME, //ro, std::string
+ MBOARD_PROP_OTHERS, //ro, prop_names_t
+ MBOARD_PROP_SENSOR, //ro, sensor_value_t
+ MBOARD_PROP_SENSOR_NAMES, //ro, prop_names_t
+ MBOARD_PROP_CLOCK_RATE, //rw, double
+ MBOARD_PROP_RX_DSP, //ro, wax::obj
+ MBOARD_PROP_RX_DSP_NAMES, //ro, prop_names_t
+ MBOARD_PROP_TX_DSP, //ro, wax::obj
+ MBOARD_PROP_TX_DSP_NAMES, //ro, prop_names_t
+ MBOARD_PROP_RX_DBOARD, //ro, wax::obj
+ MBOARD_PROP_RX_DBOARD_NAMES, //ro, prop_names_t
+ MBOARD_PROP_TX_DBOARD, //ro, wax::obj
+ MBOARD_PROP_TX_DBOARD_NAMES, //ro, prop_names_t
+ MBOARD_PROP_RX_SUBDEV_SPEC, //rw, subdev_spec_t
+ MBOARD_PROP_TX_SUBDEV_SPEC, //rw, subdev_spec_t
+ MBOARD_PROP_CLOCK_CONFIG, //rw, clock_config_t
+ MBOARD_PROP_TIME_NOW, //rw, time_spec_t
+ MBOARD_PROP_TIME_PPS, //wo, time_spec_t
+ MBOARD_PROP_STREAM_CMD, //wo, stream_cmd_t
+ MBOARD_PROP_EEPROM_MAP //wr, mboard_eeprom_t::sptr
};
}} //namespace
diff --git a/host/include/uhd/usrp/multi_usrp.hpp b/host/include/uhd/usrp/multi_usrp.hpp
index 60b757f50..3c8dd5fac 100644
--- a/host/include/uhd/usrp/multi_usrp.hpp
+++ b/host/include/uhd/usrp/multi_usrp.hpp
@@ -25,6 +25,7 @@
#include <uhd/types/clock_config.hpp>
#include <uhd/types/tune_request.hpp>
#include <uhd/types/tune_result.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/usrp/subdev_spec.hpp>
#include <uhd/usrp/dboard_iface.hpp>
#include <boost/shared_ptr.hpp>
@@ -231,6 +232,21 @@ public:
*/
virtual size_t get_num_mboards(void) = 0;
+ /*!
+ * Get a motherboard sensor value.
+ * \param name the name of the sensor
+ * \param mboard the motherboard index 0 to M-1
+ * \return a sensor value object
+ */
+ virtual sensor_value_t get_mboard_sensor(const std::string &name, size_t mboard = 0) = 0;
+
+ /*!
+ * Get a list of possible motherboard sensor names.
+ * \param mboard the motherboard index 0 to M-1
+ * \return a vector of sensor names
+ */
+ virtual std::vector<std::string> get_mboard_sensor_names(size_t mboard = 0) = 0;
+
/*******************************************************************
* RX methods
******************************************************************/
@@ -377,7 +393,9 @@ public:
* \param chan the channel index 0 to N-1
* \return true for locked
*/
- virtual bool get_rx_lo_locked(size_t chan = 0) = 0;
+ UHD_DEPRECATED bool get_rx_lo_locked(size_t chan = 0){
+ return this->get_rx_sensor("lo_locked", chan).to_bool();
+ }
/*!
* Set the RX bandwidth on the subdevice.
@@ -399,7 +417,9 @@ public:
* \return the rssi in dB
* \throw exception if RSSI readback not supported
*/
- virtual double read_rssi(size_t chan = 0) = 0;
+ UHD_DEPRECATED double read_rssi(size_t chan = 0){
+ return this->get_rx_sensor("rssi", chan).to_real();
+ }
/*!
* Get the dboard interface object for the RX subdevice.
@@ -410,6 +430,21 @@ public:
*/
virtual dboard_iface::sptr get_rx_dboard_iface(size_t chan = 0) = 0;
+ /*!
+ * Get an RX subdevice sensor value.
+ * \param name the name of the sensor
+ * \param chan the channel index 0 to N-1
+ * \return a sensor value object
+ */
+ virtual sensor_value_t get_rx_sensor(const std::string &name, size_t chan = 0) = 0;
+
+ /*!
+ * Get a list of possible RX subdevice sensor names.
+ * \param chan the channel index 0 to N-1
+ * \return a vector of sensor names
+ */
+ virtual std::vector<std::string> get_rx_sensor_names(size_t chan = 0) = 0;
+
/*******************************************************************
* TX methods
******************************************************************/
@@ -556,7 +591,9 @@ public:
* \param chan the channel index 0 to N-1
* \return true for locked
*/
- virtual bool get_tx_lo_locked(size_t chan = 0) = 0;
+ UHD_DEPRECATED bool get_tx_lo_locked(size_t chan = 0){
+ return this->get_tx_sensor("lo_locked", chan).to_bool();
+ }
/*!
* Set the TX bandwidth on the subdevice.
@@ -580,6 +617,21 @@ public:
* \return the dboard interface sptr
*/
virtual dboard_iface::sptr get_tx_dboard_iface(size_t chan = 0) = 0;
+
+ /*!
+ * Get an TX subdevice sensor value.
+ * \param name the name of the sensor
+ * \param chan the channel index 0 to N-1
+ * \return a sensor value object
+ */
+ virtual sensor_value_t get_tx_sensor(const std::string &name, size_t chan = 0) = 0;
+
+ /*!
+ * Get a list of possible TX subdevice sensor names.
+ * \param chan the channel index 0 to N-1
+ * \return a vector of sensor names
+ */
+ virtual std::vector<std::string> get_tx_sensor_names(size_t chan = 0) = 0;
};
}}
diff --git a/host/include/uhd/usrp/subdev_props.hpp b/host/include/uhd/usrp/subdev_props.hpp
index 8d05f4c27..40b339703 100644
--- a/host/include/uhd/usrp/subdev_props.hpp
+++ b/host/include/uhd/usrp/subdev_props.hpp
@@ -42,21 +42,21 @@ namespace uhd{ namespace usrp{
* Possible device subdev properties
*/
enum subdev_prop_t{
- SUBDEV_PROP_NAME = 'n', //ro, std::string
- SUBDEV_PROP_OTHERS = 'o', //ro, prop_names_t
- SUBDEV_PROP_GAIN = 'g', //rw, double
- SUBDEV_PROP_GAIN_RANGE = 'r', //ro, gain_range_t
- SUBDEV_PROP_GAIN_NAMES = 'G', //ro, prop_names_t
- SUBDEV_PROP_FREQ = 'f', //rw, double
- SUBDEV_PROP_FREQ_RANGE = 'F', //ro, freq_range_t
- SUBDEV_PROP_ANTENNA = 'a', //rw, std::string
- SUBDEV_PROP_ANTENNA_NAMES = 'A', //ro, prop_names_t
- SUBDEV_PROP_LO_LOCKED = 'L', //ro, bool
- SUBDEV_PROP_CONNECTION = 'c', //ro, subdev_conn_t
- SUBDEV_PROP_ENABLED = 'e', //rw, bool
- SUBDEV_PROP_USE_LO_OFFSET = 'l', //ro, bool
- SUBDEV_PROP_RSSI = 'R', //ro, double
- SUBDEV_PROP_BANDWIDTH = 'B' //rw, double
+ SUBDEV_PROP_NAME, //ro, std::string
+ SUBDEV_PROP_OTHERS, //ro, prop_names_t
+ SUBDEV_PROP_SENSOR, //ro, sensor_value_t
+ SUBDEV_PROP_SENSOR_NAMES, //ro, prop_names_t
+ SUBDEV_PROP_GAIN, //rw, double
+ SUBDEV_PROP_GAIN_RANGE, //ro, gain_range_t
+ SUBDEV_PROP_GAIN_NAMES, //ro, prop_names_t
+ SUBDEV_PROP_FREQ, //rw, double
+ SUBDEV_PROP_FREQ_RANGE, //ro, freq_range_t
+ SUBDEV_PROP_ANTENNA, //rw, std::string
+ SUBDEV_PROP_ANTENNA_NAMES, //ro, prop_names_t
+ SUBDEV_PROP_CONNECTION, //ro, subdev_conn_t
+ SUBDEV_PROP_ENABLED, //rw, bool
+ SUBDEV_PROP_USE_LO_OFFSET, //ro, bool
+ SUBDEV_PROP_BANDWIDTH //rw, double
};
}} //namespace
diff --git a/host/lib/types/sensors.cpp b/host/lib/types/sensors.cpp
index 2bff136a4..5f7115d70 100644
--- a/host/lib/types/sensors.cpp
+++ b/host/lib/types/sensors.cpp
@@ -17,6 +17,7 @@
#include <uhd/types/sensors.hpp>
#include <uhd/utils/exception.hpp>
+#include <boost/lexical_cast.hpp>
#include <boost/format.hpp>
using namespace uhd;
@@ -35,7 +36,7 @@ sensor_value_t::sensor_value_t(
sensor_value_t::sensor_value_t(
const std::string &name,
- int_type value,
+ signed value,
const std::string &unit,
const std::string &formatter
):
@@ -47,7 +48,7 @@ sensor_value_t::sensor_value_t(
sensor_value_t::sensor_value_t(
const std::string &name,
- real_type value,
+ double value,
const std::string &unit,
const std::string &formatter
):
@@ -79,3 +80,15 @@ std::string sensor_value_t::to_pp_string(void) const{
}
UHD_THROW_INVALID_CODE_PATH();
}
+
+bool sensor_value_t::to_bool(void) const{
+ return value == "true";
+}
+
+signed sensor_value_t::to_int(void) const{
+ return boost::lexical_cast<signed>(value);
+}
+
+double sensor_value_t::to_real(void) const{
+ return boost::lexical_cast<double>(value);
+}
diff --git a/host/lib/usrp/dboard/db_basic_and_lf.cpp b/host/lib/usrp/dboard/db_basic_and_lf.cpp
index b311576d2..b319289db 100644
--- a/host/lib/usrp/dboard/db_basic_and_lf.cpp
+++ b/host/lib/usrp/dboard/db_basic_and_lf.cpp
@@ -173,10 +173,6 @@ void basic_rx::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = true; //there is no LO, so it must be true!
- return;
-
case SUBDEV_PROP_BANDWIDTH:
val = subdev_bandwidth_scalar[get_subdev_name()]*_max_freq;
return;
@@ -284,10 +280,6 @@ void basic_tx::tx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = true; //there is no LO, so it must be true!
- return;
-
case SUBDEV_PROP_BANDWIDTH:
val = subdev_bandwidth_scalar[get_subdev_name()]*_max_freq;
return;
diff --git a/host/lib/usrp/dboard/db_dbsrx.cpp b/host/lib/usrp/dboard/db_dbsrx.cpp
index 3ea9cea80..98d9479fc 100644
--- a/host/lib/usrp/dboard/db_dbsrx.cpp
+++ b/host/lib/usrp/dboard/db_dbsrx.cpp
@@ -25,6 +25,7 @@
#include <uhd/utils/algorithm.hpp>
#include <uhd/utils/warning.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/usrp/subdev_props.hpp>
#include <uhd/usrp/dboard_base.hpp>
@@ -561,8 +562,13 @@ void dbsrx::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked();
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
diff --git a/host/lib/usrp/dboard/db_dbsrx2.cpp b/host/lib/usrp/dboard/db_dbsrx2.cpp
index defb70ff5..f4b797995 100644
--- a/host/lib/usrp/dboard/db_dbsrx2.cpp
+++ b/host/lib/usrp/dboard/db_dbsrx2.cpp
@@ -22,6 +22,7 @@
#include <uhd/utils/assert.hpp>
#include <uhd/utils/algorithm.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/usrp/subdev_props.hpp>
#include <uhd/usrp/dboard_base.hpp>
@@ -400,8 +401,13 @@ void dbsrx2::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked();
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
diff --git a/host/lib/usrp/dboard/db_rfx.cpp b/host/lib/usrp/dboard/db_rfx.cpp
index 2c672ded8..3e3cf00f2 100644
--- a/host/lib/usrp/dboard/db_rfx.cpp
+++ b/host/lib/usrp/dboard/db_rfx.cpp
@@ -36,6 +36,7 @@
#include <uhd/types/dict.hpp>
#include <uhd/usrp/subdev_props.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/utils/assert.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/algorithm.hpp>
@@ -449,8 +450,13 @@ void rfx_xcvr::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked(dboard_iface::UNIT_RX);
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(dboard_iface::UNIT_RX), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
@@ -546,8 +552,13 @@ void rfx_xcvr::tx_get(const wax::obj &key_, wax::obj &val){
val = true;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked(dboard_iface::UNIT_TX);
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(dboard_iface::UNIT_TX), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
diff --git a/host/lib/usrp/dboard/db_tvrx.cpp b/host/lib/usrp/dboard/db_tvrx.cpp
index a9ce38000..578999432 100644
--- a/host/lib/usrp/dboard/db_tvrx.cpp
+++ b/host/lib/usrp/dboard/db_tvrx.cpp
@@ -32,6 +32,7 @@
#include <uhd/utils/algorithm.hpp>
#include <uhd/utils/warning.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/usrp/subdev_props.hpp>
#include <uhd/usrp/dboard_base.hpp>
@@ -463,10 +464,6 @@ void tvrx::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = true;
- return;
-
case SUBDEV_PROP_BANDWIDTH:
val = 6.0e6;
return;
diff --git a/host/lib/usrp/dboard/db_unknown.cpp b/host/lib/usrp/dboard/db_unknown.cpp
index d91d58409..f0a4c000e 100644
--- a/host/lib/usrp/dboard/db_unknown.cpp
+++ b/host/lib/usrp/dboard/db_unknown.cpp
@@ -154,10 +154,6 @@ void unknown_rx::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = true; //there is no LO, so it must be true!
- return;
-
case SUBDEV_PROP_BANDWIDTH:
val = 0.0;
return;
@@ -256,10 +252,6 @@ void unknown_tx::tx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = true; //there is no LO, so it must be true!
- return;
-
case SUBDEV_PROP_BANDWIDTH:
val = 0.0;
return;
diff --git a/host/lib/usrp/dboard/db_wbx.cpp b/host/lib/usrp/dboard/db_wbx.cpp
index 135997789..0bc2d0ca1 100644
--- a/host/lib/usrp/dboard/db_wbx.cpp
+++ b/host/lib/usrp/dboard/db_wbx.cpp
@@ -68,6 +68,7 @@
#include <uhd/types/dict.hpp>
#include <uhd/usrp/subdev_props.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/utils/assert.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/algorithm.hpp>
@@ -521,8 +522,13 @@ void wbx_xcvr::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked(dboard_iface::UNIT_RX);
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(dboard_iface::UNIT_RX), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
@@ -622,8 +628,13 @@ void wbx_xcvr::tx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked(dboard_iface::UNIT_TX);
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(dboard_iface::UNIT_TX), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
diff --git a/host/lib/usrp/dboard/db_xcvr2450.cpp b/host/lib/usrp/dboard/db_xcvr2450.cpp
index 6fb5a26a8..f4f74eb86 100644
--- a/host/lib/usrp/dboard/db_xcvr2450.cpp
+++ b/host/lib/usrp/dboard/db_xcvr2450.cpp
@@ -53,6 +53,7 @@
#include <uhd/utils/algorithm.hpp>
#include <uhd/utils/warning.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/sensors.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/usrp/subdev_props.hpp>
#include <uhd/usrp/dboard_base.hpp>
@@ -616,12 +617,19 @@ void xcvr2450::rx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked();
+ case SUBDEV_PROP_SENSOR:
+ if (key.name == "lo_locked")
+ val = sensor_value_t("LO", this->get_locked(), "locked", "unlocked");
+ else if (key.name == "rssi")
+ val = sensor_value_t("RSSI", this->get_rssi(), "dB");
+ else
+ UHD_THROW_INVALID_CODE_PATH();
return;
- case SUBDEV_PROP_RSSI:
- val = this->get_rssi();
+ case SUBDEV_PROP_SENSOR_NAMES:{
+ prop_names_t names = list_of("lo_locked")("rssi");
+ val = names;
+ }
return;
case SUBDEV_PROP_BANDWIDTH:
@@ -719,8 +727,13 @@ void xcvr2450::tx_get(const wax::obj &key_, wax::obj &val){
val = false;
return;
- case SUBDEV_PROP_LO_LOCKED:
- val = this->get_locked();
+ case SUBDEV_PROP_SENSOR:
+ UHD_ASSERT_THROW(key.name == "lo_locked");
+ val = sensor_value_t("LO", this->get_locked(), "locked", "unlocked");
+ return;
+
+ case SUBDEV_PROP_SENSOR_NAMES:
+ val = prop_names_t(1, "lo_locked");
return;
case SUBDEV_PROP_BANDWIDTH:
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp
index 4bdb2bf2e..73bac029d 100644
--- a/host/lib/usrp/multi_usrp.cpp
+++ b/host/lib/usrp/multi_usrp.cpp
@@ -214,6 +214,14 @@ public:
return (*_dev)[DEVICE_PROP_MBOARD_NAMES].as<prop_names_t>().size();
}
+ sensor_value_t get_mboard_sensor(const std::string &name, size_t mboard){
+ return _mboard(mboard)[named_prop_t(MBOARD_PROP_SENSOR, name)].as<sensor_value_t>();
+ }
+
+ std::vector<std::string> get_mboard_sensor_names(size_t mboard){
+ return _mboard(mboard)[MBOARD_PROP_SENSOR_NAMES].as<prop_names_t>();
+ }
+
/*******************************************************************
* RX methods
******************************************************************/
@@ -292,10 +300,6 @@ public:
return _rx_subdev(chan)[SUBDEV_PROP_ANTENNA_NAMES].as<prop_names_t>();
}
- bool get_rx_lo_locked(size_t chan){
- return _rx_subdev(chan)[SUBDEV_PROP_LO_LOCKED].as<bool>();
- }
-
void set_rx_bandwidth(double bandwidth, size_t chan){
_rx_subdev(chan)[SUBDEV_PROP_BANDWIDTH] = bandwidth;
}
@@ -304,14 +308,18 @@ public:
return _rx_subdev(chan)[SUBDEV_PROP_BANDWIDTH].as<double>();
}
- double read_rssi(size_t chan){
- return _rx_subdev(chan)[SUBDEV_PROP_RSSI].as<double>();
- }
-
dboard_iface::sptr get_rx_dboard_iface(size_t chan){
return _rx_dboard(chan)[DBOARD_PROP_DBOARD_IFACE].as<dboard_iface::sptr>();
}
+ sensor_value_t get_rx_sensor(const std::string &name, size_t chan){
+ return _rx_subdev(chan)[named_prop_t(SUBDEV_PROP_SENSOR, name)].as<sensor_value_t>();
+ }
+
+ std::vector<std::string> get_rx_sensor_names(size_t chan){
+ return _rx_subdev(chan)[SUBDEV_PROP_SENSOR_NAMES].as<prop_names_t>();
+ }
+
/*******************************************************************
* TX methods
******************************************************************/
@@ -390,10 +398,6 @@ public:
return _tx_subdev(chan)[SUBDEV_PROP_ANTENNA_NAMES].as<prop_names_t>();
}
- bool get_tx_lo_locked(size_t chan){
- return _tx_subdev(chan)[SUBDEV_PROP_LO_LOCKED].as<bool>();
- }
-
void set_tx_bandwidth(double bandwidth, size_t chan){
_tx_subdev(chan)[SUBDEV_PROP_BANDWIDTH] = bandwidth;
}
@@ -406,6 +410,14 @@ public:
return _tx_dboard(chan)[DBOARD_PROP_DBOARD_IFACE].as<dboard_iface::sptr>();
}
+ sensor_value_t get_tx_sensor(const std::string &name, size_t chan){
+ return _tx_subdev(chan)[named_prop_t(SUBDEV_PROP_SENSOR, name)].as<sensor_value_t>();
+ }
+
+ std::vector<std::string> get_tx_sensor_names(size_t chan){
+ return _tx_subdev(chan)[SUBDEV_PROP_SENSOR_NAMES].as<prop_names_t>();
+ }
+
private:
device::sptr _dev;