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" | 
