diff options
-rw-r--r-- | include/usbhost/usbhost.h | 11 | ||||
-rw-r--r-- | libusbhost/usbhost.c | 10 |
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; |