KB: step-2 closeout -- verification matrix + ledger detail (glass cockpit)
docs/GLASS_COCKPIT.md gains the 2b-2e detail + the full verification matrix (purity build + seam audit, pod forced-walk, 2-node loopback MP via btconsole relay on the POD build -- both nodes reach the running mission, PadRIO authentic-path input, panel-click survival). context/glass-cockpit.md status updated: step 2 DONE [T2]; steps 3-4 pending. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+20
-4
@@ -1,8 +1,8 @@
|
||||
[mission]
|
||||
adventure=BattleTech
|
||||
map=grass
|
||||
map=cavern
|
||||
scenario=freeforall
|
||||
time=day
|
||||
time=night
|
||||
weather=clear
|
||||
temperature=27
|
||||
length=600
|
||||
@@ -156,8 +156,9 @@ x=128
|
||||
y=32
|
||||
width=8
|
||||
[pilots]
|
||||
pilot=200.0.0.96
|
||||
[200.0.0.96]
|
||||
pilot=127.0.0.1:1502
|
||||
pilot=127.0.0.1:1602
|
||||
[127.0.0.1:1502]
|
||||
hostType=0
|
||||
advancedDamage=1
|
||||
loadzones=1
|
||||
@@ -171,6 +172,20 @@ dropzone=one
|
||||
vehicle=bhk1
|
||||
vehicleValue=1000
|
||||
color=White
|
||||
[127.0.0.1:1602]
|
||||
hostType=0
|
||||
advancedDamage=1
|
||||
loadzones=1
|
||||
name=Boreas
|
||||
bitmapindex=2
|
||||
experience=expert
|
||||
badge=VGL
|
||||
patch=Yellow
|
||||
role=Role::Default
|
||||
dropzone=one
|
||||
vehicle=ava1
|
||||
vehicleValue=1000
|
||||
color=Red
|
||||
[largebitmap]
|
||||
bitmap=BitMap::Large::Aeolus
|
||||
[BitMap::Large::Aeolus]
|
||||
@@ -227,3 +242,4 @@ width=4
|
||||
model=dfltrole
|
||||
[Role::NoReturn]
|
||||
model=noretun
|
||||
|
||||
|
||||
@@ -48,10 +48,19 @@ copied from them.
|
||||
locks (`mechmppr.hpp/.cpp`); torso/weapon chains were already aligned. Permanent env-gated
|
||||
diagnostic: `BT_CTRLMAP_LOG=1` dumps every streamed record's resolved member offset
|
||||
(`L4CTRL.cpp CreateStreamedMappings`). Full evidence: `docs/GLASS_COCKPIT.md` §2a.
|
||||
- Step 2 (PadRIO + displays): pending. Secondary displays reuse the EXISTING dev-gauge modes
|
||||
(dock-bottom `BT_DEV_GAUGES=1`, combined separate window `BT_DEV_GAUGES_WINDOW=1`, overlay
|
||||
inset `BT_DEV_GAUGES_DOCK=1` — see [[gauges-hud]] + `docs/GAUGE_COMPOSITE.md`); NO new MFD
|
||||
display code, never re-enter the `L4VB16.cpp` split-view region.
|
||||
- **Step 2 (PadRIO glass cockpit): DONE 2026-07-17 [T2].** `RIOBase` seam (`L4RIO.h`,
|
||||
unconditional) + gated `L4CONTROLS=PAD` → `PadRIO` (`L4PADRIO.*` XInput+keyboard,
|
||||
`L4PADBINDINGS.*` `content\bindings.txt`); bridge stand-downs auto-yield to a live device
|
||||
(`BTRIODevicePresent`, `BT_KEY_BRIDGE` unset=auto/0=off/1=on); on-screen panel `L4PADPANEL.*`
|
||||
follows **vRIO** (`C:\VWE\vrio` CockpitLayout/PanelCanvas — 104 controls incl. the two hex
|
||||
keypads → real KeyEvents; right-click latch); desktop plasma `L4PLASMAWIN.*`
|
||||
(`L4PLASMA=SCREEN`, buffer is top-down); `-platform glass` preset + run.cmd token. Secondary
|
||||
displays reuse the EXISTING dev-gauge modes (dock / `BT_DEV_GAUGES_WINDOW=1` window /
|
||||
`_DOCK=1` overlay — [[gauges-hud]]); no new MFD code, no `L4VB16.cpp` exposure.
|
||||
**Button-trap guard:** base `ConfigureMappableMessageHandler` no longer `abort()`s by default
|
||||
(`BT_BUTTON_TRAP=1` restores) — each `[FAIL]` log = a missing L4 override to reconstruct.
|
||||
Verified: authentic-path input (engine push → streamed `.CTL` → mapper), panel-click
|
||||
survival, 2-node loopback MP un-regressed on the pod build. Detail: `docs/GLASS_COCKPIT.md`.
|
||||
- Step 3 (miniconsole): pending. Architecture: the console stays a WIRE PEER — an in-process
|
||||
worker-thread console client over loopback; no engine-loop hooks.
|
||||
- Step 4 (Steam): pending.
|
||||
|
||||
@@ -58,3 +58,51 @@ zoom-blip), so no consumer shifts.
|
||||
weapons unchanged. Regression: headless forced-walk run (`BT_FORCE_THROTTLE=1`) drives normally
|
||||
— `[mppr] thr=1 -> speedDemand=61.501`, gait cycles, position advances, 31/31 subsystems
|
||||
simulated, no faults.
|
||||
|
||||
## 2026-07-17 — Steps 2b-2e: PadRIO, stand-downs, displays, preset — DONE + verified
|
||||
|
||||
**2b (RIOBase + PadRIO, commit ac57a47):** `L4RIO.h` splits abstract `RIOBase` (enums, the five
|
||||
analog Scalars, pure `GetNextEvent`/`SetLamp`, no-op serial ops, NEW `IsOperational()`) out of
|
||||
serial `RIO` (`: PCSerialPacket, RIOBase` — ctor assigns as before, zero behavioral delta);
|
||||
`L4CTRL.h` `rioPointer` retyped `RIOBase*`; gated `L4CONTROLS=PAD` factory arm. NEW gated TUs
|
||||
`L4PADRIO.*` (XInput+keyboard → the surface; 3s hot-plug; focus-guarded keys; per-poll
|
||||
AnalogEvent heartbeat time-gated so the manager's drain loop terminates; `lampState[]`;
|
||||
static `SetScreenButton` — button addresses AND the keypad space 0x50-0x6F → KeyEvents) and
|
||||
`L4PADBINDINGS.*` (`content\bindings.txt`, default written on first run; deflect/slew/set axis
|
||||
model; addresses validated vs ButtonCount).
|
||||
|
||||
**2c (stand-downs, commit 9f35a80):** engine query `BTRIODevicePresent()` (ungated —
|
||||
pod-correct); both dev bridges (`mech4.cpp` attr writes, `mechmppr.cpp` BT_KEY_BRIDGE) gate
|
||||
their WRITES: unset=auto / "0"=off / else on; forced harness always rides. **Definitive live
|
||||
test:** OS-injected LSHIFT hold slewed PadRIO throttle 0→0.33→1.0 with `pre==thr` every frame —
|
||||
the value arrives via the ENGINE push through the streamed `.CTL` binding (bridge stood down),
|
||||
`speedDemand=61.501` from authentic InterpretControls.
|
||||
|
||||
**2d/2e (displays + preset, commits db9ac94 + 418acf0):** the on-screen panel follows **vRIO**
|
||||
(`C:\VWE\vrio` — `CockpitLayout.cs`/`PanelCanvas.cs`, per Cyd): five 4x2 MFD clusters
|
||||
(descending addresses), Throttle/Secondary/Screen/Joystick 1x8 columns, two 4x4 hex keypads
|
||||
(0x50 internal→pilot unit, 0x60 external→operator unit), physical names, red/yellow/blue
|
||||
coloration, 500/250/125ms flash, right-click latch — 104 controls. `PlasmaWindow :
|
||||
Video8BitBuffered` renders the 128x32 plasma via the SAME gauge-renderer path as serial
|
||||
(buffer is TOP-DOWN — the flip rendered it upside down, user-reported + fixed). MFD surfaces =
|
||||
the EXISTING dev-gauge modes (no new code, no L4VB16 exposure). `-platform glass` preset +
|
||||
run.cmd token. **Button-trap guard (e2c21c4 pattern):** the authentic base
|
||||
`ConfigureMappableMessageHandler` FAIL trap is `abort()` under DEBUGOFF — any aux/zoom button
|
||||
without its reconstructed L4 override KILLED the game on press (panel makes all reachable).
|
||||
Default now log+ignore; `BT_BUTTON_TRAP=1` restores the hard trap. Verified: synthetic panel
|
||||
click → 2 `[FAIL]` (press+release through panel→PadRIO→ProcessRIOEvent→streamed mapping), game
|
||||
survives. NOTE: each `[FAIL]` marks a missing L4 override — reconstruction backlog, see
|
||||
[[open-questions]].
|
||||
|
||||
**Step-2 verification matrix (all passed 2026-07-17):**
|
||||
1. Purity: defaults `build-pod/` compiles (known mech3 /FORCE externals only); seam audit —
|
||||
`BT_GLASS`/`BT_STEAM` mentions ONLY in CMakeLists, btl4main.cpp preset region, L4CTRL.cpp
|
||||
(include+PAD arm), L4GREND.cpp (include+SCREEN branch), gated TUs, run.cmd docs.
|
||||
2. Pod solo forced-walk clean (§2a).
|
||||
3. **2-node loopback MP on the pod build:** A `-egg MP.EGG -net 1501` + B `-net 1601` +
|
||||
`btconsole.py` relay — both nodes launch into the running mission (77/76 ticks, mechs at
|
||||
their drop zones, gait/target loops live).
|
||||
4. Glass build: PadRIO drives through the authentic mapper path; panel click path live; plasma
|
||||
window; all boot lines present.
|
||||
Deferred to the user (visual-only): panel/plasma appearance vs vRIO on screen, XInput stick
|
||||
feel, `L4PADFLIP` polarity.
|
||||
|
||||
Reference in New Issue
Block a user