Seriport实现串口数据发送和接收

Seriport实现串口数据发送和接收serialport 是谷歌的一个关于串口通信的框架 它封装了方法 帮助我们更好的使用串口 进行软件和硬件之前的通信 效果图 手机效果图是大屏 android 无截图按钮 图片可能和结果稍有出处 1 在 app 下的 builder gradle 下面添加依赖 gogle serialPort implementati com aill

大家好,我是讯享网,很高兴认识大家。

serialport是谷歌的一个关于串口通信的框架,它封装了方法,帮助我们更好的使用串口,进行软件和硬件之前的通信

效果图:手机效果图是大屏android,无截图按钮,图片可能和结果稍有出处


讯享网

1.在app下的builder.gradle下面添加依赖:

 //gogle serialPort implementation 'com.aill:AndroidSerialPort:1.0.8'

讯享网

2.封装一个串口传输类

讯享网package com.example.administrator.testz; import java.io.InputStream; import java.io.OutputStream; / * 串口传输类。在这个类里会启动两个线程分别对串口进行监听输入与数据输出。 * * @author xxs */ public class SerialTransceiver { private InputStream inputStream; private OutputStream outputStream; private WriteRunnable write; private ReadRunnable read; private ReceiverListener listener; private byte[] writeBuffer; private int writeIn, writeOut; / * 构造函数 */ public SerialTransceiver() { writeBuffer = new byte[1024]; writeIn = 0; writeOut = 0; } / * 启动线程 */ public void start() { write = new WriteRunnable(); write.isRunnung = true; (new Thread(write)).start(); read = new ReadRunnable(); read.isRunnung = true; (new Thread(read)).start(); } / * 停止线程 */ public void stop() { if (write != null) { write.isRunnung = false; synchronized (writeBuffer) { writeBuffer.notifyAll(); } } if (read != null) read.isRunnung = false; } / * 写入数据。这个数据会先写入到一个缓存里,然后再通知输出线程将数据发送出去。 * * @param data 数据 * @param offset 有效偏移量 * @param size 数据大小 * @return 成功返回true,否则返回false */ public boolean write(byte[] data, int offset, int size) { if (data == null) throw new NullPointerException("data = null"); if (offset + size > data.length) throw new IndexOutOfBoundsException("offset + size > data.length"); synchronized (writeBuffer) { if (size > 1024 - writeIn) return false; System.arraycopy(data, offset, writeBuffer, writeIn, size); writeIn += size; writeBuffer.notifyAll(); } return true; } / * 设置输入流。这个输入流应是串口输入流。监听线程就是监听这个输入流。 * * @param inputStream 串口输入流。 */ public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } / * 设置输出流。这个输出流应是串口输出流。发送线程会将数据从这个输出流发凌空出去。 * * @param outputStream 串口输出流。 */ public void setOutputStream(OutputStream outputStream) { this.outputStream = outputStream; } / * 设置接收监听器。当从输入流收到数据后会通过这个监听器通知设置监听器的类。 * * @param listener */ public void setListener(ReceiverListener listener) { this.listener = listener; } / * 数据输出线程主体。 * * @author Hong */ private class WriteRunnable implements Runnable { private boolean isRunnung = false; @Override public void run() { System.out.println("Start WriteRunnable!"); if (outputStream == null) isRunnung = false; try { while (isRunnung) { synchronized (writeBuffer) { // 当缓存为空时会阻塞 while (isRunnung && (writeIn == writeOut)) writeBuffer.wait(); if (!isRunnung) break; // 将数据写入输出流 int size = writeIn - writeOut; outputStream.write(writeBuffer, writeOut, size); writeOut += size; if (writeIn == writeOut) { writeIn = 0; writeOut = 0; } } } } catch (Exception e) { e.printStackTrace(); } isRunnung = false; System.out.println("finish WriteRunnable!"); } } / * 监听输入线程主体。 * * @author Hong */ private class ReadRunnable implements Runnable { private boolean isRunnung = false; @Override public void run() { System.out.println("Start ReadRunnable!"
小讯
上一篇 2025-01-05 19:41
下一篇 2025-03-18 13:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/53461.html