openusb_xfer_wait, openusb_xfer_aio
openusb_xfer_wait, openusb_xfer_aio
-- Issue synchronous I/O request, Issue asynchronous I/O request handle
- Pointer to request handle.
Elements in openusb_request_handle structure:
openusb_dev_handle_t dev; /* device handle */ uint8_t interface; /* ignored for ep0 */ uint8_t endpoint; openusb_transfer_type_t type; /* transfer type */ union openusb_request { openusb_ctrl_request_t *ctrl; openusb_intr_request_t *intr; openusb_bulk_request_t *bulk; openusb_isoc_request_t *isoc; } req; int32_t (*cb)(struct openusb_request_handle *handle); /* callback of this request */ void *arg; /* additional arg for callback */ |
openusb_xfer_wait()
can be called by application to do synchronous
USB transfers. Alternately, application can call openusb_xfer_aio()
to do
asynchronous USB transfer.
For both functions, application should allocate a
request handle and fill required parameters in it. When application calls openusb_xfer_wait()
,
they don't have to set request callback. For openusb_xfer_aio()
, if application wants to use
openusb_wait()
or openusb_poll()
to get completed request,
it must not set callback cb
in the request handle. (In implementation
of OpenUSB, if cb
is not NULL, it will be called immediately after this request is accomplished.
Otherwise, the completed request is put on a list for application to retrieve by using openusb_wait/openusb_poll
)
openusb_xfer_wait
(), openusb_xfer_aio
() returns 0 on success.
Otherwise, a openusb error is returned. NOTE, when an error happens, it just means submission of this request
fails. The data status should be checked in result
of individual request type.
OPENUSB_SUCCESS - No errors.
OPENUSB_BADARG - handle
or elements
in handle
is not valid.
OPENUSB_UNKNOWN_DEVICE - Device handle
dev
is not valid.
OPENUSB_PLATFORM_FAILURE - Unspecified kernel/driver failure.
OPENUSB_NO_RESOURCES - Memory allocation failure.
OPENUSB_IO_* - USB host controller errors.