diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2009-03-25 21:24:21 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2009-03-25 21:24:21 +0100 |
commit | 9ae847f420d9266ffa87fd95e5a0e80764da7144 (patch) | |
tree | 298efb8ea1e16bbbef3e9bc0456b2dc7ef51aede | |
parent | a0aa1d76d0c7c6986e1b94b1868841fc9414cf1f (diff) |
usb_id: add ID_VENDOR_ID, ID_MODEL_ID, ID_USB_INTERFACE_NUM, ID_USB_DRIVER
$ extras/usb_id/usb_id -x /class/tty/ttyUSB1
ID_VENDOR=HUAWEI_Technology
ID_VENDOR_ENC=HUAWEI\x20Technology
ID_VENDOR_ID=12d1
ID_MODEL=HUAWEI_Mobile
ID_MODEL_ENC=HUAWEI\x20Mobile
ID_MODEL_ID=1003
ID_REVISION=0000
ID_SERIAL=HUAWEI_Technology_HUAWEI_Mobile
ID_TYPE=generic
ID_BUS=usb
ID_USB_INTERFACES=:ffffff:080650:
ID_USB_INTERFACE_NUM=01
ID_USB_DRIVER=option
-rw-r--r-- | extras/usb_id/usb_id.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c index b15263ef7d..5765b5952e 100644 --- a/extras/usb_id/usb_id.c +++ b/extras/usb_id/usb_id.c @@ -38,14 +38,18 @@ static void log_fn(struct udev *udev, int priority, } static char vendor_str[64]; +static char vendor_str_enc[256]; +static const char *vendor_id = ""; static char model_str[64]; static char model_str_enc[256]; -static char vendor_str_enc[256]; +static const char *product_id = ""; static char serial_str[UTIL_NAME_SIZE]; static char packed_if_str[UTIL_NAME_SIZE]; static char revision_str[64]; static char type_str[64]; static char instance_str[64]; +static const char *ifnum; +static const char *driver; static int use_usb_info; static int use_num_info; @@ -261,6 +265,7 @@ static int usb_id(struct udev_device *dev) const char *if_class, *if_subclass; int if_class_num; int protocol = 0; + const char *str; dbg(udev, "syspath %s\n", udev_device_get_syspath(dev)); @@ -279,6 +284,9 @@ static int usb_id(struct udev_device *dev) return 1; } + ifnum = udev_device_get_sysattr_value(dev_interface, "bInterfaceNumber"); + driver = udev_device_get_sysattr_value(dev_interface, "driver"); + if_class = udev_device_get_sysattr_value(dev_interface, "bInterfaceClass"); if (!if_class) { info(udev, "%s: cannot get bInterfaceClass attribute\n", @@ -374,6 +382,9 @@ static int usb_id(struct udev_device *dev) } fallback: + vendor_id = udev_device_get_sysattr_value(dev_usb, "idVendor"); + product_id = udev_device_get_sysattr_value(dev_usb, "idProduct"); + /* fallback to USB vendor & device */ if (vendor_str[0] == '\0') { const char *usb_vendor = NULL; @@ -382,7 +393,7 @@ fallback: usb_vendor = udev_device_get_sysattr_value(dev_usb, "manufacturer"); if (!usb_vendor) - usb_vendor = udev_device_get_sysattr_value(dev_usb, "idVendor"); + usb_vendor = vendor_id; if (!usb_vendor) { info(udev, "No USB vendor information available\n"); @@ -400,7 +411,7 @@ fallback: usb_model = udev_device_get_sysattr_value(dev_usb, "product"); if (!usb_model) - usb_model = udev_device_get_sysattr_value(dev_usb, "idProduct"); + usb_model = product_id; if (!usb_model) { dbg(udev, "No USB model information available\n"); @@ -526,8 +537,10 @@ int main(int argc, char **argv) if (export) { printf("ID_VENDOR=%s\n", vendor_str); printf("ID_VENDOR_ENC=%s\n", vendor_str_enc); + printf("ID_VENDOR_ID=%s\n", vendor_id); printf("ID_MODEL=%s\n", model_str); printf("ID_MODEL_ENC=%s\n", model_str_enc); + printf("ID_MODEL_ID=%s\n", product_id); printf("ID_REVISION=%s\n", revision_str); printf("ID_SERIAL=%s\n", serial); if (serial_str[0] != '\0') @@ -539,6 +552,10 @@ int main(int argc, char **argv) printf("ID_BUS=usb\n"); if (packed_if_str[0] != '\0') printf("ID_USB_INTERFACES=:%s\n", packed_if_str); + if (ifnum != NULL) + printf("ID_USB_INTERFACE_NUM=%s\n", ifnum); + if (driver != NULL) + printf("ID_USB_DRIVER=%s\n", driver); } else printf("%s\n", serial); } |