|
@@ -1,9 +1,24 @@
|
|
|
package com.grkj.iscs
|
|
package com.grkj.iscs
|
|
|
|
|
|
|
|
|
|
+import android.bluetooth.BluetoothGatt
|
|
|
|
|
+import android.os.Build
|
|
|
|
|
+import android.util.Log
|
|
|
|
|
+import androidx.appcompat.app.AppCompatActivity
|
|
|
|
|
+import com.clj.fastble.BleManager
|
|
|
|
|
+import com.clj.fastble.data.BleDevice
|
|
|
|
|
+import com.clj.fastble.exception.BleException
|
|
|
|
|
+import com.grkj.iscs.base.BaseActivity
|
|
|
|
|
+import com.grkj.iscs.ble.BleBean
|
|
|
|
|
+import com.grkj.iscs.ble.BleCmdManager
|
|
|
|
|
+import com.grkj.iscs.ble.BleUtil
|
|
|
|
|
+import com.grkj.iscs.ble.CustomBleGattCallback
|
|
|
|
|
+import com.grkj.iscs.ble.CustomBleIndicateCallback
|
|
|
|
|
+import com.grkj.iscs.ble.CustomBleScanCallback
|
|
|
import com.grkj.iscs.extentions.removeLeadingZeros
|
|
import com.grkj.iscs.extentions.removeLeadingZeros
|
|
|
import com.grkj.iscs.extentions.toHexStrings
|
|
import com.grkj.iscs.extentions.toHexStrings
|
|
|
import com.grkj.iscs.modbus.DockBean
|
|
import com.grkj.iscs.modbus.DockBean
|
|
|
import com.grkj.iscs.modbus.ModBusController
|
|
import com.grkj.iscs.modbus.ModBusController
|
|
|
|
|
+import com.grkj.iscs.model.Constants.PERMISSION_REQUEST_CODE
|
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
|
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
|
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
|
|
import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
|
|
@@ -12,13 +27,18 @@ import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_ELEC_LOCK_BOARD
|
|
|
import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
|
|
import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
|
|
|
import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
|
|
import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
|
|
|
import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
|
|
import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
|
|
|
|
|
+import com.grkj.iscs.util.CommonUtils
|
|
|
|
|
+import com.grkj.iscs.util.ToastUtils
|
|
|
import com.grkj.iscs.util.log.LogUtil
|
|
import com.grkj.iscs.util.log.LogUtil
|
|
|
|
|
+import pub.devrel.easypermissions.AfterPermissionGranted
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 业务层管理
|
|
* 业务层管理
|
|
|
*/
|
|
*/
|
|
|
object BusinessManager {
|
|
object BusinessManager {
|
|
|
|
|
|
|
|
|
|
+ /****************************************** ModBus ******************************************/
|
|
|
|
|
+
|
|
|
fun connectDock(count: Int, isNeedInit: Boolean = false) {
|
|
fun connectDock(count: Int, isNeedInit: Boolean = false) {
|
|
|
ModBusController.setSlaveCount(count)
|
|
ModBusController.setSlaveCount(count)
|
|
|
ModBusController.interruptReadTrashBinStatus(false)
|
|
ModBusController.interruptReadTrashBinStatus(false)
|
|
@@ -163,4 +183,139 @@ object BusinessManager {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /****************************************** 蓝牙 ******************************************/
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 下发工作票
|
|
|
|
|
+ */
|
|
|
|
|
+ fun sendTicket(mac: String, activity: AppCompatActivity, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
|
|
+ CommonUtils.checkBlePermission(activity) {
|
|
|
|
|
+ doScanBle(mac, loadingCallBack)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @AfterPermissionGranted(PERMISSION_REQUEST_CODE)
|
|
|
|
|
+ fun doScanBle(mac: String, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
|
|
+ LogUtil.d("扫描开始:$mac")
|
|
|
|
|
+ BleUtil.instance?.scan(object : CustomBleScanCallback() {
|
|
|
|
|
+ override fun onPrompt(promptStr: String?) {
|
|
|
|
|
+ BleManager.getInstance().enableBluetooth()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onScanStarted(success: Boolean) {
|
|
|
|
|
+ LogUtil.d("扫描开始:${success}")
|
|
|
|
|
+ BleUtil.instance?.deviceList?.clear()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onScanning(bleDevice: BleDevice?) {
|
|
|
|
|
+ bleDevice?.let {
|
|
|
|
|
+ Log.d("doScanBle", "扫描到的设备:${it.mac}")
|
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
|
|
|
+ if (!it.name.isNullOrBlank()) {
|
|
|
|
|
+ BleUtil.instance?.deviceList?.add(BleBean(it))
|
|
|
|
|
+ } else {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ BleUtil.instance?.deviceList?.add(BleBean(it))
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
|
|
|
|
|
+ if (BleUtil.instance?.deviceList?.isEmpty() == true) {
|
|
|
|
|
+ ToastUtils.tip(R.string.ble_no_device_found)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ BleUtil.instance?.getBleDeviceByMac(mac)?.bleDevice?.let {
|
|
|
|
|
+ doConnect(it, loadingCallBack)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ fun doConnect(bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
|
|
|
|
|
+ loadingCallBack.invoke(true, CommonUtils.getStr(R.string.ble_connecting))
|
|
|
|
|
+ BleManager.getInstance().disconnect(bleDevice)
|
|
|
|
|
+ BleUtil.instance?.connectBySelect(bleDevice,
|
|
|
|
|
+ object : CustomBleGattCallback() {
|
|
|
|
|
+ override fun onPrompt(promptStr: String?) {
|
|
|
|
|
+ loadingCallBack.invoke(false, promptStr)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onStartConnect() {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onConnectFail(bleDevice: BleDevice?, exception: BleException?) {
|
|
|
|
|
+ loadingCallBack.invoke(false, CommonUtils.getStr(R.string.ble_connect_fail))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onConnectSuccess(
|
|
|
|
|
+ bleDevice: BleDevice?,
|
|
|
|
|
+ gatt: BluetoothGatt?,
|
|
|
|
|
+ status: Int
|
|
|
|
|
+ ) {
|
|
|
|
|
+ loadingCallBack.invoke(false, null)
|
|
|
|
|
+ LogUtil.i("onConnectSuccess : $bleDevice")
|
|
|
|
|
+ bleDevice?.let {
|
|
|
|
|
+ val bleBean = BleBean(it)
|
|
|
|
|
+ BleUtil.instance?.deviceList?.add(bleBean)
|
|
|
|
|
+ // 设置MTU
|
|
|
|
|
+ BleUtil.instance?.setMtu(it)
|
|
|
|
|
+ // 监听
|
|
|
|
|
+ indicate(bleBean)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onDisConnected(
|
|
|
|
|
+ isActiveDisConnected: Boolean,
|
|
|
|
|
+ device: BleDevice?,
|
|
|
|
|
+ gatt: BluetoothGatt?,
|
|
|
|
|
+ status: Int
|
|
|
|
|
+ ) {
|
|
|
|
|
+ loadingCallBack.invoke(false, null)
|
|
|
|
|
+ ToastUtils.tip(CommonUtils.getStr(R.string.ble_disconnect))
|
|
|
|
|
+ BleUtil.instance?.getBleDeviceByMac(device?.mac)?.let {
|
|
|
|
|
+ BleUtil.instance?.deviceList?.remove(it)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ fun indicate(bleBean: BleBean?) {
|
|
|
|
|
+ bleBean?.let {
|
|
|
|
|
+ BleUtil.instance?.indicate(it.bleDevice, indicateCallback = object : CustomBleIndicateCallback() {
|
|
|
|
|
+ override fun onPrompt(promptStr: String?) {
|
|
|
|
|
+ LogUtil.i("监听onPrompt : $promptStr")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onConnectPrompt(promptStr: String?) {
|
|
|
|
|
+ LogUtil.i("监听onConnectPrompt : $promptStr")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onDisConnectPrompt(promptStr: String?) {
|
|
|
|
|
+ LogUtil.i("监听onDisConnectPrompt : $promptStr")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onIndicateSuccess() {
|
|
|
|
|
+ LogUtil.i("监听成功")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onIndicateFailure(exception: BleException?) {
|
|
|
|
|
+ LogUtil.i("监听失败")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onCharacteristicChanged(data: ByteArray?) {
|
|
|
|
|
+ LogUtil.i("监听数据 : ${data?.toHexStrings()}")
|
|
|
|
|
+ data?.let { itData ->
|
|
|
|
|
+ BleCmdManager.handleRsp(it, itData)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|