forked from sdr/gr-osmosdr
use clip method provided by range class to pick gain values
This commit is contained in:
parent
1ea5a90b19
commit
604a9d79b0
|
@ -407,31 +407,12 @@ bool osmosdr_src_c::get_gain_mode( size_t chan )
|
||||||
return _auto_gain;
|
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 )
|
double osmosdr_src_c::set_gain( double gain, size_t chan )
|
||||||
{
|
{
|
||||||
osmosdr::gain_range_t gains = osmosdr_src_c::get_gain_range( chan );
|
osmosdr::gain_range_t gains = osmosdr_src_c::get_gain_range( chan );
|
||||||
double picked_gain = pick_closest_gain( gains, gain );
|
|
||||||
|
|
||||||
if (_dev)
|
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 );
|
return get_gain( chan );
|
||||||
}
|
}
|
||||||
|
|
|
@ -438,31 +438,12 @@ bool rtl_source_c::get_gain_mode( size_t chan )
|
||||||
return _auto_gain;
|
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 )
|
double rtl_source_c::set_gain( double gain, size_t chan )
|
||||||
{
|
{
|
||||||
osmosdr::gain_range_t gains = rtl_source_c::get_gain_range( chan );
|
osmosdr::gain_range_t gains = rtl_source_c::get_gain_range( chan );
|
||||||
double picked_gain = pick_closest_gain( gains, gain );
|
|
||||||
|
|
||||||
if (_dev)
|
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 );
|
return get_gain( chan );
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,30 +239,11 @@ bool rtl_tcp_source_c::get_gain_mode( size_t chan )
|
||||||
return _auto_gain;
|
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 )
|
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 );
|
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;
|
_gain = gain;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue