Tôi đang cố gắng tạo ứng dụng để đọc hệ thống tệp lưu trữ ngoài được kết nối bằng cáp OTG với XOOM với ICS. Tôi đang sử dụng mã này để xác định IN và OUT điểm cuối để liên lạc với thiết bị flashỔ flash USBHost USB android
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;
hoạt động bình thường. sau đó tôi đang cố gắng để đọc 512 byte đầu tiên nhận được boot sector 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();
nhưng nó không đọc bất kỳ dữ liệu từ thiết bị được kết nối. tất cả các mã này chạy trên một chuỗi riêng biệt sau khi cấp phép granding trên thiết bị
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);
trong Broadcast Receiver i chỉ bắt đầu chủ đề mới với mã trước đó; tôi cũng đã cố gắng để thực hiện cuộc gọi đến USBDeviceConnection.controlTransfer
byte[] b = new byte[0x10];
int cTransfer = connection.controlTransfer(128, 6, 16, 0,b, 12, 0);
như trong mẫu libusb để lấy dữ liệu f0 và/hoặc hwstats nhưng nó luôn luôn trở về -1 tôi cũng đã cố gắng thay thế yêu cầu async sử dụng để đồng bộ hóa USBRequst bulkTransfers nhưng kết quả là giống nhau. Có ai đã làm việc với bộ phận này của SDK Android không? Cảm ơn!
Tôi đang cố gắng làm điều gì đó tương tự - kết nối thiết bị USB HID với Xoom đang chạy ICS. Sau khi thực hiện một số nghiên cứu, tôi biết rằng Xooms do Mỹ vận chuyển hầu như không gặp sự cố với USB Host API nhưng bất kỳ thiết bị nào khác (ví dụ như EU hoặc Úc được vận chuyển) có API máy chủ được triển khai theo cách không cho phép thực hiện Kiểm soát Transfer.Tôi đang cố gắng để flash thiết bị của tôi với hình ảnh khác nhau, tôi sẽ cho bạn biết khi tôi thành công. Bạn đã tìm thấy một cái gì đó hữu ích từ ngày hôm qua? – syntagma
Có, tôi gần như đã hoàn thành việc thực hiện phân tích cú pháp fat32 bằng cách sử dụng api usbhost. và tôi có thể nói với bạn rằng bạn không cần phải sử dụng controltransfer cả. tất cả những gì bạn cần là bulk_transfer và tài liệu chính thức của HID – Alexandr