ports/100718: libusb usb_clear_halt implementation
Robert Nilsson
rnilsson at mac.com
Sat Jul 22 13:20:15 UTC 2006
>Number: 100718
>Category: ports
>Synopsis: libusb usb_clear_halt implementation
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sat Jul 22 13:20:14 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Robert Nilsson
>Release: 6.1-RELEASE
>Organization:
Nilsson Studios
>Environment:
FreeBSD bsdtest.home.nilssonstudios.com 6.1-RELEASE FreeBSD 6.1-RELEASE #4: Fri Jul 21 11:40:44 CDT 2006 robert at bsdtest.home.nilssonstudios.com:/usr/obj/usr/src/sys/DEBUG i386
>Description:
While porting owfs over to BSD I realized the usb_clear_halt function was not implemented in libusb for BSD.
>How-To-Repeat:
>Fix:
--- libusb-0.1.12/bsd.c Fri Mar 3 20:52:46 2006
+++ libusb-0.1.12.rob/bsd.c Fri Jul 21 22:47:55 2006
@@ -623,9 +623,21 @@
int usb_clear_halt(usb_dev_handle *dev, unsigned int ep)
{
- /* Not yet done, because I haven't needed it. */
+ int ret;
+ struct usb_ctl_request ctl_req;
- USB_ERROR_STR(-ENOSYS, "usb_clear_halt called, unimplemented on BSD");
+ ctl_req.ucr_addr = 0; // Not used for this type of request
+ ctl_req.ucr_request.bmRequestType = UT_WRITE_ENDPOINT;
+ ctl_req.ucr_request.bRequest = UR_CLEAR_FEATURE;
+ USETW(ctl_req.ucr_request.wValue, UF_ENDPOINT_HALT);
+ USETW(ctl_req.ucr_request.wIndex, ep);
+ USETW(ctl_req.ucr_request.wLength, 0);
+ ctl_req.ucr_flags = 0;
+
+ if ((ret = ioctl(dev->fd, USB_DO_REQUEST, &ctl_req)) < 0)
+ USB_ERROR_STR(-errno, "clear_halt: failed for %d", ep);
+
+ return ret;
}
int usb_reset(usb_dev_handle *dev)
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list