我希望我的问题不会很奇怪或类似的内容,但是我启动了一个有关android终端(当前是三星银河S2,但可能会更改)和基于嵌入式Linux的卡(armadeus apf51-dev但可能是树莓)之间对话的项目。 pi)。实际上,我在android终端上有一个应用程序,可以显示通过无线连接由Linux嵌入式卡发送的速度。主要目的是通过USB连接来更改此wifi连接。我的主要问题是实现管道的android端。我通过FabianCook(Transferring data 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;
conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset
// mConnection.controlTransfer(0×40,
// 0, 1, 0, null, 0,
// 0);//clear Rx
conn.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
conn.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0);// flow
// control
// none
conn.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0);// baudrate
// 57600
conn.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0);// data bit
// 8, parity
// none,
// stop bit
// 1, tx off
UsbEndpoint epIN = null;
UsbEndpoint epOUT = null;
byte counter = 0;
UsbInterface usbIf = dev.getInterface(0);
for (int i = 0; i < usbIf.getEndpointCount(); i++) {
l("EP: "
+ String.format("0x%02X", usbIf.getEndpoint(i)
.getAddress()));
if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
l("Bulk Endpoint");
if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)
epIN = usbIf.getEndpoint(i);
else
epOUT = usbIf.getEndpoint(i);
} else {
l("Not Bulk");
}
}
这非常有帮助,但是我不明白什么是“ sDevice”变量(第1行)。我想这是一个UsbDevice类实例,但是我不知道如何实例化此变量。也许有人可以向我指出好方法?
最佳答案
在我看来,sDevice
可能已经分配到其他地方可以在此处使用,但是原始分配不在原始线程的示例代码中-我不确定该在何处实例化,但是应该只需将某些连接的设备表示为UsbDevice
对象。sDevice
可能源自UsbManager
,您可以在其中使用getDeviceList()
功能获取已连接设备的列表
http://developer.android.com/reference/android/hardware/usb/UsbManager.html#getDeviceList()