Firefly开源社区

标题: RK3288 & FirePrime 5.1 安卓系统 USB google原生BUG修复 [打印本页]

作者: feng3327    时间: 2016-4-27 09:38
标题: RK3288 & FirePrime 5.1 安卓系统 USB google原生BUG修复
本帖最后由 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


作者: feng3327    时间: 2016-4-27 09:38
望Firefly工作人员对该BUG进行修复,并上传到git中,谢谢!!
作者: dhhtmqh    时间: 2018-6-6 14:36
有没有人出现过带USB设备断电重启无法识别,但热插拔一下又正常的情况啊?




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1