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/jiexi/Dell55AA12HighPerf.java | 114 ++++++++++++++++++++++++++++----------------------------
1 files changed, 57 insertions(+), 57 deletions(-)
diff --git a/src/jiexi/Dell55AA12HighPerf.java b/src/jiexi/Dell55AA12HighPerf.java
index 80c333b..ff24d99 100644
--- a/src/jiexi/Dell55AA12HighPerf.java
+++ b/src/jiexi/Dell55AA12HighPerf.java
@@ -2,35 +2,35 @@
public class Dell55AA12HighPerf {
- // 协议常量
+ // 鍗忚甯搁噺
@SuppressWarnings("unused")
- private static final String HEADER = "55AA12"; // 协议头
- private static final int MIN_LENGTH = 34; // 最小数据长度
- private static final ThreadLocal<ParseResult> RESULT_CACHE = // 解析结果缓存
+ private static final String HEADER = "55AA12"; // 鍗忚澶�
+ private static final int MIN_LENGTH = 34; // 鏈�灏忔暟鎹暱搴�
+ private static final ThreadLocal<ParseResult> RESULT_CACHE = // 瑙f瀽缁撴灉缂撳瓨
ThreadLocal.withInitial(ParseResult::new);
- // 重用StringBuilder减少内存分配
+ // 閲嶇敤StringBuilder鍑忓皯鍐呭瓨鍒嗛厤
private static final ThreadLocal<StringBuilder> hexDataBuilder =
ThreadLocal.withInitial(() -> new StringBuilder(64));
- // 解析结果类
+ // 瑙f瀽缁撴灉绫�
public static class ParseResult {
- public String tagId; // 标签ID
- public int sequenceNum; // 序列号
- public int power; // 电量
- public int vibrationState; // 振动状态
- public boolean tagRemoved; // 标签移除状态
- public boolean isSleeping; // 休眠状态
- public boolean isStatic; // 静止状态
- public boolean sosButtonPressed; // SOS按钮状态
- public int tagHeight; // 标签高度
- public int anchorCount; // 锚点数量
- public String[] anchorIds = new String[0]; // 锚点ID数组
- public int[] distances = new int[0]; // 距离数组
- public int[] anchorPowers = new int[0]; // 锚点电量数组
- public int[] signalStrengths1 = new int[0]; // 信号强度1
- public int[] signalStrengths2 = new int[0]; // 信号强度2
+ public String tagId; // 鏍囩ID
+ public int sequenceNum; // 搴忓垪鍙�
+ public int power; // 鐢甸噺
+ public int vibrationState; // 鎸姩鐘舵��
+ public boolean tagRemoved; // 鏍囩绉婚櫎鐘舵��
+ public boolean isSleeping; // 浼戠湢鐘舵��
+ public boolean isStatic; // 闈欐鐘舵��
+ public boolean sosButtonPressed; // SOS鎸夐挳鐘舵��
+ public int tagHeight; // 鏍囩楂樺害
+ public int anchorCount; // 閿氱偣鏁伴噺
+ public String[] anchorIds = new String[0]; // 閿氱偣ID鏁扮粍
+ public int[] distances = new int[0]; // 璺濈鏁扮粍
+ public int[] anchorPowers = new int[0]; // 閿氱偣鐢甸噺鏁扮粍
+ public int[] signalStrengths1 = new int[0]; // 淇″彿寮哄害1
+ public int[] signalStrengths2 = new int[0]; // 淇″彿寮哄害2
- // 重置方法
+ // 閲嶇疆鏂规硶
public void reset() {
tagId = "";
sequenceNum = 0;
@@ -42,22 +42,22 @@
sosButtonPressed = false;
tagHeight = 0;
anchorCount = 0;
- // 数组保持长度,只重置计数
+ // 鏁扮粍淇濇寔闀垮害锛屽彧閲嶇疆璁℃暟
}
}
/**
- * 解析协议数据
- * @param message 原始16进制字符串
- * @return 解析结果对象(线程安全)
+ * 瑙f瀽鍗忚鏁版嵁
+ * @param message 鍘熷16杩涘埗瀛楃涓�
+ * @return 瑙f瀽缁撴灉瀵硅薄锛堢嚎绋嬪畨鍏級
*/
public static ParseResult parse(String message,String ip,int port) {
- // 长度校验
+ // 闀垮害鏍¢獙
if (message == null || message.length() < MIN_LENGTH) {
return null;
}
- // 协议头校验
+ // 鍗忚澶存牎楠�
if (!(message.charAt(0) == '5' &&
message.charAt(1) == '5' &&
message.charAt(2) == 'A' &&
@@ -67,28 +67,28 @@
return null;
}
- // 获取线程本地结果对象
+ // 鑾峰彇绾跨▼鏈湴缁撴灉瀵硅薄
ParseResult result = RESULT_CACHE.get();
result.reset();
- // 获取字符缓冲区
+ // 鑾峰彇瀛楃缂撳啿鍖�
char[] chars = HexUtils.getThreadLocalBuffer();
message.getChars(0, Math.min(message.length(), chars.length), chars, 0);
- // 解析数据长度
+ // 瑙f瀽鏁版嵁闀垮害
int dataLength = (HexUtils.fastHexToByte(chars[6], chars[7]) * 2) + 8;
if (message.length() != dataLength) {
return null;
}
- // 解析标签信息
+ // 瑙f瀽鏍囩淇℃伅
parseTagInfo(chars, result);
- // 解析锚点信息
+ // 瑙f瀽閿氱偣淇℃伅
parseAnchorInfo(chars, result);
- if (MessageViewPanel.isWindowVisible) {
- // 组装基站信息
+ /* if (MessageViewPanel.isWindowVisible) {
+ // 缁勮鍩虹珯淇℃伅
StringBuilder ids = new StringBuilder();
StringBuilder dists = new StringBuilder();
StringBuilder powers = new StringBuilder();
@@ -117,27 +117,27 @@
.append("],Dis:[").append(dists)
.append("],AncPowers:[").append(powers).append("]").append('\n');
MessageViewPanel.showData(sb.toString(), ip, port, 0, "UDPA", "55AA12",result.tagId);
- }
+ }*/
return result;
}
/**
- * 解析标签信息
+ * 瑙f瀽鏍囩淇℃伅
*/
private static void parseTagInfo(char[] chars, ParseResult result) {
- // 标签ID(小端序)
+ // 鏍囩ID锛堝皬绔簭锛�
result.tagId = new String(new char[] {
- chars[10], chars[11], // 高字节
- chars[8], chars[9] // 低字节
+ chars[10], chars[11], // 楂樺瓧鑺�
+ chars[8], chars[9] // 浣庡瓧鑺�
});
- // 序列号(小端序)
+ // 搴忓垪鍙凤紙灏忕搴忥級
result.sequenceNum = (HexUtils.fastHexToByte(chars[14], chars[15]) << 8 |
HexUtils.fastHexToByte(chars[12], chars[13]));
- // 电量
+ // 鐢甸噺
result.power = HexUtils.fastHexToByte(chars[16], chars[17]);
- // 状态标志
+ // 鐘舵�佹爣蹇�
int buttonState = HexUtils.fastHexToByte(chars[18], chars[19]);
result.vibrationState = (buttonState >> 5) & 1;
result.tagRemoved = ((buttonState >> 3) & 1) == 1;
@@ -145,20 +145,20 @@
result.isStatic = ((buttonState >> 1) & 1) == 1;
result.sosButtonPressed = (buttonState & 1) == 1;
- // 标签高度(小端序)
+ // 鏍囩楂樺害锛堝皬绔簭锛�
result.tagHeight = (HexUtils.fastHexToByte(chars[22], chars[23]) << 8 |
HexUtils.fastHexToByte(chars[20], chars[21]));
}
/**
- * 解析锚点信息
+ * 瑙f瀽閿氱偣淇℃伅
*/
private static void parseAnchorInfo(char[] chars, ParseResult result) {
- // 锚点数量
+ // 閿氱偣鏁伴噺
result.anchorCount = HexUtils.fastHexToByte(chars[32], chars[33]);
if (result.anchorCount == 0) return;
- // 动态扩展数组
+ // 鍔ㄦ�佹墿灞曟暟缁�
if (result.anchorIds.length < result.anchorCount) {
result.anchorIds = new String[result.anchorCount];
result.distances = new int[result.anchorCount];
@@ -167,22 +167,22 @@
result.signalStrengths2 = new int[result.anchorCount];
}
- int baseIndex = 34; // 锚点ID起始位置
- int distanceStart = baseIndex + result.anchorCount * 4; // 距离起始位置
- int powerStart = distanceStart + result.anchorCount * 4; // 电量起始位置
+ int baseIndex = 34; // 閿氱偣ID璧峰浣嶇疆
+ int distanceStart = baseIndex + result.anchorCount * 4; // 璺濈璧峰浣嶇疆
+ int powerStart = distanceStart + result.anchorCount * 4; // 鐢甸噺璧峰浣嶇疆
- // 解析锚点ID(小端序)
+ // 瑙f瀽閿氱偣ID锛堝皬绔簭锛�
for (int i = 0; i < result.anchorCount; i++) {
int idOffset = baseIndex + i * 4;
result.anchorIds[i] = new String(new char[]{
- chars[idOffset + 2], // 高字节1
- chars[idOffset + 3], // 高字节2
- chars[idOffset], // 低字节1
- chars[idOffset + 1] // 低字节2
+ chars[idOffset + 2], // 楂樺瓧鑺�1
+ chars[idOffset + 3], // 楂樺瓧鑺�2
+ chars[idOffset], // 浣庡瓧鑺�1
+ chars[idOffset + 1] // 浣庡瓧鑺�2
});
}
- // 解析距离(有符号整数处理)
+ // 瑙f瀽璺濈锛堟湁绗﹀彿鏁存暟澶勭悊锛�
for (int i = 0; i < result.anchorCount; i++) {
int distOffset = distanceStart + i * 4;
int distLow = HexUtils.fastHexToByte(chars[distOffset], chars[distOffset + 1]);
@@ -193,7 +193,7 @@
: rawDistance;
}
- // 解析锚点电量
+ // 瑙f瀽閿氱偣鐢甸噺
for (int i = 0; i < result.anchorCount; i++) {
int powerOffset = powerStart + i * 2;
result.anchorPowers[i] = HexUtils.fastHexToByte(chars[powerOffset], chars[powerOffset + 1]);
--
Gitblit v1.10.0