diff options
author | Martin Braun <martin.braun@ettus.com> | 2015-01-15 18:00:44 +0100 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2015-01-27 11:03:44 +0100 |
commit | 339396411d866cea375134a10698c9f8edcb78a0 (patch) | |
tree | fdb1408abc11d00ec628b633a565bfccfe13b0a0 /gr-uhd/lib/usrp_sink_impl.cc | |
parent | 500517ac00946f0288b6df8aef873793796694a4 (diff) |
uhd: Normalized gain ranges
Diffstat (limited to 'gr-uhd/lib/usrp_sink_impl.cc')
-rw-r--r-- | gr-uhd/lib/usrp_sink_impl.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gr-uhd/lib/usrp_sink_impl.cc b/gr-uhd/lib/usrp_sink_impl.cc index c184f0a406..dccab65c22 100644 --- a/gr-uhd/lib/usrp_sink_impl.cc +++ b/gr-uhd/lib/usrp_sink_impl.cc @@ -235,6 +235,16 @@ namespace gr { return _dev->set_tx_gain(gain, name, chan); } + void usrp_sink_impl::set_normalized_gain(double norm_gain, size_t chan) + { + if (norm_gain > 1.0 || norm_gain < 0.0) { + throw std::runtime_error("Normalized gain out of range, must be in [0, 1]."); + } + ::uhd::gain_range_t gain_range = get_gain_range(chan); + double abs_gain = (norm_gain * (gain_range.stop() - gain_range.start())) + gain_range.start(); + set_gain(abs_gain, chan); + } + double usrp_sink_impl::get_gain(size_t chan) { @@ -249,6 +259,19 @@ namespace gr { return _dev->get_tx_gain(name, chan); } + double + usrp_sink_impl::get_normalized_gain(size_t chan) + { + ::uhd::gain_range_t gain_range = get_gain_range(chan); + double norm_gain = + (get_gain(chan) - gain_range.start()) / + (gain_range.stop() - gain_range.start()); + // Avoid rounding errors: + if (norm_gain > 1.0) return 1.0; + if (norm_gain < 0.0) return 0.0; + return norm_gain; + } + std::vector<std::string> usrp_sink_impl::get_gain_names(size_t chan) { |