diff options
author | Andrew Thompson <thompsa@FreeBSD.org> | 2009-02-14 23:20:00 +0000 |
---|---|---|
committer | Andrew Thompson <thompsa@FreeBSD.org> | 2009-02-14 23:20:00 +0000 |
commit | 06d497c1afbc1665858994d72b478e3fd34065c0 (patch) | |
tree | 622b53531275e080bd1746cbafae09eed6be649e /usr.sbin/usbconfig | |
parent | ce66729032dbf8df8a42d7e20b9f4ba4f207d9c3 (diff) | |
download | src-06d497c1afbc1665858994d72b478e3fd34065c0.tar.gz src-06d497c1afbc1665858994d72b478e3fd34065c0.zip |
MFp4 //depot/projects/usb@157699
Add two new functions to the libusb20 API and required kernel ioctls.
- libusb20_dev_get_iface_desc
- libusb20_dev_get_info
New command to usbconfig, "show_ifdrv", which will print out the kernel driver
attached to the given USB device aswell.
See "man libusb20" for a detailed description.
Some minor style corrections long-line wrapping.
Submitted by: Hans Petter Selasky
Notes
Notes:
svn path=/head/; revision=188622
Diffstat (limited to 'usr.sbin/usbconfig')
-rw-r--r-- | usr.sbin/usbconfig/dump.c | 22 | ||||
-rw-r--r-- | usr.sbin/usbconfig/dump.h | 2 | ||||
-rw-r--r-- | usr.sbin/usbconfig/usbconfig.c | 11 |
3 files changed, 30 insertions, 5 deletions
diff --git a/usr.sbin/usbconfig/dump.c b/usr.sbin/usbconfig/dump.c index ffa8b2c8d9fd..01c55d29cf43 100644 --- a/usr.sbin/usbconfig/dump.c +++ b/usr.sbin/usbconfig/dump.c @@ -176,15 +176,30 @@ dump_iface(struct libusb20_device *pdev, } void -dump_device_info(struct libusb20_device *pdev) +dump_device_info(struct libusb20_device *pdev, uint8_t show_ifdrv) { + char buf[128]; + uint8_t n; + printf("%s, cfg=%u md=%s spd=%s pwr=%s\n", libusb20_dev_get_desc(pdev), libusb20_dev_get_config_index(pdev), dump_mode(libusb20_dev_get_mode(pdev)), dump_speed(libusb20_dev_get_speed(pdev)), dump_power_mode(libusb20_dev_get_power_mode(pdev))); - return; + + if (!show_ifdrv) + return; + + for (n = 0; n != 255; n++) { + if (libusb20_dev_get_iface_desc(pdev, n, buf, sizeof(buf))) + break; + if (buf[0] == 0) + continue; + printf("ugen%u.%u.%u: %s\n", + libusb20_dev_get_bus_number(pdev), + libusb20_dev_get_address(pdev), n, buf); + } } void @@ -339,7 +354,8 @@ dump_device_iface_access(struct libusb20_device *pdev, uint8_t iface) owner = (pw = getpwuid(uid)) ? pw->pw_name : "UNKNOWN"; group = (gr = getgrgid(gid)) ? gr->gr_name : "UNKNOWN"; - printf(" " "Interface %u Access: %s:%s 0%o\n", iface, owner, group, mode); + printf(" " "Interface %u Access: %s:%s 0%o\n", + iface, owner, group, mode); } else { printf(" " "Interface %u Access: <not set>\n", iface); } diff --git a/usr.sbin/usbconfig/dump.h b/usr.sbin/usbconfig/dump.h index 95ef7209d0d0..87e9a4d4332d 100644 --- a/usr.sbin/usbconfig/dump.h +++ b/usr.sbin/usbconfig/dump.h @@ -27,7 +27,7 @@ const char *dump_mode(uint8_t value); const char *dump_speed(uint8_t value); const char *dump_power_mode(uint8_t value); -void dump_device_info(struct libusb20_device *pdev); +void dump_device_info(struct libusb20_device *pdev, uint8_t show_drv); void dump_be_access(struct libusb20_backend *pbe); void dump_be_quirk_names(struct libusb20_backend *pbe); void dump_be_dev_quirks(struct libusb20_backend *pbe); diff --git a/usr.sbin/usbconfig/usbconfig.c b/usr.sbin/usbconfig/usbconfig.c index e0f03dd56770..4b69dc5123fe 100644 --- a/usr.sbin/usbconfig/usbconfig.c +++ b/usr.sbin/usbconfig/usbconfig.c @@ -78,6 +78,7 @@ struct options { uint8_t got_dump_all_config:1; uint8_t got_dump_info:1; uint8_t got_dump_access:1; + uint8_t got_show_iface_driver:1; uint8_t got_remove_device_quirk:1; uint8_t got_add_device_quirk:1; uint8_t got_dump_string:1; @@ -100,6 +101,7 @@ enum { T_SET_PERM, T_ADD_DEVICE_QUIRK, T_REMOVE_DEVICE_QUIRK, + T_SHOW_IFACE_DRIVER, T_DUMP_QUIRK_NAMES, T_DUMP_DEVICE_QUIRKS, T_DUMP_DEVICE_DESC, @@ -138,6 +140,7 @@ static const struct token token[] = { {"dump_string", T_DUMP_STRING, 1}, {"dump_access", T_DUMP_ACCESS, 0}, {"dump_info", T_DUMP_INFO, 0}, + {"show_ifdrv", T_SHOW_IFACE_DRIVER, 0}, {"suspend", T_SUSPEND, 0}, {"resume", T_RESUME, 0}, {"power_off", T_POWER_OFF, 0}, @@ -290,6 +293,7 @@ usage(void) " dump_string <index>" "\n" " dump_access" "\n" " dump_info" "\n" + " show_ifdrv" "\n" " suspend" "\n" " resume" "\n" " power_off" "\n" @@ -535,7 +539,8 @@ flush_command(struct libusb20_backend *pbe, struct options *opt) opt->got_dump_access); if (opt->got_list || dump_any) { - dump_device_info(pdev); + dump_device_info(pdev, + opt->got_show_iface_driver); } if (opt->got_dump_access) { printf("\n"); @@ -632,6 +637,10 @@ main(int argc, char **argv) opt->got_any++; break; + case T_SHOW_IFACE_DRIVER: + opt->got_show_iface_driver = 1; + break; + case T_UNIT: if (opt->got_any) { /* allow multiple commands on the same line */ |