diff options
-rw-r--r-- | host/include/uhd/usrp/multi_usrp.hpp | 20 | ||||
-rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 17 |
2 files changed, 37 insertions, 0 deletions
diff --git a/host/include/uhd/usrp/multi_usrp.hpp b/host/include/uhd/usrp/multi_usrp.hpp index 2490cc7f8..c70448c3f 100644 --- a/host/include/uhd/usrp/multi_usrp.hpp +++ b/host/include/uhd/usrp/multi_usrp.hpp @@ -181,6 +181,26 @@ public: */ virtual double get_master_clock_rate(size_t mboard = 0) = 0; + /*! Return the range within which the master clock rate can be set for this + * session + * + * Note that many USRPs do not actually support setting the master clock + * rate during a running session. In this case, the range will consist of + * a single value, which is the current master clock rate. + * Values from this range are valid/sensible inputs to + * set_master_clock_rate(), although keep in mind that the latter coerces. + * + * Examples: + * - The B200 series' master clock rate can be changed at runtime and + * will report the true range of supported values + * - The X300 series has _two_ discrete options for the clock rate, but will + * always return the clock rate which the USRP was initialized to because + * it cannot be changed at runtime + * - The N200 series does not have a configurable clock rate, and will + * always return the same single value as a range + */ + virtual meta_range_t get_master_clock_rate_range(const size_t mboard = 0) = 0; + /*! * Get a printable summary for this USRP configuration. * \return a printable string diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index 3af762c82..f9509b7f3 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -465,6 +465,23 @@ public: return _tree->access<double>(mb_root(mboard) / "tick_rate").get(); } + meta_range_t get_master_clock_rate_range(const size_t mboard) + { + if (_tree->exists(mb_root(mboard) / "tick_rate/range")) { + return _tree->access<meta_range_t>( + mb_root(mboard) / "tick_rate/range" + ).get(); + } + // The USRP may not have a range defined, in which case we create a + // fake range with a single value: + const double tick_rate = get_master_clock_rate(mboard); + return meta_range_t( + tick_rate, + tick_rate, + 0 + ); + } + std::string get_pp_string(void){ std::string buff = str(boost::format( "%s USRP:\n" |