kitepon-rgb/OpenDS360
GitHub: kitepon-rgb/OpenDS360
一款非官方的 Windows 托盘应用,通过逆向工程的 USB HID 协议将 CPU/GPU 温度实时显示在 PCCooler CPS DS360 水冷水泵头的数码管屏幕上。
Stars: 0 | Forks: 0
# OpenDS360
[](https://github.com/kitepon-rgb/OpenDS360/actions/workflows/ci.yml)
[](https://github.com/kitepon-rgb/OpenDS360/releases/latest)
[](https://github.com/kitepon-rgb/OpenDS360/releases)
[](https://github.com/kitepon-rgb/OpenDS360/releases/latest)
[](LICENSE)
由 [kitepon.dev](https://kitepon.dev/) 的 [Quo](https://x.com/QLyun35332) 构建并维护。
## 这适合你的散热器吗?
**市面上有两款完全不同的散热器都以“DS360”的名义销售。** 它们除了名字一样之外,毫无共同之处。
| 你的水泵头显示为 | 这是 |
|---|---|
| **纯数字**,采用白色七段数码管样式 | **匹配。** 请继续阅读 |
| 图像、动画或彩色仪表盘 | 2.4英寸 LCD 型号,使用完全不同的协议 |
| 状态 | 型号 | 备注 |
|---|---|---|
| ✅ **已验证** | PCCooler **CPS DS360 WH** | 已在真实硬件上测试。由 Scythe 在日本作为 `DS360-WH` 发售 |
| 🟡 **可能支持,未验证** | CPS DS360 BK 及其他 **3½位七段数码管** 同系列产品 | 据目前所知,它们使用相同的 ODM 和控制板。[欢迎反馈](#report-your-hardware) |
| 🟡 **可能支持,未验证** | 其他品牌由 APALTEK 制造的七段数码管 AIO 散热器 | APALTEK 未公开其客户名单 |
| ❌ **不支持** | CPS DS360 **Display**、DC360 Pro 及其他 **2.4英寸 LCD** 型号 | 完全不同的协议 |
| ❌ **不支持** | PCCooler GT360 | 640×480 分辨率下的 CDC-ACM。[另一个项目支持它](https://github.com/NextWork123/PCCoolerGT360-Display) |
### 识别设备
```
VID 0x2E3C / PID 0x0A15
Product string: LIQUID COOLER DIGITAL DISPLAY - PCC
```
`0x2E3C` 属于 **ARTERY Technology(一家微控制器供应商)** —— 而不属于散热器。APALTEK 复用了其所搭载 MCU 的 VID,因此不相关的产品(USB 测试仪、无线电设备)也会响应相同的 VID。OpenDS360 在写入任何内容之前也会匹配产品字符串,因此它不会与仅仅是 VID 相同的设备进行通信。
## 安装
1. 从 [Releases](https://github.com/kitepon-rgb/OpenDS360/releases/latest) 下载安装程序并运行。
2. 如果你需要获取 **CPU** 温度,请安装 [PawnIO](https://pawnio.eu/):
winget install namazso.PawnIO
3. OpenDS360 启动后会驻留在系统托盘。右键点击或双击图标即可打开设置。
.NET 运行时已内置于安装程序中,因此无需额外安装任何其他内容。
### 为什么需要 PawnIO
CPU 温度存在于 MSR(模型特定寄存器)中,普通程序无法读取这些特权寄存器。要访问它们需要内核驱动程序。
PawnIO 是开源且**已签名**的,并且它在**保持 HVCI 开启**的情况下即可工作 —— 你机器的保护机制将保持原样。旧的 `WinRing0` 驱动程序因 [CVE-2020-14979](https://nvd.nist.gov/vuln/detail/CVE-2020-14979) 被列入微软的黑名单,并在当前系统上无法运行。
**GPU 温度无需 PawnIO 即可正常工作。** 如果没有它,CPU 读数将返回为 `0`,但其他一切功能仍会继续运行。
## 显示效果
**开机动画**([`StartupEffect.cs`](src/OpenDS360/Display/StartupEffect.cs))会停留在刚刚测得的温度值上,因此每次结束的位置都不一样。
| 阶段 | 效果 |
|---|---|
| 自检 | `188` 点亮所有段,然后闪烁 —— 就像仪器上电自检时的表现 |
| 扫描 | `0` → `199` 扫描两次,每帧 10 ms,速度快到看起来像一条移动的光带 |
| 减速 | 扫描速度逐渐放缓,并刚好停在目标值之前 |
| 过冲 | 超过目标值后回弹,并且摆动逐渐衰减 —— 就像模拟仪表指针的物理运动 |
| 确认 | 短暂闪烁后,读数固定 |
显示屏能够跟上 10 ms 一次的更新而不掉帧,这正是实现上述效果的基础。这是一个实测的数值,而非假设。
**阈值闪烁。** 设置一个温度值,当读数达到该值时显示屏就会闪烁。报告中的字节 `[3]` 会直接驱动硬件闪烁;而原厂软件将该字节留空为零,从未使用过它。
## 设置
| 设置项 | 选项 |
|---|---|
| 温度来源 | CPU 封装 / **CPU CCD 最高温度** / GPU |
| 单位 | 摄氏度 / 华氏度 |
| 闪烁阈值 | 达到或超过此温度时闪烁(`0` 表示禁用) |
| 开机动画 | 开 / 关 |
| 开机自启 | 注册一个登录任务 |
**CPU CCD 最高温度** 适用于各个 CCD 温度差异巨大的芯片 —— 例如在 Ryzen 9 9950X3D 上,CCD1 为 70 °C 而 CCD2 为 48 °C 是很常见的。封装温度会平均掉这种差异;而 CCD 最高温度则会显示出较热的那个核心。
设置保存在 `%APPDATA%\OpenDS360\settings.json` 中。
### 开机自启
OpenDS360 需要管理员权限,如果在 `HKCU\...\Run` 下添加项目,每次登录时都会触发 UAC 提示。相反,它会注册一个 **Task Scheduler** 任务并设置为以最高权限运行,这样启动时就不会出现提示。
## 设计决策
该散热器自带 `DeviceMonitorPcc` 软件。通过分析该二进制文件,解决了一些关于 OpenDS360 应该如何运行的问题。
| 原厂软件中观察到的行为 | OpenDS360 的做法 |
|---|---|
| FTP 凭据以纯文本形式存在于可执行文件中,并且每次启动时都会尝试进行普通的 FTP 连接 | **完全不进行任何网络连接** |
| 在 `HKLM\...\Run` 中写入登录项,该位置需要管理员权限 | 在当前用户下注册一个 Task Scheduler 任务 |
| “关于”对话框中报告的硬件和固件版本从未真正向设备请求过 | 仅显示从设备读取的值 |
| 发布版本中附带调试版 CRT (`ucrtbased.dll`) | 发布正式的发布版本 |
| 代码签名证书已于 2025-02-27 过期 | 未签名分发,但公开了源代码,并在每个发布资产上提供了 SHA-256 摘要 |
此外,全程序遵循以下两条规则:
- **故障可见。** 损坏的设置文件将使用默认值启动应用;*保存* 失败会向你报告,而不会被默默忽略。
- **绝不写入 Report ID `0xF0` / `0xF1`。** 它们似乎是固件更新通道,错误写入可能会导致散热器变砖。
## 通信协议
[**docs/PROTOCOL.md**](docs/PROTOCOL.md) 记录了全部细节 —— 报告结构、字节语义、测得的极限以及一些仍未知的部分。公开这些信息是为了让下一个拆解此类显示屏的人,能够跳过面对空白抓包窗口从头分析的阶段。
```
[0] 0x20 report ID
[1] 0x01 command: update
[2] unit — 0 = Celsius, 1 = Fahrenheit
[3] blink — 0 = steady, non-zero = blink
[6] the number on the display
```
以下四项发现决定了一个实现方案是否可行:
- **每 0.5 秒不间断发送。** 一旦数据流中断,看门狗就会使显示屏熄灭。几乎所有的“显示屏会随机关闭”的问题追溯起来都是这个原因。
- **限制在 0–199 之间。** 百位只是半个数字(半位)。如果发送 `200`,显示屏只会显示 `99`。
- **在 PC 端转换为华氏度** —— `floor(C * 9 / 5 + 32)`。字节 `[2]` 控制的是单位标签,而不是进行转换。
- **无法独立控制单个段。** 在得出结论之前,我们扫描了报告描述符中的每一个通道以及 `0x20` 的每一个字节。
## 构建
```
# 独立单可执行文件
dotnet publish src/OpenDS360 -c Release -o dist/app
# Installer (需要 Inno Setup 6)
ISCC.exe installer/OpenDS360.iss
```
Trimming 保持关闭状态:LibreHardwareMonitorLib 通过反射来解析硬件实现,而修剪工具会悄无声息地移除某些机器可能需要的传感器。
## 反馈你的硬件信息
**无论是否成功,你的反馈都很有用。** 上面的兼容性表格正是通过大家提交的信息不断完善的 —— 请提交一个 [issue](https://github.com/kitepon-rgb/OpenDS360/issues/new/choose) 并附带:
- 散热器的型号名称
- 水泵头显示的内容(纯数字,还是彩色屏幕)
- 设备管理器中的 VID / PID
## 注意事项
**请勿同时运行 OpenDS360 和 `DeviceMonitorPcc`。** 设备会接受两个进程的写入,导致显示屏在两个数据源之间闪烁。OpenDS360 会在启动时检测到另一个程序,并提示你将其关闭。
**这是非官方软件。** 它与 PCCooler 或 APALTEK 没有任何关系,这两家公司也没有对其进行背书或提供支持。使用风险自负。
## 许可证
[MIT](LICENSE)。内置的第三方组件列表详见 [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)。
标签:USB HID, Windows工具, 云资产清单, 多人体追踪, 硬件控制, 系统硬件, 逆向工程