Skip to content

feat(ds5): adaptive-trigger status and trigger haptics - #19

Merged
ripps818 merged 2 commits into
mainfrom
feat/trigger-haptics
Oct 13, 2026
Merged

ripps818 merged 2 commits into
mainfrom
feat/trigger-haptics

Conversation

@ripps818

Copy link
Copy Markdown
Owner

What

DualSense mode now handles adaptive triggers:

  • Trigger status: the puck reports a game's trigger effect the way a real DualSense does. Games that act on it now work with their trigger effects on. Stellar Blade's gun (hold L2, fire with R2) only fires on the weapon effect's "snapped" status, so before this it couldn't shoot unless the game's adaptive triggers were turned off.
  • Trigger haptics: the Steam Controller has no trigger motors, so the effect is played on the haptic actuators instead.
    • A tick every 12 counts of travel into a resistance zone.
    • A click plus a short tone when a weapon trigger snaps.
    • Trigger vibration as a tone.
    • A trigger held still plays nothing, so long aims stay quiet.
  • New DualSense setting, Trigger haptics: Off / Trackpads / Grips / Trackpads and grips, Trackpads by default. It's in its own Adaptive triggers card under Rumble.
  • Panel layout: Lights now stacks under Rumble, and the Switch Pro mode only card follows Trackpads.

How the status was matched

Measured on a real DualSense over USB, with byte offsets after the report ID:

Input byte Meaning
41 / 42 R2 / L2: status (high nibble), motor zone 0–9 (low nibble); idle 0x09
43–46 echo of the host timestamp from output report 0x02
47 active effect, R2 low nibble / L2 high nibble: 1 feedback, 2 weapon, 3 vibration
  • A weapon over zones 4–7 reports 1 from R2 ≈ 121 and 2 from ≈ 228, and holds 2 until the trigger is let back out.
  • On the bench the puck matches: 119–123 and 227–233.
  • In-game: Stellar Blade's gun fires with adaptive triggers on.

Details are in docs/DUALSENSE_HAPTICS.md §10. The setting is grid row 6 in docs/PROTOCOL.md: fields 144–147 and status blob p[240..243].

Tests

  • New tests/trigger_fx:
    • replays the real-pad trace through the parser and status code
    • checks the feel: ticks per step, one snap, silence while held
    • checks that a game re-sending the same effect every frame doesn't replay it
  • make check, all host tests and the UI tests pass. The firmware was flashed and felt on hardware.

🤖 Generated with Claude Code

ripps818 and others added 2 commits October 13, 2026 01:58
DualSense mode now reports a game's adaptive-trigger effect the way a real
pad does, so games that act on it work with their trigger effects on:
Stellar Blade's gun only fires on the weapon effect's "snapped" status.
The layout was measured on a real DualSense: input bytes 41/42 carry each
trigger's status and motor zone, 43-46 echo the host timestamp, and 47
names the active effect. Weapon, feedback and vibration effects (official
and simple forms) are parsed from output report 0x02.

The Steam Controller has no trigger motors, so the effect is also played
on the haptic actuators: a tick every 12 counts of travel into a resistance
zone, a click plus a short tone when a weapon snaps, and trigger vibration
as a tone. A new per-type DualSense setting, Trigger haptics (off,
trackpads, grips, both; trackpads by default), picks where; it sits in its
own Adaptive triggers card under Rumble. Status blob grows to p[243].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lights joins the Rumble column so it no longer pokes out alone at the
bottom of the grid, and the Switch Pro mode only card follows the
Trackpads card it relates to.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ripps818
ripps818 merged commit afdeccb into main Oct 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant