From d4feb21868458d2db8275a7e8440922e5807ed0f Mon Sep 17 00:00:00 2001
From: lzw <lzw@github.aaej.cn>
Date: 星期三, 28 二月 2024 16:09:16 +0800
Subject: [PATCH] 两次枚举 usb ,防止枚举不出来设备

---
 app/src/main/AndroidManifest.xml                                                |    2 
 app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java |   26 ++++++++++++
 app/src/main/java/com/fwupgrade/saymanss/HomePageActivity.java                  |   30 +++++++++++++++
 app/src/main/java/com/fwupgrade/saymanss/FwUpgradeService.java                  |   42 +++++++++++++-------
 4 files changed, 83 insertions(+), 17 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 99b23ca..61b138a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,7 +14,7 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
- <!--       <activity android:name=".HomePageActivity"
+<!--        <activity android:name=".HomePageActivity"
             android:theme="@style/Theme.AppCompat.Light.NoActionBar"
             android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenSize"
             android:launchMode="singleTask"
diff --git a/app/src/main/java/com/fwupgrade/saymanss/FwUpgradeService.java b/app/src/main/java/com/fwupgrade/saymanss/FwUpgradeService.java
index e0ce41b..e45618b 100644
--- a/app/src/main/java/com/fwupgrade/saymanss/FwUpgradeService.java
+++ b/app/src/main/java/com/fwupgrade/saymanss/FwUpgradeService.java
@@ -61,6 +61,7 @@
     private static final int UPGRADE_FAIL = 3;
     private static final int UPGRADE_SUCCESS = 4;
 
