From 604a9d79b0e80a30edbfb2fbbd06a20d4ad166e8 Mon Sep 17 00:00:00 2001 From: Dimitri Stolnikov Date: Sun, 1 Jul 2012 11:38:46 +0200 Subject: [PATCH] use clip method provided by range class to pick gain values --- lib/osmosdr/osmosdr_src_c.cc | 21 +-------------------- lib/rtl/rtl_source_c.cc | 21 +-------------------- lib/rtl_tcp/rtl_tcp_source_c.cc | 21 +-------------------- 3 files changed, 3 insertions(+), 60 deletions(-) diff --git a/lib/osmosdr/osmosdr_src_c.cc b/lib/osmosdr/osmosdr_src_c.cc index e02872b..715049c 100644 --- a/lib/osmosdr/osmosdr_src_c.cc +++ b/lib/osmosdr/osmosdr_src_c.cc @@ -407,31 +407,12 @@ bool osmosdr_src_c::get_gain_mode( size_t chan ) return _auto_gain; } -static double pick_closest_gain(osmosdr::gain_range_t &gains, double required) -{ - double result = required; - double distance = 100; - - BOOST_FOREACH(osmosdr::range_t gain, gains) - { - double diff = fabs(gain.start() - required); - - if (diff < distance) { - distance = diff; - result = gain.start(); - } - } - - return result; -} - double osmosdr_src_c::set_gain( double gain, size_t chan ) { osmosdr::gain_range_t gains = osmosdr_src_c::get_gain_range( chan ); - double picked_gain = pick_closest_gain( gains, gain ); if (_dev) - osmosdr_set_tuner_gain( _dev, int(picked_gain * 10.0) ); + osmosdr_set_tuner_gain( _dev, int(gains.clip(gain) * 10.0) ); return get_gain( chan ); } diff --git a/lib/rtl/rtl_source_c.cc b/lib/rtl/rtl_source_c.cc index 7a63858..4715041 100644 --- a/lib/rtl/rtl_source_c.cc +++ b/lib/rtl/rtl_source_c.cc @@ -438,31 +438,12 @@ bool rtl_source_c::get_gain_mode( size_t chan ) return _auto_gain; } -static double pick_closest_gain(osmosdr::gain_range_t &gains, double required) -{ - double result = required; - double distance = 100; - - BOOST_FOREACH(osmosdr::range_t gain, gains) - { - double diff = fabs(gain.start() - required); - - if (diff < distance) { - distance = diff; - result = gain.start(); - } - } - - return result; -} - double rtl_source_c::set_gain( double gain, size_t chan ) { osmosdr::gain_range_t gains = rtl_source_c::get_gain_range( chan ); - double picked_gain = pick_closest_gain( gains, gain ); if (_dev) - rtlsdr_set_tuner_gain( _dev, int(picked_gain * 10.0) ); + rtlsdr_set_tuner_gain( _dev, int(gains.clip(gain) * 10.0) ); return get_gain( chan ); } diff --git a/lib/rtl_tcp/rtl_tcp_source_c.cc b/lib/rtl_tcp/rtl_tcp_source_c.cc index b9e4a00..f5f3b20 100644 --- a/lib/rtl_tcp/rtl_tcp_source_c.cc +++ b/lib/rtl_tcp/rtl_tcp_source_c.cc @@ -239,30 +239,11 @@ bool rtl_tcp_source_c::get_gain_mode( size_t chan ) return _auto_gain; } -static double pick_closest_gain(osmosdr::gain_range_t &gains, double required) -{ - double result = required; - double distance = 100; - - BOOST_FOREACH(osmosdr::range_t gain, gains) - { - double diff = fabs(gain.start() - required); - - if (diff < distance) { - distance = diff; - result = gain.start(); - } - } - - return result; -} - double rtl_tcp_source_c::set_gain( double gain, size_t chan ) { osmosdr::gain_range_t gains = rtl_tcp_source_c::get_gain_range( chan ); - double picked_gain = pick_closest_gain( gains, gain ); - _src->set_gain( int(picked_gain * 10.0) ); + _src->set_gain( int(gains.clip(gain) * 10.0) ); _gain = gain;