CydandClaude Opus 4.8 5dddbd2694 Phase 1 (3b): driver signing/install scripts + C# HID feeder sink
Make the virtual gamepad deployable on owned cabinets and wire the real
user-mode feeder:

- driver/sign.ps1 (non-admin): create a self-signed code-signing cert, build the
  catalog with inf2cat, and SHA-256-sign RioGamepad.sys + .cat (embed-sign the sys
  before cataloguing so the .cat matches). Exports RIOJoyTest.cer. Verified
  end-to-end against the EWDK (signability + catalog clean; both files signed).
- driver/install.ps1 (admin, two-phase): trust the cert (LocalMachine Root +
  TrustedPublisher), stage the package (pnputil /add-driver), enable test signing;
  after reboot, -CreateDevice runs devgen to create root\RioGamepad so PnP installs
  it. uninstall.ps1 reverses it.
- RioJoy.Core.Output.HidFeederJoystickSink: opens the driver by
  GUID_DEVINTERFACE_RIOGAMEPAD (SetupAPI), maintains a RioHidReport, and submits it
  via DeviceIoControl(IOCTL_RIO_SUBMIT_REPORT) on each axis/button/hat change.
  RioCoordinator now uses it when the driver is present and falls back to the no-op
  sink otherwise (status shows "[no joystick driver]").
- gitignore the signing outputs (driver/package/, *.cat); driver/README.md gets the
  full build → sign → install → joy.cpl workflow.

Remaining = the actual elevated install + reboot + joy.cpl verification on the
cabinet (admin steps), and on-hardware confirmation of the feeder.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 21:17:04 -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
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 8 SDK and Windows. 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 (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 for the full roadmap.

S
Description
No description provided
Readme
1.9 MiB
Languages
Assembly 59.6%
C# 22.6%
C++ 13%
C 1.9%
PowerShell 1.5%
Other 1.3%