2

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

在本机代码中,我使用来自 libUsb 的“libusb_set_interface_alt_setting”函数,它本质上是 IOCTL。但是,我不想为此使用 NDK。

谢谢

4

3 回答 3

1

只是为了结束这个问题。

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

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

于 2012-06-05T14:41:31.570 回答
1

根据USB 规范(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。

于 2012-04-26T21:19:11.217 回答
0

我也遇到了这个问题-在这里检查我的解决方案:

API 级别 21 之前的 Android USB 主机 DeviceConnection.setInterface

我首先按照上面的建议尝试了使用 controlTransfer 的方法,但它对我来说也失败了。SET_INTERFACE 命令没问题,我读回的 GET_INTERFACE 返回了预期的备用值,因此设备得到了正确的接口集。即便如此,对端点的读写还是失败了:-/

我通过 libusb、usbfs 和内核跟踪了 libusb_set_interface_alt_setting()。在内核中,除了简单地将 SET_INTERFACE 发送到 USB 设备之外,还有更多代码,例如关于“9.1.1.5:在新的 altsetting 中为所有端点重置切换”的注释。libusb 的 libusb_set_interface_alt_setting() 文档还说:

您应该始终使用此函数,而不是制定自己的 SET_INTERFACE 控制请求。这是因为底层操作系统需要知道何时发生此类更改。

所以我想我最好这样做。长话短说:查看上面链接中的代码。

于 2016-06-30T12:21:30.853 回答