Files
HW-Debug-Tools/agent.md
T

24 KiB
Raw Blame History

agent.md — 项目开发需求与进度管理

按 C:\Users\Lenovo\.zcode\AGENTS.md(用户级默认指令·默认工作约定)维护: 记录项目约定与开发进度——已完成功能清单、已提出但尚未实现的计划——随开发持续更新。 工程约束与构建规程在各工具 AGENTS.md;使用说明在根与各工具 README。 内容以仓库工件为准,每次完成开发或有新需求提出后同步更新本文。

1. 项目定位与约定

  • 本仓库是全部调试工具的收纳仓(起家于 LT8619C(HDMI→RGB888)→ DLPC3421 投影转接板 调试配套)。原名 LT8619C_Debug_Tools,2026-09-28 更名 HW-Debug-Tools:Gitea 已改名 (旧地址自动重定向)、本地目录与 remote 同步更名;Gitea Release 同日清理为各已发布工具 仅保留最新版(DLPilot v0.4.0 / EDID-Viewer v0.1.0 / SerialMate v0.1.0), 旧 release 删除但 tag 与提交历史保留。服务上游固件仓 hulk/LT8619C_DLPC3421_HDMI(本机路径 E:\Hulk-Coding\LT8619C_DLPC3421_HDMI,同 Gitea 实例 gitea.hulk.wang)。 光机 RS485 协议唯一权威是上游仓 protocols.md,本仓不维护协议副本。
  • 工具链(全仓统一):Python 3.14;GUI 用 PySide6 + PySide6-Fluent-Widgets,解析/协议 模块纯标准库;PyInstaller onefile 打包;发布流水线 build_exe → package_release → publish_gitea(GITEA_TOKEN 用户级环境变量;实例 TLS 间歇抽风,实际请求加 --insecure,详见 DLPilot/AGENTS.md §5)。
  • 结构约定:每个工具三区目录(src/ 人写 / assets/ 可再生 / release/ 交付)+ 双文档 (README 使用说明 / AGENTS.md 工程约束与进度)。各工具独立开发、独立打标签发布, Release 列表按时间倒序混排于同一页面:
    • DLPilot(原 HDMI-Tool)="3D 光固化光机调试台":HDMI 源端(EDID/分辨率/ 测试图案投屏)+ 光机控制(RS485→GD32E230 网关→DLPC3421)+ 电源检查。
    • EDID-viewer:Windows 显示器 EDID 只读查看器(Fluent UI)。
    • SerialMate:RS485/串口调试助手,帧格式(包头/板ID/LEN/CRC)可定制, 默认兼容 DLPilot 光机协议;payload 字符串/HEX 显示、4 通道曲线、payload 自动包装发送。
    • I2C-Lab(2026-10-02 新启,即 §3.5 三合一需求落地):I2C 总线监控调试台。 阶段一=纯被动监控:RP2040 probe 固件(pico-sdk C,PIO 边沿捕获 + 核1 实时 解码 + USB CDC =/! 命令行,250MHz)+ PC GUI(Fluent,事务流/地址过滤/ CSV/逻辑分析仪式波形快照/演示模式)。主机读写(复活 I2C-Inject 择机注入) 与从机模拟在路线图。解码语义权威 I2C-Lab/src/i2cdec.py。
    • I2C-Inject:RP2040 固件 + PC GUI,demo 板 I2C 总线择机注入读写寄存器。 2026-09-25 起暂停开发,代码与固件保留备查;2026-10-02 起后续开发并入 I2C-Lab(接线/回显约定与解码算法已继承过去)。
  • 子模块引用:gd32e230f8_firmware_merge_tool/(2026-09-30 接入,git submodule 指向 hulk/gd32e230f8_firmware_merge_tool)——GD32E230 APP/BL 合成补齐 (_UPDATE.bin/_BL.bin)+ DAPLink Flash GUI 烧录。代码、版本与发布均在原仓库 独立管理,本仓只锁指针;新克隆 git submodule update --init 拉取,跟进上游 git submodule update --remote gd32e230f8_firmware_merge_tool 后随本仓提交新指针。
  • 镜像约定:EDID-viewer 主目录(E:\Hulk-Coding\HW-Debug-Tools\EDID-viewer) 改动后需 robocopy /MIR 同步到 E:\Hulk-Coding\LT8619C\_Debug\_Tools\EDID-viewer (排除 .venv/build/pycache/.git,zip 不同步)。
  • 图标约定(2026-10-10 立):全部工具共用 logo 家族版式(512 黑底 + 工具色圆角块
    • 上行域词黑字/下行角色词白字,Arial Bold 146px 基准自适应;颜色不参与家族识别, 现分配橙 #FF9900×4、绿 #00C878×2、青 #00C8D7×1,紫 #A78BFA 暂未分配);软件内按钮只用 FluentIcon 白名单、文本内用单色 Unicode 符号(→ ← ⚠ ⏳ ⚙)。唯一权威 icons/: 约定文档 icons/README.md + 统一生成器 icons/make_icon.py(含 --check 复现校验与 --preview 家族预览图;各工具内旧 make_ico 脚本保留作历史对照,不再维护)。
  • 发布约定:源码与打包产物(exe、运行配置)入库;发布 zip 不入库,只上传 Gitea Release。

2. 开发进度(已完成功能清单)

2.1 DLPilot — 最新发布 v0.4.3(2026-10-13)

  • HDMI 源端:EDID 查看/逐字节解析、分辨率切换、智能显示拓扑(仅拉回转接板屏)、 纯色/黑白/测试卡全屏投屏、自定义槽位(pattern_slots.json)。
  • 光机控制:RS485 链路(dlpc_rs485.py 帧协议+线程)、开关光机/设光强/TEC 控温/ 查温度电流,串口参数化。
  • 电源检查:PD 自检(M301→M302→M303 状态机)、FPDO 挡位判定、功率检测 (M303+M304+M305 → V/mA/W 两位小数)。
  • 界面:PySide6-Fluent-Widgets 双栏仪表盘(v0.4.0 起),Light/Dark/System 主题 (Fluent 主题 + Qt 调色板 + QSS + DWM 标题栏三件套同步)。
  • 发布:v0.1.0(HDMI-Tool)→ v0.2.0 → v0.3.x → v0.4.0 均已上传 Gitea Release (v0.3.6 未单独发布,功能被 v0.4.0 覆盖);远端标签与附件已核对。
  • v0.4.3(2026-10-13):修复长会话越跑越卡/命令无响应——收发日志手工 cursor 裁剪用实例级枚举访问,PySide6 6.11 必抛 AttributeError 且异常打断 _poll_dlpc 队列消费(FilmForge 同案);改 setMaximumBlockCount(500) 环形裁剪 + 逐事件兜底 + 新增 selftest_log.py 回归。tag DLPilot-v0.4.3 指向 c91b4aa。详见 DLPilot/AGENTS.md §9。

2.2 EDID-Viewer — 最新发布 v0.1.0(2026-09-25)

  • 解析:EDID 1.x 基础身份/时序、CTA(音频 SAD/HDMI VSDB/CEC/HF-VSDB)、HDR 与 色彩能力、逐块校验与越界诊断(edid.py 纯标准库 + 9 项单测,含随机畸形数据 无崩溃检查)。
  • 数据获取:Windows WMI 只读枚举活动设备(HDMI/DP/内屏连接类型);离线 .bin/.edid/.hex/.txt 导入;BIN 与 JSON 报告导出。
  • 界面:Fluent 卡片布局、分组页签(设备与能力/时序/原始 HEX/完整 JSON)、右上角 "关于"(v0.1.0)。
  • 主题:Light/Dark/dark1/dark2/跟随系统,三件套同步 + QSettings 持久化 + 系统明暗变化响应。
  • 工程化:目录与发布流水线对齐 DLPilot(onefile exe 入库);标签 EDID-Viewer-v0.1.0 与 Release 附件(66,483,477 字节)已核对。

2.3 SerialMate — v0.1.0(2026-09-27,首版)

  • 更名:原名 SerialAssistant(目录/exe/文档/配置同步更名;旧配置 serial_assistant.json 首次启动自动迁移为 serial_mate.json;更名时的图标为 波形+RS485 母题,后统一为家族版式,见 §2.6)。用户确认 "SerialMate 吧"(2026-09-27)。
  • 已发布:commit d133906 推送 main 并打 tag SerialMate-v0.1.0, Release 附件 SerialMate-v0.1.0-win64.zip(63.7 MB)已上传核对。
  • 协议:帧构成令牌序列可定制(HDR ID LEN PAYLOAD CRC + 十六进制字面量 同步头,收发共用布局仅包头分方向;支持字段换序/无板ID/多字节同步头,LEN 口径 payload 长度/到帧尾/整帧三种)、5 种 CRC 算法 × 3 种覆盖范围,默认与 DLPilot 光机 RS485 协议一致(D5/B5/01/SUM8/不含包头);增量解析前缀逐位 对齐 + CRC 失败逐字节重同步;自测 64 项全 PASS(DLPilot 实测帧向量 + CRC 标准校验值 + 布局换序/LEN 口径向量 + 布局模糊往返)。
  • 链路:串口参数热切换、半双工友好发送队列(未连接丢弃)、解析/透传双模式 热切、loop:// 虚拟回环自检 13 项全 PASS(组帧→发送→接收→解析→曲线提取)。
  • GUI(PySide6-Fluent-Widgets,用户指定沿用 Qt 方案):帧构成/LEN 口径可视化 编辑,payload 字符串/HEX 切换(半透明底色高亮)、原始帧 hex、时间戳、日志 保存;4 通道曲线(三种提取 + 倍率,弹窗独立:时间窗滑笔回看、纵轴刻度、 悬停读值、暂停渲染/自动Y/滚轮缩放/拖动 Y 轴);发送自动包装(输入 payload 自动组帧,/ 分隔多条依次发)、HEX 直发、周期发送、组帧实时预览、历史 回溯、回车发送;主题跟随系统;标题栏版本号 + 关于弹窗 + 图标(波形 RS485)。
  • 板型档案(2026-09-27 实机反馈追加):不同板子的"协议参数+命令预设表"存为 命名档案(board_profiles.json,不入库,首次运行生成默认 DLPilot 板型), 发送卡一键切换/新建/存为/删除/表格编辑/重载。
  • 发布:SerialMate.exe 已入库(随帧构成功能重建),zip/Release 未发布 (待用户验收后走 package_release + publish_gitea)。
  • v0.1.1(2026-10-13)发布:接收路径修复(时间戳改 link 线程到达时刻打戳、 接收日志批量插入+5000 行上限+积压折叠、通道配置缓存),详见 SerialMate/ISSUE_rx_timestamp_and_lag.md 与其 AGENTS.md §7。tag SerialMate-v0.1.1 指向 7a236a6,Release 附件 SerialMate-v0.1.1-win64.zip(63.6 MB)。

2.4 I2C-Inject — ⏸ 暂停开发(2026-09-25)

  • 已完成:RP2040 注入器固件(MicroPython,内置 viper 总线嗅探)、PC 端 GUI、 demo 板寄存器语义实测(0x606E bit5=镜像 D[7:0]、0x606D 整组顺序,逻辑分析仪 双色交叉验证)。
  • 状态:暂停开发,代码与固件保留备查,README 顶部有状态横幅;后续开发并入 I2C-Lab(2026-10-02,见 §2.5/§3.5)。

2.5 I2C-Lab — v0.1.0 已就绪(2026-10-02,待真机验收后发布)

  • 定位:I2C 总线监控调试台(原 §3.5 三合一需求的监控阶段);三区目录 + 双文档对齐全仓约定;I2C-Inject 定位为留档,本工具独立续接。
  • 固件(firmware/,pico-sdk C,PICO_BOARD=pico):单 PIO SM bus_watch (变沿即压 FIFO,push noblock,~40ns 分辨率)+ 核1 时间戳/解码状态机(语义 与 i2cdec.py 一致,含 56 字节长事务截断)+ 核0 USB CDC CLI(?/v/mon/ stats/wave/boot);250MHz/vreg 1.15V;边沿环 16k(wave 快照,暂停换一致性)
    • 事务环 256。
  • PC 端(src/):i2cdec.py(边沿→事务/T·W 行语法/CSV/参考编码器,自测 73 项全绿:100k/400k 往返+时间戳对齐、随机鲁棒、截断 L 标志)、probelink.py (行协议链路线程)、waveview.py(QPainter 波形:滚轮缩放/拖动/双击适配/ START-STOP 刻线/事务标签)、main.py(Fluent 双栏:串口卡/监控卡/事务表/ 波形卡/固件日志 + 演示模式)、theme/config 同源;selftest_gui.py 29 项全绿; build/package/publish 三件套适配(发布 zip 含 UF2)。
  • 构建链(本机打通并记录踩坑):pico-sdk 2.3.1(ghproxy 代理克隆)+ tinyusb 0.18.0(gitee 镜像)+ Arm GNU 13.3;pioasm 宿主编译用 ziglang (pip 装,预置 CMakeCache 分号列表法);UF2 用自制 make_uf2.py(objcopy→bin →UF2,往返自检 + 与真机 MicroPython UF2 逐字段核对一致),绕开 picotool 的 github 依赖。
  • 产物:I2C-Lab.exe(63.8MB)+ firmware/i2c_lab.uf2/.bin 保留本地 release/(交付物不入库,.gitignore 已挡,2026-10-13 起); zip/Release 待真机验收后走流水线(tag I2C-Lab-v0.1.0)。

2.6 仓库级基础设施 — 图标家族约定与统一生成器(2026-10-10)

  • icons/ 目录:README.md(风格与内容约定 + 应用点总表 + 新工具接入清单)
    • make_icon.py(六工具统一生成器,吸收 DLPilot/EDID-viewer/SerialMate/ I2C-Inject/FlashTool 五份分散脚本)+ preview.png 家族预览图。
  • 复现验证:--check 逐像素比对,DLPilot/EDID-viewer/SerialMate/I2C-Inject 全 SAME(EDID 的 134/116px 历史版式以显式 override 保真)。
  • 修正 I2C-Lab 图标:第二行自 I2C-Inject 复制 SVG 后一直误为 "Inject", 已改 "Lab"(png/ico/svg 重生成;exe 为入库旧图,下次 build_exe 打包生效)。
  • 发现待办(子模块内):FlashTool 图标 "FLASH" 146px 宽 485px 超出 436px 色块(两端黑字落黑底不可见),家族自适应规则可修正,但需在其原仓库执行并提交。
  • FilmForge 图标(2026-10-10):热压模具温控监视台(独立仓 E:\Hulk-Coding\FilmForge,GD32F4 固件 + GUI 上位机)按家族版式出图—— 上行 FILM/下行 Forge、青 #00C8D7(取自其温度曲线/主题青,按钮 #29F1FF 太亮故取深一档;与其 Dark 曲线配色常量一致),产物落在其 GUI/logos/filmforge.{png,ico,svg}(build_exe.py:30 预留路径); 并在其 GUI/app_fluent.py 补上运行时 setWindowIcon(_MEIPASS/_源码双路, 此前缺失),selftest_gui.py 48 项 ALL PASS。图标改动需在其原仓库提交。

3. 开发需求与计划(已提出、尚未实现)

3.1 DLPilot

  • 【待素材】校准图案(已完成,2026-10-13 bcb03e2):CeramixNano 系列 6 张 校准图(黑/白/caliPoint/circle_640p/contrast/Sharpness_XY_3)二进制直存 assets/+release/ 平铺(用户素材,无生成脚本),slots 栏位接入、 package_release 收集规则扩展;随 v0.4.3 之后的下次发布进 zip。
  • 【待真机帧·低优先】M305 回归向量是按协议推演的(selftest_rs485.py:90 起, 0x8CA0=36000mW 为推演值):真机功率显示已实测对接,仅剩把自测向量换成真机抓包, 让无硬件回归更贴近真机。
  • 【新需求·已确认可行(2026-09-25)】画面镜像(横/纵独立翻转,任意来源画面): 投影观看方向(正投/背投/吊装)需要源信号预先翻转。DLPC3421 原生支持——I2C 14h "写入显示图像方向"(b1=长轴翻转、b2=短轴翻转,两轴独立;15h 读回;b0 旋转仅竖排源 且 DLPC3421 不支持)。实施分两段:
    • 上游固件(协议权威在上游仓):dlpc3421.h 已定义 14h/15h 命令号但驱动未实现—— 照 dlpc3421_set/get_mirror_lock_control 模式补 set/get 函数,再暴露为 M 命令 (现有 M981~M983 是只读调试命令,可续编 M984=设置/M985=读取,命名以上游为准), 登记进 protocols.md;上电/软重启后是否自动恢复保存的方向由固件决定。 命名陷阱:现有 set/get_mirror_lock_control(39h"镜片锁定控制")是出厂 DMD 接口锁定校准用,不是图像镜像,勿混用。
    • 上位机 DLPilot:dlpc_rs485.py 加命令封装,光机卡加"水平镜像/垂直镜像"开关并 读回回显;用方向不对称图案(如 bw_sweep/文字图)实测确认长轴/短轴与横/纵的对应。
    • 备选(若固件暂不动):DLPilot 自投图案/自定义图片可在 Qt 渲染时翻转(仅覆盖测试 内容);任意桌面内容 Windows 标准 API 只有 180°(=两轴同时),单方向翻转做不到。

3.2 EDID-Viewer

  • EDID 对比、字节差异与固件数组导出。
  • HDMI Forum VRR/ALLM/FRL/DSC、DisplayID 与高级色彩数据解析(第一版有意不解, 保留原始块供分析)。
  • 与实际输出时序和桥接芯片寄存器联合诊断。
  • 实机验收缺口:HDMI 热插拔、多屏、跨屏 DPI、最大化/恢复与导入导出完整交互 (见 EDID-viewer/VALIDATION.md)。

3.3 SerialMate

  • 【待真机】光机实机收发与温度曲线实测(M201 ×0.1 提取),当前仅回环验证。
  • 【无图标】assets/serial-mate.ico 未生成(已生成并随家族统一,见 §2.6)。
  • 发送批处理脚本化(延时/循环/等待应答);曲线数据导出 CSV。

3.4 I2C-Inject

  • 并入 I2C-Lab 路线(见 §3.5);本目录不再单列计划。

3.5 I2C-Lab 后续阶段(2026-10-02 起续接,监控已就绪见 §2.5)

  • 【下一阶段】主机模式:probe 作 I2C 主机——总线扫描(scan)、读写 (wr/rd),复活 I2C-Inject 择机注入语义(静置窗口避让主控轮询/重试/读回 校验);GUI 加寄存器读写卡。硬件 I2C 与嗅探 PIO 可并存(先停监控再发射, 或 PIO 分频采样回看自身发射)。
  • 【规划】从机模拟:RP2040 硬件 I2C 从机模式 + PC 端应答表(寄存器值/ 回调),顶替传感器验证主机驱动。
  • 【监控增强】协议语义插件(LT8619C bank/寄存器注释)、触发抓取、长记录 落盘、SMBus PEC/10bit 地址注记、波形按事务着色。
  • 【待真机验收 v0.1.0】清单见 I2C-Lab/AGENTS.md §3(枚举/实听/注入对照/ 400kHz 波形/30min 稳定性),验收后打 tag 发布。
  • 平台结论(2026-09-30 沿用):固件 pico-sdk C(MicroPython 无从机 API、 嗅探无法实时流式);硬件 2× BPI-Pico-RP2040 + 2× JI2C;GP8=SDA GP9=SCL、 USB CDC =/! 回显、挂 live 板只接 GND/SDA/SCL 不加上拉——均已落地。

3.6 明确不做(决策,非待办)

  • 0x606E 的 0x40/0x80 位交换不再单独实测(2026-09-25 用户确认:当前行为正常、 符合预期,bit5 实测基线已够用;原【待硬件】项关闭)。
  • TI 原始 I2C 命令透传不做:GD32 网关固件只收 ASCII M 命令集(v0.2.0 显式决策)。
  • DLPilot 不引入 pyserial/Pillow 硬依赖:保持 try-import + HAS_* 标志 + 缺失降级。
  • EDID-Viewer 不承诺实时 DDC 抓取:数据来自 Windows/显卡驱动,可能缓存或覆盖。

4. 决策史:时间线与踩坑(勿重蹈)

阶段 0 · 寄存器语义实测期(09-03):I2C-Inject + HDMI-Tool 首版落库;0x606E 位交换 / 0x606D 整组顺序经 demo 板 LA 双色交叉实测确立(la_wave_analyzer*.py 即该过程产物)。

阶段 1 · 工程化与发布流水线(09-10):确立三区目录 + 双文档;打通 build_exe → package_release → publish_gitea,发布 HDMI-Tool v0.1.0。

阶段 2 · 光机 RS485 控制集成(09-11,v0.2.0):新增 dlpc_rs485.py(帧构造/ 增量解析/译码表/DLPC485 链路类,模式照搬 I2C-Inject 的 Injector);启动拓扑改智能判定。

阶段 3 · GUI 重构与产品化(09-12,v0.3.0):CustomTkinter 双栏仪表盘 (规格 UI参考布局.svg);更名 HDMI-Tool → DLPilot;TEC 控制与温度实时显示。

阶段 4 · 体验打磨(09-14,v0.3.1~0.3.3):投屏退出语义两轮更名;标题栏版本号; 修复 USB 拔出后同参数重连失效。

阶段 5 · 电源检查卡(09-1718,v0.3.40.3.6):电源自检状态机、功率检测、 M30x 二进制载荷封装(详见踩坑 1~3、10)。

阶段 6 · DLPilot Fluent UI 重写(09-24,v0.4.0):PySide6-Fluent-Widgets 替换 CustomTkinter;补齐折叠、PD 状态颜色、Light 调色板与 Qt 单文件 DLL 加载。

阶段 7 · EDID-Viewer 独立成工具(09-23~25,v0.1.0):从 DLPilot 的源端 EDID 需求独立;目录与流水线对齐;同期 I2C-Inject 标记暂停开发,根 README/agent.md 按三工具更新。

# 问题 最初做法 → 最终做法 / 教训
1 电源自检成功判定 先按 ASCII ok 前缀判成功 → 实机 M301 回包 payload=PD 无前缀被误判错误(9772a2b)→ 改按帧 TYPE=0xF0 译码分类。教训:M30x 系列回包不能按文本判
2 功率值来源 先用 M303×M304 计算 P=UI 占位显示(2b7d103)→ 固件提供 M305 直读 u32 mW 后改为三步序列直读(9b29b6a)
3 二进制载荷三连坑 ① Frame.payload 解出乱码 → 用 payload_bytes() 取原始字节;② M305 是 LEN=4,复用双字节解析会错 → 按 kind 校验长度;③ 日志行含 NUL 复制被截断 → 二进制载荷日志行以 hex 展示(e354423)
4 "串口断不开" 表象是断开逻辑 bug,实际根源是双实例互抢串口 → 单实例锁 + 串口占用提示(e87bf14)
5 窗口最大化卡顿 CTkScrollableFrame+40 余个逐行 Label 最大化逐控件重绘 → 换 CTkTextbox 整体重排,开销低一个量级(30bc224)
6 启动强制扩展拓扑 无条件 SetDisplayConfig 会打扰用户自选拓扑 → 仅当未激活显示器 EDID 厂商字节为转接板签名 61 93("XLS") 时才拉回(d9ecff4)
7 GUI 框架 tkinter → CustomTkinter(84838e3)→ v0.4.0 PySide6-Fluent-Widgets;旧文件仅供历史对照
8 投屏退出按钮文案 "恢复桌面"→"停止投屏"→"停止测试图像"(3f35ad2→b167ce3):最终语义是关测试图窗口,与拓扑恢复无关
9 USB 拔出后重连失效 掉线分支未清 _open_key,重连被"参数未变"跳过 → 掉线同步清缓存(51e2f1c)
10 电源自检卡死 帧路由引用未定义变量 payload(3f36ead),改名/重构时注意帧回调作用域
11 Gitea 发布 urllib 间歇 SSL: UNEXPECTED_EOF → 必须 --insecure;/releases/tags/{tag} 的 assets 是纯数组而 /releases/{id} 是 {items:[...]},publish_gitea.py 已兼容两种形状,勿"简化";自动重试已加(f0f8073)
12 Fluent Light 主题发黑 只调 setTheme 仅刷新 Fluent 控件,QMainWindow/原生 QTabWidget/QStatusBar/标题栏仍跟系统深色 → 三件套:setTheme + QPalette/应用级 QSS + DWM 属性 20/35/36(EDID-Viewer theme.py,DLPilot 同源)
13 PyInstaller 传 .spec 报错 给 .spec 再传 --specpath 报 "makespec options not valid" → spec 由 build_exe.py 生成后只传 distpath/workpath
14 onefile 冒烟"没窗口" onefile 引导父进程 MainWindowTitle 恒为空,轮询父进程误判失败 → 按进程名找子进程窗口(EDID-Viewer 实测 ~2s 起窗)
15 PySide6 6.11 实例级枚举访问 手工 cursor 裁剪 cursor.Start 在 6.11 必抛 AttributeError(实例级访问被移除,类级简写 Qt.Xxx 仍可用);槽内异常不崩溃只静默失败,还会打断同函数后半段与外层消费循环 → 日志裁剪一律用 setMaximumBlockCount,队列消费逐事件兜底 try/except。DLPilot v0.4.2 中雷(v0.4.3 修),SerialMate v0.1.0 末期同案

5. 快速上手(完整规程见各工具 AGENTS.md)

# DLPilot(完整清单:DLPilot/AGENTS.md §5/§7)
cd DLPilot/src
python -m compileall -q . ; python selftest_rs485.py   # 编译检查 + 光机协议回归
python hdmi_gui.py --seconds 5                         # GUI 冒烟
python build_exe.py ; python package_release.py 0.4.0  # 打包 + 组装 zip
python publish_gitea.py ../release/DLPilot-v0.4.0-win64.zip --replace --insecure

# EDID-Viewer(完整清单:EDID-viewer/AGENTS.md)
cd EDID-viewer/src
python -m unittest                                     # 9 项解析测试(改 edid.py 后必跑)
python build_exe.py ; python package_release.py 0.1.0  # 打包 + 组装 zip
python publish_gitea.py ../release/EDID-Viewer-v0.1.0-win64.zip --insecure

# SerialMate(完整清单:SerialMate/AGENTS.md)
cd SerialMate/src
python selftest.py ; python selftest_loop.py           # 协议回归 + 链路回环(改协议/链路后必跑)
python main.py --seconds 5                             # GUI 冒烟
python build_exe.py ; python package_release.py 0.1.0  # 打包 + 组装 zip
python publish_gitea.py ../release/SerialMate-v0.1.0-win64.zip --insecure

# I2C-Lab(完整清单:I2C-Lab/AGENTS.md)
cd I2C-Lab/src
python selftest.py ; python selftest_gui.py            # 解码回归 + GUI 结构自检(改 i2cdec/main 后必跑)
python main.py --seconds 5 --demo                      # GUI 冒烟(演示模式, 无硬件)
python build_exe.py ; python package_release.py 0.1.0  # 打包 + 组装 zip(含固件 UF2)
python publish_gitea.py ../release/I2C-Lab-v0.1.0-win64.zip --insecure

上游协议/寄存器语义问题先查上游仓 protocols.md 与 doc/architecture/; 本仓改动约束以两个工具的 AGENTS.md 为准——其中领域语义的测试值 (55/AA/FF、640x360、800x600@60)有明确用途,勿顺手改。