Glass lever: port the pod-build GAIT DETENT to the PadRIO throttle slew

Human re-test on the fresh build: zero-stop OK, but the lever could PARK inside
the walk/run hysteresis band (walkStrideLength@0x534 .. reverseSpeedMax@0x538)
where the gait SM has no stable state -- walk<->run hunt, EngineShiftFwd/Rev
retriggering ("mixed walk/run mode + repeated acceleration sample").  The
pod-build keyboard lever already snaps out of the band to the NEARER edge at
key-rest (mech4.cpp GAIT DETENT); the PadRIO slew channel lacked it.

Faithful port, not an invention: mech4.cpp publishes the band in lever units
every driven frame (gBTGaitDetentLo/Hi seam, same guards + the same +0.002
engage margin); L4PADRIO Poll() applies the identical nearer-edge snap to the
Throttle channel when the slew rests (no slew key held, no pad slew axis
deflected).  Sweeping through the band while held stays continuous (the
authentic moving lever, one authentic shift).

Verified (DEV.EGG glass, graduated parks each ~0.10 of the sweep,
BT_GAIT_TRACE+BT_MPPR_TRACE): band [0.358026,0.50388) = demand 22.02-30.87;
in-band parks snap both directions (0.4137->lo, 0.465126->hi); no at-rest
sample in the band; exactly ONE walk->run clip (state 10) up and ONE run->walk
(state 14) down across the whole sweep; zero-stop unaffected; pod build
rebuilt + BT_AUTODRIVE smoke clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-20 10:57:34 -05:00
co-authored by Claude Fable 5
parent 1535e3e48d
commit 6ad1e074cc
5 changed files with 121 additions and 1 deletions
+10
View File
@@ -94,6 +94,16 @@ copied from them.
symptom, and V's edge is now [T2]. `BT_MPPR_TRACE` now prints mode/pedals/stick/turn/elev.
Procedural rule: rebuild every live build dir after landing an input/engine commit.
Detail: `docs/GLASS_COCKPIT.md` §2026-07-20 (later).
- **2026-07-20 human re-test: GAIT DETENT ported to the PadRIO lever [T2].** The remaining
"our detent is missing" (mixed walk/run mode + repeated accel sample) was the gait DEAD BAND
([[locomotion]]): the pod-build keyboard lever snaps out of the walk/run hysteresis band at
key-rest (mech4.cpp GAIT DETENT), and the PadRIO throttle slew lacked it. Ported faithfully:
mech4.cpp publishes the band in lever units (`gBTGaitDetentLo/Hi` seam, +0.002 engage
margin), `L4PADRIO.cpp` applies the identical nearer-edge snap when no throttle slew key/pad
axis is active. Verified: parks at 0.414/0.465 snap to 0.358/0.504 (band = demand
22.02-30.87), no at-rest sample in-band, exactly ONE up-shift + ONE down-shift clip across a
full graduated sweep, zero-stop + pod build unaffected. Detail: `docs/GLASS_COCKPIT.md`
§2026-07-20 (later still).
## Key Relationships
- Extends: [[pod-hardware]] (RIO input path) · Uses: [[gauges-hud]] dev-gauge modes ·
+3 -1
View File
@@ -125,7 +125,9 @@ the walk→run transition clip's exit speed — the run ENGAGE threshold, not a
0x4a7041) → a demand parked between them cycles 7→10→14→7 forever ("gallop hunt"), firing the
authored EngineShiftFwd/Rev audio each swing (Blackhawk: 22.0230.87 = throttle 3650%). Faithful
mechanics — likely masked on real hardware by MECHANICAL lever detents ([[pod-hardware]] [T4]).
Port: keyboard lever snaps out of the band at rest (mech4.cpp "GAIT DETENT" accommodation).
Port: keyboard lever snaps out of the band at rest (mech4.cpp "GAIT DETENT" accommodation);
the glass PadRIO throttle slew applies the SAME at-rest snap (L4PADRIO.cpp, band published in
lever units via the mech4.cpp `gBTGaitDetentLo/Hi` seam — 2026-07-20 glass re-test) [T2].
## Turn-in-place (trn, state 4) — AUTHENTIC dispatcher decoded (task #64, 2026-07-14)
**The entry dispatcher is NOT in the Ghidra decomp** — it lives in the master-perf gap