5 Commits
Author SHA1 Message Date
Dylan DeverillandClaude Fable 5 b80c7b830e Overhaul trackpad haptics: fix firmware lizard revert, click latch, tick gating
The core fix: the SC2026 firmware silently reverts to lizard mode (including
its autonomous click haptics) after a period without host feature reports,
which doubled up with software haptics as a crunchy burst. A keepalive now
re-asserts the lizard-off state every 2 seconds while game mode is active.

Haptics reliability and feel:
- Switch trackpad haptics from OUT_HAPTIC_PULSE (grip LRAs) to
  OUT_HAPTIC_COMMAND (trackpad LRAs) for localized feel
- Click haptic latch: press fires off the debounced firmware click bit,
  release only fires once contact area returns to idle, so force chatter
  and mid-hold easing cannot re-fire
- Movement ticks: distance-based with motion deadzone, post-release and
  first-touch grace windows, pressing/teleport gates (pause, not reset),
  idle decay, and a 50ms send rate limit so firmware waveforms never queue
  into a backlog

Handoff and mouse:
- EnableLizardMode now also sends LOAD_DEFAULT_SETTINGS so firmware mouse
  emulation resumes immediately on disable instead of waiting for the
  firmware revert timeout
- Trackpad mouse: carry sub-pixel movement remainders between frames and
  retune sensitivity (0.015 -> 0.01125)

Also: shared/exclusive HID reopen support, local-only HapticTester tool
(gitignored, conditional CMake target), installer version bump to 1.7.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 12:50:38 -07:00
Dan Bosscher dc6b5d7db8 Fix ViGEmBus silent installer arguments 2026-06-21 12:53:53 +01:00
Dylan DeverillandClaude Sonnet 4.6 fbef4118e5 Bump installer version to 1.5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 01:25:41 -07:00
Dylan DeverillandClaude Sonnet 4.6 9838bed701 Add support for multiple simultaneous Steam Controllers
Each connected controller now gets its own virtual Xbox 360 device via
ViGEmBus, mapping to separate XInput player slots (1, 2, 3...).

Key changes:
- SteamController: add EnumerateAll() to probe and return all live
  device paths across wired (0x1302) and dongle (0x1304) PIDs; add
  Open(path) overload to open a specific already-validated path.
- ControllerManager: replace single-controller state with a vector of
  Slot structs, each owning its own SteamController, VirtualController,
  TrackpadMouse, and read thread. SyncDevices() diffs live paths against
  current slots on every device-change event, adding new controllers and
  removing disconnected ones. Controllers hot-plugged while game mode is
  active are automatically brought into game mode.
- Bump installer version to 1.3.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 20:46:48 -07:00
Dylan DeverillandClaude Sonnet 4.6 f4a2f04315 Add Start with Windows, installer script, and release build support
- Start with Windows toggle in tray menu — writes/removes the Run registry
  key so the app launches automatically at login
- Inno Setup installer script for packaging the release exe
- CMakePresets.json for named debug/release build configurations
- README updated with correct Visual Studio 2025 build commands and a
  note for VS 2022 users

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 19:57:47 -07:00