@ -337,8 +337,6 @@ static rtlsdr_dongle_t known_devices[] = {
# define MIN_RTL_XTAL_FREQ (DEF_RTL_XTAL_FREQ - 1000)
# define MIN_RTL_XTAL_FREQ (DEF_RTL_XTAL_FREQ - 1000)
# define MAX_RTL_XTAL_FREQ (DEF_RTL_XTAL_FREQ + 1000)
# define MAX_RTL_XTAL_FREQ (DEF_RTL_XTAL_FREQ + 1000)
# define MAX_SAMP_RATE 3200000
# define CTRL_IN (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN)
# define CTRL_IN (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN)
# define CTRL_OUT (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT)
# define CTRL_OUT (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT)
# define CTRL_TIMEOUT 300
# define CTRL_TIMEOUT 300
@ -1053,20 +1051,24 @@ int rtlsdr_set_sample_rate(rtlsdr_dev_t *dev, uint32_t samp_rate)
{
{
int r = 0 ;
int r = 0 ;
uint16_t tmp ;
uint16_t tmp ;
uint32_t rsamp_ratio ;
uint32_t rsamp_ratio , real_rsamp_ratio ;
double real_rate ;
double real_rate ;
if ( ! dev )
if ( ! dev )
return - 1 ;
return - 1 ;
/* check for the maximum rate the resampler supports */
/* check if the rate is supported by the resampler */
if ( samp_rate > MAX_SAMP_RATE )
if ( ( samp_rate < = 225000 ) | | ( samp_rate > 3200000 ) | |
samp_rate = MAX_SAMP_RATE ;
( ( samp_rate > 300000 ) & & ( samp_rate < = 900000 ) ) ) {
fprintf ( stderr , " Invalid sample rate: %u Hz \n " , samp_rate ) ;
return - EINVAL ;
}
rsamp_ratio = ( dev - > rtl_xtal * TWO_POW ( 22 ) ) / samp_rate ;
rsamp_ratio = ( dev - > rtl_xtal * TWO_POW ( 22 ) ) / samp_rate ;
rsamp_ratio & = ~ 3 ;
rsamp_ratio & = 0x0ffffffc ;
real_rate = ( dev - > rtl_xtal * TWO_POW ( 22 ) ) / rsamp_ratio ;
real_rsamp_ratio = rsamp_ratio | ( ( rsamp_ratio & 0x08000000 ) < < 1 ) ;
real_rate = ( dev - > rtl_xtal * TWO_POW ( 22 ) ) / real_rsamp_ratio ;
if ( ( ( double ) samp_rate ) ! = real_rate )
if ( ( ( double ) samp_rate ) ! = real_rate )
fprintf ( stderr , " Exact sample rate is: %f Hz \n " , real_rate ) ;
fprintf ( stderr , " Exact sample rate is: %f Hz \n " , real_rate ) ;