Merge pull request #22 from matthewbrandes/master
Allows choosing device by serial number rather than device index which can change.
This commit is contained in:
commit
f68ae551df
64
dump1090.c
64
dump1090.c
|
@ -503,6 +503,68 @@ void backgroundTasks(void) {
|
||||||
//
|
//
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
//
|
//
|
||||||
|
int verbose_device_search(char *s)
|
||||||
|
{
|
||||||
|
int i, device_count, device, offset;
|
||||||
|
char *s2;
|
||||||
|
char vendor[256], product[256], serial[256];
|
||||||
|
device_count = rtlsdr_get_device_count();
|
||||||
|
if (!device_count) {
|
||||||
|
fprintf(stderr, "No supported devices found.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "Found %d device(s):\n", device_count);
|
||||||
|
for (i = 0; i < device_count; i++) {
|
||||||
|
rtlsdr_get_device_usb_strings(i, vendor, product, serial);
|
||||||
|
fprintf(stderr, " %d: %s, %s, SN: %s\n", i, vendor, product, serial);
|
||||||
|
}
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
/* does string look like raw id number */
|
||||||
|
device = (int)strtol(s, &s2, 0);
|
||||||
|
if (s2[0] == '\0' && device >= 0 && device < device_count) {
|
||||||
|
fprintf(stderr, "Using device %d: %s\n",
|
||||||
|
device, rtlsdr_get_device_name((uint32_t)device));
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
/* does string exact match a serial */
|
||||||
|
for (i = 0; i < device_count; i++) {
|
||||||
|
rtlsdr_get_device_usb_strings(i, vendor, product, serial);
|
||||||
|
if (strcmp(s, serial) != 0) {
|
||||||
|
continue;}
|
||||||
|
device = i;
|
||||||
|
fprintf(stderr, "Using device %d: %s\n",
|
||||||
|
device, rtlsdr_get_device_name((uint32_t)device));
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
/* does string prefix match a serial */
|
||||||
|
for (i = 0; i < device_count; i++) {
|
||||||
|
rtlsdr_get_device_usb_strings(i, vendor, product, serial);
|
||||||
|
if (strncmp(s, serial, strlen(s)) != 0) {
|
||||||
|
continue;}
|
||||||
|
device = i;
|
||||||
|
fprintf(stderr, "Using device %d: %s\n",
|
||||||
|
device, rtlsdr_get_device_name((uint32_t)device));
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
/* does string suffix match a serial */
|
||||||
|
for (i = 0; i < device_count; i++) {
|
||||||
|
rtlsdr_get_device_usb_strings(i, vendor, product, serial);
|
||||||
|
offset = strlen(serial) - strlen(s);
|
||||||
|
if (offset < 0) {
|
||||||
|
continue;}
|
||||||
|
if (strncmp(s, serial+offset, strlen(s)) != 0) {
|
||||||
|
continue;}
|
||||||
|
device = i;
|
||||||
|
fprintf(stderr, "Using device %d: %s\n",
|
||||||
|
device, rtlsdr_get_device_name((uint32_t)device));
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "No matching devices found.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
//=========================================================================
|
||||||
|
//
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
|
@ -515,7 +577,7 @@ int main(int argc, char **argv) {
|
||||||
int more = j+1 < argc; // There are more arguments
|
int more = j+1 < argc; // There are more arguments
|
||||||
|
|
||||||
if (!strcmp(argv[j],"--device-index") && more) {
|
if (!strcmp(argv[j],"--device-index") && more) {
|
||||||
Modes.dev_index = atoi(argv[++j]);
|
Modes.dev_index = verbose_device_search(argv[++j]);
|
||||||
} else if (!strcmp(argv[j],"--gain") && more) {
|
} else if (!strcmp(argv[j],"--gain") && more) {
|
||||||
Modes.gain = (int) atof(argv[++j])*10; // Gain is in tens of DBs
|
Modes.gain = (int) atof(argv[++j])*10; // Gain is in tens of DBs
|
||||||
} else if (!strcmp(argv[j],"--enable-agc")) {
|
} else if (!strcmp(argv[j],"--enable-agc")) {
|
||||||
|
|
Loading…
Reference in a new issue