Author SHA1 Message Date
hulk 8497b1979a chore: 移除临时诊断脚本 2026-09-14 15:44:27 +08:00
hulk 05e4f3ae92 chore(DLPilot): v0.3.2 打包(exe 含标题栏版本号, 停止测试图像更名) 2026-09-14 15:44:04 +08:00
hulk 059ce6a540 feat(DLPilot): 标题栏显示版本号(与关于弹窗同源 APP_VERSION) 2026-09-14 15:37:10 +08:00
hulk b167ce3401 feat(DLPilot): '停止投屏'更名'停止测试图像'; 版本 0.3.2; 清理残余 HDMI-Tool 引用 2026-09-14 15:30:58 +08:00
hulk a6721415a6 chore: 文件夹更名 HDMI-Tool -> DLPilot(路径与文档此前已对齐) 2026-09-14 15:25:05 +08:00
hulk f0f8073afc fix(DLPilot): publish_gitea 请求自动重试(实例 TLS 间歇性 SSL EOF) 2026-09-14 15:12:16 +08:00
hulk 3f35ad2c21 feat(DLPilot): '恢复桌面'更名'停止投屏'; 版本 0.3.1 2026-09-14 15:02:54 +08:00
hulk c1a5712f76 fix(DLPilot): 投屏退出体验 — 替换语义 + 一键恢复桌面 2026-09-14 14:55:30 +08:00
hulk 8e8811a4a0 merge: DLPilot v0.3.0 — CustomTkinter 双栏界面重构 + 光机串口参数化 + TEC 控制 2026-09-12 03:45:46 +08:00
hulk b70cf102fd feat(DLPilot): 图标更新为 DLP/Pilot 双行设计; 图案栏位两排各 5 个等宽 2026-09-12 03:28:52 +08:00
hulk b36dd3911f style(DLPilot): 关于弹窗补作者/硬件正式命名; 卡片标题行垂直居中 2026-09-12 03:21:20 +08:00
hulk cda1e72f17 feat(DLPilot): 关于按钮 + 外观默认 System + 校准图案行压缩 2026-09-12 03:15:07 +08:00
hulk 744fbfd298 feat: 产品更名 DLPilot(3D 光固化光机调试台) + 按标记调整界面 2026-09-12 03:05:32 +08:00
hulk 90433064ec fix(HDMI-Tool): 下拉菜单配色统一为深色主题 2026-09-12 02:36:46 +08:00
hulk 68c7909922 style(HDMI-Tool): 按用户标记统一左列高度与温度实时显示 2026-09-12 02:19:51 +08:00
hulk e131646156 feat(HDMI-Tool): 光机串口参数可选(默认8-N-1) + TEC 控制与温度读取 2026-09-12 02:07:26 +08:00
hulk 96df14caea chore(HDMI-Tool): exe 重新打包(串口下拉贯通+8-N-1 参数标注) 2026-09-12 01:50:51 +08:00
hulk d92156e0cd style(HDMI-Tool): 串口下拉贯通卡片宽度; 参数行补全 8-N-1(板卡固件固定标注) 2026-09-12 01:50:15 +08:00
hulk f549ddf48b style(HDMI-Tool): 按用户标记微调 CTk 界面 2026-09-12 01:42:01 +08:00
hulk 84838e3e74 feat(HDMI-Tool): CustomTkinter 双栏仪表盘界面重构(feature/ctk-ui) 2026-09-12 01:30:50 +08:00
hulk 1a9927d9bb feat(HDMI-Tool): 光机串口下拉显示设备描述, CH344 多路口可辨 2026-09-11 00:46:03 +08:00
hulk 22d0969569 chore(HDMI-Tool): package_release 平铺复制图案/说明到 release/ — 与 zip 内容一致, 文件夹开箱即用 2026-09-11 00:40:48 +08:00
hulk d9ecff4e49 fix(HDMI-Tool): 启动拓扑改智能判定 — 仅转接板(XLS)未激活时强制扩展, 家里仅第二屏零打扰 2026-09-11 00:37:48 +08:00
hulk 2459b33162 feat(HDMI-Tool): v0.2.0 集成光机控制(RS485→GD32网关→DLPC3421) — 本地提交, 待验证后再推送发布 2026-09-11 00:25:28 +08:00
hulk efaf4d658f docs(HDMI-Tool): AGENTS.md 记录本机已持久化 GITEA_TOKEN 用户级环境变量 2026-09-10 23:55:10 +08:00
hulk a14e3e7621 fix(HDMI-Tool): publish_gitea 兼容 assets 纯数组返回; 文档补记本实例需 --insecure 2026-09-10 23:51:39 +08:00
hulk a1f6fdd34a refactor(HDMI-Tool): 划分 src/assets/release 三区目录, 补齐人读/AI 读双文档与发布流水线 2026-09-10 23:44:56 +08:00
hulk 0977b275ee feat: HDMI-Tool 启动时强制扩展显示拓扑 + 收录波形/注入脚本 2026-09-10 19:47:39 +08:00
hulk 736b43efe4 feat(I2C-Inject): 归档 RP2040 固件到 mcu-rp2040 并补齐说明 2026-09-03 17:33:17 +08:00
hulk d0cefeebf3 feat: HDMI-Tool 与 I2C-Inject 首版工具集 2026-09-03 17:24:33 +08:00
60 changed files with 26 additions and 18 deletions
-1
View File
@@ -8,7 +8,6 @@ dist/
*.spec *.spec
# 发布 zip: 可由 src/package_release.py 重新生成, 只上传 Gitea Release # 发布 zip: 可由 src/package_release.py 重新生成, 只上传 Gitea Release
HDMI-Tool/release/*.zip
DLPilot/release/*.zip DLPilot/release/*.zip
# ZCode 客户端本地会话数据(计划留档等), 非项目配置 # ZCode 客户端本地会话数据(计划留档等), 非项目配置
+1 -1
View File
@@ -61,7 +61,7 @@ DLPilot/
1. 左上显示器下拉选择目标屏(多屏时注意别选成主屏),"刷新"重新枚举; 1. 左上显示器下拉选择目标屏(多屏时注意别选成主屏),"刷新"重新枚举;
2. **切分辨率**:"支持的模式"卡片里选模式 → "应用";测完点"恢复"; 2. **切分辨率**:"支持的模式"卡片里选模式 → "应用";测完点"恢复";
3. **投测试图**:"测试图案"卡片先选**测试卡区域**(640x360 / 800x600 / full)→ 3. **投测试图**:"测试图案"卡片先选**测试卡区域**(640x360 / 800x600 / full)→
点图案按钮全屏投放(新图案自动替换旧图案),按 **ESC** 或点"停止投屏"退出; 点图案按钮全屏投放(新图案自动替换旧图案),按 **ESC** 或点"停止测试图像"退出;
R/G/B 纯色按钮(55/AA/FF,按通道着色) R/G/B 纯色按钮(55/AA/FF,按通道着色)
用于 RGB 位交换类测试;自定义图片点齿轮按钮配置(图片自动复制到 exe 旁), 用于 RGB 位交换类测试;自定义图片点齿轮按钮配置(图片自动复制到 exe 旁),
"校准图案"一排为 3D 光固化测试/校准图预留槽位; "校准图案"一排为 3D 光固化测试/校准图预留槽位;

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.
@@ -61,7 +61,7 @@ DLPilot/
1. 左上显示器下拉选择目标屏(多屏时注意别选成主屏),"刷新"重新枚举; 1. 左上显示器下拉选择目标屏(多屏时注意别选成主屏),"刷新"重新枚举;
2. **切分辨率**:"支持的模式"卡片里选模式 → "应用";测完点"恢复"; 2. **切分辨率**:"支持的模式"卡片里选模式 → "应用";测完点"恢复";
3. **投测试图**:"测试图案"卡片先选**测试卡区域**(640x360 / 800x600 / full)→ 3. **投测试图**:"测试图案"卡片先选**测试卡区域**(640x360 / 800x600 / full)→
点图案按钮全屏投放(新图案自动替换旧图案),按 **ESC** 或点"停止投屏"退出; 点图案按钮全屏投放(新图案自动替换旧图案),按 **ESC** 或点"停止测试图像"退出;
R/G/B 纯色按钮(55/AA/FF,按通道着色) R/G/B 纯色按钮(55/AA/FF,按通道着色)
用于 RGB 位交换类测试;自定义图片点齿轮按钮配置(图片自动复制到 exe 旁), 用于 RGB 位交换类测试;自定义图片点齿轮按钮配置(图片自动复制到 exe 旁),
"校准图案"一排为 3D 光固化测试/校准图预留槽位; "校准图案"一排为 3D 光固化测试/校准图预留槽位;

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -34,7 +34,7 @@ BOLD = ('Microsoft YaHei UI', 13, 'bold')
TITLE_FONT = ('Microsoft YaHei UI', 18, 'bold') TITLE_FONT = ('Microsoft YaHei UI', 18, 'bold')
APP_NAME = 'DLPilot' APP_NAME = 'DLPilot'
APP_VERSION = '0.3.1' APP_VERSION = '0.3.2'
REPO_URL = 'https://gitea.hulk.wang/hulk/LT8619C_Debug_Tools' REPO_URL = 'https://gitea.hulk.wang/hulk/LT8619C_Debug_Tools'
@@ -67,7 +67,8 @@ def run_gui(auto_close=0):
class App(ctk.CTk): class App(ctk.CTk):
def __init__(self, auto_close=0): def __init__(self, auto_close=0):
super().__init__() super().__init__()
self.title('DLPilot — 3D 光固化光机调试台 (EDID · 测试图案 · RS485 光机控制)') self.title(f'DLPilot v{APP_VERSION} — 3D 光固化光机调试台 '
f'(EDID · 测试图案 · RS485 光机控制)')
try: # 任务栏独立分组 try: # 任务栏独立分组
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('hulk.DLPilot') ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('hulk.DLPilot')
except Exception: except Exception:
@@ -210,8 +211,8 @@ class App(ctk.CTk):
self.edid_scroll.pack(fill='both', expand=True) self.edid_scroll.pack(fill='both', expand=True)
# -- 测试图案 -- # -- 测试图案 --
card, c = self._card(col,'测试图案 — 黑底 1:1 居中, 投屏按 ESC 或"停止投屏"退出', card, c = self._card(col,'测试图案 — 黑底 1:1 居中, 投屏按 ESC 或"停止测试图像"退出',
button='停止投屏', command=patterns.close_all) button='停止测试图像', command=patterns.close_all)
card.grid(row=3, column=0, sticky='ew', pady=(10, 0)) card.grid(row=3, column=0, sticky='ew', pady=(10, 0))
row1 = ctk.CTkFrame(c, fg_color='transparent') row1 = ctk.CTkFrame(c, fg_color='transparent')
row1.pack(fill='x') row1.pack(fill='x')
@@ -5,7 +5,7 @@
================================================================ ================================================================
配合 demo 板当前 EDID 首选时序 800x600@60, 全屏纯色输出。 配合 demo 板当前 EDID 首选时序 800x600@60, 全屏纯色输出。
用法: python gen_solid_colors.py → 输出到 ../assets/solid_*.png 用法: python gen_solid_colors.py → 输出到 ../assets/solid_*.png
在 HDMI-Tool 中通过自定义栏位(⚙ 换图)加载, 发布包随附。 在 DLPilot 中通过自定义栏位(⚙ 换图)加载, 发布包随附。
""" """
import os import os

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

@@ -23,6 +23,7 @@ import re
import ssl import ssl
import subprocess import subprocess
import sys import sys
import time
import urllib.error import urllib.error
import urllib.request import urllib.request
import uuid import uuid
@@ -59,7 +60,10 @@ class Api:
self.headers = {'Authorization': f'token {token}'} self.headers = {'Authorization': f'token {token}'}
self.ctx = ssl._create_unverified_context() if insecure else None self.ctx = ssl._create_unverified_context() if insecure else None
def request(self, method, path, data=None, headers=None): def request(self, method, path, data=None, headers=None, retries=4):
"""发请求; 实例 TLS 间歇性抽风(SSL UNEXPECTED_EOF), 连接级错误自动重试"""
last = None
for attempt in range(retries):
req = urllib.request.Request(self.api + path, data=data, method=method, req = urllib.request.Request(self.api + path, data=data, method=method,
headers={**self.headers, **(headers or {})}) headers={**self.headers, **(headers or {})})
try: try:
@@ -68,6 +72,10 @@ class Api:
return resp.status, json.loads(body) if body else None return resp.status, json.loads(body) if body else None
except urllib.error.HTTPError as e: except urllib.error.HTTPError as e:
return e.code, json.loads(e.read() or b'{}') return e.code, json.loads(e.read() or b'{}')
except (urllib.error.URLError, ssl.SSLError, OSError) as e:
last = e
time.sleep(1.0 + attempt)
raise RuntimeError(f'Gitea 请求连续 {retries} 次失败: {last}')
def get_json(self, path): def get_json(self, path):
status, data = self.request('GET', path) status, data = self.request('GET', path)
Binary file not shown.
+1 -1
View File
@@ -12,7 +12,7 @@ PORT = sys.argv[1] if len(sys.argv) > 1 else 'COM9'
FULL = len(sys.argv) > 2 and sys.argv[2].lower() == 'full' FULL = len(sys.argv) > 2 and sys.argv[2].lower() == 'full'
BANK, REG = '60', '6E' BANK, REG = '60', '6E'
STEPS = [ # (写值, 含义, 写入后 HDMI-Tool 应投的图, LA 预期变化 vs 基线) STEPS = [ # (写值, 含义, 写入后 DLPilot 应投的图, LA 预期变化 vs 基线)
('00', '关闭交换(基准)', 'solid_0000AA / solid_000055', ('00', '关闭交换(基准)', 'solid_0000AA / solid_000055',
'D0:AA=13%/55=84%, D1:AA=72%/55=0.9% (基线)'), 'D0:AA=13%/55=84%, D1:AA=72%/55=0.9% (基线)'),
('80', 'B通道镜像', 'solid_0000AA', ('80', 'B通道镜像', 'solid_0000AA',