用到android与芯片通过usb通信,发现有延迟,最高50ms,再高有数据丢失,网上的解决办法:

这个增加fifo的缓冲区

https://stackoverflow.com/questions/9405710/android-losing-incoming-hi-speed-usb-data

 

这个用usbrequest

UsbRequest.queue(..)100%无故障地工作吗? 我也遇到了那种问题。 - support_ms 2016年 3月4日11:17

  • 我使用UsbRequest API做了一个拥有大量usb流量的项目。 我从来没有对丢失数据提出过投诉。 但是,我记得我只使用UsbRequest.queue(..)来传入数据。 为了发送数据,我使用了超时1秒的同步API。 使用UsbRequest.queue(..)时,请确保您放入队列的请求与您从队列中收到的请求相同。 我还为每个阻塞阅读电话创建了一个新请求。 - Pablo Valdes 2016年 3月5日17:38 

  • https://stackoverflow.com/questions/9108548/android-usb-host-bulktransfer-is-losing-data

这个轮训下发命令:

我做同样的事情时,使用这样的东西真的帮助了我,我发现你必须做某种类型的while循环。

对于我的设备,我有64个字节的数据包进给我,数据包将是两个控制字节和62个数据,所以对于我的传输,我不得不做类似的事情

 StringBuilder sb = new StringBuilder(); while(bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout) > 2){ for(int i = 2; i < buffer.length(); i++){ sb.append((char) buffer[i]); } } 

这些线条对我来说很有用,我有完全相同的问题,这就是我修复它的方法。 如果您需要,我会提供更多信息。 只是评论:)。 我知道这对我来说真的很令人沮丧。 我使用Acer Iconia A500与Android 4.0.3顺便说一句

https://stackoverflow.com/questions/10889461/android-usb-host-api-bulk-transfer-buffer-size?noredirect=1&lq=1

 

【android之USB通信】android之USB数据传输

这个说有四总传输方式,但是都没有相应说明

https://blog.csdn.net/ariesuk/article/details/69383577

 

这段代码是中断传输吗?

mHandler = new Handler() {            public void handleMessage(Message msg) {                                    if (msg.what == 1) { // 1 means send a 64 bytes array in msg.obj                    ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);                    final byte[] array = (byte[]) msg.obj;                                          buffer.clear();                    buffer.put( array );                    UsbRequest outRequest = new UsbRequest();                    outRequest.initialize(mUsbConnection, mUsbEndpointOut);                    outRequest.queue(buffer, BUFFER_SIZE);                    Log.d(L.TAG, "Queueing request:"+outRequest);                    // don't do a mConnection.requestWait() here, ReceiveThread is already listening                 } else if (msg.what == 2) { // 2 means exit                    Log.d(L.TAG,  "SenderThread::handleMessage(): terminate");                    Looper.myLooper().quit();                } else {                    Log.e(L.TAG, "SenderThread::handleMessage(): unknow message type: " + msg.what);                }            }        };

 

更多相关文章

  1. Android sqlite 数据库操作
  2. Android 自定义Listview 如何绑定Sqlite数据库数据
  3. Android的数据存储
  4. Android APN的设置问题 默认“已起用数据” 关闭
  5. Android如何下抓取tcp数据包
  6. 学习笔记(01):FFmpeg打造Android万能音频播放器-OpenSL ES介绍并
  7. Android ContentProvider实现应用间数据共享
  8. Android中获取网页表单中的数据实现思路及代码

随机推荐

  1. 导入github ViewPagerIndicator 项目到 a
  2. Android实现计数器功能
  3. android_sqlite
  4. Android4.2 4.4keyguard锁屏流程梳理
  5. android复制文字功能
  6. WMS总体框架
  7. Android(安卓)点击输入框弹出日历 《H》
  8. qt for android opencv 笔记
  9. 图片保存到sd卡
  10. Android(安卓)TextView实现超链接