Switch 2 connection confirmation haptic¶
This contract is pinned to Switch2Connect commit
61ac6642ce12fe7217e38a860b14863b18ca7e28, specifically
Controller.trigger_connection_haptics, Controller.set_vibration, and the
USB override in UsbHidController.trigger_connection_haptics.
Exact signature¶
The cue is a two-part native HD-rumble signature:
- bass for 200 ms: source LF control
0x060, LF amplitude0x350, HF control0x0c0, and HF amplitude0x250; - neutral for 10 ms; and
- a sharp click for 1,000 ms: the neutral LF control
0x0e1, LF amplitude0x030, HF control0x1e2, and HF amplitude0x300, followed by neutral.
ignore_freq_scaling=True bypasses only frequency scaling in the donor. Its
shared renderer still applies a 1.3x LF multiplier, a Pro 1.0x/Joy-Con 0.6x HF
multiplier, 10-bit clamping, and the Joy-Con combined-amplitude limiter. The
actual Pro bass amplitudes are therefore 1,023/592 and its click amplitudes are
62/768. The actual Joy-Con values are 759/264 and 62/460 respectively.
Each effective active value occupies the first of three five-byte subframes.
The second and third subframes retain the donor's neutral controls (0x0e1,
0x1e1) with zero amplitude. A Pro Controller receives the Pro group on both
physical actuators. A standalone Joy-Con writer selects its own Joy-Con group,
while a joined pair receives that Joy-Con group on both halves. USB waits 1,200
ms after activation commit before starting, matching the donor's first-
connection readiness accommodation.
Ownership and arbitration¶
The cue does not write HID, WinRT, or USB directly. Its exact oscillator group
is staged against the exact canonical frame returned by the existing fixed
ProfileEffect lane. That origin is the lowest feedback priority, so audio,
native game output, and an explicit test preview can supersede it. The staged
native group is consumed only if that exact frame wins the normal feedback
runtime and sole physical-writer pump.
The transport owner starts the asynchronous schedule only after its input activation commit succeeds. Prepare and abort-before-commit remain physically silent. The scheduler performs no work in the controller input report path. Non-neutral profile or preview rumble cancels the cue; terminal neutralization, disconnect, and unpublished abort close admission before the task can publish another phase. Each logical runtime generation can start at most one cue.
Profile compatibility¶
Switch2ConnectionHapticEnabled is persisted in the existing profile and is
shown as Play connection confirmation haptic under Switch 2 Controls. It
defaults on for legacy profiles to match Switch2Connect behavior. Turning it
off prevents the task from being created after the next controller activation.
Unit tests establish source constants, subframe placement, profile migration, BLE and USB sole-writer delivery, the four-stage schedule, and terminal retirement. Audible/tactile quality and hardware onset remain physical validation gates.