我正在嘗試使用OTG電纜連接到使用ICS的XOOM讀取外部存儲文件系統的應用程序。 我使用此代碼來確定通信IN和OUT端點與閃存設備android USBHost閃存驅動器
final UsbDeviceConnection connection = manager.openDevice(device);
UsbInterface inf = device.getInterface(0);
if (!connection.claimInterface(inf, true)) {
Log.v("USB", "failed to claim interface");
}
UsbEndpoint epOut = null;
UsbEndpoint epIn = null;
// look for our bulk endpoints
for (int i = 0; i < inf.getEndpointCount(); i++) {
UsbEndpoint ep = inf.getEndpoint(i);
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
epOut = ep;
} else {
epIn = ep;
}
}
}
if (epOut == null || epIn == null) {
throw new IllegalArgumentException("not all endpoints found");
}
final UsbEndpoint inEndPoint = epIn;
它工作正常。 然後我想讀前512個字節得到FAT32引導扇區
ByteBuffer arg1 = ByteBuffer.allocate(512);
UsbRequest request = new UsbRequest();
request.initialize(connection, inEndPoint);
request.queue(arg1, inEndPoint.getMaxPacketSize());
UsbRequest result = connection.requestWait(); // halt here
connection.releaseInterface(inf);
connection.close();
,但它並沒有讀取連接設備的任何數據。 所有這些代碼在單獨的線程運行在廣播接收機設備上
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(USBHostSampleActivity.this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
manager.requestPermission(lDevices.get(position),mPermissionIntent);
擠級權限後,我剛開始與以前的代碼新的線程; 我也試圖撥打電話到 USBDeviceConnection.controlTransfer
byte[] b = new byte[0x10];
int cTransfer = connection.controlTransfer(128, 6, 16, 0,b, 12, 0);
像libusb的樣本中得到F0的數據和/或hwstats但它總是返回-1 還我試着用USBRequst同步bulkTransfers取代異步請求,但結果是一樣。 有沒有人使用過這部分Android SDK? 謝謝!
我正在嘗試做類似的事情 - 將USB HID設備連接到運行ICS的Xoom。在做了一些研究之後,我知道美國發貨的Xooms在大多數情況下對USB Host API沒有任何問題,但任何其他(例如歐盟或澳大利亞出貨的)設備都以不允許製作控制轉移。我試圖用不同的圖像來刷我的設備,當我跑完時我會通知您。你昨天找到有用的東西嗎? – syntagma 2012-04-18 13:39:06
是的,我幾乎完成了使用usbhost api實現fat32解析。我可以告訴你,你根本不需要使用控制轉移。所有你需要的是bulk_transfer和HID官方文檔 – Alexandr 2012-04-20 20:06:54