如何在USB通信中逐字节读取?

时间:2017-02-10 10:21:33

标签: java android bluetooth usb

我想使用USB连接,如下面的蓝牙连接代码:

public void run() {
        byte[] buffer;  // buffer store for the stream 1024
        int bytes=0; // bytes returned from read()

        while (true){
            buffer = new byte[1];


            try {

            for (int i=0; i<responseLength;i++) {

                bytes = mmInStream.read(buffer);

                result[i] = buffer[0];

            }

            mHandler.obtainMessage(MainActivity.READ, bytes, -1, result)
                    .sendToTarget();
            mHandler.sendEmptyMessage(0);

                while (mmInStream.available()>0){
                    mmInStream.read(buffer);
                }

            } catch (IOException e) {
                e.printStackTrace();
                break;
            }
        }

    }

这段BT的代码读取 responseLength 时间为1个字节,因为每次我确切知道,我得到的消息将持续多长时间。

我曾尝试为USB连接编写这样的代码,但我的问题是,虽然蓝牙就像一个管道,所以发送了什么,我可以逐字节读取,以防USB连接我避风港能够逐字节读取,因为消息消失了,我不得不在更大的部分阅读它。

所以这是我目前的USB通信代码:

static byte[] readBytes = new byte[4096];
...

r = new Runnable() {
        @Override
        public void run() {
            reading=true;
            synchronized (this) {
                while (reading) {
                    try {
                        Thread.sleep(400);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Arrays.fill(readBytes, (byte) 0);


                    if (mUsbManager!=null && mUsbManager.hasPermission(device)){


                        recvBytes = connection.bulkTransfer(epIn, readBytes, readBytes.length, 0);
                        if (recvBytes != 2) {
                            readString = new String(readBytes);
                            readString = readString.replace("\u0001`","");
                            readString = readString.replace("\u0000","");

                            if (!readString.equals("")){
                                Message message = handler2.obtainMessage();

                                message.obj = readString;
                                handler2.sendMessage(message);


                            }

                        }
                    }

                }
            }
        }

    };
    thread = new Thread(r);
    thread.start();

你能帮助我吗,如何编写USB读取代码,就像蓝牙通信中的队列或管道一样?

修改

我尝试过其他代码:

while (true){
            readBytes = new byte[1]; 


                for (int i=0; i<responseLength;i++) {

                recvBytes = connection.bulkTransfer(epIn, readBytes, readBytes.length, 100);

                Log.e("bbb", "!" + (new String(readBytes)) + "!" + recvBytes + " " + i);

                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }


        }

并且Log给了我无限的东西:

02-10 13:24:42.210 14602-14755/? E/bbb: !����������������������������!-1 0
02-10 13:24:42.261 14602-14755/? E/bbb: !����������������������������!-1 1
02-10 13:24:42.312 14602-14755/? E/bbb: !����������������������������!-1 2
02-10 13:24:42.362 14602-14755/? E/bbb: !����������������������������!-1 3
02-10 13:24:42.412 14602-14755/? E/bbb: !����������������������������!-1 4
02-10 13:24:42.463 14602-14755/? E/bbb: !����������������������������!-1 5
02-10 13:24:42.513 14602-14755/? E/bbb: !����������������������������!-1 6
02-10 13:24:42.564 14602-14755/? E/bbb: !����������������������������!-1 7
02-10 13:24:42.614 14602-14755/? E/bbb: !����������������������������!-1 8
02-10 13:24:42.665 14602-14755/? E/bbb: !����������������������������!-1 9
02-10 13:24:42.716 14602-14755/? E/bbb: !����������������������������!-1 10
02-10 13:24:42.766 14602-14755/? E/bbb: !����������������������������!-1 11
02-10 13:24:42.817 14602-14755/? E/bbb: !����������������������������!-1 12
02-10 13:24:42.867 14602-14755/? E/bbb: !����������������������������!-1 13

0 个答案:

没有答案