Explorar el Código

补充打印;蓝牙操作超时缩短至10秒;获取钥匙当前状态操作自行封装一层超时判断,防止接不到fastble的报错

Frankensteinly hace 1 año
padre
commit
aa2308f056

+ 14 - 2
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -459,7 +459,6 @@ object BusinessManager {
     fun checkEquipCount(needLockCount: Int, isNeedKey: Boolean, callBack: (Pair<Byte, DockBean.KeyBean?>?, MutableMap<Byte, MutableList<DockBean.LockBean>>) -> Unit) {
         var lockCount = 0
         val lockMap = ModBusController.getLocks(needLockCount)
-        LogUtil.i("checkEquipCount : $lockMap")
         lockMap.forEach { (_, rfidList) ->
             lockCount += rfidList.size
         }
@@ -488,6 +487,7 @@ object BusinessManager {
         if (tipStr.isNotEmpty()) {
             ToastUtils.tip(tipStr)
         }
+        LogUtil.i("checkEquipCount : key = $key, lockMap = $lockMap")
         callBack.invoke(key, lockMap)
     }
 
@@ -1099,15 +1099,27 @@ object BusinessManager {
         }
     }
 
-    fun getCurrentStatus(from: Int, bleDevice: BleDevice) {
+    fun getCurrentStatus(from: Int, bleDevice: BleDevice, retryCount: Int = 3) {
         LogUtil.i("getCurrentStatus - ${bleDevice.mac} - from : $from")
+        var isTimeout = true
+        Executor.delayOnMain((BleUtil.OPERATE_TIMEOUT + 1).toLong()) {
+            if (isTimeout) {
+                if (retryCount > 0) {
+                    Executor.delayOnMain(1000) {
+                        getCurrentStatus(from, bleDevice, retryCount - 1)
+                    }
+                }
+            }
+        }
         BleCmdManager.getCurrentStatus(bleDevice, object : CustomBleWriteCallback() {
             override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
                 LogUtil.i("getCurrentStatus success : ${bleDevice.mac}")
+                isTimeout = false
             }
 
             override fun onWriteFailure(exception: BleException?) {
                 LogUtil.i("getCurrentStatus fail : ${bleDevice.mac}")
+                isTimeout = false
                 Executor.delayOnMain(1000) {
                     getCurrentStatus(from, bleDevice)
                 }

+ 3 - 1
app/src/main/java/com/grkj/iscs/ble/BleUtil.kt

@@ -29,6 +29,8 @@ class BleUtil private constructor() {
                 return field
             }
             private set
+
+        const val OPERATE_TIMEOUT = 10 * 1000
     }
 
     fun initBle(application: Application?) {
@@ -38,7 +40,7 @@ class BleUtil private constructor() {
                 .setConnectOverTime(10 * 1000L)
                 .setReConnectCount(3, 300) // 设置重新连接次数和间隔时间,默认为0次,不重连
                 .setSplitWriteNum(500)
-                .operateTimeout = 15 * 1000 // 设置操作readRssi、setMtu、write、read、notify、indicate的超时时间(毫秒)
+                .operateTimeout = OPERATE_TIMEOUT // 设置操作readRssi、setMtu、write、read、notify、indicate的超时时间(毫秒)
             if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
                 //Android 12及以上不允许添加过滤器
                 val bleScanRuleConfig = BleScanRuleConfig.Builder()

+ 1 - 0
app/src/main/java/com/grkj/iscs/view/presenter/JobProgressPresenter.kt

@@ -118,6 +118,7 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                     }
                     val isNeedKey = equipDetail?.ticketKeyVOList?.filter { it.keyId == null }?.size != 1
                             && BusinessManager.mDeviceTakeList.none { it.deviceType == DEVICE_TYPE_KEY && it.ticketId == ticketId }
+                    LogUtil.i("needLockCount = $needLockCount , readyLockCount = $readyLockCount, realCount = $realCount, isNeedKey = $isNeedKey")
                     BusinessManager.checkEquipCount(realCount, isNeedKey) { keyPair, lockMap ->
                         if (keyPair == null) {
                             Executor.runOnMain {