Próbuję zrobić aplikację do odczytu zewnętrznego systemu plików pamięci podłączonego za pomocą kabla OTG do XOOM z ICS. używam tego kodu, aby określić punkt końcowy i obecnie do komunikacji z urządzeniem typu flashUSBHost USB flash drive
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;
to działa normalnie. następnie staram się czytać pierwsze 512 bajtów, aby sektor rozruchowy 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();
ale nie odczytuje żadnych danych z podłączonego urządzenia. cały ten kod działa na osobnym wątku po granding zgodę na urządzeniu
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);
odbiornik Broadcast Właśnie rozpocząć nowy wątek z poprzedniego kodu; Próbowałem też zrobić wezwanie do USBDeviceConnection.controlTransfer
byte[] b = new byte[0x10];
int cTransfer = connection.controlTransfer(128, 6, 16, 0,b, 12, 0);
jak w próbce libusb, aby uzyskać dane f0 i/lub hwstats ale zawsze zwracają -1 również próbowałem zastąpić żądania transmisji asynchronicznej z wykorzystaniem USBRequst synchronizować bulkTransfers ale wynik jest to samo. Czy ktoś pracował z tą częścią Androida SDK? Dzięki!
Próbuję zrobić coś podobnego - podłącz urządzenie USB HID do Xoom z uruchomionym ICS. Po przeprowadzeniu pewnych badań wiem, że Xooms dostarczany przez USA najczęściej nie ma problemów z interfejsem USB Host API, ale inne urządzenia (np. Wysyłane z UE lub Australii) mają interfejs Host API w sposób, który nie pozwala na stworzenie Control Transfer. Próbuję flashować moje urządzenie różnymi obrazami, dam ci znać, kiedy się uda. Czy znajdziesz coś przydatnego od wczoraj? – syntagma
Tak, prawie skończyłem wdrażanie analizy fat32 przy użyciu interfejsu API usbhost. i mogę ci powiedzieć, że wcale nie musisz używać controltransfer. wszystko czego potrzebujesz to bulk_transfer i oficjalna dokumentacja HID. – Alexandr