android 串口通信源代码,Android RSR232 串口通信

本文详细介绍了在Android上实现RSR232串口通信的步骤,包括配置波特率、奇偶校验、停止位和流量控制等参数。通过JNI与Native代码交互,对串口进行打开、配置和数据传输。同时,提供了Java层的封装,方便调用,包括波特率、数据位、停止位、校验位和流控的枚举定义。
摘要由CSDN通过智能技术生成

由于工作需要,需要在工控机上实现Android对RSR232串口读写功能。Android 官方串口通信文档中已经对串口通信的核心功能有所实现,然而实际应用时会发现还有需要额外的参数需要设置。

参考资料

走过的坑

起初接到需求的时候便简单查了一些串口通信相关的现成实现,发现已经有很多现成的代码,不禁窃喜,以为可以偷下懒拿别人封装好的代码直接用了。殊不知,我们的硬件合作厂商对RSR-232协议遵循的非常到位,其中的参数必须完全设置正常才能进行有效的通信,而网络上已经开源的类库中并未发现适合项目的,正因此才有了本文。

RSR-232

串口通信相关的电气信息此处不做介绍,如果需要可以参考RSR-232这篇wiki。以下是进行串口通信开发时常用的设置项:

波特率(Baud),从一设备发到另一设备的波特率,即每秒钟多少符号。

奇偶校验(Parity),用来验证数据的正确性。

停止位(Stop Bit),在每个字节传输之后发送的,它用来帮助接受信号方硬件重同步。

流量控制,当需要发送握手信号或数据完整性检测时需要制定其他设置。

以上四个设置项,我们开发时按照硬件厂商的要求进行正确配置即可。

JNI本文主要介绍纯串口通信模式下的编码,如果你使用的是基于USB-Host模式的串口通信,请参考其他文章。

纯串口通信方式需要借助于JNI,关于JNI的开发配置本文不做过多介绍,参考上述资料自行配置即可。需要有一点注意的是,我在进行基于Android Studio进行NDK的开发时,发现Java代码与native代码在同一个Module时无法编译通过,如果你也遇到了这个问题,可以暂时剥离Java与native代码。

Native代码检测参数是否合法

/* Check arguments */

{

speed = getBaudrate(baudrate);

if (speed == -1) {

/* TODO: throw an exception */

LOGE("Invalid baudrate");

return NULL;

}

}

打开TTY设备

/* Opening device */

{

jboolean iscopy;

const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy);

LOGD("Opening serial port %s with flags 0x%x", path_utf, O_RDWR);

fd = open(path_utf, O_RDWR);

LOGD("open() fd = %d", fd);

(*env)->ReleaseStringUTFChars(env, path, path_utf);

if (fd == -1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值