Android USB 主机 - bulkTransfer() 正在丢失数据

标签 android usb host

我正在尝试从基于 FTDI 2232H 芯片的自定义设备接收数据。

我使用的是简单的 Async FIFO 模式,传入数据速率为 3.2MB/秒。

一切都与我的 PC 上的测试代码完美配合,但我在 Toshiba Thrive 上接收数据时遇到问题。

TDI 的 Android 驱动程序失败,所以我正在使用 Java 进行编码。

我可以完美地接收 95% 以上的数据,但每隔一段时间,数据会“中断”,我会收到两到三遍相同的 4-5K 数据的一部分,然后又恢复到良好的数据。

对于 Thrive 或 Android,我不会太快,因为我之前的数据以双倍 (6.4MB/秒) 的速度输入,而且它也获得了大约 95% 的数据。 (所以减半应该没问题。)

似乎在 Android 中发生的缓冲(或双缓冲)中存在某种错误。 (不是FTDI 2232H内部的缓冲区,因为重复的数据比芯片的4K内部缓冲区大。)

设置代码很简单,它再次运行~几乎~完美。

数据抓取发生的循环很简单:

while(!fStop)
  if(totalLen < BIG_BUFF_LEN-IN_BUFF_LEN)
  {
    len=conn.bulkTransfer(epIN, inBuff, IN_BUFF_LEN, 0);
    System.arraycopy(inBuff, 0, bigBuff, totalLen, len);
    totalLen+=len;
  }

如果您认为这是 arraycopy 的时间延迟 - 即使我注释掉该行,我仍然会丢失数据。

IN_BUFF_LEN 为 16384(即使我增加 inBuff 的大小,bulkTransfer 也不会返回更多)。

bigBuff 是几兆字节。

作为第二个问题 - 有没有人知道如何传递一个指向 bulkTransfer 的指针,该指针将直接填充 bigBuff --- 在一个偏移量处(不是从位置 '0' 开始?

最佳答案

UsbConnection.bulktransfer(...) 有问题。使用 UsbRequest.queue(...) Api。

许多人报告说,直接使用批量传输会导致大约 1% 或 2% 的输入传输失败。

关于Android USB 主机 - bulkTransfer() 正在丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9108548/

相关文章:

php - Amazon S3/EC2-PHP和MySQL?

由于可绘制对象,Android 应用不是 "designed for tablets"

java - 如何使用 twitter4j 删除转推

winapi - 记录USB鼠标事件

php - 无法从 USB 创建数据库转储

java - 在服务器上运行独立的java应用程序

docker 。将动态主机 ip 添加到容器上的 env var

java - Android 自定义 ArrayAdapter - 崩溃

android - Affectiva SDK 的年龄检测

android - Windows 拒绝安装 Android ADB 驱动程序