add auto enable direct sampling when tuned below 28.8 MHz

This commit is contained in:
rtlsdrblog 2023-08-23 23:34:39 +12:00
parent 65c8e96bb2
commit 0979750e9e

View File

@ -125,6 +125,7 @@ struct rtlsdr_dev {
void rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val); void rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val);
static int rtlsdr_set_if_freq(rtlsdr_dev_t *dev, uint32_t freq); static int rtlsdr_set_if_freq(rtlsdr_dev_t *dev, uint32_t freq);
static int rtlsdr_update_ds(rtlsdr_dev_t *dev, uint32_t freq);
/* generic tuner interface functions, shall be moved to the tuner implementations */ /* generic tuner interface functions, shall be moved to the tuner implementations */
int e4000_init(void *dev) { int e4000_init(void *dev) {
@ -888,6 +889,8 @@ int rtlsdr_set_center_freq(rtlsdr_dev_t *dev, uint32_t freq)
if (!dev || !dev->tuner) if (!dev || !dev->tuner)
return -1; return -1;
rtlsdr_update_ds(dev, freq);
if (dev->direct_sampling) { if (dev->direct_sampling) {
r = rtlsdr_set_if_freq(dev, freq); r = rtlsdr_set_if_freq(dev, freq);
} else if (dev->tuner && dev->tuner->set_freq) { } else if (dev->tuner && dev->tuner->set_freq) {
@ -1225,6 +1228,28 @@ int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on)
return r; return r;
} }
static int rtlsdr_update_ds(rtlsdr_dev_t *dev, uint32_t freq)
{
int new_ds;
int curr_ds;
if (!dev)
return -1;
curr_ds = rtlsdr_get_direct_sampling(dev);
if (curr_ds < 0)
return 1;
new_ds = freq < 28800000 ? 2 : 0;
dev->direct_sampling = new_ds;
if (curr_ds != new_ds) {
return rtlsdr_set_direct_sampling(dev, new_ds);
}
return 0;
}
int rtlsdr_get_direct_sampling(rtlsdr_dev_t *dev) int rtlsdr_get_direct_sampling(rtlsdr_dev_t *dev)
{ {
if (!dev) if (!dev)