CydandClaude Fable 5 1156eb8fe9 Mash tool: dispose transport before awaiting the link on shutdown
On a wedged (fully silent) board the receive loop sits in a pending
net48 serial read that ignores cancellation; awaiting the link before
closing the port hangs the tool at run end and loses the summary -
exactly what happened on the first real baseline run (the board wedged
at 0.62s and stayed dead, so no byte ever completed the read). Close
the port first (same order RioCoordinator.Teardown uses); applies to
both monitor and --mash modes. Selftest unaffected (its fake transport
honors cancellation, which is why it never caught this).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 00:11:26 -05:00

RIOJoy

Modern Windows 10/11 interface between the cockpit RIO (Remote Input/Output) board and Windows, as a virtual joystick / keyboard / mouse — the successor to the legacy vJoy-based app, with no vJoy dependency.

The RIO has 72 digital inputs and outputs (lighted buttons) and 5 analog axes (joystick X/Y, throttle, left pedal, right pedal), connected over RS-232 at 9600 8N1. RIOJoy exposes these to games that don't natively know about the cockpit hardware, with per-game profiles. (The native games — Firestorm, Red Planet — talk to the RIO directly and do not use this app.)

Repository layout

Path Contents
src/RioJoy.Core Protocol, profile model, input mapper, HID feeder (class library)
src/RioJoy.Tray Background tray application
tests/RioJoy.Core.Tests xUnit tests for the protocol core
driver/ RioGamepad virtual HID driver (KMDF + VHF) — replaces vJoy
tools/RioJoySmokeTest On-cabinet end-to-end check of the feeder → driver path
tools/XcfRegionExtract Extracts cockpit label regions from riojoy.xcfregions.json
docs/PLAN.md Full modernization plan (7 phases)
docs/PROTOCOL.md RIO wire format + iRIO input-map reference
docs/reference/ Cockpit overlay art & the legacy labeling pipeline
legacy/ Original C++/vJoy implementation, kept as reference

Building

Requires the .NET SDK (8.0 or newer) plus the .NET Framework 4.8 targeting/developer pack, on Windows. The apps target .NET Framework 4.8, which is in-box on every Windows 10/11 machine — so deployed builds are framework-dependent and need no runtime install on the target. The driver builds separately with the WDK (see driver/README.md).

dotnet build RioJoy.sln -c Release
dotnet test RioJoy.sln

Status

Phases 15 are implemented and tested (241 unit tests). The RioGamepad virtual HID driver is built (KMDF + VHF), test-signed, installed, and verified: it enumerates in joy.cpl, and the C# HID feeder (DeviceIoControlRioGamepad.sys) drives its axes, buttons, and hat end-to-end (see tools/RioJoySmokeTest). The C# side covers the serial

  • RIO protocol core, input mapping + output routing, axis calibration + plasma display, the tray app + profiles (JSON config, RIO.ini importer, three-state auto-switch), and the HID report packer that matches the driver's wire format. Remaining work is on-cabinet (real RIO serial/axis/plasma/auto-switch verification) plus packaging (Phase 6) and the profile editor + overlay generator (Phase 7). See docs/PLAN.md for the full roadmap.
S
Description
No description provided
Readme
13 MiB
Languages
Assembly 80.3%
C# 11.2%
C++ 5.8%
C 1.3%
PowerShell 0.7%
Other 0.7%