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

refactor(更新) :
- 连接状态检查放到连接里

周文健 5 сар өмнө
parent
commit
6cbbe5b564

+ 6 - 0
app/src/main/java/com/grkj/iscs/ble/BleCmdManager.kt

@@ -112,6 +112,7 @@ object BleCmdManager {
      * 获取令牌
      */
     fun getToken(mac: String?, callback: CustomBleWriteCallback?) {
+        LogUtil.e("发送指令:获取令牌")
         LogUtil.i("$mac")
         BusinessManager.getBleDeviceByMac(mac)?.bleDevice?.let {
             LogUtil.i("Get token : $mac")
@@ -149,6 +150,7 @@ object BleCmdManager {
      * @param mode 0x01:工作模式 0x02:待机模式
      */
     fun switchMode(mode: ByteArray, bleDevice: BleDevice, callback: CustomBleWriteCallback?) {
+        LogUtil.e("发送指令:工作模式切换")
         BusinessManager.getBleDeviceByMac(bleDevice.mac)?.let {
             BleUtil.instance?.write(
                 it.bleDevice,
@@ -179,6 +181,7 @@ object BleCmdManager {
         bleDevice: BleDevice,
         callback: CustomBleWriteCallback?
     ) {
+        LogUtil.e("发送指令:工作票下发")
         LogUtil.i("sendWorkTicket : $idx")
         BusinessManager.getBleDeviceByMac(bleDevice.mac)?.let {
             it.ticketSend = json
@@ -279,6 +282,7 @@ object BleCmdManager {
      * 获取设备当前状态
      */
     fun getCurrentStatus(bleDevice: BleDevice, callback: CustomBleWriteCallback?) {
+        LogUtil.w("发送指令:获取设备当前状态")
         BusinessManager.getBleDeviceByMac(bleDevice.mac)?.let {
             BleUtil.instance?.write(
                 it.bleDevice,
@@ -401,6 +405,7 @@ object BleCmdManager {
      * 获取钥匙电量
      */
     fun getPower(mac: String?, callback: CustomBleWriteCallback?) {
+        LogUtil.w("发送指令:获取钥匙电量")
         BusinessManager.getBleDeviceByMac(mac)?.let {
             BleUtil.instance?.write(
                 it.bleDevice,
@@ -521,6 +526,7 @@ object BleCmdManager {
      * 获取版本
      */
     fun getVersion(mac: String?, callback: CustomBleWriteCallback?) {
+        LogUtil.w("发送指令:获取版本")
         BusinessManager.getBleDeviceByMac(mac)?.let {
             BleUtil.instance?.write(
                 it.bleDevice,

+ 25 - 25
app/src/main/java/com/grkj/iscs/ble/BleConnectionManager.kt

@@ -63,7 +63,7 @@ object BleConnectionManager {
      * - 否则将 mac 添加到队列并触发连接流程
      */
     fun registerConnectListener(mac: String, callBack: ((Boolean, BleBean?) -> Unit)? = null) {
-        LogUtil.i("registerConnectListener : $mac")
+        LogUtil.i("蓝牙连接-开始连接 : $mac")
         // 已连接且已获取 token
         deviceList.find {
             it.bleDevice.mac == mac && BleManager.getInstance().isConnected(mac) && it.token != null
@@ -73,7 +73,7 @@ object BleConnectionManager {
         }
         // 重复注册检查
         if (connectListeners.any { it.mac == mac } || currentConnectingMac == mac) {
-            LogUtil.w("忽略重复注册 mac: $mac")
+            LogUtil.w("蓝牙连接-忽略重复注册 mac: $mac")
             return
         }
         // 加入队列并启动连接
@@ -94,7 +94,7 @@ object BleConnectionManager {
      * 连接监听反注册
      */
     fun unregisterConnectListener(mac: String, bleBean: BleBean? = null) {
-        LogUtil.i("unregisterConnectListener : $mac")
+        LogUtil.i("蓝牙连接-unregisterConnectListener : $mac")
         connectListeners.removeAll { it.mac == mac }
     }
 
@@ -120,7 +120,7 @@ object BleConnectionManager {
         currentConnectingMac = listener.mac
         isPreparing = true
         if (ActivityTracker.getCurrentActivity() == null) {
-            LogUtil.w("Ignore connectKey : ${listener.mac} no current activity")
+            LogUtil.w("蓝牙连接-Ignore connectKey : ${listener.mac} no current activity")
             isPreparing = false
             currentConnectingMac = null
             return
@@ -185,7 +185,7 @@ object BleConnectionManager {
         prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
     ) {
         if (!checkProcess(mac)) {
-            LogUtil.e("Prepare is canceled : $mac")
+            LogUtil.e("蓝牙连接-Prepare is canceled : $mac")
             return
         }
         Executor.runOnMain {
@@ -201,9 +201,9 @@ object BleConnectionManager {
         isNeedLoading: Boolean = false,
         prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
     ) {
-        LogUtil.i("doScanBle:$mac")
+        LogUtil.i("蓝牙连接-doScanBle:$mac")
         if (!checkProcess(mac)) {
-            LogUtil.e("Prepare is canceled : $mac")
+            LogUtil.e("蓝牙连接-Prepare is canceled : $mac")
             return
         }
         if (isNeedLoading) sendEventMsg(
@@ -219,7 +219,7 @@ object BleConnectionManager {
             }
 
             override fun onScanStarted(success: Boolean) {
-                LogUtil.i("onScanStarted:${success}")
+                LogUtil.i("蓝牙连接-onScanStarted:${success}")
                 if (!success) {
                     if (isNeedLoading) sendEventMsg(
                         MsgEvent(
@@ -231,14 +231,14 @@ object BleConnectionManager {
             }
 
             override fun onScanning(bleDevice: BleDevice?) {
-                LogUtil.i("onScanning:${bleDevice?.mac}")
+                LogUtil.i("蓝牙连接-onScanning:${bleDevice?.mac}")
                 bleDevice?.let {
                     doConnect(it, isNeedLoading, prepareDoneCallBack)
                 }
             }
 
             override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
-                LogUtil.i("onScanFinished: $mac - ${scanResultList?.none { it.mac == mac }}")
+                LogUtil.i("蓝牙连接-onScanFinished: $mac - ${scanResultList?.none { it.mac == mac }}")
                 if (isNeedLoading) sendEventMsg(
                     MsgEvent(
                         MSG_EVENT_LOADING, LoadingMsg(false, null, null)
@@ -262,9 +262,9 @@ object BleConnectionManager {
         isNeedLoading: Boolean = false,
         prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
     ) {
-        LogUtil.i("doConnect : ${bleDevice.mac}")
+        LogUtil.i("蓝牙连接-doConnect : ${bleDevice.mac}")
         if (!checkProcess(bleDevice.mac)) {
-            LogUtil.e("Prepare is canceled : ${bleDevice.mac}")
+            LogUtil.e("蓝牙连接-Prepare is canceled : ${bleDevice.mac}")
             return
         }
         if (isNeedLoading) sendEventMsg(
@@ -293,7 +293,7 @@ object BleConnectionManager {
                             LoadingMsg(false, CommonUtils.getStr(R.string.ble_connect_fail), false)
                         )
                     )
-                    LogUtil.e("onConnectFail : ${bleDevice?.mac} - ${exception?.description}")
+                    LogUtil.e("蓝牙连接-onConnectFail : ${bleDevice?.mac} - ${exception?.description}")
                     prepareDoneCallBack?.invoke(false, null)
                 }
 
@@ -305,7 +305,7 @@ object BleConnectionManager {
                             MSG_EVENT_LOADING, LoadingMsg(false, null, null)
                         )
                     )
-                    LogUtil.i("onConnectSuccess : ${bleDevice?.mac}")
+                    LogUtil.i("蓝牙连接-onConnectSuccess : ${bleDevice?.mac}")
                     bleDevice?.let {
                         deviceList.removeIf { it.bleDevice.mac == bleDevice.mac }
                         val bleBean = BleBean(it)
@@ -337,7 +337,7 @@ object BleConnectionManager {
                             MSG_EVENT_LOADING, LoadingMsg(false, null, false)
                         )
                     )
-                    LogUtil.i("onDisConnected : ${device?.mac} - $isActiveDisConnected")
+                    LogUtil.i("蓝牙连接-onDisConnected : ${device?.mac} - $isActiveDisConnected")
                     getBleDeviceByMac(device?.mac)?.let {
                         deviceList.remove(it)
                     }
@@ -375,7 +375,7 @@ object BleConnectionManager {
         prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
     ) {
         if (!checkProcess(bleBean?.bleDevice?.mac)) {
-            LogUtil.e("Prepare is canceled : ${bleBean?.bleDevice?.mac}")
+            LogUtil.e("蓝牙连接-Prepare is canceled : ${bleBean?.bleDevice?.mac}")
             return
         }
         if (isNeedLoading) sendEventMsg(
@@ -388,19 +388,19 @@ object BleConnectionManager {
             BleUtil.instance?.indicate(
                 it.bleDevice, indicateCallback = object : CustomBleIndicateCallback() {
                     override fun onPrompt(promptStr: String?) {
-                        LogUtil.i("indicate onPrompt : $promptStr")
+                        LogUtil.i("蓝牙连接-indicate onPrompt : $promptStr")
                     }
 
                     override fun onConnectPrompt(promptStr: String?) {
-                        LogUtil.i("indicate onConnectPrompt : $promptStr")
+                        LogUtil.i("蓝牙连接-indicate onConnectPrompt : $promptStr")
                     }
 
                     override fun onDisConnectPrompt(promptStr: String?) {
-                        LogUtil.i("indicate onDisConnectPrompt : $promptStr")
+                        LogUtil.i("蓝牙连接-indicate onDisConnectPrompt : $promptStr")
                     }
 
                     override fun onIndicateSuccess() {
-                        LogUtil.i("onIndicateSuccess")
+                        LogUtil.i("蓝牙连接-onIndicateSuccess")
                         isIndicateSuccess = true
                         getToken(bleBean, isNeedLoading, prepareDoneCallBack)
                     }
@@ -411,7 +411,7 @@ object BleConnectionManager {
                                 MSG_EVENT_LOADING, LoadingMsg(false, null, false)
                             )
                         )
-                        LogUtil.e("onIndicateFailure : ${bleBean.bleDevice.mac} - ${exception?.description}")
+                        LogUtil.e("蓝牙连接-onIndicateFailure : ${bleBean.bleDevice.mac} - ${exception?.description}")
                         Executor.delayOnIO(500) {
                             if (isIndicateSuccess) {
                                 return@delayOnIO
@@ -421,7 +421,7 @@ object BleConnectionManager {
                     }
 
                     override fun onCharacteristicChanged(data: ByteArray?) {
-                        LogUtil.i("onCharacteristicChanged : ${data?.toHexStrings()}")
+                        LogUtil.i("蓝牙连接-onCharacteristicChanged : ${data?.toHexStrings()}")
                         data?.let { itData ->
                             BusinessManager.handleRsp(
                                 it,
@@ -444,7 +444,7 @@ object BleConnectionManager {
         prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
     ) {
         if (!checkProcess(bleBean?.bleDevice?.mac)) {
-            LogUtil.e("Prepare is canceled : ${bleBean?.bleDevice?.mac}")
+            LogUtil.e("蓝牙连接-Prepare is canceled : ${bleBean?.bleDevice?.mac}")
             return
         }
         if (isNeedLoading) sendEventMsg(
@@ -460,7 +460,7 @@ object BleConnectionManager {
                             MSG_EVENT_LOADING, LoadingMsg(false, "token获取成功", null)
                         )
                     )
-                    LogUtil.i("getToken success : ${bleBean.bleDevice.mac}")
+                    LogUtil.i("蓝牙连接-getToken success : ${bleBean.bleDevice.mac}")
                 }
 
                 override fun onWriteFailure(exception: BleException?) {
@@ -469,7 +469,7 @@ object BleConnectionManager {
                             MSG_EVENT_LOADING, LoadingMsg(false, "token获取失败", false)
                         )
                     )
-                    LogUtil.e("getToken fail : ${bleBean.bleDevice.mac}")
+                    LogUtil.e("蓝牙连接-getToken fail : ${bleBean.bleDevice.mac}")
                     prepareDoneCallBack?.invoke(false, null)
                 }
             })

+ 10 - 17
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -2,9 +2,12 @@ package com.grkj.iscs.modbus
 
 import android.content.Context
 import com.clj.fastble.BleManager
+import com.clj.fastble.exception.BleException
 import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.BusinessManager.CAN_RETURN
 import com.grkj.iscs.R
+import com.grkj.iscs.ble.BleCmdManager
+import com.grkj.iscs.ble.CustomBleWriteCallback
 import com.grkj.iscs.extentions.removeLeadingZeros
 import com.grkj.iscs.extentions.toHexStrings
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
@@ -23,7 +26,6 @@ import com.grkj.iscs.util.NetApi
 import com.grkj.iscs.util.ToastUtils
 import com.grkj.iscs.util.log.LogUtil
 import com.sik.sikcore.thread.ThreadUtils
-import kotlinx.coroutines.delay
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.stream.Collectors
 import kotlin.coroutines.resume
@@ -230,7 +232,7 @@ object ModBusController {
                                     // 更新mac
                                     updateKeyMac(dockBean.addr, key.isLeft, keyInfo.macAddress)
                                     controlKeyCharge(true, keyInfo.macAddress) {
-                                        ThreadUtils.runOnIODelayed(500) {
+                                        ThreadUtils.runOnIODelayed(1000) {
                                             BusinessManager.registerConnectListener(
                                                 keyInfo.macAddress
                                             ) { isDone, bleBean ->
@@ -992,27 +994,18 @@ object ModBusController {
             return null
         }
 
-        // —— 优先检查已经连接的 ——
-        val already = keyList.firstOrNull { kb ->
-            BleManager.getInstance().isConnected(kb.mac!!)  // mac 一定 non-null
-        }
-        if (already != null) {
-            val addr = keyDockList
-                .firstOrNull { dock ->
-                    dock.getKeyList().any { it.rfid == already.rfid }
-                }?.addr
-            if (addr != null) return addr to already
-        }
-
-        // —— 如果没有已连的,再顺序挂起尝试连接 ——
         for (kb in keyList) {
             val mac = kb.mac ?: continue
             val found = suspendCoroutine<DockBean.KeyBean?> { cont ->
                 controlKeyCharge(true, mac) {
                     ///开启充电后等待500ms尝试连接
-                    ThreadUtils.runOnIODelayed(500) {
+                    ThreadUtils.runOnIODelayed(1000) {
                         BusinessManager.registerConnectListener(mac) { isDone, _ ->
-                            if (isDone) cont.resume(kb)
+                            if (isDone) {
+                                controlKeyCharge(false, mac) {}
+                                LogUtil.i("连接成功")
+                                cont.resume(kb)
+                            }
                         }
                     }
                 }