当可用数据时,Android usb主机输入bulktransfer无法随机读取

时间:2014-08-23 17:26:44

标签: android-usb

以下代码位于线程内部并读取来自usb的输入数据。大约每80个读数就错过了一个来自stm32板的数据包。该板被编程为每秒钟向Android平板电脑发送数据包。

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

我正在寻找Android中的Missile Launcher示例和互联网上的其他图书馆,他们在每次投票之间延迟了50ms。这样做可以解决丢失的包问题。

  //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上的大多数库都有这种延迟。

1 个答案:

答案 0 :(得分:2)

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