我目前正试图找到一种方法来处理我的
Android 3.2平板电脑上的等时端点上的USB数据传输(支持主机模式).在编写了一些原型代码之后,我注意到在USB_ENDPOINT_XFER_ISOC的常量文件中声明了“等时端点类型(当前不支持)”.
这可能在没有设备生根的情况下实现吗?如果是这样,我该怎么做呢?
理想情况下,我希望保留在Java API中,但如果只能通过NDK实现这一点,我将不得不追求它.我也理解根据以下帖子可能存在一些USB带宽问题:User mode USB isochronous transfer from device-to-host
解决方法
我相信,你“可以”在没有根的情况下做到这一点.
您需要使用一些使用USBFS与USB设备连接的本机C代码来完成所有操作.最大的问题来自缺乏linux的usbfs文档.基本上一切都必须通过ioctls来完成.这就是说你打开设备就像通常用Java一样.然后从USBDeviceConnection传递文件描述符
除此之外,您需要自己解析所有USB描述符.您可以再次从USBDeviceConnection获取它们.从描述符跳转到描述符很简单,找到每个描述符意味着什么是大量头痛的文档,但您可以在www.usb.org上找到大部分文档.
我已经编写了解析音频设备所需的大部分代码,并且我一直试图提交等时传输然后开始出错.
在切换到libusb后,我发现问题,在我的情况下,是因为音频设备也有HID控制器,默认驱动程序正在攻击那些并且从同步传输中窃取所有带宽.如果我早些知道这一点,我可能已经坚持使用非root非libusb方法.因为它确实通过lib usb获得等时传输,但它需要一个有根设备:(
在某些时候,我会回到它.
总之,我很确定它可能但它不容易!