lib: add rtlsdr_get_index_by_serial()

This allows to open a device by a name (serial number string)
that has been programmed with rtl_eeprom -s.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
master
Steve Markgraf 12 years ago
parent cc35aa64be
commit d3c9015d26
  1. 11
      include/rtl-sdr.h
  2. 22
      src/librtlsdr.c

@ -49,6 +49,17 @@ RTLSDR_API int rtlsdr_get_device_usb_strings(uint32_t index,
char *product, char *product,
char *serial); char *serial);
/*!
* Get device index by USB serial string descriptor.
*
* \param serial serial string of the device
* \return device index of first device where the name matched
* \return -1 if name is NULL
* \return -2 if no devices were found at all
* \return -3 if devices were found, but none with matching name
*/
RTLSDR_API int rtlsdr_get_index_by_serial(const char *serial);
RTLSDR_API int rtlsdr_open(rtlsdr_dev_t **dev, uint32_t index); RTLSDR_API int rtlsdr_open(rtlsdr_dev_t **dev, uint32_t index);
RTLSDR_API int rtlsdr_close(rtlsdr_dev_t *dev); RTLSDR_API int rtlsdr_close(rtlsdr_dev_t *dev);

@ -1264,6 +1264,28 @@ int rtlsdr_get_device_usb_strings(uint32_t index, char *manufact,
return r; return r;
} }
int rtlsdr_get_index_by_serial(const char *serial)
{
int i, cnt, r;
char str[256];
if (!serial)
return -1;
cnt = rtlsdr_get_device_count();
if (!cnt)
return -2;
for (i = 0; i < cnt; i++) {
r = rtlsdr_get_device_usb_strings(i, NULL, NULL, str);
if (!r && !strcmp(serial, str))
return i;
}
return -3;
}
int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index) int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
{ {
int r; int r;

Loading…
Cancel
Save