diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2020-06-09 17:17:43 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2020-06-09 17:17:43 +0000 |
commit | 04391da364e252ca15645147e2c966dc6d1fbbda (patch) | |
tree | 4bd75efa8ad616f8ff987f134e04737ff9090ecd | |
parent | b62d159cb3595a73715a6b4518bd0391ecb0ad0f (diff) | |
download | src-04391da364e252ca15645147e2c966dc6d1fbbda.tar.gz src-04391da364e252ca15645147e2c966dc6d1fbbda.zip |
libusb: improve compatibility
Specifically, add LIBUSB_CLASS_PHYSICAL and the libusb_has_capability API.
Descriptions and functionality for these derived from the
documentation at [0]. The current set of capabilities are all supported by
libusb.
These were detected as missing after updating net/freerdp to 2.1.1, which
attempted to use both.
[0] http://libusb.sourceforge.net/api-1.0/group__libusb__misc.html
Reviewed by: hselasky
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D25194
Notes
Notes:
svn path=/head/; revision=361977
-rw-r--r-- | lib/libusb/Makefile | 1 | ||||
-rw-r--r-- | lib/libusb/libusb.3 | 29 | ||||
-rw-r--r-- | lib/libusb/libusb.h | 17 | ||||
-rw-r--r-- | lib/libusb/libusb10.c | 15 |
4 files changed, 61 insertions, 1 deletions
diff --git a/lib/libusb/Makefile b/lib/libusb/Makefile index a594211363b8..cf263b732c35 100644 --- a/lib/libusb/Makefile +++ b/lib/libusb/Makefile @@ -68,6 +68,7 @@ CFLAGS+= -I ../../sys MLINKS += libusb.3 libusb_get_version.3 MLINKS += libusb.3 libusb_init.3 MLINKS += libusb.3 libusb_exit.3 +MLINKS += libusb.3 libusb_has_capability.3 MLINKS += libusb.3 libusb_strerror.3 MLINKS += libusb.3 libusb_error_name.3 MLINKS += libusb.3 libusb_set_debug.3 diff --git a/lib/libusb/libusb.3 b/lib/libusb/libusb.3 index 3fd932a07dd2..0d0e2b1a4ef1 100644 --- a/lib/libusb/libusb.3 +++ b/lib/libusb/libusb.3 @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 11, 2018 +.Dd June 9, 2020 .Dt LIBUSB 3 .Os .Sh NAME @@ -61,6 +61,33 @@ Deinitialise libusb. Must be called at the end of the application. Other libusb routines may not be called after this function. .Pp +.Ft int +.Fn libusb_has_capability "uint32_t capability" +This function checks the runtime capabilities of +.Nm . +This function will return non-zero if the given +.Fa capability +is supported, 0 if it is not supported. +The valid values for +.Fa capability +are: +.Bl -tag -width LIBUSB_CAP -offset indent +.It Va LIBUSB_CAP_HAS_CAPABILITY +.Nm +supports +.Fn libusb_has_capability . +.It Va LIBUSB_CAP_HAS_HOTPLUG +.Nm +supports hotplug notifications. +.It Va LIBUSB_CAP_HAS_HID_ACCESS +.Nm +can access HID devices without requiring user intervention. +.It Va LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER +.Nm +supports detaching of the default USB driver with +.Fn libusb_detach_kernel_driver . +.El +.Pp .Ft const char * .Fn libusb_strerror "int code" Get the ASCII representation of the error given by the diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h index bc0678003174..3d353402ea06 100644 --- a/lib/libusb/libusb.h +++ b/lib/libusb/libusb.h @@ -54,6 +54,7 @@ enum libusb_class_code { LIBUSB_CLASS_AUDIO = 1, LIBUSB_CLASS_COMM = 2, LIBUSB_CLASS_HID = 3, + LIBUSB_CLASS_PHYSICAL = 5, LIBUSB_CLASS_PTP = 6, LIBUSB_CLASS_IMAGE = 6, LIBUSB_CLASS_PRINTER = 7, @@ -178,6 +179,21 @@ enum libusb_bos_type { LIBUSB_BT_CONTAINER_ID = 4, }; +enum libusb_capability { + /* libusb supports libusb_has_capability(). */ + LIBUSB_CAP_HAS_CAPABILITY = 0, + /* Hotplug support is available. */ + LIBUSB_CAP_HAS_HOTPLUG, + /* Can access HID devices without requiring user intervention. */ + LIBUSB_CAP_HAS_HID_ACCESS, + + /* + * Supports detaching of the default USB driver with + * libusb_detach_kernel_driver(). + */ + LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER, +}; + enum libusb_error { LIBUSB_SUCCESS = 0, LIBUSB_ERROR_IO = -1, @@ -450,6 +466,7 @@ const char *libusb_strerror(int code); const char *libusb_error_name(int code); int libusb_init(libusb_context ** context); void libusb_exit(struct libusb_context *ctx); +int libusb_has_capability(uint32_t capability); /* Device handling and enumeration */ diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c index 6f61353a76b3..1c45b87d8f0b 100644 --- a/lib/libusb/libusb10.c +++ b/lib/libusb/libusb10.c @@ -1716,3 +1716,18 @@ libusb_error_name(int code) return ("LIBUSB_ERROR_UNKNOWN"); } } + +int +libusb_has_capability(uint32_t capability) +{ + + switch (capability) { + case LIBUSB_CAP_HAS_CAPABILITY: + case LIBUSB_CAP_HAS_HOTPLUG: + case LIBUSB_CAP_HAS_HID_ACCESS: + case LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER: + return (1); + default: + return (0); + } +} |