我正在编写软件以在平板电脑(Android 版本 4.0.3 和内核版本 2.6.39.4 的摩托罗拉 Xoom)和使用 Android 提供的 USB Host API 的外围设备之间进行通信。我只使用两种类型的通信:
- 控制:
controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
- 散装:
bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)
控制转移工作正常,但批量转移有问题。我只能使用 32768 作为 bulkTransfer 函数的缓冲区大小。不可能使用更少或更多。我知道由于缓冲区管道的限制(大小:32769 字节),我不能使用更多。
此外围设备流式传输 bulkTranfer 函数未正确读取的数据。我想有些数据丢失了。
基于此,我对问题的解释是,由于 write(2) 函数产生的阻塞标志,一些数据没有写入管道(缓冲区)。我对么?如果这是真的,我可以更改管道缓冲区。
- 我对这个问题的第一个解决方案是更大的缓冲区。对于内核> = 2.6.35,您可以更改管道的大小,
fcntl(fd, F_SETPIPE_SZ, size)
但如何找到fd
USB管道的(文件描述符)? - 第二种选择是使用
ulimit -p SIZE
,但p
我的内核的参数不是管道而是进程。
有没有人遇到过同样的问题,有解决办法吗?