|
|
@@ -16,6 +16,7 @@ import com.grkj.iscs_mars.ble.BleConst.MTU
|
|
|
import com.grkj.iscs_mars.ble.BleConst.SERVICE_UUID
|
|
|
import com.grkj.iscs_mars.extentions.toHexStrings
|
|
|
import com.grkj.iscs_mars.util.log.LogUtil
|
|
|
+import com.sik.sikcore.thread.ThreadUtils
|
|
|
|
|
|
/**
|
|
|
* 蓝牙工具类
|
|
|
@@ -40,7 +41,8 @@ class BleUtil private constructor() {
|
|
|
.setConnectOverTime(10 * 1000L)
|
|
|
.setReConnectCount(3, 300) // 设置重新连接次数和间隔时间,默认为0次,不重连
|
|
|
.setSplitWriteNum(500)
|
|
|
- .operateTimeout = OPERATE_TIMEOUT // 设置操作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()
|
|
|
@@ -102,11 +104,13 @@ class BleUtil private constructor() {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- fun indicate(bleDevice: BleDevice,
|
|
|
- serviceUUID: String = SERVICE_UUID,
|
|
|
- indicateUUID: String = INDICATE_UUID,
|
|
|
- isStart: Boolean = true,
|
|
|
- indicateCallback: CustomBleIndicateCallback?) {
|
|
|
+ fun indicate(
|
|
|
+ bleDevice: BleDevice,
|
|
|
+ serviceUUID: String = SERVICE_UUID,
|
|
|
+ indicateUUID: String = INDICATE_UUID,
|
|
|
+ isStart: Boolean = true,
|
|
|
+ indicateCallback: CustomBleIndicateCallback?
|
|
|
+ ) {
|
|
|
// stopIndicate包含removeIndicateCallback
|
|
|
// BleManager.getInstance().removeIndicateCallback(bleDevice, indicateUUID)
|
|
|
BleManager.getInstance().stopIndicate(bleDevice, serviceUUID, indicateUUID)
|
|
|
@@ -123,7 +127,8 @@ class BleUtil private constructor() {
|
|
|
return
|
|
|
}
|
|
|
if (BleManager.getInstance().isConnected(bleDevice.mac)) {
|
|
|
- BleManager.getInstance().indicate(bleDevice, serviceUUID, indicateUUID, indicateCallback)
|
|
|
+ BleManager.getInstance()
|
|
|
+ .indicate(bleDevice, serviceUUID, indicateUUID, indicateCallback)
|
|
|
} else {
|
|
|
BleManager.getInstance().connect(bleDevice.mac, object : BleGattCallback() {
|
|
|
override fun onStartConnect() {}
|
|
|
@@ -132,12 +137,22 @@ class BleUtil private constructor() {
|
|
|
indicateCallback?.onConnectPrompt("连接失败!请检查设备是否打开,并尝试重新连接 : $exception")
|
|
|
}
|
|
|
|
|
|
- override fun onConnectSuccess(bleDevice: BleDevice, gatt: BluetoothGatt, status: Int) {
|
|
|
+ override fun onConnectSuccess(
|
|
|
+ bleDevice: BleDevice,
|
|
|
+ gatt: BluetoothGatt,
|
|
|
+ status: Int
|
|
|
+ ) {
|
|
|
BleManager.getInstance().removeConnectGattCallback(bleDevice)
|
|
|
- BleManager.getInstance().indicate(bleDevice, serviceUUID, indicateUUID, indicateCallback)
|
|
|
+ BleManager.getInstance()
|
|
|
+ .indicate(bleDevice, serviceUUID, indicateUUID, indicateCallback)
|
|
|
}
|
|
|
|
|
|
- override fun onDisConnected(isActiveDisConnected: Boolean, device: BleDevice, gatt: BluetoothGatt, status: Int) {
|
|
|
+ override fun onDisConnected(
|
|
|
+ isActiveDisConnected: Boolean,
|
|
|
+ device: BleDevice,
|
|
|
+ gatt: BluetoothGatt,
|
|
|
+ status: Int
|
|
|
+ ) {
|
|
|
BleManager.getInstance().removeConnectGattCallback(device)
|
|
|
indicateCallback?.onDisConnectPrompt("连接断开!请检查硬件状态,并尝试重新连接!")
|
|
|
}
|
|
|
@@ -146,11 +161,12 @@ class BleUtil private constructor() {
|
|
|
}
|
|
|
|
|
|
|
|
|
- fun write(bleDevice: BleDevice,
|
|
|
- serviceUUID: String = SERVICE_UUID,
|
|
|
- writeUUID: String = INDICATE_UUID,
|
|
|
- cmd: ByteArray?,
|
|
|
- writeCallback: CustomBleWriteCallback?
|
|
|
+ fun write(
|
|
|
+ bleDevice: BleDevice,
|
|
|
+ serviceUUID: String = SERVICE_UUID,
|
|
|
+ writeUUID: String = INDICATE_UUID,
|
|
|
+ cmd: ByteArray?,
|
|
|
+ writeCallback: CustomBleWriteCallback?
|
|
|
) {
|
|
|
LogUtil.i("ble_write : ${cmd?.toHexStrings()}")
|
|
|
cmd ?: return
|
|
|
@@ -166,23 +182,18 @@ class BleUtil private constructor() {
|
|
|
if (BleManager.getInstance().isConnected(bleDevice.mac)) {
|
|
|
BleManager.getInstance().write(bleDevice, serviceUUID, writeUUID, cmd, writeCallback)
|
|
|
} else {
|
|
|
- BleManager.getInstance().connect(bleDevice.mac, object : BleGattCallback() {
|
|
|
- override fun onStartConnect() {}
|
|
|
- override fun onConnectFail(bleDevice: BleDevice, exception: BleException) {
|
|
|
- BleManager.getInstance().removeConnectGattCallback(bleDevice)
|
|
|
- writeCallback?.onConnectPrompt("连接失败!请检查设备是否打开,并尝试重新连接 : $exception")
|
|
|
+ fun checkAndWrite() {
|
|
|
+ ThreadUtils.runOnIO {
|
|
|
+ val isConnect = BleConnectionManager.tryConnectWithOptionalCharge(bleDevice.mac)
|
|
|
+ if (isConnect) {
|
|
|
+ BleManager.getInstance()
|
|
|
+ .write(bleDevice, serviceUUID, writeUUID, cmd, writeCallback)
|
|
|
+ } else {
|
|
|
+ checkAndWrite()
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- override fun onConnectSuccess(bleDevice: BleDevice, gatt: BluetoothGatt, status: Int) {
|
|
|
- BleManager.getInstance().removeConnectGattCallback(bleDevice)
|
|
|
- BleManager.getInstance().write(bleDevice, serviceUUID, writeUUID, cmd, writeCallback)
|
|
|
- }
|
|
|
-
|
|
|
- override fun onDisConnected(isActiveDisConnected: Boolean, device: BleDevice, gatt: BluetoothGatt, status: Int) {
|
|
|
- BleManager.getInstance().removeConnectGattCallback(device)
|
|
|
- writeCallback?.onDisConnectPrompt("连接断开!请检查硬件状态,并尝试重新连接!")
|
|
|
- }
|
|
|
- })
|
|
|
+ }
|
|
|
+ checkAndWrite()
|
|
|
}
|
|
|
}
|
|
|
}
|