Skip to content

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.

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.

VID:PID Device
054C:0CE6 DualSense
054C:0DF2 DualSense Edge
054C:05C4 DualShock 4 v1
054C:09CC DualShock 4 v2

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.

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
  • 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.

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 - 0x02 over USB, 0x05 over Bluetooth.

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.

The PS button (with the Mute/Create buttons on the same byte) triggers recenter.

  • 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.