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