From 8d662de2fd262b3a485f16e197cb4d0ca2a61cdf Mon Sep 17 00:00:00 2001
From: zsh_root <979909237@qq.com>
Date: 星期三, 10 十二月 2025 17:03:47 +0800
Subject: [PATCH] 发布版V1.0
---
src/home/SerialPortService.java | 78 ++++++++++++++++++++------------------
1 files changed, 41 insertions(+), 37 deletions(-)
diff --git a/src/home/SerialPortService.java b/src/home/SerialPortService.java
index de49868..f322ad5 100644
--- a/src/home/SerialPortService.java
+++ b/src/home/SerialPortService.java
@@ -1,35 +1,36 @@
-// 声明包名 dell_system
+// 澹版槑鍖呭悕 dell_system
package home;
-// 导入串口通信库
+// 瀵煎叆涓插彛閫氫俊搴�
import com.fazecast.jSerialComm.SerialPort;
-// 导入 Java 函数式接口 Consumer,用于数据接收回调
+// 瀵煎叆 Java 鍑芥暟寮忔帴鍙� Consumer锛岀敤浜庢暟鎹帴鏀跺洖璋�
+import javax.swing.*;
import java.util.function.Consumer;
-// 导入字节数组输出流
+// 瀵煎叆瀛楄妭鏁扮粍杈撳嚭娴�
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
- * 串口服务类
- * 负责串口的打开、关闭、数据收发
+ * 涓插彛鏈嶅姟绫�
+ * 璐熻矗涓插彛鐨勬墦寮�銆佸叧闂�佹暟鎹敹鍙�
*/
public class SerialPortService {
- // 串口对象,用于与硬件通信
+ // 涓插彛瀵硅薄锛岀敤浜庝笌纭欢閫氫俊
private SerialPort port;
- // 标记是否正在捕获数据(线程运行中)
+ // 鏍囪鏄惁姝e湪鎹曡幏鏁版嵁锛堢嚎绋嬭繍琛屼腑锛�
private volatile boolean capturing = false;
- // 标记是否暂停接收数据
+ // 鏍囪鏄惁鏆傚仠鎺ユ敹鏁版嵁
private volatile boolean paused = false;
- // 数据读取线程
+ // 鏁版嵁璇诲彇绾跨▼
private Thread readerThread;
private Consumer<byte[]> responseConsumer;
- // 优化:重用缓冲区,减少内存分配
+ // 浼樺寲锛氶噸鐢ㄧ紦鍐插尯锛屽噺灏戝唴瀛樺垎閰�
private byte[] readBuffer = new byte[200];
private ByteArrayOutputStream buffer = new ByteArrayOutputStream(1024);
private Consumer<byte[]> dataReceivedCallback;
@@ -64,25 +65,25 @@
}
/**
- * 打开串口
- * @param portName 串口名称(如 COM3)
- * @param baud 波特率(如 9600)
- * @return 是否成功打开
+ * 鎵撳紑涓插彛
+ * @param portName 涓插彛鍚嶇О锛堝 COM3锛�
+ * @param baud 娉㈢壒鐜囷紙濡� 9600锛�
+ * @return 鏄惁鎴愬姛鎵撳紑
*/
public boolean open(String portName, int baud) {
- // 如果串口已打开,直接返回成功
+ // 濡傛灉涓插彛宸叉墦寮�锛岀洿鎺ヨ繑鍥炴垚鍔�
if (port != null && port.isOpen()) {
return true;
}
- // 根据名称获取串口实例
+ // 鏍规嵁鍚嶇О鑾峰彇涓插彛瀹炰緥
port = SerialPort.getCommPort(portName);
- // 设置串口参数:波特率、数据位8、停止位1、无校验位
+ // 璁剧疆涓插彛鍙傛暟锛氭尝鐗圭巼銆佹暟鎹綅8銆佸仠姝綅1銆佹棤鏍¢獙浣�
port.setComPortParameters(baud, 8, 1, SerialPort.NO_PARITY);
- // 修改为半阻塞模式,读超时1ms
+ // 淇敼涓哄崐闃诲妯″紡锛岃瓒呮椂1ms
port.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 1, 0);
- // 打开串口并返回结果
+ // 鎵撳紑涓插彛骞惰繑鍥炵粨鏋�
return port.openPort();
}
@@ -91,22 +92,22 @@
}
/**
- * 关闭串口
+ * 鍏抽棴涓插彛
*/
public void close() {
- // 先停止数据接收线程
+ // 鍏堝仠姝㈡暟鎹帴鏀剁嚎绋�
stopCapture();
- // 如果串口已打开,关闭它
+ // 濡傛灉涓插彛宸叉墦寮�锛屽叧闂畠
if (port != null && port.isOpen()) {
port.closePort();
}
- // 释放串口引用
+ // 閲婃斁涓插彛寮曠敤
port = null;
}
/**
- * 启动数据接收线程
- * @param onReceived 数据接收回调函数,收到数据时调用
+ * 鍚姩鏁版嵁鎺ユ敹绾跨▼
+ * @param onReceived 鏁版嵁鎺ユ敹鍥炶皟鍑芥暟锛屾敹鍒版暟鎹椂璋冪敤
*/
public void startCapture(Consumer<byte[]> onReceived) {
this.dataReceivedCallback = onReceived;
@@ -164,41 +165,44 @@
readerThread.start();
}
/**
- * 停止数据接收线程
+ * 鍋滄鏁版嵁鎺ユ敹绾跨▼
*/
public void stopCapture() {
- // 设置捕获标志为 false,通知线程退出
+ // 璁剧疆鎹曡幏鏍囧織涓� false锛岄�氱煡绾跨▼閫�鍑�
capturing = false;
- // 如果线程存在,等待最多500ms确保线程结束
+ // 濡傛灉绾跨▼瀛樺湪锛岀瓑寰呮渶澶�500ms纭繚绾跨▼缁撴潫
if (readerThread != null) {
try { readerThread.join(500); } catch (InterruptedException ignore) {}
- // 清空线程引用
+ // 娓呯┖绾跨▼寮曠敤
readerThread = null;
}
}
- // 设置暂停状态
+ // 璁剧疆鏆傚仠鐘舵��
public void setPaused(boolean paused) {
this.paused = paused;
}
- // 获取当前是否暂停
+ // 鑾峰彇褰撳墠鏄惁鏆傚仠
public boolean isPaused() {
return paused;
}
- // 判断串口是否已打开
+ // 鍒ゆ柇涓插彛鏄惁宸叉墦寮�
public boolean isOpen() {
return port != null && port.isOpen();
}
/**
- * 发送数据
- * @param data 要发送的字节数组
- * @return 是否成功发送
+ * 鍙戦�佹暟鎹�
+ * @param data 瑕佸彂閫佺殑瀛楄妭鏁扮粍
+ * @return 鏄惁鎴愬姛鍙戦��
*/
public boolean send(byte[] data) {
- // 如果串口已初始化且已打开,发送数据并返回结果
+ if (!isOpen()) {
+ return false;
+ }
+ // 濡傛灉涓插彛宸插垵濮嬪寲涓斿凡鎵撳紑锛屽彂閫佹暟鎹苟杩斿洖缁撴灉
return port != null && port.isOpen() && port.writeBytes(data, data.length) > 0;
}
}
\ No newline at end of file
--
Gitblit v1.10.0