diff options
author | Jiří Pinkava <j-pi@seznam.cz> | 2015-03-17 13:19:20 +0100 |
---|---|---|
committer | Steve Markgraf <steve@steve-m.de> | 2015-05-16 00:37:17 +0200 |
commit | d892279085491f9c610388da89bc701ef6ac632c (patch) | |
tree | 5897a49c2660cc89e37b6ec60ec132ca47cd06c7 /src/librtlsdr.c | |
parent | d447a2e9830463ff83f6dcaef59b5684ff1df255 (diff) |
Allow setting bandwidth for R820T
This improves SDR performence for nearby channel interference.
As a sideeffect also improves dynamic range becase ADC is not overloaded
by onwanted singlas.
Signed-off-by: Steve Markgraf <steve@steve-m.de>
Diffstat (limited to 'src/librtlsdr.c')
-rw-r--r-- | src/librtlsdr.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 9a3ebcd..0ee4123 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -126,6 +126,7 @@ struct rtlsdr_dev { }; 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); /* generic tuner interface functions, shall be moved to the tuner implementations */ int e4000_init(void *dev) { @@ -238,7 +239,20 @@ int r820t_set_freq(void *dev, uint32_t freq) { rtlsdr_dev_t* devt = (rtlsdr_dev_t*)dev; return r82xx_set_freq(&devt->r82xx_p, freq); } -int r820t_set_bw(void *dev, int bw) { return 0; } + +int r820t_set_bw(void *dev, int bw) { + int r; + rtlsdr_dev_t* devt = (rtlsdr_dev_t*)dev; + + r = r82xx_set_bandwidth(&devt->r82xx_p, bw, devt->rate); + if(r < 0) + return r; + r = rtlsdr_set_if_freq(devt, r); + if (r) + return r; + return rtlsdr_set_center_freq(devt, devt->freq); +} + int r820t_set_gain(void *dev, int gain) { rtlsdr_dev_t* devt = (rtlsdr_dev_t*)dev; return r82xx_set_gain(&devt->r82xx_p, 1, gain); @@ -670,7 +684,7 @@ int rtlsdr_deinit_baseband(rtlsdr_dev_t *dev) return r; } -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) { uint32_t rtl_xtal; int32_t if_freq; |