|
|
|
@ -2,32 +2,28 @@ package com.yinuo.safetywatcher.watcher.port
|
|
|
|
|
|
|
|
|
|
import com.common.serialport.ComMultiPortUtils
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.port.cmd.CMD
|
|
|
|
|
import kotlinx.coroutines.DelicateCoroutinesApi
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
import kotlinx.coroutines.GlobalScope
|
|
|
|
|
import kotlinx.coroutines.delay
|
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
|
|
object GasPortUtils {
|
|
|
|
|
private const val BAUD_RATE = 9600
|
|
|
|
|
private const val PORT_PATH = "/dev/ttyS1"
|
|
|
|
|
private const val PORT_PATH = "/dev/ttyS9"
|
|
|
|
|
const val FULL_MSG_SIZE = 25
|
|
|
|
|
const val CHECK_TIME = 10000L
|
|
|
|
|
private const val READ_MSG_INTERVAL = 250L
|
|
|
|
|
private var mInitFlag = false
|
|
|
|
|
private var readGasMsgThread: Thread? = null;
|
|
|
|
|
|
|
|
|
|
fun initPort() {
|
|
|
|
|
openPorts()
|
|
|
|
|
watchPortFlag()
|
|
|
|
|
readGasMsg()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun openPorts() {
|
|
|
|
|
if (!mInitFlag) {
|
|
|
|
|
ComMultiPortUtils.releaseAll()
|
|
|
|
|
ComMultiPortUtils.openPort(PORT_PATH, BAUD_RATE) {
|
|
|
|
|
mInitFlag = true
|
|
|
|
|
ParseHelper.parse(it)
|
|
|
|
|
}
|
|
|
|
|
readGasMsg()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -35,32 +31,26 @@ object GasPortUtils {
|
|
|
|
|
* 读取气体浓度
|
|
|
|
|
*/
|
|
|
|
|
private fun readGasMsg() {
|
|
|
|
|
GlobalScope.launch(Dispatchers.IO) {
|
|
|
|
|
while (true) {
|
|
|
|
|
// 延时一段时间后,发送指令读取气体数据
|
|
|
|
|
delay(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.O2)
|
|
|
|
|
delay(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.CH4)
|
|
|
|
|
delay(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.CO)
|
|
|
|
|
delay(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.H2S)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 监控串口状态
|
|
|
|
|
@OptIn(DelicateCoroutinesApi::class)
|
|
|
|
|
private fun watchPortFlag() {
|
|
|
|
|
GlobalScope.launch(Dispatchers.Default) {
|
|
|
|
|
while (true) {
|
|
|
|
|
// 延时一段时间后,尝试重新打开串口
|
|
|
|
|
delay(CHECK_TIME)
|
|
|
|
|
launch(Dispatchers.Main) {
|
|
|
|
|
openPorts()
|
|
|
|
|
if (readGasMsgThread == null) {
|
|
|
|
|
readGasMsgThread = Thread {
|
|
|
|
|
try {
|
|
|
|
|
while (true) {
|
|
|
|
|
// 延时一段时间后,发送指令读取气体数据
|
|
|
|
|
Thread.sleep(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1)
|
|
|
|
|
Thread.sleep(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2)
|
|
|
|
|
Thread.sleep(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3)
|
|
|
|
|
Thread.sleep(READ_MSG_INTERVAL)
|
|
|
|
|
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4)
|
|
|
|
|
}
|
|
|
|
|
} catch (e: Exception) {
|
|
|
|
|
e.printStackTrace()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
readGasMsgThread!!.name = "readGasMsgThread"
|
|
|
|
|
readGasMsgThread!!.start()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|