Controller
JoyShockMapper configuration
FPS-perspective gyro turn heatmap
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
Play a session to build an aiming profile. GYRO_OFF samples are excluded.
| Saved | Accuracy | Turns | Median turn | P90 turn | Median velocity | P90 velocity | Median 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
Processed gyro
Angular motion
Accelerometer
Orientation from gravity
Session
Debug: DualSense initialization & factory calibration
DualSense initialization & factory calibration
| Axis | Gyro bias | Gyro + | Gyro − | Gyro denominator | Accel + | Accel − | Accel bias | Accel range |
|---|---|---|---|---|---|---|---|---|
| Connect a controller to read its factory calibration. | ||||||||
Debug: HID report analyzer
HID report analyzer
Connect a controller to see raw reports.
| Offset | Mean | Min | Max | Δ RMS | Range | As °/s @1024 | Action |
|---|---|---|---|---|---|---|---|
| Move the controller after connecting. Candidate fields will appear here. | |||||||
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
| Time | GX | GY | GZ | |ω| | |α| | AX | AY | AZ | Pitch | Roll |
|---|
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).