summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Markgraf <steve@steve-m.de>2012-11-04 13:57:56 +0100
committerSteve Markgraf <steve@steve-m.de>2012-11-04 13:57:56 +0100
commitd3c9015d26e3d5bb310394fad7c41436f5268b01 (patch)
tree5e9b014eccbd0cc9fd544dbf37c9197fd67adcb0
parentcc35aa64be129f8e89a6584938f589434969ff9b (diff)
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>
-rw-r--r--include/rtl-sdr.h11
-rw-r--r--src/librtlsdr.c22
2 files changed, 33 insertions, 0 deletions
diff --git a/include/rtl-sdr.h b/include/rtl-sdr.h
index 6dca0d0..75bfd3f 100644
--- a/include/rtl-sdr.h
+++ b/include/rtl-sdr.h
@@ -49,6 +49,17 @@ RTLSDR_API int rtlsdr_get_device_usb_strings(uint32_t index,
char *product,
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_close(rtlsdr_dev_t *dev);
diff --git a/src/librtlsdr.c b/src/librtlsdr.c
index 1af9f87..2ac457f 100644
--- a/src/librtlsdr.c
+++ b/src/librtlsdr.c
@@ -1264,6 +1264,28 @@ int rtlsdr_get_device_usb_strings(uint32_t index, char *manufact,
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 r;