826220679@qq.com
2025-08-08 1562f05c0c85fb45cc8ffba8ac6984e9b6f96bd4
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;
@@ -330,94 +329,24 @@
        
        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());
                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));
                } 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());
                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方法