我正在使用VNC2芯片为Android平板电脑开发定制硬件。
在VNC2芯片上,我已经闪存了一些我制作的自定义固件。我已将USB VendorID设置为0403,将USB ProductId设置为6001。
我还有一个我正在开发的Android应用程序。我在清单中添加了以下内容:
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
device_filter.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device/>
</resources>
我的目标是,如果我连接USB设备,这个应用程序应该启动。然而,这并不奏效。我从Google Play下载了一个名为"USB主机控制器"的工具,该应用程序向我显示USB设备已连接,因此某些部件似乎可以工作。
在连接设备时,我也在logcat中看到了输出:
I/USB3G ( 91): event { 'add', '/devices/platform/sw_hcd_host0/usb1/1-1', 'usb', '', 189, 12 }
I/USB3G ( 91): path : '/sys/devices/platform/sw_hcd_host0/usb1/1-1'
I/USB3G ( 91): VID :size 5,vid_path '/sys/devices/platform/sw_hcd_host0/usb1/1-1/idVendor',VID '0403
I/USB3G ( 91): '.
I/USB3G ( 91): PID :size 5,Pid_path '/sys/devices/platform/sw_hcd_host0/usb1/1-1/idProduct',PID '6001
I/USB3G ( 91): '.
I/USB3G ( 91): cmd=/system/etc/usb_modeswitch.sh /system/etc/usb_modeswitch.d/0403_6001 &,
I/USB3G ( 91): excute ret : 0,err:No such file or directory
深入研究modeswitch,它似乎是一个主要在USB 3G调制解调器上切换状态的工具。我的第一个猜测是,我的设备上有一个非常残缺的图像(基于Allwinner A10)。但这也可能是我的应用程序中的一些错误,尽管我觉得这不太可能。根据我的理解,在插入OTG硬件时,无论我是否安装了带有匹配意向过滤器的应用程序,都应该向我显示某种对话框,还是我错了?
任何想法都将不胜感激。如果需要,我可以用任何方式更改apk。平板电脑是有根的,我可以用任何可能的方式更改文件。很乐意尝试你的任何想法。
现在我终于解决了这个问题。主要的问题似乎是,我需要安装一个带有intent过滤器的应用程序,以便发生任何事情。这有点奇怪,因为如果你没有可以处理附件的应用程序,使用AOA(Android开放附件协议)的硬件会显示一个对话框,并将你引导到Google Play下载。
然而,如果你没有与USB供应商和设备ID匹配的意向过滤器的应用程序,USB OTG设备将默默忽略你将它们连接到你的Android设备。测试时,我有一个没有安装意向过滤器的应用程序。我以为我会得到一个像AOA一样的对话框,但这里我错了。
我唯一需要添加到rom中以使OTG工作的是将android.hardware.usb.host.xml添加到/system/etc/permissions中。然后一切都很顺利。