Android USB Host API 带走 ttyACM 文件

Android USB Host API taking away ttyACM file

我有一个自定义构建的 AOSP(基于 kitkat 4.4)。我正在通过 Android 的 USB 主机 API 控制一个 arduino 板。我还在运行一个支持 CDC-ACM 模块的内核。

我希望能够将新的十六进制文件闪存到板上。我已经看到 ArduinoDroid 在他的应用程序中这样做了。我已经能够使用 avrdude 和使用 CDC-ACM 驱动程序创建的 /dev/ttyACM* 文件进行闪存。

但是,当我授予我的应用程序与 arduino 板通信的权限时,/dev/ttyACM* 文件消失了。这是有道理的,因为我现在通过 Android 的 USB 主机 api 控制它。我正在寻找恢复 /dev/ttyACM* 文件或允许 avrdude 使用 /dev/bus/usb/#/# 文件以便将新的十六进制文件闪存到板上的方法。 USBManager中似乎没有revokePermission方法。

/dev/ttyACM*设备文件即使在关闭设备后也不会出现。我正在运行以下代码来关闭设备。

connection.releaseInterface(device.getInterface(1));

connection.close();

我想我真正的问题是有没有办法在释放 USB 连接后恢复内核驱动程序。

因为我使用的是 AOSP 的自定义版本,所以我没有 google play,也无法在平板电脑上安装 ArduinoDroid。但是,如果需要,我可以将我的应用程序作为系统级应用程序运行。

最终我解决了这个问题,但它看起来有点像 hack。

在控制设备之前(在平板电脑重启时),我检查了是否存在任何 /dev/ttyACM* 文件。如果是,我会检查 /sys/ 文件系统以确认它们是正确的设备。我基本上检查了 USB 设备的供应商并将其与已知设备进行匹配。确认后,我知道可以安全地尝试将新的十六进制文件上传到设备。