From 1562f05c0c85fb45cc8ffba8ac6984e9b6f96bd4 Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期五, 08 八月 2025 23:07:50 +0800
Subject: [PATCH] 串口通信

---
 src/dell_system/SerialCommPanel.java |  110 +++++++-----------------------------------------------
 1 files changed, 15 insertions(+), 95 deletions(-)

diff --git a/src/dell_system/SerialCommPanel.java b/src/dell_system/SerialCommPanel.java
index 2ab154d..a4aee12 100644
--- a/src/dell_system/SerialCommPanel.java
+++ b/src/dell_system/SerialCommPanel.java
@@ -1,7 +1,6 @@
 package dell_system;
 import com.fazecast.jSerialComm.SerialPort;
-import Dell55aa.Dell55AA12HighPerf;
-import Dell55aa.Dell55AA12HighPerf.ParseResult;
+import dell55AAData.PacketParser;
 import javax.swing.*;
 import javax.swing.border.TitledBorder;
 import javax.swing.event.PopupMenuEvent;
@@ -327,97 +326,27 @@
     /* ================= 解析数据显示 ================= */
     private void appendParsedData(byte[] data) {
         if (!chkEnableParsing.isSelected()) return;
-        
+
         SwingUtilities.invokeLater(() -> {
             packetCounter++;
-            lblPacketCount.setText(String.format(messages.getString("packet.count.format"), packetCounter)); // 更新计数标签
-            
+            lblPacketCount.setText(String.format(messages.getString("packet.count.format"), packetCounter));
+
             try {
-                // 将字节数据转换为十六进制字符串
-                String hexData = bytesToHex(data).toUpperCase();
-                // 使用Dell55AA12HighPerf解析
-                ParseResult result = Dell55AA12HighPerf.parse(hexData);
-                
-                if (result != null) {
-                    // 构建状态字符串
-                    String buttonStatus = result.sosButtonPressed ? messages.getString("yes") : messages.getString("no");
-                    String staticStatus = result.isStatic ? messages.getString("yes") : messages.getString("no");
-                    String sleepStatus = result.isSleeping ? messages.getString("yes") : messages.getString("no");
-                    String vibrationStatus = (result.vibrationState == 1) ? messages.getString("on") : messages.getString("off");
-                    String uwbStatus = result.tagRemoved ? messages.getString("off") : messages.getString("on");
-                    
-                    // 构建基站信息
-                    StringBuilder anchorIds = new StringBuilder();
-                    StringBuilder distances = new StringBuilder();
-                    StringBuilder anchorPowers = new StringBuilder();
-                    
-                    for (int i = 0; i < result.anchorCount; i++) {
-                        if (i > 0) {
-                            anchorIds.append(",");
-                            distances.append(",");
-                            anchorPowers.append(",");
-                        }
-                        anchorIds.append(result.anchorIds[i]);
-                        distances.append(result.distances[i]);
-                        anchorPowers.append(result.anchorPowers[i]);
-                    }
-                    
-                    // 格式化输出
-                    StringBuilder parsedOutput = new StringBuilder();
-                    
-                    // 添加时间戳(如果勾选)
-                    if (chkTimestamp.isSelected()) {
-                        parsedOutput.append("[").append(sdf.format(new Date())).append("]\n");
-                    }
-                    
-                    parsedOutput.append(String.format(
-                        "%s: %d\n%s: %d\n%s: %d%%\n%s: %s[%s], %s[%s], %s[%s], %s[%s], %s[%s]\n%s: %d\n%s: %d\n%s: (%s)\n%s: (%s)\n%s: (%s)\n\n",
-                        messages.getString("label.id"), result.tagId,
-                        messages.getString("label.sequence"), result.sequenceNum,
-                        messages.getString("label.power"), result.power,
-                        messages.getString("label.status"),
-                        messages.getString("status.button"), buttonStatus,
-                        messages.getString("status.static"), staticStatus,
-                        messages.getString("status.sleeping"), sleepStatus,
-                        messages.getString("status.vibration"), vibrationStatus,
-                        messages.getString("status.uwb_switch"), uwbStatus,
-                        messages.getString("label.tag_height"), result.tagHeight,
-                        messages.getString("label.anchor_count"), result.anchorCount,
-                        messages.getString("label.anchor_ids"), anchorIds.toString(),
-                        messages.getString("label.distances"), distances.toString(),
-                        messages.getString("label.anchor_powers"), anchorPowers.toString()
-                    ));
-                    
-                    txtParsedData.append(parsedOutput.toString());
-                    txtParsedData.setCaretPosition(txtParsedData.getDocument().getLength());
-                    lblParseStatus.setText(String.format("%s (Packets: %d)", messages.getString("parser.ready"), packetCounter));
-                } else {
-                    StringBuilder invalidMsg = new StringBuilder();
-                    // 添加时间戳(如果勾选)
-                    if (chkTimestamp.isSelected()) {
-                    	
-                        invalidMsg.append("[").append(sdf.format(new Date())).append("]\n");
-                    }
-                    invalidMsg.append(String.format("[Packet #%d] Not a valid 55AA12 packet\n\n", packetCounter));
-                    
-                    txtParsedData.append(invalidMsg.toString());
-                    lblParseStatus.setText(String.format("Parser: Invalid (Packets: %d)", packetCounter));
-                }
-            } catch (Exception e) {
-                StringBuilder errorMsg = new StringBuilder();
-                // 添加时间戳(如果勾选)
-                if (chkTimestamp.isSelected()) {
-                    errorMsg.append("[").append(sdf.format(new Date())).append("]\n");
-                }
-                errorMsg.append(String.format("[Packet #%d] Parse error: %s\n\n", 
-                        packetCounter, e.getMessage()));
-                
-                txtParsedData.append(errorMsg.toString());
+                String parsed = PacketParser.parse(data, messages, chkTimestamp.isSelected());
+                txtParsedData.append(parsed);
+                txtParsedData.setCaretPosition(txtParsedData.getDocument().getLength());
+                lblParseStatus.setText(
+                        String.format("%s (Packets: %d)",
+                                      messages.getString("parser.ready"), packetCounter));
+            } catch (Exception ex) {
+                StringBuilder sb = new StringBuilder();
+                if (chkTimestamp.isSelected()) sb.append('[').append(sdf.format(new Date())).append("]\n");
+                sb.append(String.format("[Packet #%d] Parse error: %s\n\n", packetCounter, ex.getMessage()));
+                txtParsedData.append(sb.toString());
                 lblParseStatus.setText(String.format("Parser: Error (Packets: %d)", packetCounter));
             }
         });
     }
-    
     /* ================= UI 更新 ================= */
     private void appendRawData(byte[] bytes) {
         SwingUtilities.invokeLater(() -> {
@@ -564,15 +493,6 @@
                 }
             });
         }
-    }
-    
-    // 新增辅助方法:字节数组转十六进制字符串
-    private String bytesToHex(byte[] bytes) {
-        StringBuilder sb = new StringBuilder();
-        for (byte b : bytes) {
-            sb.append(String.format("%02X", b));
-        }
-        return sb.toString();
     }
     
     // 修改clearDisplay方法

--
Gitblit v1.9.3