Я пытаюсь сделать приложение для чтения файловой системы внешнего хранилища, подключенной с помощью кабеля OTG к XOOM с помощью ICS. Я использую этот код для определения 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();
но не читает какие-либо данные с подключенного устройства. весь этот код работает на отдельном потоке после Granding разрешения на устройство
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-устройство к Xoom, работающему под управлением ICS. Проведя некоторые исследования, я знаю, что в большинстве случаев Xooms, поставляемые в США, не имеют проблем с USB Host API, но любые другие (например, поставляемые в ЕС или Австралии) устройства имеют API-интерфейс Host API, который не позволяет сделать Control Transfer.Я пытаюсь запустить мое устройство с разными изображениями, я сообщу вам, когда я преуспею. Вы нашли что-то полезное со вчерашнего дня? – syntagma
Да, я почти закончил реализацию синтаксиса fat32, используя usbhost api. и я могу сказать вам, что вам вообще не нужно использовать controltransfer. все, что вам нужно, это документация bulk_transfer и HID – Alexandr