Android USB Host API取走ttyACM文件

时间:2015-01-05 19:10:10

标签: android arduino avr avrdude

我有一个自定义版本的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 /#/#文件以便将新的hex文件刷新到电路板上。 USBManager中似乎没有revokePermission方法。

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

  

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

     

的Connection.close();

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

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

1 个答案:

答案 0 :(得分:0)

最终我解决了这个问题,但看起来确实有点像黑客。

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