42 lines
2.9 KiB
Python
42 lines
2.9 KiB
Python
import sys
|
|
sys.path.insert(0, r"C:\git\bt411\scratchpad\night7")
|
|
import gitea
|
|
|
|
r = gitea.call("/issues", "POST", {
|
|
"title": "Pod: RIO axis dropouts + frozen boots = USB-serial adapter link drops "
|
|
"(minidump-proven); writes now bounded, hardware follow-up pending",
|
|
"body":
|
|
"Field arc from the ALPHA-MR cab session, 2026-08-10 (operator + cab-side tester).\n\n"
|
|
"**Symptom (tester):** axes (optical-encoder channels: stick/throttle/pedals) stop responding "
|
|
"at random intervals during play; pressing a button appears to bring them back. Later the same "
|
|
"afternoon, three consecutive boots froze silently mid-startup (0 CPU, no window, no crash "
|
|
"block).\n\n"
|
|
"**Root cause (minidump over SSH + local cdb with the archived PDB):** the cab's COM1 is an "
|
|
"FTDI **USB-serial adapter**, and its USB link drops intermittently. The wedged process's main "
|
|
"thread was parked in GetOverlappedResult on a serial write that never completes -- the "
|
|
"1995/2007 packet layer waits UNBOUNDED. Stack: NtWaitForSingleObject <- GetOverlappedResult <- "
|
|
"PCSerialPacket::SendPacket <- RIO ctor. Brief link drops mute the polled analog channel (the "
|
|
"dropouts); a drop with a write in flight froze the whole game. The button 'revival' was almost "
|
|
"certainly mechanical (hand jostling the harness) + link re-enumeration, not protocol. Two "
|
|
"ghost Prolific PL2303 entries also claim COM1 from older plug-ins.\n\n"
|
|
"An earlier print-deadlock diagnosis of the boot wedge was WRONG (confounded A/B) and is "
|
|
"retracted -- the dump is the authority.\n\n"
|
|
"**Shipped (4.11.881, on the cab):**\n"
|
|
"- Bounded serial writes: 500 ms cap + CancelIo + a 3 s sick window (fast-drop). A dead adapter "
|
|
"now costs one hiccup, logged, instead of a frozen cockpit; keyboard fallback stays alive.\n"
|
|
"- [rio] health telemetry (default-on for hardware RIO): req/rep/btn, reply age, stalls, "
|
|
"txTO (bounded-write timeouts), line errors, and the board's own retry/full-buffer reports; "
|
|
"STALL/RECOVER event lines with the button-during-stall count.\n"
|
|
"- USB selective suspend disabled system-wide on the cab (prime suspect for the random-period "
|
|
"idle dropouts).\n"
|
|
"- Verified the same evening: a boot with the adapter actively sick came up healthy and logged "
|
|
"txTO=1 rRetry=4 instead of freezing.\n\n"
|
|
"**Hardware follow-up (cab-side, ~2 min):** move the FTDI adapter to a REAR motherboard USB "
|
|
"port (no hub/front panel), reseat its USB end (the RS-232 side checked out), and delete the "
|
|
"two ghost Prolific COM1 entries in Device Manager.\n\n"
|
|
"**Verify:** an instrumented play session -- work the axes hard; every dropout should now "
|
|
"appear as a STALL/RECOVER pair in podrun.log with counters saying whether the USB link "
|
|
"(txTO/age) or the wire (lineErr/rRetry) hiccuped. If the hardware follow-up kills the "
|
|
"dropouts entirely, close as hardware with the code hardening as the permanent safety net."})
|
|
print("created #", r["number"] if isinstance(r, dict) and "number" in r else "?")
|