diff --git a/lib/rtl/rtl_source_c.cc b/lib/rtl/rtl_source_c.cc index 794d4f7..483ca15 100644 --- a/lib/rtl/rtl_source_c.cc +++ b/lib/rtl/rtl_source_c.cc @@ -312,16 +312,16 @@ osmosdr::meta_range_t rtl_source_c::get_sample_rates() { osmosdr::meta_range_t range; + range += osmosdr::range_t( 1000000 ); // known to work range += osmosdr::range_t( 1024000 ); // known to work range += osmosdr::range_t( 1800000 ); // known to work + range += osmosdr::range_t( 1920000 ); // known to work range += osmosdr::range_t( 2048000 ); // known to work - range += osmosdr::range_t( 2400000 ); // may work + range += osmosdr::range_t( 2400000 ); // known to work range += osmosdr::range_t( 2600000 ); // may work range += osmosdr::range_t( 2800000 ); // may work range += osmosdr::range_t( 3000000 ); // may work - range += osmosdr::range_t( 3200000 ); // max rate, may work - - // TODO: read from the librtlsdr as soon as the api is available + range += osmosdr::range_t( 3200000 ); // max rate return range; } @@ -347,9 +347,20 @@ osmosdr::freq_range_t rtl_source_c::get_freq_range( size_t chan ) { osmosdr::freq_range_t range; - range += osmosdr::range_t( 50e6, 2.2e9, 100 ); + if (_dev) { + enum rtlsdr_tuner tuner = rtlsdr_get_tuner_type(_dev); - // TODO: read from the librtlsdr as soon as the api is available + if ( tuner == RTLSDR_TUNER_E4000 ) { + /* there is a (temperature dependent) gap between 1100 to 1250 MHz */ + range += osmosdr::range_t( 50e6, 2.2e9, 100 ); + } else if ( tuner == RTLSDR_TUNER_FC0012 ) { + /* range += osmosdr::range_t( 50e6, 2.2e9, 100 ); */ + } else if ( tuner == RTLSDR_TUNER_FC0013 ) { + /* range += osmosdr::range_t( 50e6, 2.2e9, 100 ); */ + } else if ( tuner == RTLSDR_TUNER_FC2580 ) { + /* range += osmosdr::range_t( 50e6, 2.2e9, 100 ); */ + } + } return range; } @@ -399,26 +410,15 @@ osmosdr::gain_range_t rtl_source_c::get_gain_range( size_t chan ) { osmosdr::gain_range_t range; - range += osmosdr::range_t( -1.0 ); - range += osmosdr::range_t( 1.5 ); - range += osmosdr::range_t( 4.0 ); - range += osmosdr::range_t( 6.5 ); - range += osmosdr::range_t( 9.0 ); - range += osmosdr::range_t( 11.5 ); - range += osmosdr::range_t( 14.0 ); - range += osmosdr::range_t( 16.5 ); - range += osmosdr::range_t( 19.0 ); - range += osmosdr::range_t( 21.5 ); - range += osmosdr::range_t( 24.0 ); - range += osmosdr::range_t( 29.0 ); - range += osmosdr::range_t( 34.0 ); - range += osmosdr::range_t( 42.0 ); - range += osmosdr::range_t( 43.0 ); - range += osmosdr::range_t( 45.0 ); - range += osmosdr::range_t( 47.0 ); - range += osmosdr::range_t( 49.0 ); - - // TODO: read from the librtlsdr as soon as the api is available + if (_dev) { + int count = rtlsdr_get_tuner_gains(_dev, NULL); + if (count > 0) { + int gains[ count ]; + count = rtlsdr_get_tuner_gains(_dev, gains); + for (int i = 0; i < count; i++) + range += osmosdr::range_t( gains[i] / 10.0 ); + } + } return range; } diff --git a/lib/rtl_tcp/rtl_tcp_source_c.cc b/lib/rtl_tcp/rtl_tcp_source_c.cc index 1960f7b..f5fb58b 100644 --- a/lib/rtl_tcp/rtl_tcp_source_c.cc +++ b/lib/rtl_tcp/rtl_tcp_source_c.cc @@ -120,14 +120,16 @@ osmosdr::meta_range_t rtl_tcp_source_c::get_sample_rates( void ) { osmosdr::meta_range_t range; + range += osmosdr::range_t( 1000000 ); // known to work range += osmosdr::range_t( 1024000 ); // known to work range += osmosdr::range_t( 1800000 ); // known to work + range += osmosdr::range_t( 1920000 ); // known to work range += osmosdr::range_t( 2048000 ); // known to work - range += osmosdr::range_t( 2400000 ); // may work + range += osmosdr::range_t( 2400000 ); // known to work range += osmosdr::range_t( 2600000 ); // may work range += osmosdr::range_t( 2800000 ); // may work range += osmosdr::range_t( 3000000 ); // may work - range += osmosdr::range_t( 3200000 ); // max rate, may work + range += osmosdr::range_t( 3200000 ); // max rate return range; } @@ -148,6 +150,8 @@ double rtl_tcp_source_c::get_sample_rate( void ) osmosdr::freq_range_t rtl_tcp_source_c::get_freq_range( size_t chan ) { + // FIXME: assumption on E4000 tuner + osmosdr::freq_range_t range(50e6, 2.2e6, 100); return range; @@ -190,6 +194,8 @@ osmosdr::gain_range_t rtl_tcp_source_c::get_gain_range( size_t chan ) { osmosdr::gain_range_t range; + // FIXME: assumption on E4000 tuner + range += osmosdr::range_t( -1.0 ); range += osmosdr::range_t( 1.5 ); range += osmosdr::range_t( 4.0 );