git: 872065688515 - main - libusb: implement libusb_wrap_sys_device
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 06 Aug 2025 14:20:31 UTC
The branch main has been updated by aokblast:
URL: https://cgit.FreeBSD.org/src/commit/?id=872065688515c0c4549b568f7573eb9e7deeedd7
commit 872065688515c0c4549b568f7573eb9e7deeedd7
Author: ShengYi Hung <aokblast@FreeBSD.org>
AuthorDate: 2025-08-05 12:59:06 +0000
Commit: ShengYi Hung <aokblast@FreeBSD.org>
CommitDate: 2025-08-06 14:05:40 +0000
libusb: implement libusb_wrap_sys_device
The libusb_wrap_sys_device function can wrap an opened fd from the
system into a libusb handler. However, in FreeBSD's libusb implementation, a
USB device contains two fds: one for control transfers and another for
normal (bulk, interrupt, isochronous) transfers.
This design makes it impossible for FreeBSD to implement this function
without exposing a different structure in libusb.h to provide two fds.
Therefore, we return LIBUSB_ERROR_NOT_SUPPORTED to maintain API
compatibility.
Approved by: makrj (mentor), lwhsu (mentor)
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D51739
---
lib/libusb/libusb.3 | 8 ++++++++
lib/libusb/libusb.h | 1 +
lib/libusb/libusb10.c | 7 +++++++
3 files changed, 16 insertions(+)
diff --git a/lib/libusb/libusb.3 b/lib/libusb/libusb.3
index 3093737c05d7..09140c914d68 100644
--- a/lib/libusb/libusb.3
+++ b/lib/libusb/libusb.3
@@ -209,6 +209,14 @@ Decrement the reference counter of the device
.Fa dev .
.Pp
.Ft int
+.Fn libusb_wrap_sys_device "libusb_context *ctx" "intptr_t sys_dev" "libusb_device_handle **dev_handle"
+This function creates a libusb handler from a previously opened fd
+.Fa sys_dev .
+This function is provided for compatibility and is currently unimplemented.
+It always returns
+.Dv LIBUSB_ERROR_NOT_SUPPORTED .
+.Pp
+.Ft int
.Fn libusb_open "libusb_device *dev" "libusb_device_handle **devh"
Open a device and obtain a device_handle.
Returns 0 on success,
diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h
index d8a3e4b62995..277b551c46a1 100644
--- a/lib/libusb/libusb.h
+++ b/lib/libusb/libusb.h
@@ -506,6 +506,7 @@ 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_wrap_sys_device(libusb_context *ctx, intptr_t sys_dev, libusb_device_handle **dev_handle);
int libusb_open(libusb_device * dev, libusb_device_handle ** devh);
libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id);
void libusb_close(libusb_device_handle * devh);
diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c
index 5c116b39ea17..e226def0b7b6 100644
--- a/lib/libusb/libusb10.c
+++ b/lib/libusb/libusb10.c
@@ -1918,3 +1918,10 @@ libusb_dev_mem_free(libusb_device_handle *devh, unsigned char *buffer,
{
return (LIBUSB_ERROR_NOT_SUPPORTED);
}
+
+int
+libusb_wrap_sys_device(libusb_context *ctx, intptr_t sys_dev,
+ libusb_device_handle **dev_handle)
+{
+ return (LIBUSB_ERROR_NOT_SUPPORTED);
+}