|
RK3288 & FirePrime 5.1 安卓系统 USB google原生BUG修复
发表于 2016-4-27 09:38:10
浏览:10610
|
回复:2
打印
只看该作者
[复制链接]
楼主
本帖最后由 feng3327 于 2016-6-24 16:51 编辑
安卓系统下,系统接入多个USB设备时,系统挂载的第一个USB设备是成功的,之后挂载的USB,能发现设备,但是usb设备的interface为空值,安卓系统可以通过如下代码进行打印,挂载的device设备信息:
[mw_shl_code=java,false]UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()) {
UsbDevice device = deviceIterator.next();
Log.d("xxx","device=" + device.toString());
}[/mw_shl_code]
在firefly 的RK3288和fire prime上面复现,而且如果3G上网卡插拔,也许会出现第二次、第三次无法识别设备等问题,暂时没有进行测试。
此BUG在google AOSP的5.1.1都存在,https://code.google.com/p/android/issues/detail?id=159529
7楼已详细说明代码的bug产生的原因,修复方式如下:
One solution:
Clear mNewConfiguration and mNewInterface in endUsbDeviceAdded()
--- a/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -669,6 +669,8 @@ public class UsbHostManager {
mNewConfigurations = null;
mNewInterfaces = null;
mNewEndpoints = null;
+ mNewConfiguration = null;
+ mNewInterface = nul;
编辑frameworks/base/core/java/android/hardware/usb/UsbDevice.java---Parcelable[] configurations = in.readParcelableArray(UsbInterface.class.getClassLoader());
+++Parcelable[] configurations = in.readParcelableArray(UsbConfiguration.class.getClassLoader());
在AOSP的最新6.0_r9已修复,google 修复代码见https://android.googlesource.com ... /usb/UsbDevice.java
|
|