+
     private CameraInfo mCamInfo = null;
     private static final String TAG = FwUpgradeService.class.getCanonicalName();
     private IFwAidlInterface.Stub mBinder = new IFwAidlInterface.Stub() {
@@ -83,6 +84,7 @@
         super.onCreate();
         Log.i(TAG,"onCreate");
         initTarget();
+
         initData();
         initDeviceSDK();
         UStorageTestModule.getInstance().initUStorageDeviceModuleWithVirtualDisk(AppPathInfo.getLogPath());
@@ -117,13 +119,17 @@
 
                 case USB_DEVICE_DETACHED:
 
-                    boolean isSuccessful1 = (boolean) msg.obj;
-                    if (isSuccessful1) {
-                        Toast.makeText(FwUpgradeService.this, "USB璁惧鏉冮檺鐢宠鎴愬姛", Toast.LENGTH_SHORT).show();
-                    } else {
-                        Log.i(TAG,"鍙戦�佸け璐ョ粨鏋滃箍鎾粰椹惧煿");
-                        sendToDriveTrainByBroadCast(0,1);
-                        sendToNewDriveTrainByBroadCast(0,1);
+                    int count = (int) msg.obj;
+                    Log.i(TAG,"count="+count);
+                    if (count<2) {
+                        tty.clear();
+                        initTarget();
+                        int ret = UstorageDeviceInstance.getInstance().tryAgain(FwUpgradeService.this);
+                        if (ret==1){
+                            Log.i(TAG,"鍙戦�佸け璐ョ粨鏋滃箍鎾粰椹惧煿");
+                            sendToDriveTrainByBroadCast(0,1);
+                            sendToNewDriveTrainByBroadCast(0,1);
+                        }
                     }
 
                     break;
@@ -150,7 +156,7 @@
                     int errCode = msg.arg1;
                     int succ_num = 0, fail_num = 0;
 
-                    Log.d("fwup","Upgrade result:" + devName + ", errCode: " + errCode);
+                    Log.d("fwup","Upgrade result:" + devName + ", errCode: " + errCode+".ttySize="+tty.size());
 
                     if (tty.containsKey(devName)) {
                         tty.put(devName, errCode == 0? UPGRADE_SUCCESS:UPGRADE_FAIL);
@@ -207,8 +213,10 @@
         for (UsbDevice usbDevice: targets) {
             if (usbDevice.getDeviceName().compareTo(min) < 0) {
                 min = usbDevice.getDeviceName();
+
             }
         }
+        Log.i(TAG,"min="+min);
         tty.put(min, UPGRADE_PRESET);
     }
 
@@ -244,16 +252,19 @@
      * UstorageDeviceSDK鍒濆鍖�.
      */
     private void initDeviceSDK() {
+        int count = 0 ;
         int ret = UstorageDeviceInstance.getInstance().tryAttcheDeviceHandle(FwUpgradeService.this, FwUpgradeService.this);
         Log.i(TAG,"initDeviceSDk,ret="+ret);
         if (ret==1){
+
+            ++count;
+            Log.i(TAG,"鍐嶆鐨勫垵濮嬪寲");
             Message message = Message.obtain();
-            message.obj = false;
+            message.obj = count;
             message.what = USB_DEVICE_DETACHED;
             mHander.sendMessageDelayed(message,1000);
-
-
         }
+
     }
 
     @Override
@@ -298,7 +309,7 @@
 
         String serial = ctrlBlock.getSerial();
 
-        Log.d(TAG,"sonixCamInit " + String.format("vendorId:%d productId:%d fileDescriptor:%d busNum:%d devNum:%d usbfsName:%s devName:%s serial:%s", vendorId, productId, fileDescriptor, busNum, devNum, usbfsName, devName, serial));
+        Log.d(TAG,"sonixCamInit " + String.format("vendorId:%d productId:%d fileDescriptor:%d busNum:%d devNum:%d usbfsName:%s devName:%s serial:%s,tty.size=%d", vendorId, productId, fileDescriptor, busNum, devNum, usbfsName, devName, serial,tty.size()));
 
 
         if (tty.containsKey(devName) && tty.get(devName) == 0) {
@@ -306,16 +317,17 @@
             tty.put(devName, 1);
         }
 
+
+
         if (!isTarget) {
+
             Log.d(TAG,"Not sonixCam, close");
             ctrlBlock.close();
-            sendToDriveTrainByBroadCast(0,1);
-            sendToNewDriveTrainByBroadCast(0,1);
+
             return;
         }
 
         Log.d(TAG,"Is sonixCam, upgrade!");
-
         Message msg = Message.obtain();
         //msg.obj = errCode == 0;
         msg.obj = new CameraInfo(vendorId, productId, fileDescriptor, busNum, devNum, usbfsName, devName);
diff --git a/app/src/main/java/com/fwupgrade/saymanss/HomePageActivity.java b/app/src/main/java/com/fwupgrade/saymanss/HomePageActivity.java
index 39cb1b1..dc5c3fa 100644
--- a/app/src/main/java/com/fwupgrade/saymanss/HomePageActivity.java
+++ b/app/src/main/java/com/fwupgrade/saymanss/HomePageActivity.java
@@ -2,6 +2,7 @@
 
 import android.Manifest;
 import android.annotation.TargetApi;
+import android.content.ComponentName;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
@@ -22,6 +23,7 @@
 import android.widget.AdapterView;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.fwupgrade.saymanss.adapter.FwFileListAdapter;
 import com.fwupgrade.saymanss.deviceplug.IUsbDevicePlugDelegate;
@@ -217,6 +219,33 @@
         UStorageTestModule.getInstance().initUStorageDeviceModuleWithVirtualDisk(AppPathInfo.getLogPath());
     }
 
+
+    public void openThirdPartyApp(String pkgName) {
+        try {
+            // 鏇挎崲涓虹涓夋柟搴旂敤绋嬪簭鐨勫寘鍚嶅拰MainActivity鐨勫畬鏁寸被鍚�
+            String mainActivityName = pkgName+".MainActivity";
+
+            // 鍒涘缓Intent鏉ュ惎鍔ㄧ涓夋柟搴旂敤绋嬪簭鐨凪ainActivity
+            Intent intent = new Intent();
+            intent.setComponent(new ComponentName(pkgName, mainActivityName));
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+            // 鍚姩Intent
+            startActivity(intent);
+        } catch (Exception e) {
+            // 澶勭悊寮傚父鎯呭喌锛屼緥濡傚簲鐢ㄧ▼搴忔湭瀹夎绛�
+            e.printStackTrace();
+            Toast.makeText(this, "鏃犳硶鍚姩绗笁鏂瑰簲鐢ㄧ▼搴�", Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        //
+//        openThirdPartyApp("safeluck.drive.training");
+    }
+
     @Override
     protected void onNewIntent(Intent intent) {
         Log.d(TAG, "onNewIntent");
@@ -226,6 +255,7 @@
 
     @Override
     protected void onDestroy() {
+        Log.i(TAG,"onDestroy");
         super.onDestroy();
     }
 
diff --git a/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java b/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java
index bd86c51..28fe7bf 100644
--- a/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java
+++ b/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java
@@ -86,6 +86,28 @@
         return 0;
     }
 
+    public int tryAgain(Context context){
+        mUsbManager = (UsbManager) context.getSystemService(USB_SERVICE);
+
+       /* Object deviceInfo = null;
+
+        if (null != (deviceInfo = acceptOTGDeviceInfo(mUsbManager))) {
+            //婊¤冻 鍗冲綋鍓嶅瓨鍦∣TG璁惧鎻掑叆  OTG璁惧绫诲瀷
+//            initOTGDeviceModule(context, (UsbDevice) deviceInfo);
+            acceptLicense(context, deviceInfo);
+        }*/
+
+        ArrayList<UsbDevice> devices = acceptOTGDeviceInfo(mUsbManager);
+        if (devices==null || devices.size()==0){
+            Log.i("fwup","tryAgain devices==null");
+            return 1;
+        }
+        for (UsbDevice dev: devices) {
+            acceptLicense(context, dev);
+        }
+        return 0;
+    }
+
     //<<<--------------------------------------- Usb 鐩稿叧澶勭悊--------------------------------------------
     /**
      * 鑾峰彇绗﹀悎淇℃伅鐨凮TG璁惧
@@ -96,7 +118,9 @@
         ArrayList<UsbDevice> devices = new ArrayList<>();
         //鎷垮埌OTG璁惧鍒楄〃
         HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
-
+        if (deviceList==null || deviceList.size()==0){
+            Log.d("fwup","deviceList涓虹┖ ");
+        }
         for (UsbDevice usbDevice : deviceList.values()) {
             int productId = usbDevice.getProductId();
 //            if (productId != 36940) {

--
Gitblit v1.8.0