From d1a5b70a8f9a54a2a39e30415fbc0a4c607222f7 Mon Sep 17 00:00:00 2001 From: Brent Stapleton Date: Thu, 1 Aug 2019 14:01:50 -0700 Subject: gain_groups: Add zero-value gain groups Add convenience factory for making a gain group that has a single zero-valued element. This factory requires a name, which should probably be ALL_GAINS, or something similar (these constants are device-specific). Using this new make_zero factory in the X300 radio control when we don't find any gain elements so that our gain groups aren't empty. This simplifies our later setters/getters because we know that we'll always have _something_ cached. Note that we only register this zero value gain group for TX, as our ADC is registered as a gain element, so our RX gain groups are never empty. --- host/include/uhd/utils/gain_group.hpp | 7 +++++++ host/lib/utils/gain_group.cpp | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/host/include/uhd/utils/gain_group.hpp b/host/include/uhd/utils/gain_group.hpp index f85e841dc..4a3a01a65 100644 --- a/host/include/uhd/utils/gain_group.hpp +++ b/host/include/uhd/utils/gain_group.hpp @@ -91,6 +91,13 @@ public: * \return a gain group object. */ static sptr make(void); + + /*! + * Make a new gain group with all zero values. + * \param name the name of the (only and zero-valued) gain element + * \return a gain group object populated with zeroes + */ + static sptr make_zero(); }; } // namespace uhd diff --git a/host/lib/utils/gain_group.cpp b/host/lib/utils/gain_group.cpp index 50edf2515..0e4df6469 100644 --- a/host/lib/utils/gain_group.cpp +++ b/host/lib/utils/gain_group.cpp @@ -182,3 +182,14 @@ private: gain_group::sptr gain_group::make(void){ return sptr(new gain_group_impl()); } + +gain_group::sptr gain_group::make_zero() +{ + gain_fcns_t gain_fcns; + gain_fcns.get_range = []() { return meta_range_t(0.0, 0.0); }; + gain_fcns.get_value = []() { return 0.0; }; + gain_fcns.set_value = [](const double) {}; + auto gg = make(); + gg->register_fcns("null", gain_fcns); + return gg; +} -- cgit v1.2.3