summaryrefslogtreecommitdiffstats
path: root/lib/libusb
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2012-04-12 18:06:30 +0000
committerhselasky <hselasky@FreeBSD.org>2012-04-12 18:06:30 +0000
commit4a73b1171086162f4344312ca649185f15985512 (patch)
tree57895ee208bf599df923ae71036670675175c7eb /lib/libusb
parent20ac4e4f812f8a1caca5d5d792b599580c95d8e4 (diff)
downloadFreeBSD-src-4a73b1171086162f4344312ca649185f15985512.zip
FreeBSD-src-4a73b1171086162f4344312ca649185f15985512.tar.gz
Add missing LibUSB 1.0 API function.
Reported by: lme @ MFC after: 1 week
Diffstat (limited to 'lib/libusb')
-rw-r--r--lib/libusb/Makefile1
-rw-r--r--lib/libusb/libusb.38
-rw-r--r--lib/libusb/libusb.h1
-rw-r--r--lib/libusb/libusb10.c24
4 files changed, 33 insertions, 1 deletions
diff --git a/lib/libusb/Makefile b/lib/libusb/Makefile
index 8d78619..538b8e6 100644
--- a/lib/libusb/Makefile
+++ b/lib/libusb/Makefile
@@ -48,6 +48,7 @@ MLINKS += libusb.3 libusb_get_bus_number.3
MLINKS += libusb.3 libusb_get_device_address.3
MLINKS += libusb.3 libusb_get_device_speed.3
MLINKS += libusb.3 libusb_get_max_packet_size.3
+MLINKS += libusb.3 libusb_get_max_iso_packet_size.3
MLINKS += libusb.3 libusb_ref_device.3
MLINKS += libusb.3 libusb_unref_device.3
MLINKS += libusb.3 libusb_open.3
diff --git a/lib/libusb/libusb.3 b/lib/libusb/libusb.3
index 2498335..a5bf677 100644
--- a/lib/libusb/libusb.3
+++ b/lib/libusb/libusb.3
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 25, 2012
+.Dd April 12, 2012
.Dt LIBUSB 3
.Os
.Sh NAME
@@ -118,6 +118,12 @@ LIBUSB_SPEED_UNKNOWN is returned in case of unknown wire speed.
Returns the wMaxPacketSize value on success, LIBUSB_ERROR_NOT_FOUND if the
endpoint does not exist and LIBUSB_ERROR_OTHERS on other failure.
.Pp
+.Ft int
+.Fn libusb_get_max_iso_packet_size "libusb_device *dev" "unsigned char endpoint"
+Returns the packet size multiplied by the packet multiplier on success,
+LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist and
+LIBUSB_ERROR_OTHERS on other failure.
+.Pp
.Ft libusb_device *
.Fn libusb_ref_device "libusb_device *dev"
Increment the reference counter of the device
diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h
index 5a4d2df..5f821b6 100644
--- a/lib/libusb/libusb.h
+++ b/lib/libusb/libusb.h
@@ -371,6 +371,7 @@ uint8_t libusb_get_device_address(libusb_device * dev);
enum libusb_speed libusb_get_device_speed(libusb_device * dev);
int libusb_clear_halt(libusb_device_handle *devh, uint8_t endpoint);
int libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint);
+int libusb_get_max_iso_packet_size(libusb_device * dev, uint8_t endpoint);
libusb_device *libusb_ref_device(libusb_device * dev);
void libusb_unref_device(libusb_device * dev);
int libusb_open(libusb_device * dev, libusb_device_handle ** devh);
diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c
index 0be318a..02ad315 100644
--- a/lib/libusb/libusb10.c
+++ b/lib/libusb/libusb10.c
@@ -331,6 +331,30 @@ out:
return (ret);
}
+int
+libusb_get_max_iso_packet_size(libusb_device *dev, uint8_t endpoint)
+{
+ int multiplier;
+ int ret;
+
+ ret = libusb_get_max_packet_size(dev, endpoint);
+
+ switch (libusb20_dev_get_speed(dev->os_priv)) {
+ case LIBUSB20_SPEED_LOW:
+ case LIBUSB20_SPEED_FULL:
+ break;
+ default:
+ if (ret > -1) {
+ multiplier = (1 + ((ret >> 11) & 3));
+ if (multiplier > 3)
+ multiplier = 3;
+ ret = (ret & 0x7FF) * multiplier;
+ }
+ break;
+ }
+ return (ret);
+}
+
libusb_device *
libusb_ref_device(libusb_device *dev)
{
OpenPOWER on IntegriCloud