首页 文章

Android USB等时数据传输

提问于
浏览
6

我目前正试图找到一种方法来处理我的Android 3.2平板电脑上的等时 endpoints 上的USB数据传输(支持主机模式) . 在编写了一些原型代码后,我注意到在USB_ENDPOINT_XFER_ISOC的常量文件中指出“等时 endpoints 类型(当前不支持)” .

这可能在没有设备生根的情况下实现吗?如果是这样,我该怎么做呢?

理想情况下,我希望保留在Java API中,但如果只能通过NDK实现这一点,我将不得不追求它 . 我也理解根据以下帖子可能存在一些USB带宽问题:User mode USB isochronous transfer from device-to-host

2 回答

  • 6

    我相信,你“可以”在没有根的情况下做到这一点 .

    你是'll need to do it all using some native C code interfacing with the USB device using USBFS. The big issue comes from the lack of documentation of linux'的usbfs . 基本上一切都必须通过ioctls来完成 . 那就是说你打开设备就像通常用Java一样 . 然后从USBDeviceConnection传递文件描述符

    除此之外,您需要自己解析所有USB描述符 . 你可以再次从USBDeviceConnection获得它们 . 从描述符跳转到描述符很简单,找到每个描述符意味着什么是大量头痛的文档,但是你可以在www.usb.org上找到大部分文档 .

    我已经编写了解析音频设备所需的大部分代码,并且我一直试图提交等时传输,然后开始出错 .

    在切换到libusb之后,我发现问题,在我的情况下,是因为音频设备也有HID控制器,默认驱动程序正在攻击那些并且从同步传输中窃取所有带宽 . 如果我早先知道这一点,我可能已经坚持使用非root非libusb方法 . 因为它确实通过lib usb获得等时传输,但它需要一个有根设备:(

    在某些时候我会回到它 .

    总之,我很确定它可能但它不会那么容易!

  • 7

    我在Android(或Linux)下编写了一个用于USB同步数据传输的Java类:UsbIso

    它使用JNA通过IOCTL调用访问USBFS API .

相关问题