From 6c12dd77bc481aeabec568bfed3dd68e81b80f8b Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 20 十月 2025 08:56:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wuhuyancao' into wuhuyancao

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java |  141 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 141 insertions(+), 0 deletions(-)

diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
index 54fcdac..fcac3d4 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
@@ -8,6 +8,8 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.hardware.Camera;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -75,6 +77,9 @@
 import com.doumee.keyCabinet.utils.face.ImportFileManager;
 import com.doumee.keyCabinet.utils.face.RegisterConfigUtils;
 import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig;
+import com.doumee.keyCabinet.utils.i485.SerialPortModel;
+import com.doumee.keyCabinet.utils.i485.SerialPortReadObserver;
+import com.doumee.keyCabinet.utils.i485.SportUtils;
 import com.doumee.keyCabinet.utils.update.PermissionUtils;
 import com.doumee.keyCabinet.utils.update.PermissiondDialog;
 import com.doumee.keyCabinet.utils.update.UpdateUtil;
@@ -101,6 +106,7 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Random;
 import java.util.Timer;
@@ -182,6 +188,7 @@
         startService(intent2);
         getPermission();
         Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId());
+        initPort();
     }
 
     private void initM(){
@@ -388,6 +395,8 @@
         handler = null;
         faceHandler.removeCallbacksAndMessages(null);
         faceHandler = null;
+        portHandler.removeCallbacksAndMessages(null);
+        portHandler = null;
     }
 
     private void restartApp(){
@@ -1042,4 +1051,136 @@
         }
     }
 
+    private SerialPortModel gridPort;
+    private SerialPortReadObserver gridReadObserver = new SerialPortReadObserver() {
+        @Override
+        public void onResult(String result) {
+
+        }
+
+        @Override
+        public void onResultBytes(byte[] bytes) {
+            if(gridPort!=null && !gridPort.isOk()){
+                gridPort.setOk(true);
+            }
+        }
+    };
+    private SerialPortModel keyPort;
+    private SerialPortReadObserver keyReadObserver = new SerialPortReadObserver() {
+        @Override
+        public void onResult(String result) {
+
+        }
+
+        @Override
+        public void onResultBytes(byte[] bytes) {
+            if(keyPort!=null && !keyPort.isOk()){
+                keyPort.setOk(true);
+            }
+        }
+    };
+    private SerialPortModel jiuPort;
+    private SerialPortReadObserver jiuReadObserver = new SerialPortReadObserver() {
+        @Override
+        public void onResult(String result) {
+
+        }
+
+        @Override
+        public void onResultBytes(byte[] bytes) {
+            if(jiuPort!=null && !jiuPort.isOk()){
+                jiuPort.setOk(true);
+            }
+        }
+    };
+
+    List<String> ports;
+    private int index = 0;
+    private Handler portHandler = new Handler(){
+        @Override
+        public void handleMessage(@NonNull Message msg) {
+            switch (msg.what){
+                case 0:
+                    if(index>=1&&!checkEnd()){
+                        index--;
+                        chosePort(ports.get(index));
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
+    };
+    //鍒濆鍖栦覆鍙�
+    private void initPort(){
+        ports = SportUtils.getSerialPortPaths(this);
+        if(ports.size()>0){
+            index = ports.size()-1;
+            chosePort(ports.get(ports.size()-1));
+        }
+    }
+
+    private void chosePort(String path){
+        if(gridPort==null||!gridPort.isOk()){
+            closePort(gridPort);
+            gridPort = new SerialPortModel(path,9600 ,8
+                    ,1 , 0);
+            boolean isSucc = gridPort.open();
+            if(isSucc) {
+                String msg = isSucc ? "鎴愬姛" : "澶辫触";
+                //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
+                gridPort.startRead(gridReadObserver);
+                //todo 鍙戦�佹煖鏍兼牎楠屼俊鎭�
+            }
+        }
+        if(keyPort==null||!keyPort.isOk()){
+            closePort(keyPort);
+            keyPort = new SerialPortModel(path,115200 ,8
+                    ,1 , 0);
+            boolean isSucc = keyPort.open();
+            if(isSucc) {
+                String msg = isSucc ? "鎴愬姛" : "澶辫触";
+                //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
+                keyPort.startRead(keyReadObserver);
+                //todo 鍙戦�侀挜鍖欐牎楠屼俊鎭�
+            }
+        }
+        if(jiuPort==null||!jiuPort.isOk()){
+            closePort(jiuPort);
+            jiuPort = new SerialPortModel(path,9600 ,8
+                    ,1 , 0);
+            boolean isSucc = jiuPort.open();
+            if(isSucc) {
+                String msg = isSucc ? "鎴愬姛" : "澶辫触";
+                //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
+                jiuPort.startRead(jiuReadObserver);
+                //todo 鍙戦�侀厭绮炬牎楠屼俊鎭�
+            }
+        }
+
+        portHandler.sendEmptyMessageDelayed(0,2000);
+    }
+
+    private void closePort(SerialPortModel port){
+        if(port==null){
+            return;
+        }
+        port.startRead(null);
+        port.stopRead();
+        port.close();
+        port = null;
+    }
+
+    private boolean checkEnd(){
+        if(gridPort==null||!gridPort.isOk()){
+            return false;
+        }
+        if(keyPort==null||!keyPort.isOk()){
+            return false;
+        }
+        if(jiuPort==null||!jiuPort.isOk()){
+            return false;
+        }
+        return true;
+    }
 }

--
Gitblit v1.9.3