diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2015-01-29 16:29:43 -0800 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2015-01-29 16:29:43 -0800 |
commit | 77862dd477ad445d77b90b2179c8c039c0263bdc (patch) | |
tree | 241db801260f90d70a7c041a988b42b3d90d11a0 /gr-uhd/lib | |
parent | 27027e5e1e06dc1120f4f1929028e4e3619d4a02 (diff) | |
parent | 12972cbce00702ce7e74b83ad216fdfc2e803f2d (diff) |
Merge branch 'master' into next
Diffstat (limited to 'gr-uhd/lib')
-rw-r--r-- | gr-uhd/lib/usrp_sink_impl.cc | 23 | ||||
-rw-r--r-- | gr-uhd/lib/usrp_sink_impl.h | 2 | ||||
-rw-r--r-- | gr-uhd/lib/usrp_source_impl.cc | 23 | ||||
-rw-r--r-- | gr-uhd/lib/usrp_source_impl.h | 2 |
4 files changed, 50 insertions, 0 deletions
diff --git a/gr-uhd/lib/usrp_sink_impl.cc b/gr-uhd/lib/usrp_sink_impl.cc index c2a019e2e3..e50aac933a 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) { diff --git a/gr-uhd/lib/usrp_sink_impl.h b/gr-uhd/lib/usrp_sink_impl.h index 21bb991b92..0cc7f59af0 100644 --- a/gr-uhd/lib/usrp_sink_impl.h +++ b/gr-uhd/lib/usrp_sink_impl.h @@ -69,6 +69,7 @@ namespace gr { ::uhd::freq_range_t get_freq_range(size_t chan); double get_gain(size_t chan); double get_gain(const std::string &name, size_t chan); + double get_normalized_gain(size_t chan); std::vector<std::string> get_gain_names(size_t chan); ::uhd::gain_range_t get_gain_range(size_t chan); ::uhd::gain_range_t get_gain_range(const std::string &name, size_t chan); @@ -95,6 +96,7 @@ namespace gr { size_t chan); void set_gain(double gain, size_t chan); void set_gain(double gain, const std::string &name, size_t chan); + void set_normalized_gain(double gain, size_t chan); void set_antenna(const std::string &ant, size_t chan); void set_bandwidth(double bandwidth, size_t chan); double get_bandwidth(size_t chan); diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc index 780714a910..b36e71befe 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) { diff --git a/gr-uhd/lib/usrp_source_impl.h b/gr-uhd/lib/usrp_source_impl.h index 6de4c9c6a3..c4a96aab42 100644 --- a/gr-uhd/lib/usrp_source_impl.h +++ b/gr-uhd/lib/usrp_source_impl.h @@ -69,6 +69,7 @@ namespace gr { ::uhd::freq_range_t get_freq_range(size_t chan); double get_gain(size_t chan); double get_gain(const std::string &name, size_t chan); + double get_normalized_gain(size_t chan); std::vector<std::string> get_gain_names(size_t chan); ::uhd::gain_range_t get_gain_range(size_t chan); ::uhd::gain_range_t get_gain_range(const std::string &name, size_t chan); @@ -95,6 +96,7 @@ namespace gr { size_t chan); void set_gain(double gain, size_t chan); void set_gain(double gain, const std::string &name, size_t chan); + void set_normalized_gain(double gain, size_t chan); void set_antenna(const std::string &ant, size_t chan); void set_bandwidth(double bandwidth, size_t chan); double get_bandwidth(size_t chan); |