2

我有一个自定义版本的 AOSP(基于 kitkat 4.4)。我正在通过 Android 的 USB Host 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));

连接.close();

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

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

4

1 回答 1

0

最终我解决了这个问题,但这似乎有点像黑客。

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

于 2015-01-27T19:49:12.523 回答