android compose 串口通信

1.添加依赖

Kotlin 复制代码
implementation("io.github.xmaihh:serialport:2.1.1")

2.添加SerialHelper派生类

Kotlin 复制代码
class SerialPortHelper(portName:String,baudRate:Int): SerialHelper(portName,baudRate) {
    var receivedDataBuffer = mutableListOf<Byte>()
    override fun onDataReceived(paraComBean: ComBean?) {
        if(paraComBean!=null)
        {
            var temp:ByteArray = paraComBean.bRec;
            receivedDataBuffer.addAll(temp.toList())

            //receivedDataBuffer.addAll(paraComBean.toList())
        }
    }

    init {
        setStickPackageHelper (object : AbsStickPackageHelper {
            override fun execute(isStream: InputStream?): ByteArray? {
                try {
                    val available = isStream?.available()
                    if (available != null) {
                        if (available > 0) {
                            val buffer = ByteArray(available)
                            val size = isStream.read(buffer)
                            if (size > 0) {
                                return buffer
                            }
                        } else {
                            // 若没有数据,等待50毫秒
                            Thread.sleep(50)
                        }
                    }
                } catch (e: IOException) {
                    e.printStackTrace()
                } catch (e: InterruptedException) {
                    e.printStackTrace()
                }
                return null
            }

        })
    }

}

3.创建串口处理类

Kotlin 复制代码
class SericalCommunicate {

    var serialPort:SerialPortHelper? = null
    //var outputSeriaPort = mutableStateOf("/dev/ttyS0")
    var serialportName:MutableState<String> = mutableStateOf("/dev/ttyS0")
    var serialBaud:MutableState<Int> = mutableStateOf(115200)

    init {
        initSerialport()
    }

    @OptIn(ExperimentalStdlibApi::class)
    fun initSerialport()
    {
        try {
            serialPort = SerialPortHelper(serialportName.value,serialBaud.value)//SerialPort(File(serialportName.value),serialBaud.value,'N',8,)
        }catch (e:Exception)
        {
            e.printStackTrace()
        }


        GlobalScope.launch {
            val buffer = ByteArray(1024)
            while(serialPort!=null)
            {
                val reader = serialPort!!.receivedDataBuffer

                if(reader!=null) {
                    var length = reader!!.size
                    if (length>0)
                    {
                        val data = String(buffer, 0, length)
                        var dataStr = data.toByteArray().toHexString()
                        Log.d("scoreInfo", dataStr)
                    }
                    serialPort!!.receivedDataBuffer.clear()
                }
                delay(50)
            }
        }

    }

    fun SetSerialPara(){
        reConnectedSerial()
    }

    fun reConnectedSerial()
    {
        if(serialPort!=null) {
            serialPort?.close()
            serialPort = null
        }

        initSerialport()
    }

    fun sendDataFromSerialport(data:ByteArray)
    {
        if(serialPort!=null)
        {
            serialPort!!.send(data)
        }
    }

}
相关推荐
2501_937189237 分钟前
莫凡电视:地方台专属聚合 稳定直播播放工具
android·源码·源代码管理
耶叶2 小时前
Android 新权限申请模型(Activity Result API)
android
阿拉斯攀登2 小时前
【RK3576 安卓 JNI/NDK 系列 04】JNI 核心语法(下):字符串、数组与对象操作
android·驱动开发·rk3568·瑞芯微·rk安卓驱动·jni字符串操作
2501_915909062 小时前
不用越狱就看不到 iOS App 内部文件?使用 Keymob 查看和导出应用数据目录
android·ios·小程序·https·uni-app·iphone·webview
llxxyy卢2 小时前
web部分中等题目
android·前端
轩情吖2 小时前
MySQL之事务管理
android·后端·mysql·adb·事务·隔离性·原子性
万物得其道者成2 小时前
uni-app Android 离线打包:多环境(prod/dev)配置
android·opencv·uni-app
符哥20082 小时前
Firebase 官方提供的Quick Start-Android 库的功能集讲解
android
koeda3 小时前
android17系统兼容
android·安卓
进击的cc4 小时前
面试官:Handler 没消息时为啥不卡死?带你从源码到底层内核彻底整明白!
android·面试