# RioJoySmokeTest

On-cabinet verification that the **virtual gamepad path works end to end**: it
drives the real [`HidFeederJoystickSink`](../../src/RioJoy.Core/Output/HidFeederJoystickSink.cs)
(open the RioGamepad device → submit reports via `IOCTL_RIO_SUBMIT_REPORT`) and
reads the gamepad back through `winmm joyGetPosEx`, the same data `joy.cpl` and a
game would see. It checks the six axes (min/mid/max), buttons, and the POV hat.

This is **not** part of `RioJoy.sln` and not a unit test — it needs the signed
driver actually installed (see [`driver/README.md`](../../driver/README.md)), so
it only passes on a machine where the RioGamepad device is present.

## Run

```cmd
dotnet run --project tools/RioJoySmokeTest -c Release
```

Exit codes: `0` all checks passed · `1` a check failed · `2` driver or joystick
not found (driver not installed, or device not started — check Device Manager).
