MainActivity.kt 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.iscs.comm
  2. import android.os.Bundle
  3. import android.util.Log
  4. import androidx.activity.ComponentActivity
  5. import androidx.activity.compose.setContent
  6. import androidx.activity.enableEdgeToEdge
  7. import androidx.compose.foundation.layout.Column
  8. import androidx.compose.foundation.layout.Row
  9. import androidx.compose.foundation.layout.Spacer
  10. import androidx.compose.foundation.layout.fillMaxSize
  11. import androidx.compose.foundation.layout.padding
  12. import androidx.compose.foundation.layout.width
  13. import androidx.compose.material3.Button
  14. import androidx.compose.material3.Scaffold
  15. import androidx.compose.material3.Text
  16. import androidx.compose.ui.Modifier
  17. import androidx.compose.ui.unit.dp
  18. import androidx.lifecycle.lifecycleScope
  19. import com.iscs.comm.entity.device.Device
  20. import com.iscs.comm.entity.device.DeviceKeySlot
  21. import com.iscs.comm.entity.device.DeviceLockSlot
  22. import com.iscs.comm.entity.device.status.DeviceStatusKeySlot
  23. import com.iscs.comm.entity.device.status.DeviceStatusLockSlot
  24. import com.iscs.comm.intf.IDeviceListener
  25. import com.iscs.comm.ui.theme.CommunicationDemoTheme
  26. import kotlinx.coroutines.Dispatchers
  27. import kotlinx.coroutines.launch
  28. class MainActivity : ComponentActivity() {
  29. private val list = ArrayList<Device>()
  30. override fun onCreate(savedInstanceState: Bundle?) {
  31. super.onCreate(savedInstanceState)
  32. enableEdgeToEdge()
  33. setContent {
  34. CommunicationDemoTheme {
  35. Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
  36. Column(modifier = Modifier.padding(10.dp)) {
  37. Text("测试锁底座", modifier = Modifier.padding(innerPadding))
  38. Row {
  39. Button({ ctrlLockSlotLock(0, false) }) { Text("0-开") }
  40. Spacer(modifier = Modifier.width(10.dp))
  41. Button({ ctrlLockSlotLock(0, true) }) { Text("0-关") }
  42. Spacer(modifier = Modifier.width(10.dp))
  43. Button({ ctrlLockSlotLock(1, false) }) { Text("1-开") }
  44. Spacer(modifier = Modifier.width(10.dp))
  45. Button({ ctrlLockSlotLock(1, true) }) { Text("1-关") }
  46. Spacer(modifier = Modifier.width(10.dp))
  47. Button({ ctrlLockSlotLock(2, false) }) { Text("2-开") }
  48. Spacer(modifier = Modifier.width(10.dp))
  49. Button({ ctrlLockSlotLock(2, true) }) { Text("2-关") }
  50. }
  51. Row {
  52. Button({ ctrlLockSlotLock(3, false) }) { Text("3-开") }
  53. Spacer(modifier = Modifier.width(10.dp))
  54. Button({ ctrlLockSlotLock(3, true) }) { Text("3-关") }
  55. Spacer(modifier = Modifier.width(10.dp))
  56. Button({ ctrlLockSlotLock(4, false) }) { Text("4-开") }
  57. Spacer(modifier = Modifier.width(10.dp))
  58. Button({ ctrlLockSlotLock(4, true) }) { Text("4-关") }
  59. }
  60. Text("测试钥匙底座", modifier = Modifier.padding(innerPadding))
  61. Row {
  62. Button({ ctrlKeySlotLock(0, false) }) { Text("0-开锁") }
  63. Spacer(modifier = Modifier.width(10.dp))
  64. Button({ ctrlKeySlotLock(0, true) }) { Text("0-关锁") }
  65. Spacer(modifier = Modifier.width(10.dp))
  66. Button({ ctrlKeySlotCharge(0, true) }) { Text("0-开充电") }
  67. Spacer(modifier = Modifier.width(10.dp))
  68. Button({ ctrlKeySlotCharge(0, false) }) { Text("0-关充电") }
  69. Spacer(modifier = Modifier.width(10.dp))
  70. Button({ ctrlKeyAllSlot(-1, false, false) }) { Text("全开关充电") }
  71. }
  72. Row {
  73. Button({ ctrlKeySlotLock(1, false) }) { Text("1-开锁") }
  74. Spacer(modifier = Modifier.width(10.dp))
  75. Button({ ctrlKeySlotLock(1, true) }) { Text("1-关锁") }
  76. Spacer(modifier = Modifier.width(10.dp))
  77. Button({ ctrlKeySlotCharge(1, true) }) { Text("1-开充电") }
  78. Spacer(modifier = Modifier.width(10.dp))
  79. Button({ ctrlKeySlotCharge(1, false) }) { Text("1-关充电") }
  80. Spacer(modifier = Modifier.width(10.dp))
  81. Button({ ctrlKeyAllSlot(-1, true, true) }) { Text("全关开充电") }
  82. }
  83. }
  84. }
  85. }
  86. }
  87. // 做SDK初始化操作处理
  88. initISCSSDK()
  89. }
  90. fun ctrlLockSlotLock(ch: Int, isLock: Boolean) {
  91. val device = list.find { it.frame.cmd == 0x0602 }
  92. if (device is DeviceLockSlot) {
  93. CommManager.write(device.ctrlSlotLock(ch, isLock))
  94. }
  95. }
  96. fun ctrlKeySlotLock(ch: Int, isLock: Boolean) {
  97. val device = list.find { it.frame.cmd == 0x0601 }
  98. if (device is DeviceKeySlot) {
  99. CommManager.write(device.ctrlSlotLock(ch, isLock))
  100. }
  101. }
  102. fun ctrlKeySlotCharge(ch: Int, isCharge: Boolean) {
  103. val device = list.find { it.frame.cmd == 0x0601 }
  104. if (device is DeviceKeySlot) {
  105. CommManager.write(device.ctrlSlotCharge(ch, isCharge))
  106. }
  107. }
  108. fun ctrlKeyAllSlot(ch: Int, isLock: Boolean, isCharge: Boolean) {
  109. val device = list.find { it.frame.cmd == 0x0601 }
  110. if (device is DeviceKeySlot) {
  111. CommManager.write(device.ctrlSlotLockAndCharge(ch, isLock, isCharge))
  112. }
  113. }
  114. /**
  115. * 初始化ISCS SDK 操作
  116. */
  117. fun initISCSSDK() {
  118. lifecycleScope.launch(Dispatchers.IO) {
  119. CommManager.init()
  120. CommManager.setOnDeviceListener(object : IDeviceListener {
  121. override fun onDeviceList(devices: List<Device>) {
  122. list.addAll(devices)
  123. }
  124. override fun onDeviceChanged(device: Device) {
  125. val msg = when (device.deviceStatus) {
  126. is DeviceStatusKeySlot -> (device.deviceStatus as DeviceStatusKeySlot).slotList.toString()
  127. is DeviceStatusLockSlot -> (device.deviceStatus as DeviceStatusLockSlot).slotList.toString()
  128. else -> "未知状态变化"
  129. }
  130. Log.d("xiaoming", "设备状态发生变化了 $msg")
  131. }
  132. })
  133. }
  134. }
  135. }