desc:串口代码

main
xiaowusky 2 years ago
parent bdaa7da6ee
commit 81e21a21e6

@ -1,15 +1,21 @@
package com.yinuo.safetywatcher.watcher.port
import android.os.Handler
import android.os.Looper
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Runnable
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
object GasUtils {
private const val BAUD_RATE = 9600
private const val FULL_MSG_SIZE = 9
private const val CHECK_TIME = 10000L
private val mPortFlags = booleanArrayOf(false, false, false, false)
private val mPortRunnable = hashMapOf<Int, FlagRunnable>()
private val mHandler = Handler(Looper.getMainLooper())
fun initPort() {
openPorts()
@ -19,7 +25,7 @@ object GasUtils {
private fun openPorts() {
if (!mPortFlags[0]) {
PlatformMultiPortUtils.openPort("/dev/tyyS0", BAUD_RATE) {
mPortFlags[0] = true
setFlag(0)
if (it.isNotEmpty() && it.size >= FULL_MSG_SIZE) {
val checkSum = getCheckSum(it)
// 校验通过
@ -42,12 +48,23 @@ object GasUtils {
}
}
private fun setFlag(index: Int) {
var flagRunnable = mPortRunnable[index]
if (flagRunnable == null) {
flagRunnable = FlagRunnable(index)
mPortRunnable[index] = flagRunnable
}
mHandler.removeCallbacks(flagRunnable)
mPortFlags[index] = true
mHandler.postDelayed(flagRunnable, CHECK_TIME)
}
// 监控串口状态
@OptIn(DelicateCoroutinesApi::class)
private fun watchPortFlag() {
GlobalScope.launch(Dispatchers.Default) {
while (true) {
delay(30000)
delay(CHECK_TIME)
launch(Dispatchers.Main) {
openPorts()
}
@ -65,4 +82,10 @@ object GasUtils {
}
return (sum.inv() + 1).toByte()
}
class FlagRunnable(private val index: Int) : Runnable {
override fun run() {
mPortFlags[index] = false
}
}
}
Loading…
Cancel
Save