Android串口开发,数据分包处理(用Java 的bytebuffer 处理)


参考资料:

https://blog.csdn.net/xuanshao_/article/details/105722891 (分包处理)

https://www.jianshu.com/p/9249ed03e745

https://www.cnblogs.com/tangchun/p/10695894.html

GitHUb地址:

https://github.com/AIlll/AndroidSerialPort

 

AndroidSerialPort

Android 串口通信,基于谷歌官方android-serialport-api编译

download

使用说明

  1. 在Module下的 build.gradle 中添加
implementation 'com.aill:AndroidSerialPort:1.0.8'
  1. 打开串口
/**
 * @param 1 串口路径  * @param 2 波特率  * @param 3 flags 给0就好  */ SerialPort serialPort = new SerialPort(new File("/dev/ttyS1"), 9600, 0);
  1. 往串口中写入数据
//从串口对象中获取输出流 OutputStream outputStream = serialPort.getOutputStream(); //需要写入的数据 byte[] data = new byte[x]; data[0] = ...; data[1] = ...; data[x] = ...; //写入数据 outputStream.write(data); outputStream.flush();
  1. 读取串口数据

读取数据时很可能会遇到分包的情况,即不能一次性读取正确的完整的数据

解决办法:可以在读取到数据时,让读取数据的线程sleep一段时间,等待数据全部接收完,再一次性读取出来。这样应该可以避免大部分的分包情况

//从串口对象中获取输入流 InputStream inputStream = serialPort.getInputStream(); //使用循环读取数据,建议放到子线程去 while (true) { if (inputStream.available() > 0) { //当接收到数据时,sleep 500毫秒(sleep时间自己把握) Thread.sleep(500); //sleep过后,再读取数据,基本上都是完整的数据 byte[] buffer = new byte[inputStream.available()]; int size = inputStream.read(buffer); } }
  1. 修改设备su路径

打开串口时,会检测读写权限,当没有权限时,会尝试对其进行提权

//默认su路径是/system/bin/su,有些设备su路径是/system/xbin/su //在new SerialPort();之前设置su路径 SerialPort.setSuPath("/system/xbin/su");

 

  • ByteUtil类:工具类,字符串转字节数组,字节数组转字符串
  • SerialFinder类:用于查找设备下所有串口路径


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM