|
|
@@ -107,7 +107,7 @@ object BusinessManager {
|
|
|
* 总的监听,做预处理,其余的所有监听均使用本监听处理后的数据,只允许调用一次
|
|
|
*/
|
|
|
fun registerMainListener() {
|
|
|
- ModBusController.registerStatusListener(MyApplication.instance!!.applicationContext) { res ->
|
|
|
+ ModBusController.registerStatusListener(this) { res ->
|
|
|
LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
|
|
|
res.forEach { bytes ->
|
|
|
val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
|
|
|
@@ -213,7 +213,9 @@ object BusinessManager {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- listeners.forEach { it.callBack(dockBean) }
|
|
|
+ Executor.delayOnMain(200) {
|
|
|
+ listeners.forEach { it.callBack(dockBean) }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -326,21 +328,23 @@ object BusinessManager {
|
|
|
/****************************************** 蓝牙 ******************************************/
|
|
|
/******************************************蓝牙通用准备******************************************/
|
|
|
|
|
|
- private fun prepareBle(
|
|
|
+ fun prepareBle(
|
|
|
mac: String,
|
|
|
activity: AppCompatActivity,
|
|
|
- loadingCallBack: (Boolean, String?, Boolean?) -> Unit,
|
|
|
- prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
|
|
|
+ prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
|
|
|
) {
|
|
|
- CommonUtils.checkBlePermission(activity) {
|
|
|
- doScanBle(mac, loadingCallBack, prepareDoneCallBack)
|
|
|
+ Executor.runOnMain {
|
|
|
+ CommonUtils.checkBlePermission(activity) {
|
|
|
+ doScanBle(mac, loadingCallBack, prepareDoneCallBack)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@AfterPermissionGranted(PERMISSION_REQUEST_CODE)
|
|
|
- fun doScanBle(mac: String, loadingCallBack: (Boolean, String?, Boolean?) -> Unit, prepareDoneCallBack: (Boolean, BleBean?) -> Unit) {
|
|
|
+ fun doScanBle(mac: String, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?, prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?) {
|
|
|
LogUtil.d("扫描开始:$mac")
|
|
|
- loadingCallBack(true, "正在扫描设备...", null)
|
|
|
+ loadingCallBack?.invoke(true, "正在扫描设备...", null)
|
|
|
BleUtil.instance?.scan(object : CustomBleScanCallback() {
|
|
|
override fun onPrompt(promptStr: String?) {
|
|
|
BleManager.getInstance().enableBluetooth()
|
|
|
@@ -367,10 +371,19 @@ object BusinessManager {
|
|
|
}
|
|
|
|
|
|
override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
|
|
|
- loadingCallBack.invoke(false, null, null)
|
|
|
+ // if (BleUtil.instance?.deviceList?.isEmpty() == true) {
|
|
|
+// ToastUtils.tip(R.string.ble_no_device_found)
|
|
|
+// loadingCallBack?.invoke(false, null, false)
|
|
|
+// return
|
|
|
+// }
|
|
|
+// BleUtil.instance?.getBleDeviceByMac(mac)?.bleDevice?.let {
|
|
|
+// doConnect(it, loadingCallBack, prepareDoneCallBack)
|
|
|
+// }
|
|
|
+// scanResultList?.find { it.mac == mac }?.let {
|
|
|
+ loadingCallBack?.invoke(false, null, null)
|
|
|
if (BleUtil.instance?.deviceList?.isEmpty() == true) {
|
|
|
ToastUtils.tip(R.string.ble_no_device_found)
|
|
|
- loadingCallBack.invoke(false, null, false)
|
|
|
+ loadingCallBack?.invoke(false, null, false)
|
|
|
return
|
|
|
}
|
|
|
BleUtil.instance?.getBleDeviceByMac(mac)?.bleDevice?.let {
|
|
|
@@ -385,26 +398,26 @@ object BusinessManager {
|
|
|
*/
|
|
|
fun doConnect(
|
|
|
bleDevice: BleDevice,
|
|
|
- loadingCallBack: (Boolean, String?, Boolean?) -> Unit,
|
|
|
- prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
|
|
|
+ prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
|
|
|
) {
|
|
|
- loadingCallBack.invoke(true, CommonUtils.getStr(R.string.ble_connecting), null)
|
|
|
+ loadingCallBack?.invoke(true, CommonUtils.getStr(R.string.ble_connecting), null)
|
|
|
BleManager.getInstance().disconnect(bleDevice)
|
|
|
BleUtil.instance?.connectBySelect(bleDevice,
|
|
|
object : CustomBleGattCallback() {
|
|
|
override fun onPrompt(promptStr: String?) {
|
|
|
- loadingCallBack.invoke(false, promptStr, false)
|
|
|
+ loadingCallBack?.invoke(false, promptStr, false)
|
|
|
}
|
|
|
|
|
|
override fun onStartConnect() {}
|
|
|
|
|
|
override fun onConnectFail(bleDevice: BleDevice?, exception: BleException?) {
|
|
|
- loadingCallBack.invoke(false, CommonUtils.getStr(R.string.ble_connect_fail), false)
|
|
|
- prepareDoneCallBack.invoke(false, null)
|
|
|
+ loadingCallBack?.invoke(false, CommonUtils.getStr(R.string.ble_connect_fail), false)
|
|
|
+ prepareDoneCallBack?.invoke(false, null)
|
|
|
}
|
|
|
|
|
|
override fun onConnectSuccess(bleDevice: BleDevice?, gatt: BluetoothGatt?, status: Int) {
|
|
|
- loadingCallBack.invoke(false, null, null)
|
|
|
+ loadingCallBack?.invoke(false, null, null)
|
|
|
LogUtil.i("onConnectSuccess : $bleDevice")
|
|
|
bleDevice?.let {
|
|
|
val bleBean = BleBean(it)
|
|
|
@@ -422,7 +435,7 @@ object BusinessManager {
|
|
|
}
|
|
|
|
|
|
override fun onDisConnected(isActiveDisConnected: Boolean, device: BleDevice?, gatt: BluetoothGatt?, status: Int) {
|
|
|
- loadingCallBack.invoke(false, null, false)
|
|
|
+ loadingCallBack?.invoke(false, null, false)
|
|
|
ToastUtils.tip(CommonUtils.getStr(R.string.ble_disconnect))
|
|
|
BleUtil.instance?.getBleDeviceByMac(device?.mac)?.let {
|
|
|
BleUtil.instance?.deviceList?.remove(it)
|
|
|
@@ -436,10 +449,10 @@ object BusinessManager {
|
|
|
*/
|
|
|
private fun indicate(
|
|
|
bleBean: BleBean?,
|
|
|
- loadingCallBack: (Boolean, String?, Boolean?) -> Unit,
|
|
|
- prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
|
|
|
+ prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
|
|
|
) {
|
|
|
- loadingCallBack.invoke(true, "开始监听...", null)
|
|
|
+ loadingCallBack?.invoke(true, "开始监听...", null)
|
|
|
bleBean?.let {
|
|
|
BleUtil.instance?.indicate(it.bleDevice, indicateCallback = object : CustomBleIndicateCallback() {
|
|
|
override fun onPrompt(promptStr: String?) {
|
|
|
@@ -462,10 +475,10 @@ object BusinessManager {
|
|
|
}
|
|
|
|
|
|
override fun onIndicateFailure(exception: BleException?) {
|
|
|
- loadingCallBack.invoke(false, null, false)
|
|
|
+ loadingCallBack?.invoke(false, null, false)
|
|
|
ToastUtils.tip("监听失败")
|
|
|
LogUtil.i("监听失败")
|
|
|
- prepareDoneCallBack.invoke(false, null)
|
|
|
+ prepareDoneCallBack?.invoke(false, null)
|
|
|
}
|
|
|
|
|
|
override fun onCharacteristicChanged(data: ByteArray?) {
|
|
|
@@ -483,22 +496,22 @@ object BusinessManager {
|
|
|
*/
|
|
|
private fun getToken(
|
|
|
bleBean: BleBean?,
|
|
|
- loadingCallBack: (Boolean, String?, Boolean?) -> Unit,
|
|
|
- prepareDoneCallBack: (Boolean, BleBean?) -> Unit
|
|
|
+ loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
|
|
|
+ prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
|
|
|
) {
|
|
|
- loadingCallBack.invoke(true, "开始获取token...", null)
|
|
|
+ loadingCallBack?.invoke(true, "开始获取token...", null)
|
|
|
bleBean?.let {
|
|
|
BleCmdManager.getToken(it.bleDevice.mac, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
- loadingCallBack.invoke(false, "token获取成功", null)
|
|
|
+ loadingCallBack?.invoke(false, "token获取成功", null)
|
|
|
LogUtil.i("getToken success : ${bleBean.bleDevice.mac}")
|
|
|
- prepareDoneCallBack.invoke(true, bleBean)
|
|
|
+ prepareDoneCallBack?.invoke(true, bleBean)
|
|
|
}
|
|
|
|
|
|
override fun onWriteFailure(exception: BleException?) {
|
|
|
- loadingCallBack.invoke(false, "token获取失败", false)
|
|
|
+ loadingCallBack?.invoke(false, "token获取失败", false)
|
|
|
LogUtil.e("getToken fail : ${bleBean.bleDevice.mac}")
|
|
|
- prepareDoneCallBack.invoke(false, null)
|
|
|
+ prepareDoneCallBack?.invoke(false, null)
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
@@ -513,11 +526,17 @@ object BusinessManager {
|
|
|
mac: String,
|
|
|
ticketDetail: TicketDetailRespVO,
|
|
|
activity: AppCompatActivity,
|
|
|
- loadingCallBack: (Boolean, String?, Boolean?) -> Unit,
|
|
|
+ loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
|
|
|
) {
|
|
|
prepareBle(mac, activity, loadingCallBack) { done, bleBean ->
|
|
|
if (done) {
|
|
|
Executor.delayOnMain(500) {
|
|
|
+ // TODO 蓝牙准备操作
|
|
|
+// val bleBean = BleUtil.instance?.getBleDeviceByMac(mac)
|
|
|
+// if (bleBean == null) {
|
|
|
+// ToastUtils.tip(R.string.simple_key_is_not_connected)
|
|
|
+// return@delayOnMain
|
|
|
+// }
|
|
|
// 单bleBean json赋值
|
|
|
bleBean?.ticketSend = generateTicketSendJson(ticketDetail)
|
|
|
bleBean?.ticketSend?.let { itJson ->
|
|
|
@@ -525,7 +544,7 @@ object BusinessManager {
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- loadingCallBack.invoke(false, null, false)
|
|
|
+ loadingCallBack?.invoke(false, null, false)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -533,29 +552,35 @@ object BusinessManager {
|
|
|
/**
|
|
|
* 读取工作票完成情况
|
|
|
*/
|
|
|
- fun getTicketStatusBusiness(mac: String, activity: AppCompatActivity, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
+ fun getTicketStatusBusiness(mac: String, activity: AppCompatActivity, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
prepareBle(mac, activity, loadingCallBack) { done, bleBean ->
|
|
|
if (done) {
|
|
|
Executor.delayOnMain(500) {
|
|
|
+ // TODO 蓝牙准备操作
|
|
|
+// val bleBean = BleUtil.instance?.getBleDeviceByMac(mac)
|
|
|
+// if (bleBean == null) {
|
|
|
+// ToastUtils.tip(R.string.simple_key_is_not_connected)
|
|
|
+// return@delayOnMain
|
|
|
+// }
|
|
|
getTicketStatus(bleBean!!.bleDevice, loadingCallBack)
|
|
|
}
|
|
|
} else {
|
|
|
- loadingCallBack.invoke(false, null, false)
|
|
|
+ loadingCallBack?.invoke(false, null, false)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
- loadingCallBack.invoke(true, "开始下发工作票...", null)
|
|
|
+ private fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
+ loadingCallBack?.invoke(true, "开始下发工作票...", null)
|
|
|
BleCmdManager.sendWorkTicket(jsonStr, bleDevice = bleDevice, callback = object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
println("sendTicket success")
|
|
|
- loadingCallBack.invoke(true, "工作票下发中...", null)
|
|
|
+ loadingCallBack?.invoke(true, "工作票下发中...", null)
|
|
|
}
|
|
|
|
|
|
override fun onWriteFailure(exception: BleException?) {
|
|
|
LogUtil.e("sendTicket fail : ${bleDevice.mac}")
|
|
|
- loadingCallBack.invoke(false, "工作票下发失败", null)
|
|
|
+ loadingCallBack?.invoke(false, "工作票下发失败", null)
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
@@ -608,7 +633,7 @@ object BusinessManager {
|
|
|
return jsonStr
|
|
|
}
|
|
|
|
|
|
- fun handleRsp(bleBean: BleBean, byteArray: ByteArray, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
+ fun handleRsp(bleBean: BleBean, byteArray: ByteArray, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
// TODO Token校验
|
|
|
// val len = byteArray[2].toInt()
|
|
|
// val token = byteArray.copyOfRange(len + 7, len + 11)
|
|
|
@@ -647,15 +672,15 @@ object BusinessManager {
|
|
|
* job : 0x01:工作模式 0x02:待机模式
|
|
|
* res : 0x01:成功 0x02:失败
|
|
|
*/
|
|
|
- private fun handleSwitchModeResult(byteArray: ByteArray, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
+ private fun handleSwitchModeResult(byteArray: ByteArray, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
LogUtil.i("handleSwitchModeResult : ${byteArray.toHexStrings()}")
|
|
|
val job = byteArray[4]
|
|
|
val res = byteArray[5]
|
|
|
- loadingCallBack.invoke(false, null, null)
|
|
|
+ loadingCallBack?.invoke(false, null, null)
|
|
|
if (res == 0x01.toByte() && job == 0x01.toByte()) {
|
|
|
- loadingCallBack.invoke(false, "切换工作模式成功", null)
|
|
|
+ loadingCallBack?.invoke(false, "切换工作模式成功", null)
|
|
|
} else if (res == 0x02.toByte() && job == 0x01.toByte()) {
|
|
|
- loadingCallBack.invoke(false, "切换待机模式成功", null)
|
|
|
+ loadingCallBack?.invoke(false, "切换待机模式成功", null)
|
|
|
}
|
|
|
// TODO 切换完不断开
|
|
|
// BleManager.getInstance().disconnectAllDevice()
|
|
|
@@ -665,9 +690,9 @@ object BusinessManager {
|
|
|
* 工作票下发结果
|
|
|
* res:0x00:成功 0x01:失败 0x02:传输超时 0x0D:当前IDX超出范围 0x0E:当前数据CRC校验失败 0x14:JSON结构错误 0x63:未知错误
|
|
|
*/
|
|
|
- private fun handleWorkTicketResult(bleBean: BleBean, byteArray: ByteArray, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
+ private fun handleWorkTicketResult(bleBean: BleBean, byteArray: ByteArray, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
LogUtil.i("handleWorkTicketResult : ${byteArray.toHexStrings()}")
|
|
|
- loadingCallBack.invoke(false, null, null)
|
|
|
+ loadingCallBack?.invoke(false, null, null)
|
|
|
val idx = byteArray[4] + byteArray[5]
|
|
|
val total = byteArray[6] + byteArray[7]
|
|
|
val res = byteArray[8]
|
|
|
@@ -688,20 +713,23 @@ object BusinessManager {
|
|
|
} else {
|
|
|
LogUtil.i("Work ticket is done")
|
|
|
// 下发完毕,切换工作模式
|
|
|
- loadingCallBack.invoke(true, "切换钥匙为工作模式", null)
|
|
|
+ loadingCallBack?.invoke(true, "切换钥匙为工作模式", null)
|
|
|
BleCmdManager.switchMode(STATUS_WORK, bleBean.bleDevice, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
- println("switch mode 1 success")}
|
|
|
+ println("switch mode 1 success")
|
|
|
+ // TODO 只能在这里断开,不能全部断开
|
|
|
+// BleManager.getInstance().disconnect(bleBean.bleDevice)
|
|
|
+ }
|
|
|
override fun onWriteFailure(exception: BleException?) {
|
|
|
println("switch mode 1 fail")}
|
|
|
})
|
|
|
// 打开钥匙卡扣
|
|
|
val keyBean = ModBusController.getKeyByMac(bleBean.bleDevice.mac)
|
|
|
if (keyBean == null) {
|
|
|
- loadingCallBack.invoke(false, "未找到钥匙信息", false)
|
|
|
+ loadingCallBack?.invoke(false, "未找到钥匙信息", false)
|
|
|
ToastUtils.tip(R.string.key_not_exists)
|
|
|
} else {
|
|
|
- loadingCallBack.invoke(false, null, true)
|
|
|
+ loadingCallBack?.invoke(false, null, true)
|
|
|
val dock = ModBusController.getDockByKeyMac(bleBean.bleDevice.mac)
|
|
|
ModBusController.controlKeyBuckle(true, keyBean.isLeft, dock?.addr!!.toInt() - 1)
|
|
|
}
|
|
|
@@ -711,7 +739,7 @@ object BusinessManager {
|
|
|
/**
|
|
|
* 处理工作票完成情况
|
|
|
*/
|
|
|
- private fun handleTicketStatus(bleDevice: BleDevice, byteArray: ByteArray, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
+ private fun handleTicketStatus(bleDevice: BleDevice, byteArray: ByteArray, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
// TODO 需要有超时重传机制
|
|
|
LogUtil.i("handleTicketStatus : ${byteArray.toHexStrings()}")
|
|
|
|
|
|
@@ -726,7 +754,7 @@ object BusinessManager {
|
|
|
}
|
|
|
// TODO 缺少res处理
|
|
|
if (idx != total - 1) {
|
|
|
- loadingCallBack.invoke(true, "获取工作票分包", null)
|
|
|
+ loadingCallBack?.invoke(true, "获取工作票分包", null)
|
|
|
getTicketStatusPart((idx + 1).toByteArray(), total.toByteArray(), byteArrayOf(0x01.toByte()), bleDevice, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
println("getTicketStatusPart success")
|
|
|
@@ -737,11 +765,11 @@ object BusinessManager {
|
|
|
}
|
|
|
})
|
|
|
} else {
|
|
|
- loadingCallBack.invoke(false, "工作票完成状态读取完成", null)
|
|
|
+ loadingCallBack?.invoke(false, "工作票完成状态读取完成", null)
|
|
|
BleUtil.instance?.getBleDeviceByMac(bleDevice.mac)?.let {
|
|
|
println("工作票完成接收 : ${String(it.ticketStatus)}")
|
|
|
// TD:Ticket Done
|
|
|
- loadingCallBack.invoke(false, "TD${String(it.ticketStatus)}", true)
|
|
|
+ loadingCallBack?.invoke(false, "TD${String(it.ticketStatus)}", true)
|
|
|
// TODO 清空ticket
|
|
|
it.ticketStatus = byteArrayOf()
|
|
|
// TODO 根据工作票完成情况,切换为待机模式
|
|
|
@@ -752,6 +780,13 @@ object BusinessManager {
|
|
|
println("switch mode 1 fail")}
|
|
|
})
|
|
|
|
|
|
+ // TODO 和confirm dialog冲突,待定
|
|
|
+ val dock = ModBusController.getDockByKeyMac(bleDevice.mac)
|
|
|
+ val keyBean = dock?.getKeyList()?.find { it.mac == bleDevice.mac }
|
|
|
+ keyBean?.let {
|
|
|
+ ModBusController.controlKeyBuckle(false, keyBean.isLeft, dock.addr.toInt() - 1)
|
|
|
+ }
|
|
|
+
|
|
|
// 上报隔离点状态
|
|
|
val workTicketGetBO = Gson().fromJson(String(it.ticketStatus), WorkTicketGetBO::class.java)
|
|
|
val keyNfc = ModBusController.getKeyByMac(bleDevice.mac)?.rfid
|
|
|
@@ -795,14 +830,14 @@ object BusinessManager {
|
|
|
/**
|
|
|
* 获取工作票完成情况
|
|
|
*/
|
|
|
- private fun getTicketStatus(bleDevice: BleDevice, loadingCallBack: (Boolean, String?, Boolean?) -> Unit) {
|
|
|
- loadingCallBack.invoke(true, "开始获取工作票", null)
|
|
|
+ private fun getTicketStatus(bleDevice: BleDevice, loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?) {
|
|
|
+ loadingCallBack?.invoke(true, "开始获取工作票", null)
|
|
|
BleCmdManager.getTicketStatus(bleDevice, object : CustomBleWriteCallback() {
|
|
|
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
|
|
|
- loadingCallBack.invoke(false, "工作票获取成功", null)
|
|
|
+ loadingCallBack?.invoke(false, "工作票获取成功", null)
|
|
|
println("getTicketStatus success")}
|
|
|
override fun onWriteFailure(exception: BleException?) {
|
|
|
- loadingCallBack.invoke(false, "工作票获取失败", false)
|
|
|
+ loadingCallBack?.invoke(false, "工作票获取失败", false)
|
|
|
println("getTicketStatus fail")}
|
|
|
})
|
|
|
}
|