我有一个带有接口的USB设备,它使用备用设置 它的终点。如何使用中的类选择这些设置 'android.hardware.usb'包?
在本机代码中,我使用'libusb_set_interface_alt_setting'函数 来自libUsb,基本上是IOCTL。但是,我不愿意 使用NDK。
由于
答案 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控制请求。这是因为潜在的 操作系统需要知道何时发生这种变化。
所以我认为我最好这样做。简而言之:查看上面链接中的代码。