Make that queue_request() call into a clear_feature() call, as that's how it was

probably meant to be. The call as it was made no sense at all, as it hardcoded
the endpoint number and tried to supply data to a non-data request. It also
wasn't using a synchronous call, possibly triggering the callback function with
an incompletely set-up device structure, depending on how quickly the request
would return. This caused bug #4107.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31666 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz
2009-07-21 02:00:46 +00:00
parent 67d0b0790a
commit 0aea5c18d4
@@ -273,17 +273,10 @@ got_one:
if ((my_dev = create_device (dev, intf, ifno)) == NULL) {
return B_ERROR;
}
st = usb->queue_request(dev,
USB_REQTYPE_ENDPOINT_OUT | USB_REQTYPE_STANDARD,
USB_REQUEST_CLEAR_FEATURE,
USB_FEATURE_ENDPOINT_HALT, 1, my_dev->total_report_size,
my_dev->buffer, my_dev->total_report_size, midi_usb_callback, my_dev);
if (st != B_OK) {
DPRINTF_ERR ((MY_ID "queue_request() error %d\n", (int)st));
return B_ERROR;
}
usb->clear_feature(intf->endpoint[0].handle, USB_FEATURE_ENDPOINT_HALT);
// TODO: verify if this is necessary at all
my_dev->timestamp = system_time ();
/* issue bulk transfer */