From b9815735294ab74c1e00f54cd5ebd10ccc55c759 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Mon, 3 Jul 2023 15:16:20 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E4=B8=B2=E5=8F=A3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yinuo/safetywatcher/TestUtils.kt | 3 - .../safetywatcher/watcher/port/GasUtils.kt | 66 +++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt diff --git a/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt index 506ead8..108ab48 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt @@ -10,8 +10,6 @@ import com.common.commonlib.db.entity.Gas import com.common.commonlib.db.entity.GasType import com.common.commonlib.db.entity.Video import com.common.commonlib.db.entity.Warning -import com.common.commonlib.net.bean.BaseResponse -import com.common.commonlib.net.callback.RequestResultCallBack import com.yinuo.library.vlc.PushHelper import com.yinuo.library.vlc.TxtOverlay import com.yinuo.safetywatcher.watcher.net.UploadFileApi @@ -19,7 +17,6 @@ import com.yinuo.safetywatcher.watcher.ui.view.CommonDialog import com.yinuo.safetywatcher.watcher.utils.DateUtils import com.yinuo.safetywatcher.xls.SimpleCellValue import com.yinuo.safetywatcher.xls.utils.ExcelUtils -import com.yinuo.safetywatcher.xls.utils.PathUtils import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt new file mode 100644 index 0000000..231884f --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt @@ -0,0 +1,66 @@ +package com.yinuo.safetywatcher.watcher.port + +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +object GasUtils { + private const val BAUD_RATE = 9600 + private const val FULL_MSG_SIZE = 9 + private val mPortFlags = booleanArrayOf(false, false, false, false) + + fun initPort() { + openPorts() + watchPortFlag() + } + + private fun openPorts() { + if (!mPortFlags[0]) { + PlatformMultiPortUtils.openPort("/dev/tyyS0", BAUD_RATE) { + mPortFlags[0] = true + if (it.isNotEmpty() && it.size >= FULL_MSG_SIZE) { + val checkSum = getCheckSum(it) + // 校验通过 + if (checkSum == it[8]) { + val gasName = it[1] + val gasUnit = it[2] + val gasValue: Double = (it[4] * 256 + it[5]) / 100.00 + } + } + } + } + if (!mPortFlags[1]) { + PlatformMultiPortUtils.openPort("/dev/tyyS1", BAUD_RATE) {} + } + if (!mPortFlags[2]) { + PlatformMultiPortUtils.openPort("/dev/tyyS2", BAUD_RATE) {} + } + if (!mPortFlags[3]) { + PlatformMultiPortUtils.openPort("/dev/tyyS3", BAUD_RATE) {} + } + } + + // 监控串口状态 + @OptIn(DelicateCoroutinesApi::class) + private fun watchPortFlag() { + GlobalScope.launch(Dispatchers.Default) { + while (true) { + delay(30000) + openPorts() + } + } + } + + + private fun getCheckSum(bytes: ByteArray?): Byte { + var sum: Int = 0 + bytes?.forEachIndexed { index, byte -> + if (index != 0 && index < FULL_MSG_SIZE - 1) { + sum += (byte.toInt() and 0xff) + } + } + return (sum.inv() + 1).toByte() + } +} \ No newline at end of file