KB: direct-axis release-edge gotcha (issue #36)

This commit is contained in:
arcattack
2026-07-23 23:41:30 -05:00
parent 390d4ddce7
commit 72a8b124f9
+9
View File
@@ -88,6 +88,15 @@ recovery; keyboard-only run clean). Fix: on the connected->disconnected transit
`EmitButton(address, 0)` for every binding whose mask was held, THEN forget. Not reproducible
headless (needs real hardware unplug) -- logic fix, awaiting the reporter's controller.
## Direct-axis release edge (issue #36, 2026-07-23) [T2 idle-verified; awaiting reporter]
The pad/joy DIRECT axis write was gated on `raw != 0` -- centering inside the deadzone stopped
writing and the channel LATCHED (fatal on spring-less channels: the Turn composite kept the
mech turning after release). Fix: per-binding previous-value arrays (`previousPadAxisRaw` /
`previousJoyAxisRaw`); the outside->inside transition writes 0 ONCE then yields the channel
(composition preserved; slew bindings excluded -- a slewed lever stays put by design). Plus
the #24 rule, axis edition: disconnect-while-deflected releases direct channels (Throttle
keeps the last lever position -- freeze beats all-stop mid-fight).
## Generic joysticks / HOTAS / pedals -- DirectInput 8 layer (2026-07-23) [T2 rig-verified; awaiting stick hardware]
Tester ask: configure non-Xbox controllers. **`L4JOY.cpp/.h`** (all builds, lazy-init): DI8
enumeration of every non-XInput game device (up to 4), `c_dfDIJoystick2` polling with