代码提交
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package com.shuwei.intelligent.shelves.serial
|
||||
|
||||
import io.github.jeadyx.jserialport.AndroidSerialPort
|
||||
import io.github.jeadyx.jserialport.SerialPort
|
||||
import io.github.jeadyx.jserialport.SerialPortFactory
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
object SerialPortManager {
|
||||
private const val portName: String = "/dev/ttyS1"
|
||||
private const val baudRate: Int = 115200
|
||||
private var serialPort: AndroidSerialPort? = null
|
||||
// private var serialPort: SerialPort? = null
|
||||
private val scope = CoroutineScope(Dispatchers.IO)
|
||||
|
||||
// 打开串口
|
||||
suspend fun open(): Boolean {
|
||||
return try {
|
||||
serialPort = SerialPortFactory.create().apply {
|
||||
open(
|
||||
portName = portName,
|
||||
baudRate = baudRate,
|
||||
dataBits = 8,
|
||||
stopBits = 1,
|
||||
parity = SerialPort.PARITY_NONE
|
||||
)
|
||||
} as AndroidSerialPort?
|
||||
true
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
// 发送数据
|
||||
suspend fun send(data: String): Boolean {
|
||||
return try {
|
||||
serialPort?.write(data.toByteArray())
|
||||
true
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
// 启动接收协程
|
||||
fun startReceive(callback: (String) -> Unit) {
|
||||
scope.launch {
|
||||
while (isActive) {
|
||||
serialPort?.read()?.collect { buffer ->
|
||||
callback(String(buffer))
|
||||
}
|
||||
delay(50)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭串口
|
||||
suspend fun close() {
|
||||
scope.cancel()
|
||||
serialPort?.close()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user