diff options
| author | Martin Braun <martin.braun@ettus.com> | 2018-03-28 14:39:30 -0700 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2018-04-03 17:03:14 -0700 | 
| commit | 1d0c25ef7d9fc9f0a2e1d171ade1adf56abaf03c (patch) | |
| tree | 5e108702c0245da675b876f6085f759eac097bb8 | |
| parent | d110e64f82fe4413393f8078d82ae0468cef283a (diff) | |
| download | uhd-1d0c25ef7d9fc9f0a2e1d171ade1adf56abaf03c.tar.gz uhd-1d0c25ef7d9fc9f0a2e1d171ade1adf56abaf03c.tar.bz2 uhd-1d0c25ef7d9fc9f0a2e1d171ade1adf56abaf03c.zip  | |
multi_usrp: Add API call to query the clock rate range
| -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"  | 
