package com.grkj.iscs.activity import com.grkj.iscs.base.BaseMvpActivity import com.grkj.iscs.databinding.ActivityModbusBinding import com.grkj.iscs.extentions.removeLeadingZeros import com.grkj.iscs.extentions.toHexStrings import com.grkj.iscs.iview.IModbusView import com.grkj.iscs.modbus.DeviceBean import com.grkj.iscs.modbus.ModBusController import com.grkj.iscs.presenter.ModBusPresenter import com.grkj.iscs.util.ToastUtils import com.grkj.iscs.util.log.LogUtil class ModbusActivity : BaseMvpActivity() { override val viewBinding: ActivityModbusBinding get() = ActivityModbusBinding.inflate(layoutInflater) override fun initView() { presenter?.initModbus() ModBusController.registerStatusListener(this) { res -> LogUtil.i("设备状态:${(res as List).map { it.toHexStrings() }}") res.forEach { bytes -> val rst = ModBusController.checkStatus(bytes) println("设备状态变化 : $rst") } } mBinding?.buckleStatus?.setOnClickListener { ModBusController.readBuckleStatus(null, { res -> LogUtil.i("单卡扣状态 : ${res.toHexStrings()}") }, { res -> LogUtil.i("多卡扣状态 : ${res.map { it.toHexStrings()}}") res.forEach { bytes -> } }) } mBinding?.deviceType?.setOnClickListener { println("____________________________________") ModBusController.readDeviceType { res -> LogUtil.i("设备类型数量 : ${res.size}") LogUtil.i("设备类型 : ${res.map { it.toHexStrings()}}") // TODO 暂时先清空 ModBusController.deviceList.clear() res.forEach { bytes -> if (bytes.size < 5) return@forEach // TODO 设备具体数据由0x0011寄存器提供 ModBusController.deviceList.add(DeviceBean(bytes[0], bytes[4], mutableListOf(), mutableListOf())) val type = when (bytes[4]) { 0x00.toByte() -> "钥匙底座" 0x01.toByte() -> "锁具底座" 0x02.toByte() -> "电磁锁控制板" else -> "未知" } LogUtil.i("设备(${bytes[0].toInt()})类型:$type") } println("____________________________________") } } mBinding?.openLockBuckle?.setOnClickListener { if (mBinding?.slaveIdx?.text.toString().isEmpty()) { ToastUtils.tip("请输入设备编号") return@setOnClickListener } if (mBinding?.lockIdx?.text.toString().isEmpty()) { ToastUtils.tip("请输入卡扣编号") return@setOnClickListener } ModBusController.openLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res -> LogUtil.i("开锁卡扣 : ${res.toHexStrings()}") } } mBinding?.closeLockBuckle?.setOnClickListener { if (mBinding?.slaveIdx?.text.toString().isEmpty()) { ToastUtils.tip("请输入设备编号") return@setOnClickListener } if (mBinding?.lockIdx?.text.toString().isEmpty()) { ToastUtils.tip("请输入卡扣编号") return@setOnClickListener } ModBusController.closeLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res -> LogUtil.i("关锁卡扣 : ${res.toHexStrings()}") } } mBinding?.lockRfid?.setOnClickListener { if (mBinding?.slaveIdx?.text.toString().isEmpty()) { ToastUtils.tip("请输入设备编号") return@setOnClickListener } if (mBinding?.lockIdx?.text.toString().isEmpty()) { ToastUtils.tip("请输入卡扣编号") return@setOnClickListener } ModBusController.readLockRfid(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res -> val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros() println("锁具RFID : $rfid") ModBusController.updateLockRfid(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt(), rfid) } } mBinding?.exit?.setOnClickListener { finish() } } override fun initPresenter(): ModBusPresenter { return ModBusPresenter() } override fun onDestroy() { super.onDestroy() ModBusController.stop() } }