summaryrefslogtreecommitdiff
path: root/gr-uhd/lib/usrp_source_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-uhd/lib/usrp_source_impl.cc')
-rw-r--r--gr-uhd/lib/usrp_source_impl.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc
index 3142627952..c3b67533b5 100644
--- a/gr-uhd/lib/usrp_source_impl.cc
+++ b/gr-uhd/lib/usrp_source_impl.cc
@@ -203,6 +203,16 @@ namespace gr {
return _dev->set_rx_gain(gain, name, chan);
}
+ void usrp_source_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_source_impl::get_gain(size_t chan)
{
@@ -217,6 +227,19 @@ namespace gr {
return _dev->get_rx_gain(name, chan);
}
+ double
+ usrp_source_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_source_impl::get_gain_names(size_t chan)
{