我一直在尝试解决这个问题,但是我所看到的每种方法都行不通,我正在尝试将一些字符串数据发送到 USB 设备,该设备应该发回我想要的数据或发送返回大约 11 个字节的“错误命令”对吗?现在我回来的只有 2 个字节,1 和 192。我试图总共只发送 9 个字节,“$fdump G”和“/n”。无论我做什么,它都是行不通的。
这也是我的代码,我不确定如何将字节更改为字符串或字符,但是一旦我开始取回数据,我就会这样做,因为我知道要返回的内容至少是 11 个字节。
for(;;){//this is the main loop for transferring
String get = "$fDump G\n";
l("Sending: " + get);
byte[] by = get.getBytes();
//This is where it sends
l("out " + conn.bulkTransfer(epOUT, by, by.length, 500));
//This is where it is meant to receive
byte[] buffer = new byte[4096];
l("in " + conn.bulkTransfer(epIN, buffer, 4096,500));
StringBuilder byStr = new StringBuilder();
//This shows what's coming in
for(int i = 0; i < buffer.length; i++){
if(buffer[i] != 0){
byStr.append(buffer[i]);
l(byStr);}
}
//this shows the complete string
l(byStr);
if(mStop){
mStopped = true;
return;
}
l("sent "+counter);
counter++;
counter = (byte) (counter % 16);
}
我真的不知道为什么它不起作用。我在 Android 方面有很多技能,但我无法理解这一点。
enIN 和 enOUT 是端点:
epIN = usbIf.getEndpoint(i);
epOUT = usbIf.getEndpoint(i);
conn 也是 USB 设备连接。
UsbDevice dev = sDevice;
if (dev == null)
return;
UsbManager usbm = (UsbManager) getSystemService(USB_SERVICE);
UsbDeviceConnection conn = usbm.openDevice(dev);
l("Interface Count: "+dev.getInterfaceCount());
l("Using "+String.format("%04X:%04X", sDevice.getVendorId(), sDevice.getProductId()));
if(!conn.claimInterface(dev.getInterface(0), true))
return;