ModbusActivity.kt 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.grkj.iscs.activity
  2. import com.grkj.iscs.base.BaseMvpActivity
  3. import com.grkj.iscs.databinding.ActivityModbusBinding
  4. import com.grkj.iscs.extentions.removeLeadingZeros
  5. import com.grkj.iscs.extentions.toHexStrings
  6. import com.grkj.iscs.iview.IModbusView
  7. import com.grkj.iscs.modbus.DeviceBean
  8. import com.grkj.iscs.modbus.ModBusController
  9. import com.grkj.iscs.presenter.ModBusPresenter
  10. import com.grkj.iscs.util.ToastUtils
  11. import com.grkj.iscs.util.log.LogUtil
  12. class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityModbusBinding>() {
  13. override val viewBinding: ActivityModbusBinding
  14. get() = ActivityModbusBinding.inflate(layoutInflater)
  15. override fun initView() {
  16. presenter?.initModbus()
  17. ModBusController.registerStatusListener(this) { res ->
  18. LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
  19. res.forEach { bytes ->
  20. val rst = ModBusController.checkStatus(bytes)
  21. println("设备状态变化 : $rst")
  22. }
  23. }
  24. mBinding?.buckleStatus?.setOnClickListener {
  25. ModBusController.readBuckleStatus(null, { res ->
  26. LogUtil.i("单卡扣状态 : ${res.toHexStrings()}")
  27. },
  28. { res ->
  29. LogUtil.i("多卡扣状态 : ${res.map { it.toHexStrings()}}")
  30. res.forEach { bytes ->
  31. }
  32. })
  33. }
  34. mBinding?.deviceType?.setOnClickListener {
  35. println("____________________________________")
  36. ModBusController.readDeviceType { res ->
  37. LogUtil.i("设备类型数量 : ${res.size}")
  38. LogUtil.i("设备类型 : ${res.map { it.toHexStrings()}}")
  39. // TODO 暂时先清空
  40. ModBusController.deviceList.clear()
  41. res.forEach { bytes ->
  42. if (bytes.size < 5) return@forEach
  43. // TODO 设备具体数据由0x0011寄存器提供
  44. ModBusController.deviceList.add(DeviceBean(bytes[0], bytes[4], mutableListOf(), mutableListOf()))
  45. val type = when (bytes[4]) {
  46. 0x00.toByte() -> "钥匙底座"
  47. 0x01.toByte() -> "锁具底座"
  48. 0x02.toByte() -> "电磁锁控制板"
  49. else -> "未知"
  50. }
  51. LogUtil.i("设备(${bytes[0].toInt()})类型:$type")
  52. }
  53. println("____________________________________")
  54. }
  55. }
  56. mBinding?.openLockBuckle?.setOnClickListener {
  57. if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
  58. ToastUtils.tip("请输入设备编号")
  59. return@setOnClickListener
  60. }
  61. if (mBinding?.lockIdx?.text.toString().isEmpty()) {
  62. ToastUtils.tip("请输入卡扣编号")
  63. return@setOnClickListener
  64. }
  65. ModBusController.openLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
  66. LogUtil.i("开锁卡扣 : ${res.toHexStrings()}")
  67. }
  68. }
  69. mBinding?.closeLockBuckle?.setOnClickListener {
  70. if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
  71. ToastUtils.tip("请输入设备编号")
  72. return@setOnClickListener
  73. }
  74. if (mBinding?.lockIdx?.text.toString().isEmpty()) {
  75. ToastUtils.tip("请输入卡扣编号")
  76. return@setOnClickListener
  77. }
  78. ModBusController.closeLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
  79. LogUtil.i("关锁卡扣 : ${res.toHexStrings()}")
  80. }
  81. }
  82. mBinding?.lockRfid?.setOnClickListener {
  83. if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
  84. ToastUtils.tip("请输入设备编号")
  85. return@setOnClickListener
  86. }
  87. if (mBinding?.lockIdx?.text.toString().isEmpty()) {
  88. ToastUtils.tip("请输入卡扣编号")
  89. return@setOnClickListener
  90. }
  91. ModBusController.readLockRfid(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
  92. val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
  93. println("锁具RFID : $rfid")
  94. ModBusController.updateLockRfid(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt(), rfid)
  95. }
  96. }
  97. mBinding?.exit?.setOnClickListener { finish() }
  98. }
  99. override fun initPresenter(): ModBusPresenter {
  100. return ModBusPresenter()
  101. }
  102. override fun onDestroy() {
  103. super.onDestroy()
  104. ModBusController.stop()
  105. }
  106. }