From 63d313be1c0db2209274e3b3f65efd45e49b89e3 Mon Sep 17 00:00:00 2001 From: thompsa Date: Sun, 28 Nov 2010 07:16:53 +0000 Subject: [PATCH] MFC r213848 - Add a new API function to check the connected status of the USB handle in the LibUSB v1.0 and LibUSB v0.1 interfaces. git-svn-id: svn://svn.freebsd.org/base/stable/8@215982 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- lib/libusb/libusb.3 | 9 +++++++++ lib/libusb/libusb.h | 1 + lib/libusb/libusb10.c | 15 +++++++++++++++ lib/libusb/libusb20_compat01.c | 13 +++++++++++++ lib/libusb/usb.h | 1 + 5 files changed, 39 insertions(+) diff --git a/lib/libusb/libusb.3 b/lib/libusb/libusb.3 index 8fccea344..a3f9bb889 100644 --- a/lib/libusb/libusb.3 +++ b/lib/libusb/libusb.3 @@ -240,6 +240,14 @@ been disconnected and a LIBUSB_ERROR code on failure. .Pp . .Ft int +.Fn libusb_check_connected "libusb_device_handle *devh" +Test if USB device is still connected. Returns 0 on success, +LIBUSB_ERROR_NO_DEVICE if has been disconnected and a LIBUSB_ERROR +code on failure. +. +.Pp +. +.Ft int .Fn libusb_kernel_driver_active "libusb_device_handle *devh" "int interface" Determine if a driver is active on a interface. Returns 0 if no kernel driver is active, returns 1 if a kernel driver is active, returns LIBUSB_ERROR_NO_DEVICE @@ -522,6 +530,7 @@ The library is also compliant with LibUSB version 0.1.12. .Fn usb_find_devices .Fn usb_device .Fn usb_get_busses +.Fn usb_check_connected . .Sh SEE ALSO .Xr libusb20 3 , diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h index e25bddceb..0c9e50f93 100644 --- a/lib/libusb/libusb.h +++ b/lib/libusb/libusb.h @@ -317,6 +317,7 @@ int libusb_set_configuration(libusb_device_handle * devh, int configuration); int libusb_claim_interface(libusb_device_handle * devh, int interface_number); int libusb_release_interface(libusb_device_handle * devh, int interface_number); int libusb_reset_device(libusb_device_handle * devh); +int libusb_check_connected(libusb_device_handle * devh); int libusb_kernel_driver_active(libusb_device_handle * devh, int interface); int libusb_get_driver_np(libusb_device_handle * devh, int interface, char *name, int namelen); int libusb_get_driver(libusb_device_handle * devh, int interface, char *name, int namelen); diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c index 0d5e2b4cd..5767cb22d 100644 --- a/lib/libusb/libusb10.c +++ b/lib/libusb/libusb10.c @@ -677,6 +677,21 @@ libusb_reset_device(struct libusb20_device *pdev) return (err ? LIBUSB_ERROR_OTHER : 0); } +int +libusb_check_connected(struct libusb20_device *pdev) +{ + libusb_device *dev; + int err; + + dev = libusb_get_device(pdev); + if (dev == NULL) + return (LIBUSB_ERROR_INVALID_PARAM); + + err = libusb20_dev_check_connected(pdev); + + return (err ? LIBUSB_ERROR_NO_DEVICE : 0); +} + int libusb_kernel_driver_active(struct libusb20_device *pdev, int interface) { diff --git a/lib/libusb/libusb20_compat01.c b/lib/libusb/libusb20_compat01.c index 6f261bf98..aaafb02cb 100644 --- a/lib/libusb/libusb20_compat01.c +++ b/lib/libusb/libusb20_compat01.c @@ -795,6 +795,19 @@ usb_reset(usb_dev_handle * dev) return (usb_close(dev)); } +int +usb_check_connected(usb_dev_handle * dev) +{ + int err; + + err = libusb20_dev_check_connected((void *)dev); + + if (err) + return (-1); + + return (0); +} + const char * usb_strerror(void) { diff --git a/lib/libusb/usb.h b/lib/libusb/usb.h index a29f48d47..8ee68f29a 100644 --- a/lib/libusb/usb.h +++ b/lib/libusb/usb.h @@ -291,6 +291,7 @@ int usb_set_altinterface(usb_dev_handle * dev, int alternate); int usb_resetep(usb_dev_handle * dev, unsigned int ep); int usb_clear_halt(usb_dev_handle * dev, unsigned int ep); int usb_reset(usb_dev_handle * dev); +int usb_check_connected(usb_dev_handle * dev); const char *usb_strerror(void); void usb_init(void); void usb_set_debug(int level); -- 2.45.0