From 72a8b124f9a180e91a65a229e90b8151c9ab3eae Mon Sep 17 00:00:00 2001 From: arcattack Date: Thu, 23 Jul 2026 23:41:30 -0500 Subject: [PATCH] KB: direct-axis release-edge gotcha (issue #36) --- context/glass-cockpit.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/context/glass-cockpit.md b/context/glass-cockpit.md index dc2b388..427c902 100644 --- a/context/glass-cockpit.md +++ b/context/glass-cockpit.md @@ -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