Ich brauche eine Hilfe, um zu verstehen, wie UsbDeviceConnection Bulktransfer funktioniert. Zum Beispiel verstehe ich nicht, wofür TIMEOUT gut ist? Ich habe es auf andere Werte geändert, aber ich sehe keine Unterschiede in den empfangenen Daten. HierUsbDeviceConnection Bulktransfer funktioniert nicht richtig
Ich habe einen kleinen Testcode:
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
}
Hier versuche ich, einen Befehl an ein USB-Gerät zu senden, und dann sendet er mich einen String zurück. Diese Saite sollte etwa 25 Zeichen lang sein, aber das Ergebnis, was ich bekomme, ist anders, manchmal 2 Zeichen, manchmal 5, aber ich bekomme nicht die ganze Saite.
Ich habe versucht, die Puffergröße, das Timeout, die Thread.sleep() Wartezeit zu ändern, aber nichts hat mein Problem gelöst.
Könnte jemand mir helfen zu verstehen, wie das Ganze funktioniert, wo kann das Problem sein und wie sollte ich diese Variablen setzen, um einen funktionierenden Code zu bekommen?