Skip to content

Commit 79f4f30

Browse files
author
Adam
committed
add direct sampling switches to rtl_sdr
1 parent f0d6e89 commit 79f4f30

File tree

2 files changed

+30
-15
lines changed

2 files changed

+30
-15
lines changed

Diff for: src/librtlsdr.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -1636,17 +1636,17 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
16361636
if(dev->force_bt) rtlsdr_set_gpio(dev, 0, 1);
16371637
/* Hack to force direct sampling mode to always be on if we set the remote-enabled bit in the EEPROM to 1. Default on EEPROM is 0. */
16381638
dev->force_ds = (buf[7] & 0x01) ? 1 : 0;
1639-
if(dev->force_ds) {
1640-
dev->tuner_type = RTLSDR_TUNER_UNKNOWN;
1641-
rtlsdr_set_direct_sampling(dev, 2);
1642-
}
1643-
16441639

16451640
if (dev->tuner->init)
16461641
r = dev->tuner->init(dev);
16471642

16481643
rtlsdr_set_i2c_repeater(dev, 0);
16491644

1645+
if(dev->force_ds) {
1646+
dev->tuner_type = RTLSDR_TUNER_UNKNOWN;
1647+
rtlsdr_set_direct_sampling(dev, 2);
1648+
}
1649+
16501650
*out_dev = dev;
16511651

16521652
return 0;
@@ -1918,7 +1918,7 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
19181918
r = libusb_submit_transfer(dev->xfer[i]);
19191919
if (r < 0) {
19201920
fprintf(stderr, "Failed to submit transfer %i\n"
1921-
"Please increase your allowed "
1921+
"Please increase your allowed "
19221922
"usbfs buffer size with the "
19231923
"following command:\n"
19241924
"echo 0 > /sys/module/usbcore"

Diff for: src/rtl_sdr.c

+24-9
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
#include "rtl-sdr.h"
3535
#include "convenience/convenience.h"
3636

37-
#define DEFAULT_SAMPLE_RATE 2048000
37+
#define DEFAULT_SAMPLE_RATE 1500000
3838
#define DEFAULT_BUF_LENGTH (16 * 16384)
3939
#define MINIMAL_BUF_LENGTH 512
4040
#define MAXIMAL_BUF_LENGTH (256 * 16384)
@@ -48,13 +48,17 @@ void usage(void)
4848
fprintf(stderr,
4949
"rtl_sdr, an I/Q recorder for RTL2832 based DVB-T receivers\n\n"
5050
"Usage:\t -f frequency_to_tune_to [Hz]\n"
51-
"\t[-s samplerate (default: 2048000 Hz)]\n"
51+
"\t[-s samplerate (default: 1500000 Hz)]\n"
5252
"\t[-d device_index (default: 0)]\n"
5353
"\t[-g gain (default: 0 for auto)]\n"
5454
"\t[-p ppm_error (default: 0)]\n"
5555
"\t[-b output_block_size (default: 16 * 16384)]\n"
5656
"\t[-n number of samples to read (default: 0, infinite)]\n"
5757
"\t[-S force sync output (default: async)]\n"
58+
"\t[-E enable_option (default: none)]\n"
59+
"\t[use multiple -E to enable multiple options]\n"
60+
"\t[direct: enable direct sampling 1 (usually I)]\n"
61+
"\t[direct2: enable direct sampling 2 (usually Q)]\n"
5862
"\tfilename (a '-' dumps samples to stdout)\n\n");
5963
exit(1);
6064
}
@@ -113,15 +117,16 @@ int main(int argc, char **argv)
113117
int gain = 0;
114118
int ppm_error = 0;
115119
int sync_mode = 0;
120+
int direct_sampling = 0;
116121
FILE *file;
117122
uint8_t *buffer;
118123
int dev_index = 0;
119124
int dev_given = 0;
120-
uint32_t frequency = 100000000;
125+
uint32_t frequency = 1500000;
121126
uint32_t samp_rate = DEFAULT_SAMPLE_RATE;
122127
uint32_t out_block_size = DEFAULT_BUF_LENGTH;
123128

124-
while ((opt = getopt(argc, argv, "d:f:g:s:b:n:p:S")) != -1) {
129+
while ((opt = getopt(argc, argv, "d:f:g:s:b:n:p:S:E:")) != -1) {
125130
switch (opt) {
126131
case 'd':
127132
dev_index = verbose_device_search(optarg);
@@ -148,6 +153,12 @@ int main(int argc, char **argv)
148153
case 'S':
149154
sync_mode = 1;
150155
break;
156+
case 'E':
157+
if (strcmp("direct", optarg) == 0) {
158+
direct_sampling = 1;}
159+
if (strcmp("direct2", optarg) == 0) {
160+
direct_sampling = 2;}
161+
break;
151162
default:
152163
usage();
153164
break;
@@ -197,11 +208,6 @@ int main(int argc, char **argv)
197208
#else
198209
SetConsoleCtrlHandler( (PHANDLER_ROUTINE) sighandler, TRUE );
199210
#endif
200-
/* Set the sample rate */
201-
verbose_set_sample_rate(dev, samp_rate);
202-
203-
/* Set the frequency */
204-
verbose_set_frequency(dev, frequency);
205211

206212
if (0 == gain) {
207213
/* Enable automatic gain */
@@ -212,6 +218,15 @@ int main(int argc, char **argv)
212218
verbose_gain_set(dev, gain);
213219
}
214220

221+
if(direct_sampling)
222+
verbose_direct_sampling(dev, direct_sampling);
223+
224+
/* Set the frequency */
225+
verbose_set_frequency(dev, frequency);
226+
227+
/* Set the sample rate */
228+
verbose_set_sample_rate(dev, samp_rate);
229+
215230
verbose_ppm_set(dev, ppm_error);
216231

217232
if(strcmp(filename, "-") == 0) { /* Write samples to stdout */

0 commit comments

Comments
 (0)