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/Dell55AA1FParser.java |   88 ++++++++++++++++++++++----------------------
 1 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/src/jiexi/Dell55AA1FParser.java b/src/jiexi/Dell55AA1FParser.java
index e448df6..118fcad 100644
--- a/src/jiexi/Dell55AA1FParser.java
+++ b/src/jiexi/Dell55AA1FParser.java
@@ -2,26 +2,26 @@
 import java.util.Arrays;
 
 public class Dell55AA1FParser {
-    // 常量定义
-    private static final String EXPECTED_HEADER = "55AA1F"; // 协议头
-    private static final int MIN_PACKET_LENGTH = 36; // 最小包长度(字符数): 固定字段18字节=36字符
-    private static final int FIXED_FIELDS_LENGTH = 11; // 从标签ID到保留字段的固定长度(字节)
+    // 甯搁噺瀹氫箟
+    private static final String EXPECTED_HEADER = "55AA1F"; // 鍗忚澶�
+    private static final int MIN_PACKET_LENGTH = 36; // 鏈�灏忓寘闀垮害(瀛楃鏁�): 鍥哄畾瀛楁18瀛楄妭=36瀛楃
+    private static final int FIXED_FIELDS_LENGTH = 11; // 浠庢爣绛綢D鍒颁繚鐣欏瓧娈电殑鍥哄畾闀垮害(瀛楄妭)
     private static final ThreadLocal<ParseResult> RESULT_CACHE = 
     ThreadLocal.withInitial(ParseResult::new);
 
-    // 解析结果类
+    // 瑙f瀽缁撴灉绫�
     public static class ParseResult {
-        public int dataLength;    // 数据长度
-        public int messageType;    // 消息类型
-        public String tagId;       // 标签ID(2字节)
-        public int distance;       // 距离(厘米)
-        public int angle;          // 角度(度)
-        public int signalQuality;  // 信号质量(0-255)
-        public int buttonPressed;  // 按钮状态
-        public int power;          // 电量
-        public String reserved;    // 保留字段
-        public String userData;    // 用户数据
-        public String checksum;    // 校验和
+        public int dataLength;    // 鏁版嵁闀垮害
+        public int messageType;    // 娑堟伅绫诲瀷
+        public String tagId;       // 鏍囩ID(2瀛楄妭)
+        public int distance;       // 璺濈(鍘樼背)
+        public int angle;          // 瑙掑害(搴�)
+        public int signalQuality;  // 淇″彿璐ㄩ噺(0-255)
+        public int buttonPressed;  // 鎸夐挳鐘舵��
+        public int power;          // 鐢甸噺
+        public String reserved;    // 淇濈暀瀛楁
+        public String userData;    // 鐢ㄦ埛鏁版嵁
+        public String checksum;    // 鏍¢獙鍜�
         
         public void reset() {
             dataLength = 0;
@@ -39,9 +39,9 @@
     }
 
     /**
-     * 解析55AA1F协议数据
-     * @param message 十六进制字符串
-     * @return 解析结果(错误时返回null)
+     * 瑙f瀽55AA1F鍗忚鏁版嵁
+     * @param message 鍗佸叚杩涘埗瀛楃涓�
+     * @return 瑙f瀽缁撴灉(閿欒鏃惰繑鍥瀗ull)
      */
     public static ParseResult parse(String message, String ip, int port) {
         if (message == null || message.isEmpty()) {
@@ -49,7 +49,7 @@
             return null;
         }
 
-        // 清洗数据:移除所有非十六进制字符
+        // 娓呮礂鏁版嵁锛氱Щ闄ゆ墍鏈夐潪鍗佸叚杩涘埗瀛楃
         char[] cleanedMessage = cleanMessage(message);
 
         if (cleanedMessage == null) {
@@ -57,7 +57,7 @@
             return null;
         }
 
-        // 检查最小长度
+        // 妫�鏌ユ渶灏忛暱搴�
         if (cleanedMessage.length < MIN_PACKET_LENGTH) {
             System.err.println("Message too short from " + ip + ":" + port + 
                              ". Expected at least " + MIN_PACKET_LENGTH + 
@@ -65,7 +65,7 @@
             return null;
         }
 
-        // 协议头校验 (55AA1F)
+        // 鍗忚澶存牎楠� (55AA1F)
         if (cleanedMessage.length < 6 || 
             !new String(cleanedMessage, 0, 6).equals(EXPECTED_HEADER)) {
             System.err.println("Invalid header in message from " + ip + ":" + port);
@@ -76,11 +76,11 @@
         result.reset();
 
         try {
-            // 解析数据长度 (位置6-7)
+            // 瑙f瀽鏁版嵁闀垮害 (浣嶇疆6-7)
             result.dataLength = HexUtils.fastHexToByte(cleanedMessage[6], cleanedMessage[7]);
             
-            // 计算期望的总字符长度
-            int expectedCharLength = 14 + result.dataLength * 2; // 14=包头6+消息类型2+数据长度2+校验和4
+            // 璁$畻鏈熸湜鐨勬�诲瓧绗﹂暱搴�
+            int expectedCharLength = 14 + result.dataLength * 2; // 14=鍖呭ご6+娑堟伅绫诲瀷2+鏁版嵁闀垮害2+鏍¢獙鍜�4
 
 //            if (cleanedMessage.length < expectedCharLength) {
 //                System.err.println("Incomplete message from " + ip + ":" + port + 
@@ -89,42 +89,42 @@
 //                return null;
 //            }
 
-            // 解析消息类型 (位置4-5)
+            // 瑙f瀽娑堟伅绫诲瀷 (浣嶇疆4-5)
             result.messageType = HexUtils.fastHexToByte(cleanedMessage[4], cleanedMessage[5]);
 
-            // 解析标签ID (位置8-11),直接取字符串
+            // 瑙f瀽鏍囩ID (浣嶇疆8-11)锛岀洿鎺ュ彇瀛楃涓�
             result.tagId = new String(cleanedMessage, 8, 4);
 
-            // 检查是否有足够长度解析固定字段
-            if (cleanedMessage.length < 30) { // 需要至少15字节=30字符
+            // 妫�鏌ユ槸鍚︽湁瓒冲闀垮害瑙f瀽鍥哄畾瀛楁
+            if (cleanedMessage.length < 30) { // 闇�瑕佽嚦灏�15瀛楄妭=30瀛楃
                 System.err.println("Message too short for fixed fields from " + ip + ":" + port);
                 return null;
             }
 
-            // 解析距离 (位置12-15, 2字节小端整数)
+            // 瑙f瀽璺濈 (浣嶇疆12-15, 2瀛楄妭灏忕鏁存暟)
             int distLow = HexUtils.fastHexToByte(cleanedMessage[12], cleanedMessage[13]);
             int distHigh = HexUtils.fastHexToByte(cleanedMessage[14], cleanedMessage[15]);
             result.distance = (distHigh << 8) | distLow;
 
-            // 解析角度 (位置16-19, 2字节小端有符号整数)
+            // 瑙f瀽瑙掑害 (浣嶇疆16-19, 2瀛楄妭灏忕鏈夌鍙锋暣鏁�)
             int angleLow = HexUtils.fastHexToByte(cleanedMessage[16], cleanedMessage[17]);
             int angleHigh = HexUtils.fastHexToByte(cleanedMessage[18], cleanedMessage[19]);
             short angleShort = (short) ((angleHigh << 8) | angleLow);
             result.angle = angleShort;
 
-            // 解析信号质量 (位置20-21)
+            // 瑙f瀽淇″彿璐ㄩ噺 (浣嶇疆20-21)
             result.signalQuality = HexUtils.fastHexToByte(cleanedMessage[20], cleanedMessage[21]);
 
-            // 解析按钮状态 (位置22-23)
+            // 瑙f瀽鎸夐挳鐘舵�� (浣嶇疆22-23)
             result.buttonPressed = HexUtils.fastHexToByte(cleanedMessage[22], cleanedMessage[23]);
 
-            // 解析电量 (位置24-25)
+            // 瑙f瀽鐢甸噺 (浣嶇疆24-25)
             result.power = HexUtils.fastHexToByte(cleanedMessage[24], cleanedMessage[25]);
 
-            // 解析保留字段 (位置26-29)
+            // 瑙f瀽淇濈暀瀛楁 (浣嶇疆26-29)
             result.reserved = new String(cleanedMessage, 26, 4);
 
-            // 解析用户数据
+            // 瑙f瀽鐢ㄦ埛鏁版嵁
 //            int userDataStart = 30;
 //            int userDataCharLength = (result.dataLength - FIXED_FIELDS_LENGTH) * 2;
 //            if (userDataCharLength > 0) {
@@ -138,10 +138,10 @@
 //                result.userData = "";
 //            }
 
-            // 解析校验和 (最后4个字符)
+            // 瑙f瀽鏍¢獙鍜� (鏈�鍚�4涓瓧绗�)
             result.checksum = new String(cleanedMessage, cleanedMessage.length - 4, 4);
 
-            // 验证校验和
+            // 楠岃瘉鏍¢獙鍜�
 //            byte[] packetBytes = hexStringToByteArray(new String(cleanedMessage));
 //            if (!verifyChecksum(packetBytes)) {
 //                System.err.println("Checksum verification failed for packet from " + ip + ":" + port);
@@ -158,7 +158,7 @@
     }
 
     /**
-     * 将十六进制字符串转换为字节数组
+     * 灏嗗崄鍏繘鍒跺瓧绗︿覆杞崲涓哄瓧鑺傛暟缁�
      */
     private static byte[] hexStringToByteArray(String s) {
         int len = s.length();
@@ -171,21 +171,21 @@
     }
 
     /**
-     * 校验数据包
-     * 去掉包头求和取反,校验码为小端模式
+     * 鏍¢獙鏁版嵁鍖�
+     * 鍘绘帀鍖呭ご姹傚拰鍙栧弽锛屾牎楠岀爜涓哄皬绔ā寮�
      */
     private static boolean verifyChecksum(byte[] packet) {
         int len = packet.length;
         if (len < 4) return false;
 
         int sum = 0;
-        // 从消息类型开始到校验码前结束 (跳过包头2字节)
+        // 浠庢秷鎭被鍨嬪紑濮嬪埌鏍¢獙鐮佸墠缁撴潫 (璺宠繃鍖呭ご2瀛楄妭)
         for (int i = 2; i < len - 2; i++) {
             sum += packet[i] & 0xFF;
         }
-        sum = ~sum & 0xFFFF; // 取反并保留16位
+        sum = ~sum & 0xFFFF; // 鍙栧弽骞朵繚鐣�16浣�
 
-        // 获取包中的校验码 (小端模式)
+        // 鑾峰彇鍖呬腑鐨勬牎楠岀爜 (灏忕妯″紡)
         int receivedChecksum = ((packet[len - 2] & 0xFF) << 8) | (packet[len - 1] & 0xFF);
 
         return sum == receivedChecksum;

--
Gitblit v1.10.0