Эх сурвалжийг харах

refactor(蓝牙):
- 调整蓝牙连接逻辑,仅在未连接状态下执行开关电操作
- 增加蓝牙扫描超时时间至20秒
- 新增清空蓝牙指令队列方法,并在MainActivity初始化时调用
- 优化`MainViewModel`中钥匙连接失败时的提示逻辑
- ModbusController增加日志输出

周文健 1 сар өмнө
parent
commit
cbbe9c53b7

+ 1 - 0
app/src/main/java/com/grkj/iscs/features/main/activity/MainActivity.kt

@@ -100,6 +100,7 @@ class MainActivity() : BaseActivity<ActivityMainBinding>() {
     }
 
     override fun initView() {
+        BleSendDispatcher.clearQueue()
         val autoLogoutTime =
             MMKVConstants.KEY_AUTO_LOGOUT_TIME.getMMKVData(CommonConstants.DEFAULT_AUTO_LOGOUT_TIME)
         CountdownTimer.start(autoLogoutTime, onFinish = {

+ 1 - 3
app/src/main/java/com/grkj/iscs/features/main/viewmodel/MainViewModel.kt

@@ -139,9 +139,7 @@ class MainViewModel @Inject constructor(
                                                         logger.info("钥匙连接失败")
                                                         HardwareMode.getCurrentHardwareMode()
                                                             .controlKeyBuckle(true, mac) {
-                                                                showTip(
-                                                                    CommonUtils.getStr("ticket_get_failed")
-                                                                )
+                                                                showTip(CommonUtils.getStr("ticket_get_failed"))
                                                             }
                                                     }
                                                 }

+ 14 - 11
data/src/main/java/com/grkj/data/hardware/ble/BleConnectionManager.kt

@@ -728,21 +728,24 @@ object BleConnectionManager {
         withContext(Dispatchers.IO) {
             // -------- 第二次尝试:先开电,再连 --------
             // 开电,并等待回调
-            suspendCoroutine<Unit> { unitCont ->
-                HardwareMode.getCurrentHardwareMode().controlKeyCharge(false, mac) {
-                    logger.info("接收到消息,关闭充电")
-                    ThreadUtils.runOnIO {
-                        delay(500)
-                        HardwareMode.getCurrentHardwareMode().controlKeyCharge(true, mac) {
-                            logger.info("接收到消息,打开")
-                            unitCont.resume(Unit)
+            val isConnect = if (isSend) {
+                BleSendDispatcher.isConnected(mac)
+            } else {
+                BleReturnDispatcher.isConnected(mac)
+            }
+            if (!isConnect){
+                suspendCoroutine<Unit> { unitCont ->
+                    HardwareMode.getCurrentHardwareMode().controlKeyCharge(false, mac) {
+                        logger.info("接收到消息,关闭充电")
+                        ThreadUtils.runOnIO {
+                            HardwareMode.getCurrentHardwareMode().controlKeyCharge(true, mac) {
+                                logger.info("接收到消息,打开")
+                                unitCont.resume(Unit)
+                            }
                         }
                     }
                 }
             }
-            logger.debug("蓝牙连接-开启充电并等待1500ms")
-            // 等 500ms 保证硬件电源稳定
-            delay(1500)
 
             // 再次注册连接监听
             val secondTry = suspendCancellableCoroutine<Boolean> { cont ->

+ 1 - 0
data/src/main/java/com/grkj/data/hardware/ble/BleConst.kt

@@ -11,6 +11,7 @@ object BleConst {
     const val MAX_KEY_CONNECT_COUNT: Int = 2
 
     const val MTU = 500
+    const val SCAN_TIMEOUT = 20_000L
 
     const val SERVICE_UUID = "0000FEE7-0000-1000-8000-00805F9B34FB"
     const val INDICATE_UUID = "0000FED1-0000-1000-8000-00805F9B34FB"

+ 9 - 0
data/src/main/java/com/grkj/data/hardware/ble/BleQueueDispatcher.kt

@@ -154,6 +154,15 @@ abstract class BleQueueDispatcher {
         pendingDisconnectJobs.remove(mac)?.cancel()
     }
 
+    /**
+     * 清空队列
+     */
+    @Synchronized
+    fun clearQueue() {
+        taskQueue.clear()
+        activeMacs.clear()
+    }
+
     /**
      * 计划延迟断连
      */

+ 1 - 1
data/src/main/java/com/grkj/data/hardware/ble/BleUtil.kt

@@ -63,7 +63,7 @@ class BleUtil private constructor() {
                 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
                     //Android 12及以上不允许添加过滤器
                     val bleScanRuleConfig = BleScanRuleConfig.Builder()
-                        .setScanTimeOut(10_000L)
+                        .setScanTimeOut(BleConst.SCAN_TIMEOUT)
                         .apply {
                             if (ISCSConfig.needDeviceName) {
                                 setDeviceName(BleConst.BLE_LOCAL_NAME)

+ 1 - 0
data/src/main/java/com/grkj/data/hardware/modbus/ModBusController.kt

@@ -1120,6 +1120,7 @@ object ModBusController {
                     }
                 }
             }
+            logger.info("找到的设备:${result}")
             if (result != null) {
                 return result
             }