PhonePad
An Android phone as a wireless Xbox-compatible controller for a Windows PC, over the Wi-Fi you already have. Nothing to buy, no Bluetooth, no cable.
phonepad.dynshift.com Source on GitHub
The problem it solves
A growing share of PC gaming assumes a controller. Console ports often have no keyboard and mouse support; Xbox Cloud Gaming streams console games that cannot get past the title screen without a pad. Most people have a phone within reach and no controller at all. PhonePad makes the phone the pad.
The obvious approaches do not work. Android does not let an ordinary app
present the phone as a Bluetooth HID gamepad, and a keyboard emulator
is not a controller as far as a game is concerned. What does work is a
small program on the PC that creates a virtual Xbox 360
controller on an XInput slot, driven by whatever the phone sends over the
network. Windows lists it in joy.cpl like any other pad, and
at the level a game looks there is no difference.
What it consists of
- The app, for Android, built with Flutter. The on-screen controller: sticks, triggers, d-pad, buttons, and a layout editor that lets every control be moved, resized, rotated, hidden or tuned. Four presets ship (Standard, Racing, Precision, Southpaw), with separate arrangements for landscape and portrait that switch when the phone rotates.
- The companion, for Windows, written in Rust. A single self-contained program with no installer. It creates the virtual pad through the ViGEmBus driver, receives and authenticates the phone's packets, and shows what is happening: round trip, packet rate, loss, and why anything was rejected.
- The protocol between them, documented in the repository with a fixture both sides are tested against. Every packet is authenticated with a key established at pairing, so nothing else on the network can inject input. There is no account, no server and no telemetry; the phone talks to the PC and to nothing else.
What was measured
The figures the PhonePad site quotes were recorded on a Galaxy S24 Ultra and a Windows 11 PC on ordinary home Wi-Fi, and the method is in the repository's benchmarks document alongside the raw output.
- Round trip, phone to PC and back: 4.9 to 8.0 ms, typically about 5 ms.
- Packet rate: 249 a second, matching the configured target.
- Loss: 0.0% across 42,805 consecutive packets.
- Jitter: 0.1 to 0.6 ms.
- The virtual controller itself adds under a tenth of a millisecond on average: a probe writes a known state and reads it back through Windows' own XInput API.
Two findings from that work shaped the product. The first attempt at a 250 Hz test sender managed 65 Hz, because Windows rounds socket timeouts up to its 15.6 ms scheduler tick; the sender had to be rebuilt around a non-blocking socket. And the touch sticks were rebuilt rather than retuned: a physical stick needs an inner deadzone to hide spring slop and sensor drift, a touchscreen has neither, and the game at the far end is already applying its own. Stacking a second deadzone on top left a quarter of the thumb's travel doing nothing. PhonePad's output now starts just past the game's dead band instead.
What it does not do
- A phone has one vibration motor where a pad has two, so strong and weak rumble are combined.
- Gyro aiming is not implemented. The protocol reserves a flag for it; nothing else exists yet.
- One phone at a time.
- No iOS version. There is no way to ship this on iOS that works as well as the Android one, and doing it badly would be worse than not doing it.
- The Windows companion is not code-signed, so SmartScreen warns on first run. Checksums for every release file are published alongside it.
- It relies on ViGEmBus, which is archived. It works and is what Parsec and DS4Windows use; the backend sits behind an interface so a successor can replace it without touching anything else.
Where it is going
There are no dates. In roughly the order they are likely to happen: per-game tuning profiles with a short calibration step, a portable format for sharing layouts, running the companion at login, gyro aiming, and a second phone for local two-player. Not planned: an account system, a server of any kind, or putting the controller behind a paywall.
Getting it
The PhonePad site has the setup guide, documentation and troubleshooting. Releases are on GitHub: an Android APK (64-bit ARM) and the Windows companion, with a SHA-256 checksum file. PhonePad is not on the Play Store. Bugs go to issues, questions and ideas to discussions.