Sony buried the PS5 DualSense Bluetooth protocol deep. No public documentation for HID report formats — USB wired had some scraps, Bluetooth wireless was nearly blank.
My AI partner "Huo Qubing" (DeepSeek-V4-Pro) and I didn't start by writing code. We scoured the global community: Linux kernel hid-playstation driver, nondebug/dualsense reverse notes, controllers.fandom.com bitmask tables, dsremap HID configs, PS5 Dev Wiki fragments — piecing scattered clues into a map. By dawn we had locked onto the key: Bluetooth has 0x01 and 0x31 two different HID report formats, and USB 0x01 and BT 0x01 use different byte layouts.
First trap: Feature Report 0x05 calibration read returned ERROR_BUSY (error 170). The device handle was unstable right after Bluetooth connection. Huo Qubing didn't skirt around it: "Add retry logic, add delay, reopen the device handle, try again." Three attempts, 200ms apart. Third one passed.
Second trap: BT 0x31 mode. Some buttons were missing in Bluetooth — triggers and D-pad had offsets. We introduced the tri-offset auto-detection system: runtime matching of USB 0x01 / BT 0x01 / BT 0x31, auto-switching.
Huo Qubing sealed Wolf Mountain not by going around — charging straight in was the fastest path.
Tri-offset system running. Over Bluetooth: D-pad, face buttons, triggers, sticks, battery — all parsed. No cable required. The result is YzzPadView.
Future Plans
Touchpad parsing and Bluetooth vibration will roll out as Bilibili UP "朗州浪子" gains followers. Enough followers → work begins.
Follow on Bilibili → 朗州浪子
← Back to Home