licheedev / Android-SerialPort-API

Fork自Google开源的Android串口通信Demo,修改成Android Studio项目
https://code.google.com/archive/p/android-serialport-api/
Apache License 2.0
1.3k stars 374 forks source link

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

Open yecaler opened 1 year ago

yecaler commented 1 year ago

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

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

@licheedev

licheedev commented 1 year ago

这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。

yecaler commented 9 months ago

麻烦问一下,现在一次接收最多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 commented 9 months ago

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