Androidにおけるusbデータ通信速度の遅い問題の解決方法


Androidとチップを使ってusb通信を通じて、遅延があることを発見して、最高50 ms、更に高いデータの損失があって、ネット上の解決方法:
この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バイトのパケットを送って、パケットは2つの制御バイトと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 A 500と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データ転送
    これは4つの総伝送方式があるが、それに対応する説明はない.
    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);
                    }
                }
            };