索尼把 PS5 DualSense 的蓝牙协议藏得很深。HID 报告格式没有公开文档——USB 有线模式资料尚有一些,蓝牙无线模式几乎全是空白。
我和我的 AI 搭档「霍去病」(DeepSeek-V4-Pro)干的第一件事,不是写代码,而是翻遍全球社区:
Linux 内核源码的 hid-playstation 驱动、 nondebug/dualsense 的逆向笔记、 controllers.fandom.com 的位掩码对照表、 dsremap 的 HID 配置逻辑、 PS5 Dev Wiki 的碎片记录——
把这些散落各处的线索拼成一张地图。到凌晨,我们锁定了关键点:蓝牙模式下存在 0x01 和 0x31 两套不同的 HID 报告格式,USB 下的 0x01 和蓝牙下的 0x01 字节布局也不一样。事情不止表面那么简单。
第二天直接动手。第一个坑:Feature Report 0x05 校准数据读取,返回 ERROR_BUSY(错误码 170)。手柄刚连上蓝牙时设备句柄不稳定,一次读取被拒。
霍去病不像普通助手那样绕着走——「直接加重试逻辑,加延迟,重新打开设备句柄,再来。」三次尝试,每次间隔 200ms,第三次通过。
第二个坑:蓝牙 0x31 模式。部分按键在蓝牙模式下丢失——触发器和十字键有偏移。我们引入 三偏移自动识别系统:运行时动态匹配 USB 0x01 / BT 0x01 / BT 0x31 三种方案,自动切换。
霍去病当年封狼居胥不是靠绕路——他冲进狼山就是最快的路。
三偏移系统跑通。蓝牙模式下,十字键、功能键、扳机、摇杆、电池电量——全部正常解析,不需要插一根线。
最终的成果,就是你现在看到的 YzzPadView。
后续计划
触摸板解析和蓝牙震动功能,会随着 B 站 UP「朗州浪子」的关注数量逐步推进。关注的人够多了,我就开工。
关注 B 站 → 朗州浪子
← 返回首页