sync mode is not default, lowered number of buffers for librtlsdr

pull/20/head
Enrique 2017-05-05 17:59:28 -07:00
rodzic e3e6ee23b7
commit 22551e72bf
2 zmienionych plików z 46 dodań i 8 usunięć

Wyświetl plik

@ -354,7 +354,7 @@ static rtlsdr_dongle_t known_devices[] = {
{ 0x1f4d, 0xd803, "PROlectrix DV107669" },
};
#define DEFAULT_BUF_NUMBER 15
#define DEFAULT_BUF_NUMBER 1
#define DEFAULT_BUF_LENGTH (16 * 32 * 512)
#define DEF_RTL_XTAL_FREQ 28800000

Wyświetl plik

@ -92,6 +92,9 @@ static int *atan_lut = NULL;
static int atan_lut_size = 131072; /* 512 KB */
static int atan_lut_coef = 8;
static uint8_t *buffer = NULL;
static int use_sync = 0;
struct dongle_state
{
int exit_flag;
@ -215,6 +218,7 @@ void usage(void)
"\t enables low-leakage downsample filter\n"
"\t size can be 0 or 9. 0 has bad roll off\n"
"\t[-A std/fast/lut choose atan math (default: std)]\n"
"\t[-S force sync output (defatuls: async)]\n"
//"\t[-C clip_path (default: off)\n"
//"\t (create time stamped raw clips, requires squelch)\n"
//"\t (path must have '\%s' and will expand to date_time_freq)\n"
@ -236,7 +240,8 @@ sighandler(int signum)
if (CTRL_C_EVENT == signum) {
fprintf(stderr, "Signal caught, exiting!\n");
do_exit = 1;
rtlsdr_cancel_async(dongle.dev);
if (!use_sync)
rtlsdr_cancel_async(dongle.dev);
return TRUE;
}
return FALSE;
@ -246,7 +251,8 @@ static void sighandler(int signum)
{
fprintf(stderr, "Signal caught, exiting!\n");
do_exit = 1;
rtlsdr_cancel_async(dongle.dev);
if (!use_sync)
rtlsdr_cancel_async(dongle.dev);
}
#endif
@ -1034,6 +1040,20 @@ void sanity_checks(void)
}
void dongle_read_sync(struct dongle_state *s)
{
int r;
int n_read;
r = rtlsdr_read_sync(s->dev, buffer, ACTUAL_BUF_LENGTH, &n_read);
if (r < 0) {
fprintf(stderr, "WARNING: sync read failed.\n");
return;
}
rtlsdr_callback(buffer, n_read, s);
}
int main(int argc, char **argv)
{
#ifndef _WIN32
@ -1047,7 +1067,7 @@ int main(int argc, char **argv)
output_init(&output);
controller_init(&controller);
while ((opt = getopt(argc, argv, "d:f:g:s:b:l:o:t:r:p:E:F:A:M:h")) != -1) {
while ((opt = getopt(argc, argv, "d:f:g:s:b:l:o:t:r:p:E:F:A:M:h:S")) != -1) {
switch (opt) {
case 'd':
dongle.dev_index = verbose_device_search(optarg);
@ -1142,6 +1162,9 @@ int main(int argc, char **argv)
demod.deemph = 1;
demod.squelch_level = 0;}
break;
case 'S':
use_sync = 1;
break;
case 'h':
default:
usage();
@ -1229,18 +1252,33 @@ int main(int argc, char **argv)
usleep(100000);
pthread_create(&output.thread, NULL, output_thread_fn, (void *)(&output));
pthread_create(&demod.thread, NULL, demod_thread_fn, (void *)(&demod));
pthread_create(&dongle.thread, NULL, dongle_thread_fn, (void *)(&dongle));
while (!do_exit) {
usleep(100000);
if (!use_sync) {
pthread_create(&dongle.thread, NULL, dongle_thread_fn, (void *)(&dongle));
while(!do_exit) {
usleep(100000);
}
}
else {
buffer = malloc(ACTUAL_BUF_LENGTH * sizeof(uint8_t));
while (!do_exit) {
dongle_read_sync(&dongle);
usleep(100);
}
free (buffer);
}
if (do_exit) {
fprintf(stderr, "\nUser cancel, exiting...\n");}
else {
fprintf(stderr, "\nLibrary error %d, exiting...\n", r);}
rtlsdr_cancel_async(dongle.dev);
if (!use_sync)
rtlsdr_cancel_async(dongle.dev);
pthread_join(dongle.thread, NULL);
safe_cond_signal(&demod.ready, &demod.ready_m);
pthread_join(demod.thread, NULL);