summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/usbhost/usbhost.h11
-rw-r--r--libusbhost/usbhost.c10
2 files changed, 19 insertions, 2 deletions
diff --git a/include/usbhost/usbhost.h b/include/usbhost/usbhost.h
index ccc12b1c4..4a8a4fcd8 100644
--- a/include/usbhost/usbhost.h
+++ b/include/usbhost/usbhost.h
@@ -96,13 +96,20 @@ int usb_device_get_fd(struct usb_device *device);
*/
const char* usb_device_get_name(struct usb_device *device);
-/* Returns a unique ID for the device. Currently this is generated from the
- * dev_name path.
+/* Returns a unique ID for the device.
+ *Currently this is generated from the dev_name path.
*/
int usb_device_get_unique_id(struct usb_device *device);
+/* Returns a unique ID for the device name.
+ * Currently this is generated from the device path.
+ */
int usb_device_get_unique_id_from_name(const char* name);
+/* Returns the device name for the unique ID.
+ * Call free() to deallocate the returned string */
+char* usb_device_get_name_from_unique_id(int id);
+
/* Returns the USB vendor ID from the device descriptor for the USB device */
uint16_t usb_device_get_vendor_id(struct usb_device *device);
diff --git a/libusbhost/usbhost.c b/libusbhost/usbhost.c
index dba0b4813..dbc7962cb 100644
--- a/libusbhost/usbhost.c
+++ b/libusbhost/usbhost.c
@@ -57,6 +57,7 @@
#define USB_FS_DIR "/dev/bus/usb"
#define USB_FS_ID_SCANNER "/dev/bus/usb/%d/%d"
+#define USB_FS_ID_FORMAT "/dev/bus/usb/%03d/%03d"
struct usb_host_context {
@@ -314,6 +315,15 @@ int usb_device_get_unique_id_from_name(const char* name)
return bus * 1000 + dev;
}
+char* usb_device_get_name_from_unique_id(int id)
+{
+ int bus = id / 1000;
+ int dev = id % 1000;
+ char* result = (char *)calloc(1, strlen(USB_FS_ID_FORMAT));
+ snprintf(result, strlen(USB_FS_ID_FORMAT) - 1, USB_FS_ID_FORMAT, bus, dev);
+ return result;
+}
+
uint16_t usb_device_get_vendor_id(struct usb_device *device)
{
struct usb_device_descriptor* desc = (struct usb_device_descriptor*)device->desc;