@@ -101,26 +101,23 @@ and signing details.
101101
102102The Linux backend uses standard user-space kernel interfaces:
103103
104- - ` uhid ` for descriptor-driven HID gamepads.
105- - ` uinput ` for Generic, Xbox 360, Xbox One, Xbox Series, and Switch Pro
106- gamepads, plus keyboard, mouse, touchscreen, trackpad, and pen tablet
107- devices.
104+ - ` uhid ` for descriptor-driven PlayStation and Switch Pro gamepads.
105+ - ` uinput ` for Generic, Xbox 360, Xbox One, and Xbox Series gamepads, plus
106+ keyboard, mouse, touchscreen, trackpad, and pen tablet devices.
108107- ` libevdev ` internally for uinput device construction.
109108- X11/XTest only as a keyboard and mouse fallback when ` uinput ` cannot be used
110109 and an X11 session is available.
111110
112111Gamepad support normally prefers ` uhid ` because descriptors, raw HID identity,
113112feature reports, and output reports matter for controller compatibility.
114- Generic, Xbox-family, and Switch Pro profiles instead use ` uinput ` so SDL,
113+ Generic and Xbox-family profiles instead use ` uinput ` so SDL,
115114Steam, browser Gamepad API implementations, and other evdev consumers receive
116115canonical Linux gamepad events. Face buttons, shoulders, menu buttons, stick
117116clicks, and Guide use their native evdev codes; sticks use absolute axes. Every
118117uinput gamepad exposes its directional pad through ` ABS_HAT0X ` and ` ABS_HAT0Y ` .
119118Generic and Xbox triggers remain independent analog ` ABS_Z ` and ` ABS_RZ ` axes.
120- Switch Pro uses the Nintendo face-button
121- positions, button events for ZL/ZR, and ` BTN_Z ` for Capture. Profiles with rumble
122- support normalize rumble, constant, periodic, and ramp uinput force-feedback
123- effects back into the public callback. Each requested playback repetition
119+ Profiles with rumble support normalize rumble, constant, periodic, and ramp
120+ uinput force-feedback effects back into the public callback. Each requested playback repetition
124121restarts the effect's ramp and envelope timing. A zero-length effect remains
125122active until its explicit stop event, matching the infinite-effect contract used
126123by SDL and Steam. The Linux backend lets a new uinput device settle before
@@ -182,10 +179,14 @@ descriptor, and report framing remain unchanged. This transport-only name is
182179confined to the Linux backend; public profile names, Windows names, and VHF
183180behavior are unchanged.
184181
185- Switch Pro keeps its Nintendo identity on the Linux uinput path. This follows
186- the evdev layout used by Linux-native virtual-controller implementations and
187- allows standard ` FF_RUMBLE ` effects without emulating the physical controller's
188- proprietary initialization handshake.
182+ Switch Pro uses Linux ` uhid ` with its native Nintendo descriptor and identity.
183+ It advertises ` BUS_VIRTUAL ` so ` hid-generic ` and HIDAPI consumers can use the
184+ descriptor without the kernel claiming the virtual endpoint as physical
185+ Nintendo hardware. The backend answers Nintendo USB and subcommand
186+ initialization reports, and native ` 0x30 ` input reports carry buttons, sticks,
187+ battery state, and three live IMU samples. The public acceleration and
188+ gyroscope units remain meters per second squared and degrees per second; the
189+ packer converts them to Nintendo's coordinate system and sensor scales.
189190
190191Linux touchscreen and trackpad contacts use the lowest available multitouch
191192slot while they are active. A newly placed contact receives a new tracking ID,
@@ -194,7 +195,9 @@ finger cannot overwrite another active finger in standard evdev consumers.
194195
195196On descriptor-driven backends, native Switch Pro output reports ` 0x01 ` and
196197` 0x10 ` are decoded into the normalized low- and high-frequency rumble callback.
197- The original native report remains available in ` GamepadOutput::raw_report ` .
198+ Set Player Lights subcommand ` 0x30 ` additionally produces a ` player_leds `
199+ callback with separate solid and flashing states for the four indicators. The
200+ original native report remains available in ` GamepadOutput::raw_report ` .
198201
199202The optional ` virtualhid_control ` diagnostic UI uses SDL3 and Dear ImGui through
200203the repository CPM lockfile. It is intended to stay on the same UI framework for
0 commit comments