ソースを参照

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>
Steve Markgraf 12 年 前
コミット
d3c9015d26
共有2 個のファイルを変更した33 個の追加0 個の削除を含む
  1. 11 0
      include/rtl-sdr.h
  2. 22 0
      src/librtlsdr.c

+ 11 - 0
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);

+ 22 - 0
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;