gpt4 book ai didi

java - UsbDeviceConnection 批量传输无法正常工作

转载 作者:行者123 更新时间:2023-12-02 03:26:37 25 4
gpt4 key购买 nike

我需要帮助来了解 UsbDeviceConnection 批量传输的工作原理。例如,我不明白 TIMEOUT 有什么好处?我将其更改为不同的值,但我没有看到收到的数据有任何差异。

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

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
}

在这里,我尝试向 USB 设备发送命令,然后它向我发回一个字符串。该字符串应该大约有 25 个字符长,但我得到的结果不同,有时是 2 个字符,有时是 5 个字符,但我没有得到整个字符串。

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

任何人都可以帮助我了解整个事情是如何工作的,问题出在哪里以及我应该如何设置这些变量以获得正常运行的代码?

最佳答案

批量传输的数据大小受设备限制。正确的值可以通过调用方法 Endpoint.getMaxPacketSize() 获得。并且您必须将数据分割成具有此最大大小的 fragment 并按顺序发送。

关于java - UsbDeviceConnection 批量传输无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38787508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com