diff options
| author | Steve Markgraf <steve@steve-m.de> | 2012-04-09 15:05:09 +0200 |
|---|---|---|
| committer | Steve Markgraf <steve@steve-m.de> | 2012-04-09 15:05:09 +0200 |
| commit | a58def7f584d82199c5ab37334e4e5701654c1e4 (patch) | |
| tree | cdc04fb51b707bd9714e721b1e11bcd8c794fc36 | |
| parent | 7e6d2f55ee0a03cd07717fbee1e62559033ffd47 (diff) | |
allow user to select sync mode
Patch provided by 'airwave', Thanks!
Signed-off-by: Steve Markgraf <steve@steve-m.de>
| -rw-r--r-- | src/main.c | 36 |
1 files changed, 21 insertions, 15 deletions
@@ -44,6 +44,7 @@ void usage(void) "\t[-d device_index (default: 0)]\n" "\t[-g tuner_gain (default: 0 dB)]\n" "\t[-b output_block_size (default: 16 * 16384)]\n" + "\t[-S force sync output (default: async)]\n" "\toutput filename\n"); exit(1); } @@ -67,6 +68,7 @@ int main(int argc, char **argv) int n_read; int r, opt; int i, gain = 0; + int sync_mode = 0; FILE *file; uint8_t *buffer; uint32_t dev_index = 0; @@ -74,8 +76,7 @@ int main(int argc, char **argv) uint32_t samp_rate = DEFAULT_SAMPLE_RATE; uint32_t out_block_size = DEFAULT_BUF_LENGTH; - - while ((opt = getopt(argc, argv, "d:f:g:s:b:")) != -1) { + while ((opt = getopt(argc, argv, "d:f:g:s:b:S::")) != -1) { switch (opt) { case 'd': dev_index = atoi(optarg); @@ -92,6 +93,9 @@ int main(int argc, char **argv) case 'b': out_block_size = (uint32_t)atof(optarg); break; + case 'S': + sync_mode = 1; + break; default: usage(); break; @@ -177,23 +181,25 @@ int main(int argc, char **argv) fprintf(stderr, "WARNING: Failed to reset buffers.\n"); fprintf(stderr, "Reading samples...\n"); -#if 0 - while (!do_exit) { - r = rtlsdr_read_sync(dev, buffer, out_block_size, &n_read); - if (r < 0) - fprintf(stderr, "WARNING: sync read failed.\n"); - fwrite(buffer, n_read, 1, file); + if (sync_mode) { + while (!do_exit) { + r = rtlsdr_read_sync(dev, buffer, out_block_size, &n_read); + if (r < 0) + fprintf(stderr, "WARNING: sync read failed.\n"); - if (n_read < out_block_size) { - fprintf(stderr, "Short read, samples lost, exiting!\n"); - break; + fwrite(buffer, n_read, 1, file); + + if (n_read < out_block_size) { + fprintf(stderr, "Short read, samples lost, exiting!\n"); + break; + } } + } else { + rtlsdr_read_async(dev, rtlsdr_callback, (void *)file, + DEFAULT_ASYNC_BUF_NUMBER, out_block_size); } -#else - rtlsdr_read_async(dev, rtlsdr_callback, (void *)file, - DEFAULT_ASYNC_BUF_NUMBER, out_block_size); -#endif + if (do_exit) fprintf(stderr, "\nUser cancel, exiting...\n"); else |
