Android-SerialPort-API icon indicating copy to clipboard operation
Android-SerialPort-API copied to clipboard

接收一次收不全,会自动分段

Open yecaler opened this issue 1 year ago • 3 comments

我使用串口调试助手是能收全的,返回的指令在本demo中接收会自动分段,最大接收64个字符,如何可以接收完全?

我修改size = mInputStream.read(received); 成size = mInputStream.read();以后收到的全是000000000000000000000

@licheedev

yecaler avatar Jun 15 '23 03:06 yecaler

这demo是google原代码自带的,我没改过里面的代码。 https://github.com/licheedev/Android-SerialPort-API/blob/0e329bec294043c8c47e0ba7a8a9c0e5f732ef2b/sample/src/main/java/android/serialport/sample/SerialPortActivity.java#L46 如果是这个demo的话,改大这个数组的容量看看。

我修改size = mInputStream.read(received); 成size = mInputStream.read();以后收到的全是000000000000000000000

你下面改的是读取一个字节,到size变量里,size变成读取到的那个字节的内容了,而不是到读取到的数据长度。 received数组压根没参与,内容没改变过,当然是默认初始化的全0。

licheedev avatar Jun 16 '23 01:06 licheedev

麻烦问一下,现在一次接收最多64个字符,如何修改成接收1024个字符? @Override public void run() { byte[] received = new byte[50 * 1024]; int size;

    LogUtils.e("开始读线程");

    while (true) {
        if (Thread.currentThread().isInterrupted()) {
            break;
        }
        try {
            int available = mInputStream.available();
            if (available > 0) {
                size = mInputStream.read(received);
                if (size > 0) {
                    onDataReceive(received, size);
                }
            } else {
                // 暂停一点时间,免得一直循环造成CPU占用率过高
                SystemClock.sleep(1);
            }
        } catch (IOException e) {
            LogUtils.e("读取数据失败", e);
        }
        //Thread.yield();
    }

    LogUtils.e("结束读进程");
}

yecaler avatar Jan 04 '24 07:01 yecaler

@licheedev 大佬,帮忙看一下如何修改成接收多一些指令?感谢

yecaler avatar Jan 05 '24 07:01 yecaler