移植谷歌官方串口库android-serialport-api,仅支持串口名称及波特率,该项目添加支持校验位、数据位、停止位、流控配置项
Gradle
引用
implementation 'tp.xmaihh:serialport:2.1'
Maven
引用
<dependency>
<groupId>tp.xmaihh</groupId>
<artifactId>serialport</artifactId>
<version>2.1</version>
<type>pom</type>
</dependency>
属性 | 参数 |
---|---|
波特率 | BAUDRATE |
数据位 | 5,6,7,8 ;默认值8 |
校验位 | 无奇偶校验(NONE), 奇校验(ODD), 偶校验(EVEN); 默认无奇偶校验 |
停止位 | 1,2 ;默认值1 |
流控 | 不使用流控(NONE), 硬件流控(RTS/CTS), 软件流控(XON/XOFF); 默认不使用流控 |
serialPortFinder.getAllDevicesPath();
serialHelper.setPort(String sPort); //设置串口
serialHelper.setBaudRate(int iBaud); //设置波特率
serialHelper.setStopBits(int stopBits); //设置停止位
serialHelper.setDataBits(int dataBits); //设置数据位
serialHelper.setParity(int parity); //设置校验位
serialHelper.setFlowCon(int flowcon); //设置流控
串口属性设置需在执行open()
函数之前才能设置生效
serialHelper.open();
serialHelper.close();
serialHelper.send(byte[] bOutArray); // 发送byte[]
serialHelper.sendHex(String sHex); // 发送Hex
serialHelper.sendTxt(String sTxt); // 发送ASCII
@Override
protected void onDataReceived(final ComBean comBean) {
Toast.makeText(getBaseContext(), new String(comBean.bRec, "UTF-8"), Toast.LENGTH_SHORT).show();
}
支持粘包处理,原因见issue,提供的粘包处理有
- 不处理(默认)
- 首尾特殊字符处理
- 固定长度处理
- 动态长度处理 支持自定义粘包处理,第一步实现AbsStickPackageHelper接口
/**
* 接受消息,粘包处理的helper,通过inputstream,返回最终的数据,需手动处理粘包,返回的byte[]是我们预期的完整数据
* note:这个方法会反复调用,直到解析到一条完整的数据。该方法是同步的,尽量不要做耗时操作,否则会阻塞读取数据
*/
public interface AbsStickPackageHelper {
byte[] execute(InputStream is);
}
设置粘包处理
serialHelper.setStickPackageHelper(AbsStickPackageHelper mStickPackageHelper);
- 其实数据粘包可参考socket通讯的粘包处理,例如此处粘包处理方法出自于XAndroidSocket
PC端调试工具 友善串口调试工具
- 添加支持设置接收数据粘包处理,支持设置自定义粘包处理
- 添加支持设置校验位、数据位、停止位、流控配置项
- 基础功能,串口设置串口号、波特率,发送、接收数据
- 此library不提供ROOT权限,请自行打开串口
666
权限
adb shell chmod 666 /dev/ttyS1