以下代码位于线程内,读取通过 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 和其他库中查找导弹发射器示例,他们在每次轮询之间设置了 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){}
}
有谁知道延迟的原因。 github 上的大多数库都有这种延迟,正如我在 google 示例之前提到的那样。
最佳答案
我正在写下关于这个问题的结果。毕竟看起来 UsbConnection.bulkTransfer(...) 方法在连续调用时存在一些错误。解决方案是使用异步 API,UsbRequest 类。使用这种方法,我可以毫不延迟地从输入端点读取数据,并且在整个压力测试期间没有数据丢失。所以采取的方向是异步UsbRequest,而不是同步批量传输。
关于android-usb - Android USB 主机输入批量传输在数据可用时无法随机读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25464531/