desc:串口代码
parent
ea016fd170
commit
b981573529
@ -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()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue