Android 串口通讯 读出数据 mBuffInputStream.available() = 0 ,读出不到数据,提供串口读取数据案例代码,详细解释
时间: 2024-02-24 09:54:28 浏览: 75
好的,下面是 Android 串口通讯的代码示例,以及对代码的详细解释。
```java
private SerialPort mSerialPort;
private InputStream mInputStream;
private OutputStream mOutputStream;
private ReadThread mReadThread;
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int size;
try {
byte[] buffer = new byte[64];
if (mInputStream == null) return;
size = mInputStream.read(buffer);
if (size > 0) {
onDataReceived(buffer, size);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
private void onDataReceived(final byte[] buffer, final int size) {
// 处理接收到的数据
}
private void openSerialPort() throws SecurityException, IOException {
mSerialPort = new SerialPort(new File("/dev/ttySAC2"), 115200, 0);
mInputStream = mSerialPort.getInputStream();
mOutputStream = mSerialPort.getOutputStream();
mReadThread = new ReadThread();
mReadThread.start();
}
private void closeSerialPort() {
if (mReadThread != null) {
mReadThread.interrupt();
}
if (mSerialPort != null) {
mSerialPort.close();
mSerialPort = null;
}
}
private void sendData(byte[] data) {
try {
mOutputStream.write(data);
mOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
```
上面的代码中,`openSerialPort()` 方法用于打开串口,其中 `/dev/ttySAC2` 是串口设备的路径,`115200` 是串口的波特率,`0` 是串口的标志位,可以根据实际情况进行修改。
在 `ReadThread` 中,我们通过 `mInputStream.read(buffer)` 方法读取串口数据,`buffer` 是读取到的数据缓存区,`size` 是实际读取到的数据长度。如果读取到数据,就调用 `onDataReceived()` 方法进行数据处理。
在 `onDataReceived()` 方法中,我们可以对接收到的数据进行处理,比如解析数据包等。
当我们调用 `mBuffInputStream.available()` 方法时,如果返回值为 0,说明当前没有读取到数据,这可能是因为数据还没有到达,或者是数据已经读取完毕。在这种情况下,我们可以等待一段时间再次尝试读取数据,或者通过其他方式判断数据是否已经全部到达。
希望这个例子能够帮助到你,如果还有其他问题,可以继续提问。
阅读全文