DualSense / DualSense Edge IMU Dashboard

WebHID controller telemetry • raw and processed 6-axis motion data
Not connected

Controller

Model
—
VID:PID
—
Transport
—
Input rate
0 Hz

JoyShockMapper configuration

Config
Not loaded
Gyro sensitivity
—
Threshold range
—
Acceleration
—
RWC / In-game sens
—
GYRO_OFF
Not configured
Load a JoyShockMapper config to apply its gyro sensitivity curve and acceleration modifiers to the live IMU stream.

FPS-perspective gyro turn heatmap

GYRO ON
Turn angle distribution
0 completed turns
No completed turns yet.

Each completed gyro camera movement is integrated into an in-game turn and counted here. Distance from the center is the in-game turn angle (degrees); direction shows FPS camera movement direction. Turn angles use JoyShockMapper GYRO_SENS directly as the calibrated camera-angle ratio. REAL_WORLD_CALIBRATION / IN_GAME_SENS is used only to model the mouse output JSM must emit; JSM compensates IN_GAME_SENS so it does not change the intended camera angle. The radial scale automatically follows the 90th percentile of completed turns (rounded up to 10°, with a 50° minimum), so rare large turns do not compress the main aiming cluster. Turns outside the displayed 90% region are retained for the distribution and aiming-profile statistics but are not forced onto the heatmap edge. The distribution keeps the high-density aiming region detailed even when a rare large turn expands the heatmap: 5° bins from 0–50°, 10° from 50–100°, 20° from 100–200°, 25° from 200–400°, 50° from 400–800°, then 100° bins. Each bin shows both percentage and turn count. GYRO_OFF movements are excluded.

Raw vs JoyShockMapper-processed angular velocity

Angular acceleration magnitude

Time spent at each effective sensitivity

This histogram is time-weighted: each IMU sample contributes its elapsed time to the effective sensitivity bucket, so it shows where the player actually spends time rather than simply counting samples.

Effective sensitivity over time

Aiming profile

Completed turns
0
Median turn
0.0°
90th percentile turn
0.0°
95th percentile turn
0.0°
Maximum turn
0.0°
Left / right
0.0% / 0.0%
Median angular velocity
0.0 °/s
90th percentile velocity
0.0 °/s
95th percentile velocity
0.0 °/s
Peak velocity
0.0 °/s
Median X sensitivity
1.00×
90th percentile X sensitivity
1.00×
Median Y sensitivity
1.00×
90th percentile Y sensitivity
1.00×
Sensitivity time: low / ramp / max
0.0% / 0.0% / 0.0%

Play a session to build an aiming profile. GYRO_OFF samples are excluded.

Run comparison
SavedAccuracyTurnsMedian turnP90 turnMedian velocityP90 velocityMedian X / Y sens
No saved runs yet.

Saved runs are kept in this browser using localStorage. Accuracy is optional and entered manually from Halo Infinite; the table does not infer that one configuration is better from accuracy alone.

Raw gyro

X
0.00
deg/s
Y
0.00
deg/s
Z
0.00
deg/s

Processed gyro

X
0.00
deg/s
Y
0.00
deg/s
Z
0.00
deg/s

Angular motion

Velocity magnitude
0.00
deg/s
Angular acceleration
0.00
deg/s²
Peak velocity
0.00
deg/s
Peak acceleration
0.00
deg/s²

Accelerometer

X
0.000
g
Y
0.000
g
Z
0.000
g
Magnitude
0.000
g

Orientation from gravity

Pitch
0.00
deg
Roll
0.00
deg

Session

Samples
0
Last dt
0.0
ms
CSV rows
0
Calibrated
No
Debug: DualSense initialization & factory calibration

DualSense initialization & factory calibration

Feature 0x05
Not read
Calibration bytes
—
Firmware 0x20
Not read
Update version
—
Gyro X scale
—
Gyro Y scale
—
Gyro Z scale
—
Accel ranges
—
The app reads feature report 0x05 and applies its factory gyro/accelerometer normalization to the live stream. Feature report 0x20 is also read for the controller update version.
AxisGyro biasGyro +Gyro −Gyro denominatorAccel +Accel −Accel biasAccel range
Connect a controller to read its factory calibration.
Debug: HID report analyzer

HID report analyzer

Last report ID
—
Payload length
—
Report rate
0 Hz
Captured reports
0
BT CRC32
—
Observed report IDs
—
The analyzer examines the actual WebHID payload delivered by the browser. It reports byte offsets, signed 16-bit LE activity, and likely motion fields.
Latest HID payload (WebHID report ID is shown separately)
Connect a controller to see raw reports.
Most active signed-16-bit little-endian fields
OffsetMeanMinMaxΔ RMSRangeAs °/s @1024Action
Move the controller after connecting. Candidate fields will appear here.
Active gyro offset
standard
Active accel offset
standard
Gyro scale
1024 counts/°/s
Accel scale
8192 counts/g

A candidate is only a statistical hint: acceleration, buttons, timestamps and other HID fields can also move. Use the analyzer while physically rotating the controller and compare the three adjacent 16-bit fields. “Use as gyro” changes the live parser for testing and can be reset.

Processing settings

The controller's raw IMU values are decoded from the DualSense HID reports. Factory sensor calibration from feature report 0x05 is applied before user deadzone/filter/JoyShockMapper processing; “Calibrate gyro” adds a user bias offset while the controller is stationary. A JoyShockMapper config can be loaded locally; the parser understands GYRO_SENS, MIN/MAX_GYRO_SENS, MIN/MAX_GYRO_THRESHOLD, GYRO_CUTOFF_SPEED, GYRO_AXIS_X/Y, MOUSE_X/Y_FROM_GYRO_AXIS and common GYRO_* acceleration modifier keys. JoyShockMapper sensitivity is a multiplier, so processed camera velocity is raw angular velocity multiplied by the effective sensitivity.

Timestamped circular history buffer

TimeGXGYGZ|ω||α|AXAYAZPitchRoll

WebHID requirements

This controller mode requires a Chromium browser with WebHID support and a secure context such as HTTPS or localhost. USB is recommended for initial testing. Pair the controller with the operating system first when using Bluetooth, then press Connect DualSense. The app requests Sony DualSense (054C:0CE6) and DualSense Edge (054C:0DF2).