# 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`](src/RioJoy.Core/) | Protocol, profile model, input mapper, HID feeder (class library) | | [`src/RioJoy.Tray`](src/RioJoy.Tray/) | Background tray application | | [`tests/RioJoy.Core.Tests`](tests/RioJoy.Core.Tests/) | xUnit tests for the protocol core | | [`driver/`](driver/) | `RioGamepad` virtual HID driver (KMDF + VHF) — replaces vJoy | | [`docs/PLAN.md`](docs/PLAN.md) | Full modernization plan (7 phases) | | [`docs/PROTOCOL.md`](docs/PROTOCOL.md) | RIO wire format + `iRIO` input-map reference | | [`docs/reference/`](docs/reference/) | Cockpit overlay art & the legacy labeling pipeline | | [`legacy/`](legacy/) | Original C++/vJoy implementation, kept as reference | ## Building Requires the **.NET 8 SDK** and Windows. The driver builds separately with the **WDK** (see [`driver/README.md`](driver/README.md)). ```sh dotnet build RioJoy.sln -c Release dotnet test RioJoy.sln ``` ## Status Phases 1–5 are implemented and tested (136 unit tests): the `RioGamepad` virtual HID driver compiles to `.sys` against the EWDK (KMDF + VHF), and 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 **deploy-side**: test-sign + install the driver, wire the real `DeviceIoControl` feeder, and verify on a cabinet. See [`docs/PLAN.md`](docs/PLAN.md) for the full roadmap.