适用于标准类兼容 USB 设备的 Android USB 主机模式“软模式”驱动程序

Posted

技术标签:

【中文标题】适用于标准类兼容 USB 设备的 Android USB 主机模式“软模式”驱动程序【英文标题】:Android USB host mode "soft-mode" drivers for standard class-compliant USB devices 【发布时间】:2012-07-05 08:58:16 【问题描述】:

既然android APIs support working directly with USB devices(自 3.1 起),我很好奇是否有任何工作为一些更流行的符合类的设备(如音频或 HID)创建“软模式”驱动程序。

换句话说,是否有任何开源项目可以将与特定设备类的更有用的通信封装到可以添加到 Android 项目中的 Java 类中?

出于我的目的,我对 USB 音频特别感兴趣,但似乎社区构建的一组源自 Linux 内核模块源的类可能对许多项目有益。我希望其他人也有同样的想法并且已经开始工作。任何指向这个方向的指针都将不胜感激。


我偶然发现的其他一些资源:

User mode USB isochronous transfer from device-to-host Audio Evolution 似乎以某种方式构建了自己的用户区驱动程序

【问题讨论】:

USB 音频:如果您对音频数据流感兴趣,这在 android 上是不可能的,因为 API 不支持同步端点。然而,音频类的 MIDI 部分将起作用(仅使用批量端点)。到目前为止还没有看到任何项目。 谢谢 Alexander,这非常很高兴知道。 这是一个有趣的想法。然而,使用“厚”API 层处理大量小数据包可能会很棘手。此外,通用 USB 访问是否会破坏安全考虑也是值得怀疑的。在 vanilla linux 上,每个 USB 设备都根据系统定义的规则进行配置,这些规则也决定了谁能够访问该设备。另一方面,Android 设备通常是“单用户”设备,并且应用程序在 API 层上被沙盒化,所以应该没问题。但是,如果 Android 能够与一组精心挑选的内核模式驱动程序相结合,那么一开始就很好。 @dronus,同意。实际上似乎正在添加一些额外的内核驱动程序。问题是,它是特定于设备的。目前只有几家制造商涉足这一领域。 但是,它并不特定于任何 Android 设备(USB 由通用 USB 堆栈抽象出来),而是连接的设备。因此,任何可插拔设备制造商都可以通过这种方式制作 Java 驱动程序,其中添加内核模块驱动程序会更有用……第三方开发人员无法将其添加到 Android 设备中。另一方面,本机代码可以添加到由应用程序沙箱保护的 Android 应用程序中。这可能表明 linux 本身存在设计缺陷,因此是否应始终将驱动程序置于内核模式中令人怀疑。 【参考方案1】:

我已经开始在用户空间中通过 USB 开发 IRDA 驱动程序堆栈。 我正在研究基本的管道,但据我所知,如果我可以创建与 linux 内核驱动程序(例如 STIR4200 驱动程序)等效的用户空间驱动程序,那么我“应该”然后能够移植现有的 IRDA 协议栈,例如作为 JIR。

我们会看到...

【讨论】:

以上是关于适用于标准类兼容 USB 设备的 Android USB 主机模式“软模式”驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

从适用于 Android 的 USB RFID 阅读器读取数据

Android-Input 5

Android中的USB中的UsbAccessory和UsbDevice的区别

如何模拟 USB 设备?

是否有适用于 Windows 的 iTunes C++ 库允许访问 USB 连接的 iOS 设备的文件系统?

检测连接的 USB 设备