310 lines
24 KiB
Markdown
310 lines
24 KiB
Markdown
# 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 等交付物一律不入库**(2026-10-13 起
|
||
`.gitignore` 全局挡 `*.exe`;历史 39 个 exe blob 已用 git filter-repo 清除,
|
||
仓库 1.1 GiB → ~1 MB (pack 实测)),发布只上传 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`
|
||
指向 `296e220`(历史哈希为 filter-repo 重写前记录)。详见 `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` 指向 `e5b2e45`(历史哈希为重写前记录),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 `74469cf`):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-17~18,v0.3.4~0.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)
|
||
|
||
```powershell
|
||
# 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)有明确用途,勿顺手改**。
|