Skip to content

TenoDX 串口自动配置工具 ​

把 TenoDX 控制器按 1P / 2P 角色和 HID / IO 模式固定到不同 COM 口号。

角色模式TouchLEDAimeDebug
1PHIDCOM3COM21COM1COM25
2PHIDCOM4COM23COM2COM26
1PIOCOM13COM21COM1COM25
2PIOCOM14COM23COM2COM26

IO 模式下,游戏内 mod 只连接两块主控的 Touch 口(COM13 / COM14), 按键和触摸都由该 CDC0 复合帧传输。

用法 ​

方式一:双击 exe(推荐)

text
dist\TenoDXSetComPorts.exe

点「一键配置」即可。改口号需要管理员权限,工具会弹 UAC 请求提权。 提权后的结果会同时写入 set_com_ports.log,便于排查 UAC 子进程问题。

方式二:命令行

powershell
py -3.14 set_com_ports.py --list      # 只读:列出检测结果
py -3.14 set_com_ports.py --list --role 1p --mode io
py -3.14 set_com_ports.py --selftest  # 验证 IP/2P、HID/IO 口号方案
py -3.14 set_com_ports.py --apply     # 单板按 1P 配置,双板默认 1P/2P
py -3.14 set_com_ports.py --apply --role 2p
py -3.14 set_com_ports.py --apply --mode io
py -3.14 set_com_ports.py --apply --serial <NS> --role 2p --mode io
py -3.14 set_com_ports.py --restore   # 清除固定口号,交回系统重新分配
py -3.14 set_com_ports.py --apply --restart           # 额外尝试 pnputil 重启,慎用

打包 exe

powershell
powershell -ExecutionPolicy Bypass -File .\build.ps1

实现原理 ​

不改驱动、不碰硬件,走 Windows 官方设备树机制:

  1. 设备实例路径形如 USB\VID_0483&PID_5740&MI_0X\<instance>; 串口号存在该实例的 Device Parameters\PortName。
  2. 用 cfgmgr32 的 CM_Set_DevNode_PropertyW(DEVPKEY_Device_PortName) 写入; 若该属性键在目标系统上不可用,回退到直接写注册表 HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_0483&PID_5740&MI_0X\<instance>\Device Parameters\PortName (设备管理器「端口设置 → 高级」改的就是这个值)。
  3. 默认只写注册表,不自动移除设备。部分 usbser 驱动在 pnputil /restart-device 后不会自动回枚举,因此工具提示拔插一次 USB; 只有显式加 --restart 才会尝试自动重启。
  4. 每步之后回读注册表确认真的生效,不是"以为写成功了"。

行为细节 ​

  • 只处理当前在线的板子:历史(幽灵)设备实例不会被改动。 插拔过不同 USB 口的板子会在注册表里留下多条实例,工具只挑在线的那条。
  • 口号被占用时自动让位:如果目标口号(如 COM3)当前被同一块板子的另一个接口占着, 先把占用者释放,再分配给目标接口。
  • 多块板子同时在线:GUI 按检测顺序默认第一块 1P、第二块 2P,可用 「交换 1P/2P」纠正;CLI 用 --serial <NS> 和 --role 指定。
  • 两套角色的目标口号互不重叠,因此两台主控可以同时固定。
  • 幂等:已经是目标口号就跳过,可以反复点。
  • --restore 删除 PortName,拔插一次 USB 后 Windows 会重新分配口号。

环境要求 ​

  • Windows 10/11
  • 管理员权限(写 HKLM 设备树)
  • 图形界面需要 tkinter(CPython 官方安装包自带)
  • 仅打包 exe 时需要 PyInstaller

常见问题 ​

现象原因 / 处理
提示"未检测到在线的 TenoDX 控制器"板子没插好,或驱动没装(设备管理器应能看到 4 个「USB 串行设备」)
提示"没有权限(需要管理员)"没提权。右键"以管理员身份运行",或在 UAC 弹窗里点是
配置成功但口号没变拔插一次 USB,让 usbser 重新读取注册表里的 PortName
口号变了但上位机连的是老口号先确认该口号已经出现在设备管理器的 COM 列表,再重开上位机

文件说明 ​

文件说明
set_com_ports.py工具本体(GUI + CLI,无第三方依赖,只用标准库 ctypes/tkinter/winreg)
build.ps1PyInstaller 打包脚本,产出 dist\TenoDXSetComPorts.exe
README.md本文件

TenoDX · 内部文档