PlayStation (DualSense / DualShock 4)
Status: hardware-validated - DualSense over USB and Bluetooth, DualShock 4 over USB and Bluetooth on Windows. DualSense Edge shares the layout, pending live validation.
DualSense, DualSense Edge, and DualShock 4 share one driver. All three are HID devices over both USB and Bluetooth (Bluetooth is HID over Bluetooth Classic, not BLE). None has a magnetometer, so fusion is 6-axis with yaw drift.
Hardware
Section titled “Hardware”| Controller | IMU | Scale |
|---|---|---|
| DualSense / Edge | Bosch BMI270-class | gyro ±2000 dps (raw × 2000/32767), accel ±4 g (8192 LSB/g) |
| DualShock 4 v1/v2 | Bosch BMI055 | identical firmware-exposed scale |
The chip identity for DualSense is community-plausible but not teardown-confirmed; what is certain is the firmware-exposed interface - ±2000 dps, ±4 g, 8192 LSB/g, 16-bit signed - which the driver relies on.
Identification (VID:PID)
Section titled “Identification (VID:PID)”| VID:PID | Device |
|---|---|
054C:0CE6 |
DualSense |
054C:0DF2 |
DualSense Edge |
054C:05C4 |
DualShock 4 v1 |
054C:09CC |
DualShock 4 v2 |
Transport and report IDs
Section titled “Transport and report IDs”The driver tells USB from Bluetooth by input-report length.
| Controller | USB report | Bluetooth report |
|---|---|---|
| DualSense / Edge | 0x01 (64 bytes) |
0x31 (78+ bytes, CRC32 trailer) |
| DualShock 4 | 0x01 (64 bytes) |
0x11 |
Over Bluetooth the payload shifts because the report carries a leading tag byte. Output writes over Bluetooth (rumble / lightbar) must append a trailing CRC32 or the controller silently rejects them.
IMU byte offsets
Section titled “IMU byte offsets”| Controller / transport | Gyro | Accel | Notes |
|---|---|---|---|
DualSense USB (0x01) |
16 | 22 | HW timestamp u32 LE at 28; PS/Mute buttons at 10 |
DualSense BT (0x31) |
17 | 23 | single sequence-tag byte at buf[1] → USB+1; PS/Mute at 11 |
DualShock 4 USB (0x01) |
13 | 19 | temp byte precedes gyro |
DualShock 4 BT (0x11) |
15 | 21 | Windows delivers this padded past 78 bytes, so the parser matches any length ≥ 78 |
Sample rate and timestamp
Section titled “Sample rate and timestamp”- DualSense: 250 Hz (USB and Bluetooth). A free-running hardware sensor timestamp (u32 at USB offset 28, ticking at 1/3 µs) drives the fusion timestep precisely, immune to Bluetooth jitter.
- DualSense Edge: 1000 Hz over USB (faster polling of the same packet).
- DualShock 4: 250 Hz; over Bluetooth the host can set the poll interval via the output report (down to 1 ms). No hardware timestamp is decoded, so the delivery-rate estimate drives the timestep.
Calibration
Section titled “Calibration”Per-unit gyro and accel offsets/scales come from a HID feature report, applied before fusion:
- DualSense: feature report
0x05(41 bytes). - DualShock 4: transport-aware -
0x02over USB,0x05over Bluetooth.
Features
Section titled “Features”Gyro / accel / battery, PS-button recenter, and the RGB lightbar are wired. DualSense Edge shares the DualSense report layout and is detected as a distinct kind by PID.
Reset gestures
Section titled “Reset gestures”The PS button (with the Mute/Create buttons on the same byte) triggers recenter.
Quirks
Section titled “Quirks”- Steam Input can grab a DualSense exclusively. Close Steam or disable Steam Input / PlayStation controller support for the pad, or the bridge can’t open it.
- No magnetometer, so yaw drifts - re-yaw facing forward or use Reset Mounting.
- A ~200 ms stationary warm-up lets the rest-bias estimator converge on the BMI270-class gyro before tracking settles.