| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- package com.iscs.comm
- import android.os.Bundle
- import androidx.activity.ComponentActivity
- import androidx.activity.compose.setContent
- import androidx.activity.enableEdgeToEdge
- import androidx.compose.foundation.layout.Arrangement
- import androidx.compose.foundation.layout.Column
- import androidx.compose.foundation.layout.PaddingValues
- import androidx.compose.foundation.layout.aspectRatio
- import androidx.compose.foundation.layout.fillMaxSize
- import androidx.compose.foundation.layout.fillMaxWidth
- import androidx.compose.foundation.layout.padding
- import androidx.compose.foundation.lazy.grid.GridCells
- import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
- import androidx.compose.foundation.lazy.grid.items
- import androidx.compose.material3.Card
- import androidx.compose.material3.Scaffold
- import androidx.compose.material3.Text
- import androidx.compose.runtime.Composable
- import androidx.compose.runtime.DisposableEffect
- import androidx.compose.runtime.LaunchedEffect
- import androidx.compose.runtime.mutableStateListOf
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.unit.dp
- import androidx.compose.ui.unit.sp
- import com.iscs.comm.entity.device.Device
- import com.iscs.comm.enums.CommType
- import com.iscs.comm.enums.RunMode
- import com.iscs.comm.extension.BleFrameExt
- import com.iscs.comm.extension.BleFrameExt.buildBLEGetPowerCMD
- import com.iscs.comm.extension.BleFrameExt.buildBLEGetStatusCMD
- import com.iscs.comm.extension.BleFrameExt.buildBLESwitchRunModeCMD
- import com.iscs.comm.extension.BleFrameExt.buildBLETicketDataCMDList
- import com.iscs.comm.extension.BleFrameExt.getPower
- import com.iscs.comm.extension.BleFrameExt.getRunMode
- import com.iscs.comm.extension.BleFrameExt.getSendTicketResult
- import com.iscs.comm.extension.BleFrameExt.getSwitchRunModeResult
- import com.iscs.comm.extension.BleFrameExt.getToken
- import com.iscs.comm.extension.byteArrayToHexString
- import com.iscs.comm.intf.IDeviceListener
- import com.iscs.comm.manager.BleManager
- import com.iscs.comm.ui.theme.CommDemoTheme
- import com.iscs.comm.utils.ISCSLog
- import kotlinx.coroutines.delay
- class MainActivity : ComponentActivity() {
- val testJobJson =
- "{\"cardNo\":\"D2931A25\",\"data\":[{\"codeId\":1,\"dataList\":[{\"dataId\":87,\"equipName\":\"E_29\",\"equipRfidNo\":\"1B9105AF\",\"target\":0},{\"dataId\":88,\"equipName\":\"E_30\",\"equipRfidNo\":\"FB9091E5\",\"target\":0}],\"taskCode\":\"165\"}],\"lockList\":[{\"lockId\":1,\"rfid\":\"C097D395\"},{\"lockId\":2,\"rfid\":\"A04AD495\"}],\"password\":\"123456\"}"
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- setContent {
- CommDemoTheme {
- Scaffold(modifier = Modifier.fillMaxSize()) { pv ->
- buildDeviceList(pv)
- }
- }
- }
- }
- @Composable
- fun buildDeviceList(pv: PaddingValues) {
- val list = mutableStateListOf<Device>()
- val listener = object : IDeviceListener() {
- override fun onDeviceList(devices: List<Device>) {
- list.clear()
- list.addAll(devices.sortedBy { it.frame.cmd })
- }
- }
- LaunchedEffect("") {
- // 设置设备变化监听
- CommManager.addOnDeviceListener(listener)
- // SDK初始化
- CommManager.init(CommConfig().setCommType(CommType.CAN).setPort("can0").setBitrate(1000000))
- // 蓝牙钥匙功能测试
- repeat(10) {
- ISCSLog.i("xiaoming", "------------ start ------------")
- bleKeyTest("CC:BA:97:21:71:E6")
- bleKeyTest("CC:BA:97:21:72:0A")
- bleKeyTest("CC:BA:97:21:71:CA")
- ISCSLog.i("xiaoming", "------------- end -----------")
- delay(10000)
- }
- }
- DisposableEffect("") {
- // 移除页面监听
- CommManager.removeOnDeviceListener(listener)
- onDispose { }
- }
- LazyVerticalGrid(
- columns = GridCells.Adaptive(minSize = 100.dp),
- contentPadding = PaddingValues(10.dp, pv.calculateTopPadding() + 10.dp),
- horizontalArrangement = Arrangement.spacedBy(8.dp),
- verticalArrangement = Arrangement.spacedBy(8.dp),
- ) {
- items(list) { device ->
- Card(onClick = { openCtrlActivity(device.frame.cmd) }) {
- Column(
- modifier = Modifier
- .padding(5.dp)
- .aspectRatio(1.2f)
- .fillMaxWidth()
- ) {
- Text(device.frame.cmd.toString(16))
- Text("${device.deviceType}", fontSize = 12.sp)
- }
- }
- }
- }
- }
- private suspend fun bleKeyTest(mac: String) {
- // 测试蓝牙扫描
- val bm = BleManager(this@MainActivity.application, mac = mac)
- val result = bm.connect()
- if (result.connected) {
- // 获取设备token
- val token = bm.writeByResponse(BleFrameExt.buildBLEGetTokenCMD()).getToken()
- ISCSLog.i("xiaoming $mac", "获取设备token ${token.byteArrayToHexString()}")
- // 获取设备电量
- val power = bm.writeByResponse(token.buildBLEGetPowerCMD()).getPower()
- ISCSLog.i("xiaoming $mac", "当前设备电量:$power")
- // 获取当前设备运行模式
- val runMode = bm.writeByResponse(token.buildBLEGetStatusCMD()).getRunMode()
- ISCSLog.i("xiaoming $mac", "当前工作模式:$runMode")
- // 切换当前设备运行模式
- // val switch = bm.writeByResponse(token.buildBLESwitchRunModeCMD(RunMode.STBY)).getSwitchRunModeResult()
- // ISCSLog.i("xiaoming $mac", "切换工作模式:$switch")
- // 下发作业票
- val tickets = token.buildBLETicketDataCMDList(testJobJson)
- var ticketSendOk = true
- tickets.forEach {
- val ticket = bm.writeByResponse(it).getSendTicketResult()
- ISCSLog.i("xiaoming $mac", "下发作业票:分包${it.data[4].toInt()}发送结果:$ticket")
- if (ticket != 0) {
- ticketSendOk = false
- return@forEach
- }
- }
- ISCSLog.i("xiaoming $mac", "下发作业票:$ticketSendOk")
- // 作业票下发成功,修改设备运行模式为工作模式
- val switch = bm.writeByResponse(token.buildBLESwitchRunModeCMD(RunMode.WORK)).getSwitchRunModeResult()
- ISCSLog.i("xiaoming $mac", "切换工作模式:$switch")
- // 读取作业票信息
- // val pkgList = ArrayList<BleTicketDataPackage>()
- // val ticketInfo = bm.writeByResponse(token.buildBLEGetTicketInfoCMD()).getTicketPackageInfo()
- // pkgList.add(ticketInfo)
- // ISCSLog.i("xiaoming $mac", "读取作业票:首包信息:$ticketInfo")
- // // 校验是否有子包,如果有,继续读取子包数据
- // for (idx in 1 until ticketInfo.pkgTotal) {
- // val ticketSubPackageInfo = bm.writeByResponse(token.buildBLEGetTicketInfoCMD(idx, ticketInfo.pkgTotal)).getTicketPackageInfo()
- // pkgList.add(ticketSubPackageInfo)
- // ISCSLog.i("xiaoming $mac", "读取作业票:子包信息:$ticketSubPackageInfo")
- // }
- // var datas = byteArrayOf()
- // pkgList.forEach { datas += it.pkgData }
- // ISCSLog.i("xiaoming $mac", "读取作业票:${String(datas)}")
- } else {
- // 进行重连,这里可以封装尝试次数
- bleKeyTest(mac)
- }
- bm.disconnect()
- }
- }
|