android串口通讯

之前使用google的串口工程,在实际使用中如果串口线掉了,或者系统不稳定会造成读不到数据或者或者读取的数据不全,从而串口卡住的情况。在google的demo中,只是使用的c语音去打开串口,操作串口读取数据还是使用java 的IO流进行读取,IO流在read的时候是没有超时处理的,所有会造成串口卡住。

最新从新用jni使用c重新写了串口调用,因为是用c取里的所以串口不会卡住,可以设置超时时间。

读取数据使用的C语言写的,代码如下:

 /**
* 读数据,返回读取到的长度
* @param env
* @param instance
* @param buf_ 读取的数据装入的容器
* @param bufsize 目标长度
* @param timeout 超时时间
* @param fd  文件描述符
* @return 读取的数据长度
*/
    JNIEXPORT jint JNICALL
    Java_com_jyt_serial_Uart_readBuffBlock(JNIEnv *env, jobject instance, jobject buf_, jint bufSize,  jint fd){
        unsigned char*  dd = (unsigned char*)env->GetDirectBufferAddress(buf_);
        int got = 0, ret;
        do {
            ret = read(fd, dd+got, bufSize - got);
            if (ret > 0) {
                got += ret;
            }
            if (got >= bufSize) break;
        } while (readable(fd));
        return (jint)got;
    }

设置波特率、数据位、停止位、流控制如下:

JNIEXPORT jboolean JNICALL
Java_com_jyt_serial_Uart_setSerialPortParams(JNIEnv *env, jobject instance, jint baudRate, jint dataBits, jint stopBits, jchar parity,jint fd) {
    int speed_arr[] = {B230400, B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300,
                       B38400, B19200, B9600, B4800, B
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值