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;