Pipe endpoints join the connection pickers; no more COM11/COM12 auto-bind

Each device row now serves one endpoint at a time, picked from a list of
pipe:vrio / pipe:vplasma (first, default) plus the machine's COM ports —
nothing opens automatically at startup. The pipe services gained an
IsListening property and are started/stopped by the row's Open/Close
button instead of running for the whole app lifetime, which also retires
the dual-transport warning. Status line shows the active endpoint;
OFFLINE when none. Standalone vPLASMA is unchanged (hardwired COM12 +
permanent pipe). Also fixes the xUnit1031 warnings in the plasma pipe
tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-12 23:17:34 -05:00
co-authored by Claude Fable 5
parent e507f1740c
commit 697cf3129b
5 changed files with 108 additions and 104 deletions
+12 -11
View File
@@ -106,10 +106,11 @@ a null-modem cable work the same way.
## Named pipes for DOSBox-X (no com0com)
When the game runs in the patched DOSBox-X (the fork's `namedpipe` serial
backend), the virtual ports aren't needed at all: both devices also serve a
named pipe for the whole app lifetime`\\.\pipe\vrio` and
`\\.\pipe\vplasma` — and DOSBox-X connects as the client, retrying in the
background until the pipe exists:
backend), the virtual ports aren't needed at all: each device's connection
picker lists its named-pipe endpoint`pipe:vrio`, `pipe:vplasma`
alongside the machine's COM ports. Select it and **Open** to serve
`\\.\pipe\vrio` / `\\.\pipe\vplasma`; DOSBox-X connects as the client,
retrying in the background until the pipe exists:
```ini
[serial]
@@ -124,11 +125,11 @@ reads as all-lines-low (cable unplugged). The contract lives in
`src/VRio.Core/Device/PipeFraming.cs` on this side and `serialnamedpipe.h`
on the fork's. TX is paced exactly like the COM path — with the 9600-baud
wire gone, the pacer is the only thing between the host and an impossible
burst. The COM rows keep working unchanged (RIOJoy, real pods); if a pipe
client connects while a COM host is active the wire log warns, since the
RIO is a single-host device. vRIO's built-in glass and the standalone
vPLASMA share the `vplasma` pipe name — whoever starts second retries until
the name frees up.
burst. Each row serves one endpoint at a time — the RIO is a single-host
device — and nothing opens automatically at startup; the COM path is
unchanged for RIOJoy and real pods. vRIO's built-in glass and the
standalone vPLASMA share the `vplasma` pipe name — whoever starts second
retries until the name frees up.
## vPLASMA — the companion plasma display
@@ -136,8 +137,8 @@ The cockpit's second serial device is the **plasma display**: a 128×32
dot-matrix panel on COM2 (9600 8N1, no flow control) that the game draws
mission text and status graphics on. The software replica comes in two
forms. **Built into vRIO**: the panel's encoder strip hosts the glass at
top left, with its own port row in the control strip (label colour = port
status; auto-opens **COM12** at startup when present). And standalone,
top left, with its own connection row in the control strip (label colour =
connection status; picker offers `pipe:vplasma` and the COM ports). And standalone,
`VPlasma.App`: a bare-glass window that opens **COM12** (the device end of
the plasma's null-modem pair) on startup — retrying while the port is
missing or busy, port status in the title bar. Both decode the display's