Java UsbDeviceConnection无法正常工作

Java UsbDeviceConnection无法正常工作,java,android,connection,usb,Java,Android,Connection,Usb,我需要一个帮助来了解UsbDeviceConnection bulktransfer是如何工作的。例如,我不明白超时有什么好处?我将其更改为不同的值,但在接收到的数据中看不到任何差异 这里我有一个小的测试代码: public static void read2(){ r = new Runnable() { @Override public void run() { synchronized (this) {

我需要一个帮助来了解UsbDeviceConnection bulktransfer是如何工作的。例如,我不明白超时有什么好处?我将其更改为不同的值,但在接收到的数据中看不到任何差异

这里我有一个小的测试代码:

public static void read2(){

    r = new Runnable() {
        @Override
        public void run() {
            synchronized (this) {
                final int SIZE = 4096;
                send("M?");
                while (true) {

                    if (mUsbManager.hasPermission(device)){


                        byte[] buffer = new byte[SIZE];

                        StringBuilder str = new StringBuilder();

                        if (connection.bulkTransfer(epIn, buffer, SIZE, 0) >= 0) {
                            for (int i = 2; i < SIZE; i++) {
                                if (buffer[i] != 0) {
                                    str.append((char) buffer[i]);
                                } else {
                                    Log.e("Database", "M=" + str.toString());
                                    break;
                                }
                            }
                            Log.e("Database", "M=" + str.toString());
                        }
                    }
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

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

public static void send(String command){
    String fullCommand = "@" + command + "\r\n"; /*+ "\r\n"*/

    bytes = fullCommand.getBytes();

    while (connection==null){
        continue;
    }
    connection.bulkTransfer(epOut, bytes, bytes.length, 100); //0
}
publicstaticvoidread2(){
r=新的可运行(){
@凌驾
公开募捐{
已同步(此){
最终整数大小=4096;
发送(“M?”);
while(true){
if(mUsbManager.hasPermission(设备)){
字节[]缓冲区=新字节[大小];
StringBuilder str=新的StringBuilder();
if(connection.bulkTransfer(epIn,buffer,SIZE,0)>=0){
对于(int i=2;i
在这里,我尝试向USB设备发送一个命令,然后它向我发回一个字符串。这个字符串应该是25个字符长,但是我得到的结果是不同的,有时是2个字符,有时是5个字符,但是我没有得到整个字符串

我试图更改缓冲区大小、超时时间、Thread.sleep()等待时间,但没有解决我的问题


有谁能帮助我理解这整件事是如何工作的,问题出在哪里,我应该如何设置这些变量来获得一个有效的代码

批量传输中的数据大小受设备限制。通过调用方法
Endpoint.getMaxPacketSize()
获得正确的值。您必须将数据拆分为具有此最大大小的片段,并按顺序发送

批量传输中的数据大小受设备限制。通过调用方法
Endpoint.getMaxPacketSize()
获得正确的值。您必须将数据拆分为具有此最大大小的片段,并按顺序发送

谢谢你的提示-但是。。。每个命令发送的数据比64字节要少,64字节是提示的最大包大小,但是。。。我每个命令发送的数据比64字节的最大包大小要少