summaryrefslogtreecommitdiff
path: root/gr-uhd/lib
diff options
context:
space:
mode:
authorJohnathan Corgan <johnathan@corganlabs.com>2015-01-29 16:29:43 -0800
committerJohnathan Corgan <johnathan@corganlabs.com>2015-01-29 16:29:43 -0800
commit77862dd477ad445d77b90b2179c8c039c0263bdc (patch)
tree241db801260f90d70a7c041a988b42b3d90d11a0 /gr-uhd/lib
parent27027e5e1e06dc1120f4f1929028e4e3619d4a02 (diff)
parent12972cbce00702ce7e74b83ad216fdfc2e803f2d (diff)
Merge branch 'master' into next
Diffstat (limited to 'gr-uhd/lib')
-rw-r--r--gr-uhd/lib/usrp_sink_impl.cc23
-rw-r--r--gr-uhd/lib/usrp_sink_impl.h2
-rw-r--r--gr-uhd/lib/usrp_source_impl.cc23
-rw-r--r--gr-uhd/lib/usrp_source_impl.h2
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);