【问题标题】:Android usb host input bulktransfer fails to read randomly when data available数据可用时,Android usb 主机输入批量传输无法随机读取
【发布时间】:2014-10-17 08:11:56
【问题描述】:

以下代码在一个线程内,读取来自 USB 的输入数据。大约每 80 个读数它就会丢失一个来自 stm32 板的数据包。该板被编程为每隔一秒向安卓平板电脑发送数据包。

// Non Working Code
while(running){
    int resp = bulktransfer(mInEp,mBuf,mBuf.lenght,1000);
    if(resp>0){
        dispatchMessage(mBuf);
    }else if(resp<0)
        showsBufferEmptyMessage();
} 

我正在寻找 android 和 Internet 上的其他库中的 Missile Launcher 示例,他们在每次轮询之间设置了 50 毫秒的延迟。这样做可以解决缺少包的问题。

  //Working code
  while(running){
     int resp = bulktransfer(mInEp,mBuf,mBuf.lenght,1000);
     if(resp>0){
        dispatchMessage(mBuf);
    }else if(resp<0)
        showsBufferEmptyMessage();
   try{
       Thread.sleep(50);
   }catch(Exception e){}
  }

有谁知道延迟起作用的原因。正如我在 google 示例之前提到的那样,github 上的大多数库都有这种延迟。

【问题讨论】:

    标签: android-usb


    【解决方案1】:

    我正在写下我关于这个问题的结果。毕竟似乎 UsbConnection.bulkTransfer(...) 方法在连续调用时有一些错误。解决方案是使用异步 API UsbRequest 类。使用这种方法,我可以毫无延迟地从输入端点读取数据,并且在整个压力测试期间没有数据丢失。所以采取的方向是异步UsbRequest,而不是同步bulktransfer。

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 2013-05-31
      • 2011-09-25
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2013-12-06
      • 1970-01-01
      相关资源
      最近更新 更多