This repository is the Windows server. It turns UDP input into a virtual Xbox 360 (XInput) controller through the ViGEmBus driver. Phones connect from PocketController-App.
server/
├── Protocol/ (48-byte packets and discovery text)
├── NetworkLayer/ (UDP listen, sessions, discovery)
├── GamepadDriver/ (virtual Xbox 360 via ViGEm)
└── MainForm (server window)
- Listens for 48-byte little-endian UDP controller packets. The default port is
5555. - Answers discovery probes on UDP
5556and broadcasts announcements on UDP5557. - Keeps up to 4 sessions. Each session gets one virtual Xbox 360 controller.
- Drops a session after 5 seconds with no packets.
- The window has Start/Stop, the listen address, the session list, and an event log.
| Setting | Value |
|---|---|
| UDP port | 5555 |
| Discovery | UDP 5556 (probes) / 5557 (announcements) |
| Announcements | every 2 s while running |
| Sessions | 4 |
| Idle timeout | 5 s |
- Windows 10/11
- ViGEmBus driver
- .NET 10 runtime
- To build: .NET 10 SDK, and Visual Studio 2022 17.13+ or Visual Studio 2026 (the solution is
.slnx)
- Install the ViGEmBus driver.
- Open
server/PocketControllerServer.slnx, set PocketControllerServer as the startup project, and run it (F5). - Click Start. The server listens on UDP port
5555by default. - If Windows Firewall asks, allow PocketController Server on private networks (UDP
5555for play,5556–5557for discovery).
Having trouble? See SUPPORT.md.
The packet layout this server parses and the replies it sends are documented in docs/PROTOCOL.md.
cd server
dotnet build PocketControllerServer.slnx
dotnet test TestsSee CONTRIBUTING.md.
| Project | Version |
|---|---|
| PocketController Server | 1.2.2 |
server/PocketControllerServer.csproj sets Version, AssemblyVersion (1.2.2.0), and FileVersion (1.2.2.0). The window header in server/MainForm.Designer.cs shows the same number. See the changelog.