以下代码位于线程内部并读取来自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上的大多数库都有这种延迟。
答案 0 :(得分:2)
我正在考虑有关此问题的结果。毕竟看起来UsbConnection.bulkTransfer(...)方法在连续调用时有一些bug。解决方案是使用异步API,UsbRequest类。使用这种方法,我可以毫无延迟地从输入端点读取,并且在整个压力测试期间没有数据丢失。因此,采取的方向是异步UsbRequest而不是同步bulktransfer。