RioRuntime raises AxesUpdated with the calibrated AxisOutputs after every analog reply (independent of the joystick sink, so the gauges work while editor input routing is suppressed). The editor strip now renders the values live: Z and the L/R pedals (Rx/Ry) fill bottom-up, Rz deflects from a center tick, and the X/Y box tracks the stick as a dot over a crosshair. Fraction/deflection math is pure in Core.Editing.AxisGauges (clamped, unit-tested); the canvas repaints only the strip and only on change. Verified by offline form screenshots against injected values. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.xcf → regions.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 1–5 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 (DeviceIoControl →
RioGamepad.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.iniimporter, 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). Seedocs/PLAN.mdfor the full roadmap.