fix(SerialMate): v0.1.2 解析模式不再吞数据——不成帧字节透传显示
背景: 用户接非 DLPilot 协议设备(COM25)开解析模式接收区一片空白——_dispatch_rx 在解析模式只上抛完整合法帧, 不成帧字节(纯文本日志/别的协议/波特率不符乱码)被 FrameParser 重同步时静默丢弃。用户明确定位: 首先是基础串口调试工具, 自定义协议解析是附加项, 附加能力不得影响本体功能。 修复: protocol.py FrameParser 丢弃字节累积进 garbage(新增 drain_garbage(), feed() 返回值不变); link.py 新增 on_garbage(data, ts) 回调, 每批无条件 drain(未接回调也不累积); main.py 把 on_garbage 并入 raw 事件与透传行同格式显示, 解析协议帧开关补 tooltip, 版本 0.1.2。半帧前缀扣留语义有意保留(可能补全成真帧, 至多扣一个前缀长度)。 自检: selftest 8b +10 项(纯文本全透出/噪声+帧+尾字节/坏CRC帧字节全透出/半帧头扣留补全), loop 3b +3 项, gui 5b +2 项; 全量 67+21+68 项 PASS; exe 已重建。README/AGENTS.md(不变量 5a) 同步。
This commit is contained in:
@@ -8,7 +8,8 @@ SerialMate — RS485/串口调试助手(Fluent UI)
|
||||
|
||||
功能:
|
||||
- 串口收发, 参数热切换; 半双工 RS485 友好(每个工作周期最多写一帧, 留应答间隙)
|
||||
- 接收: 协议解析(包头+LEN 定界+CRC 校验, 坏帧重同步) / 原始透传 两模式切换
|
||||
- 接收: 协议解析(包头+LEN 定界+CRC 校验, 坏帧重同步; 不成帧字节以原始行透出,
|
||||
不吞数据) / 原始透传 两模式切换
|
||||
- payload 显示 字符串/HEX 切换, 原始帧 hex 可选, 日志可保存
|
||||
- 曲线: 4 通道, 二进制定长 / 文本数字 / 正则 三种提取方式 + 倍率
|
||||
- 发送: 自动包装(payload 即协议载荷, '/' 分隔多条依次组帧) / HEX 直发,
|
||||
@@ -49,7 +50,7 @@ from protocol import (BIN_FORMATS, CRC_ALGOS, CRC_ALGO_LABELS, CRC_SCOPE_LABELS,
|
||||
from theme import ThemeManager
|
||||
|
||||
APP_NAME = 'SerialMate'
|
||||
APP_VERSION = '0.1.1'
|
||||
APP_VERSION = '0.1.2'
|
||||
REPO_URL = 'https://gitea.hulk.wang/hulk/HW-Debug-Tools'
|
||||
|
||||
BAUDS = (1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600)
|
||||
@@ -250,6 +251,7 @@ class Window(QMainWindow):
|
||||
self.link = SerialLink(cfg=self._proto_from_store(),
|
||||
on_status=lambda s, ts: self.events.put(('status', s, ts)))
|
||||
self.link.on_frame = lambda fr, ts: self.events.put(('frame', fr, ts))
|
||||
self.link.on_garbage = lambda b, ts: self.events.put(('raw', b, ts))
|
||||
self.link.on_raw = lambda b, ts: self.events.put(('raw', b, ts))
|
||||
self.link.on_tx = lambda lb, d, ts: self.events.put(('tx', lb, d, ts))
|
||||
self._build_ui()
|
||||
@@ -470,6 +472,9 @@ class Window(QMainWindow):
|
||||
self.combo_crc.currentIndexChanged.connect(self._apply_proto)
|
||||
self.combo_scope.currentIndexChanged.connect(self._apply_proto)
|
||||
self.chk_parse = CheckBox('解析协议帧(收)')
|
||||
self.chk_parse.setToolTip(
|
||||
'勾选=按协议格式解析, 合法帧结构化显示; 不成帧的字节不丢弃, 以原始行透出\n'
|
||||
'不勾选=原始透传, 收到什么显示什么(基础串口助手模式)')
|
||||
self.chk_parse.stateChanged.connect(self._on_parse_toggle)
|
||||
self._row(lay, CaptionLabel('CRC'), self.combo_crc,
|
||||
CaptionLabel('覆盖'), self.combo_scope, self.chk_parse)
|
||||
|
||||
Reference in New Issue
Block a user