我有一个 android 应用程序,它创建与 USB 设备的连接,并且必须通过特定端点接收数据。我正在处理本机代码中的数据传输部分。该应用程序能够找到设备、打开连接并找到所需的端点。数据读取部分在本机代码中,其中在 while 循环中进行 ioctl 调用。
int bytesTransferred = ioctl(g_fileDescriptor, USBDEVFS_BULK, &ctrl);
这个 g_fileDescriptor 是 USB 连接的描述符。
第二个参数表示是批量传输。
第三个参数有结构usbdevfs_bulktransfer(它有端点地址,bufferlength - 16KB,数据占位符,timeout-1000msec)
我使用两个 USB 设备进行了尝试。第一个设备运行良好。正在成功读取数据。
第二台设备似乎出现了一些问题。我的应用程序找到设备,连接到它,找到所需的端点。但是 ioctl 调用总是返回 -1。我注意到两次连续 ioctl 调用之间的时间间隔平均为 0.99 秒(大约等于我设置的超时值)。
所以我在这里有三个问题。
我可以得出结论,超时是 ioctl 返回 -1 的原因吗?
strerror(errorno) 可以找出问题所在吗?(因为我读到 ioctl 在错误时返回 -1 并在系统的 'errno' 变量中设置相应的错误代码)
批量传输时出现超时的情况有哪些?