mirror of
https://github.com/rtlsdrblog/rtl-sdr-blog.git
synced 2025-01-27 02:14:55 +01:00
rtl_sdr: add -n parameter (only read n samples)
Signed-off-by: Steve Markgraf <steve@steve-m.de>
This commit is contained in:
parent
25789493c6
commit
cf66e3aa8b
@ -38,6 +38,7 @@
|
||||
#define MAXIMAL_BUF_LENGTH (256 * 16384)
|
||||
|
||||
static int do_exit = 0;
|
||||
static uint32_t bytes_to_read = 0;
|
||||
static rtlsdr_dev_t *dev = NULL;
|
||||
|
||||
void usage(void)
|
||||
@ -49,6 +50,7 @@ void usage(void)
|
||||
"\t[-d device_index (default: 0)]\n"
|
||||
"\t[-g gain (default: 0 for auto)]\n"
|
||||
"\t[-b output_block_size (default: 16 * 16384)]\n"
|
||||
"\t[-n number of samples to read (default: 0, infinite)]\n"
|
||||
"\t[-S force sync output (default: async)]\n"
|
||||
"\tfilename (a '-' dumps samples to stdout)\n\n");
|
||||
exit(1);
|
||||
@ -78,10 +80,22 @@ static void sighandler(int signum)
|
||||
static void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
|
||||
{
|
||||
if (ctx) {
|
||||
if (do_exit)
|
||||
return;
|
||||
|
||||
if ((bytes_to_read > 0) && (bytes_to_read < len)) {
|
||||
len = bytes_to_read;
|
||||
do_exit = 1;
|
||||
rtlsdr_cancel_async(dev);
|
||||
}
|
||||
|
||||
if (fwrite(buf, 1, len, (FILE*)ctx) != len) {
|
||||
fprintf(stderr, "Short write, samples lost, exiting!\n");
|
||||
rtlsdr_cancel_async(dev);
|
||||
}
|
||||
|
||||
if (bytes_to_read > 0)
|
||||
bytes_to_read -= len;
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,7 +118,7 @@ int main(int argc, char **argv)
|
||||
int device_count;
|
||||
char vendor[256], product[256], serial[256];
|
||||
|
||||
while ((opt = getopt(argc, argv, "d:f:g:s:b:S::")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "d:f:g:s:b:n:S::")) != -1) {
|
||||
switch (opt) {
|
||||
case 'd':
|
||||
dev_index = atoi(optarg);
|
||||
@ -121,6 +135,9 @@ int main(int argc, char **argv)
|
||||
case 'b':
|
||||
out_block_size = (uint32_t)atof(optarg);
|
||||
break;
|
||||
case 'n':
|
||||
bytes_to_read = (uint32_t)atof(optarg) * 2;
|
||||
break;
|
||||
case 'S':
|
||||
sync_mode = 1;
|
||||
break;
|
||||
@ -236,6 +253,11 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
}
|
||||
|
||||
if ((bytes_to_read > 0) && (bytes_to_read < (uint32_t)n_read)) {
|
||||
n_read = bytes_to_read;
|
||||
do_exit = 1;
|
||||
}
|
||||
|
||||
if (fwrite(buffer, 1, n_read, file) != (size_t)n_read) {
|
||||
fprintf(stderr, "Short write, samples lost, exiting!\n");
|
||||
break;
|
||||
@ -245,6 +267,9 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Short read, samples lost, exiting!\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (bytes_to_read > 0)
|
||||
bytes_to_read -= n_read;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Reading samples in async mode...\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user