int transfer_bulk_async(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout) { // Each async transfer requires it's own context. A transfer // context can be re-used. When no longer needed they must be // freed with usb_free_async(). // void* async_context = NULL; int ret; // Setup the async transfer. This only needs to be done once // for multiple submit/reaps. (more below) // ret = usb_bulk_setup_async(dev, &async_context, ep); if (ret < 0) { printf("error usb_bulk_setup_async:\n%s\n", usb_strerror()); goto Done; } // Submit this transfer. This function returns immediately and the // transfer is on it's way to the device. // ret = usb_submit_async(async_context, bytes, size); if (ret < 0) { printf("error usb_submit_async:\n%s\n", usb_strerror()); usb_free_async(&async_context); goto Done; } // Wait for the transfer to complete. If it doesn't complete in the // specified time it is cancelled. see also usb_reap_async_nocancel(). // ret = usb_reap_async(async_context, timeout); // Free the context. usb_free_async(&async_context); Done: return ret; }作用
时间: 2024-02-14 12:21:58 浏览: 164
async_fifo.rar_async fifo_async_fifo
这段代码是一个用于异步传输 USB 设备数据的函数。函数名为 `transfer_bulk_async`,接受以下参数:
- `dev`:表示要进行传输的 USB 设备句柄。
- `ep`:表示要进行传输的 USB 端点。
- `bytes`:表示要进行传输的数据缓冲区。
- `size`:表示要进行传输的数据大小。
- `timeout`:表示等待传输完成的超时时间。
函数的主要逻辑如下:
- 首先,通过调用 `usb_bulk_setup_async` 函数,设置一个异步传输的上下文(`async_context`)。
- 然后,通过调用 `usb_submit_async` 函数,提交一个异步传输请求,并将数据 `bytes` 和大小 `size` 传递给函数。
- 接着,通过调用 `usb_reap_async` 函数,等待异步传输完成,并等待 `timeout` 毫秒。如果超时,则传输被取消。
- 最后,通过调用 `usb_free_async` 函数,释放异步传输的上下文。
函数返回传输的结果,如果成功则返回传输的字节数,否则返回一个负数。
阅读全文