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
This commit is contained in:
Kyle Evans 2020-06-09 17:17:43 +00:00
parent b62d159cb3
commit 04391da364
4 changed files with 61 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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);
}
}