是否可以使用Android SDK选择备用USB接口?

时间:2012-04-13 19:49:44

标签: android sdk usb

我有一个带有接口的USB设备,它使用备用设置 它的终点。如何使用中的类选择这些设置 'android.hardware.usb'包?

在本机代码中,我使用'libusb_set_interface_alt_setting'函数 来自libUsb,基本上是IOCTL。但是,我不愿意 使用NDK。

由于

3 个答案:

答案 0 :(得分:1)

根据USB specification(usb_2.0.pdf)中的第9.4章,为接口启用替代设置只不过是标准设备请求

所以这个:

UsbDeviceConnection.controlTransfer(UsbConstants.USB_DIR_OUT | 0x01, SET_INTERFACE, _alternate_setting_, _interface_nr_, null, 0, _timeout_);

应该有效。 SET_INTERFACE(= 11 = 0x0B)是USB规范常量。我在android API中找不到它作为Java const。

答案 1 :(得分:1)

关闭此问题。

我通过为我的设备编写内核驱动程序并将其用作char设备解决了这个问题。

作为旁注,我可以说在set_interface_alt_settings库中实现libusbhost并通过JNI在'android.hardware.usb'包中使用它会很好。

答案 2 :(得分:0)

我也有这个问题 - 请在这里查看我的解决方案:

Android USB host DeviceConnection.setInterface prior to API Level 21

我首先尝试使用上面建议的controlTransfer方法,但它也失败了。 SET_INTERFACE命令正常,我读回的GET_INTERFACE返回了预期的备用值,因此设备获得了正确的接口集。即便如此,对端点的读取和写入也失败了: - /

我通过libusb,usbfs和内核跟踪了libusb_set_interface_alt_setting()。在内核中,代码不仅仅是将SET_INTERFACE发送到USB设备,例如关于“9.1.1.5:重置切换新的altset中所有端点”的注释。 libusb的libusb_set_interface_alt_setting()文档也说:

  

您应该始终使用此功能而不是自己制定   SET_INTERFACE控制请求。这是因为潜在的   操作系统需要知道何时发生这种变化。

所以我认为我最好这样做。简而言之:查看上面链接中的代码。