desc:串口相关调整

main
xiaowusky 1 year ago
parent e4df5f1f55
commit e0b8deff5a

@ -19,7 +19,7 @@ const val DELAY_TIME_OPEN_CAMERA = 30
const val DELAY_TIME_CHECK_CAMERA = DELAY_TIME_OPEN_CAMERA
//检测重连传感器延时
const val DELAY_TIME_CHECK_SENSOR = 5
const val DELAY_TIME_CHECK_SENSOR = 10
const val NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android"

@ -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()
}
}
}

@ -35,7 +35,6 @@ object ParseHelper {
fun parse(it: ByteArray) {
try {
if (it.isNotEmpty() && it.size >= GasPortUtils.FULL_MSG_SIZE) {
LogUtils.v("receive msg, ${HexUtils.byteArrToHex(it)}")
val gasIndex = it[0].toInt()
val status = it[14].toInt()
val gasType = getGasTypeEnumByCode(it[19].toInt())

@ -2,9 +2,9 @@ package com.yinuo.safetywatcher.watcher.port.cmd
class CMD {
companion object {
val O2 = byteArrayOf(GasAddress.ADR_O2.toByte(), 0x03, 0x00, 0x00, 0x00, 0x0A).crc16()
val CH4 = byteArrayOf(GasAddress.ADR_CH4.toByte(), 0x03, 0x00, 0x00, 0x00, 0x0A).crc16()
val CO = byteArrayOf(GasAddress.ADR_CO.toByte(), 0x03, 0x00, 0x00, 0x00, 0x0A).crc16()
val H2S = byteArrayOf(GasAddress.ADR_H2S.toByte(), 0x03, 0x00, 0x00, 0x00, 0x0A).crc16()
val SENSOR_1 = byteArrayOf(0x01, 0x03, 0x00, 0x00, 0x00, 0x0A).crc16()
val SENSOR_2 = byteArrayOf(0x01, 0x03, 0x01, 0x00, 0x00, 0x0A).crc16()
val SENSOR_3 = byteArrayOf(0x01, 0x03, 0x02, 0x00, 0x00, 0x0A).crc16()
val SENSOR_4 = byteArrayOf(0x01, 0x03, 0x03, 0x00, 0x00, 0x0A).crc16()
}
}

@ -252,7 +252,6 @@ class HomeActivity : NoOptionsActivity() {
LogUtils.w("watchSensorRunnable start")
AppData.setSensorData(false)
changeViewStatus()
GasPortUtils.initPort()
watchSensor(DELAY_TIME_CHECK_SENSOR)
}

@ -1325,7 +1325,7 @@ public class EasyPlayerClient implements Client.SourceCallBack {
if (rr != null) rr.send(RESULT_VIDEO_SIZE, bundle);
}
}
Log.d(TAG, String.format("queue size :%d", mQueue.size()));
// Log.d(TAG, String.format("queue size :%d", mQueue.size()));
try {
mQueue.put(frameInfo);
} catch (InterruptedException e) {

@ -3,6 +3,7 @@ package com.common.serialport
import android.util.Log
import com.common.queue.TaskScheduler
import com.common.serialport.inter.ISerialPortHelper
import com.common.serialport.utils.HexUtils
import java.io.IOException
class EasySerialPort<T>(
@ -52,6 +53,7 @@ class EasySerialPort<T>(
val size = ips?.read(mReadBytes)
if (size != null) {
if (size > 0) {
Log.i("EasySerialPort", "read msg ${HexUtils.byteArrToHex(mReadBytes)}")
mReceiver.invoke(mReadBytes)
}
}
@ -94,6 +96,7 @@ class EasySerialPort<T>(
// task.attachScheduler(mTaskScheduler)
// task.enqueue()
try {
Log.i("EasySerialPort", "send msg ${HexUtils.byteArrToHex(data)}")
val outputStream = helper?.outputStream()
outputStream?.write(data)
outputStream?.flush()

Loading…
Cancel
Save