DriveLink Desktop is the bridge application that allows you to use your Android phone as a high-performance racing game controller for Windows/Linux. It receives real-time motion and touch data from the DriveLink mobile app via UDP and translates it into virtual gamepad inputs.
- Low Latency: Uses UDP for near-instantaneous input transmission.
- Precise Steering: Maps phone rotation (accelerometer/gyroscope) to the virtual steering axis.
- Full Pedal Support: Real-time feeding of 3 independent Throttle, Brake, and Clutch axes.
- Custom Button Mapping: Support for gear shifts, handbrake, and other actions using buttons.
- Visual Feedback: Real-time UI indicators for steering angle, pedal levels, and connection status.
- Lightweight: Written using C++ to keep performance impact at a minimum while running in the background.
DriveLink Desktop acts as a "Bridge" in the system:
- Phone Sensor Data : Captured by DriveLink Android App.
- Network Transmission : Sent as UDP packets over local WiFi.
- Bridge Processing : DriveLink Desktop receives packets and parses the data.
- Feeder Execution : DriveLink Desktop feeds data into the virtual gamepad device.
- Game Reception : Your game (BeamNG.drive, Assetto Corsa, etc.) sees the phone as a standard Steering Wheel/Gamepad.
- OS: Windows 10/11 (64-bit).
- Visual C++ Redistrubutables: Download here
- Local Network: Phone and PC must be on the same WiFi network.
- Download DriveLink: Get the latest binary from the Releases page.
- Install DriveLink: Run the installer. It should install the app and vJoy driver automatically.
Firewall troubleshooting: Ensure UDP port
7001is open in your Windows Firewall for the local network. If there is a dialog that asks for permission to allow access to the network, click Allow access.
Warning
Built binaries which the below section talks about are NOT uploaded yet, they will be available soon.
- Download DriveLink: Get the latest tar ball from the Releases page.
- Directly run the binary inside, or use the installer script to make the desktop entry automatically.
- Install apps: Install the Android app on your mobile and Desktop app on your PC.
- Run DriveLink Desktop: Open the application. Instruction for linux users: Make sure to run the app as sudo otherwise it won't start.
- Connect Phone:
- Note your PC's local IP address (e.g.,
192.168.1.50). - Enter this IP in the settings page in the DriveLink mobile app.
- Go back to the home screen on the mobile app.
- Note your PC's local IP address (e.g.,
- Verification: You should see the steering wheel and pedal indicators move in the Desktop UI.
- Game Setup: Open your racing game and map the axes (Steering, Throttle, etc.) and the buttons to the actions of your choice.
DriveLink uses a custom binary protocol over UDP for maximum performance.
- Packet Parsing: The application parses packets containing floats for axes and a bitmask for buttons.
- Scaling: Phone rotation in radians (-π/2 to π/2) is mapped linearly to the virtual gamepad absolute axis range.
- Thread Safety: Networking is handled on a dedicated thread to ensure the UI remains responsive and the feeding loop (100Hz) stays consistent.
- No connection (Red Dot):
- Verify phone and PC are on the same WiFi.
- Double-check the PC's IP address.
- Disable Windows Firewall temporarily to test.
- The code execution cannot proceed because
dllname.dllwas not found. Reinstalling the program may fix this problem.- Download and install Visual C++ Redistributables from here.
- Not sure what the issue is?
- Check the log file, by default in the install location
log.txt. It saves the logs of the last time the program ran. Overwritten everytime program starts.
- Check the log file, by default in the install location
DriveLink is built with C++20 and SFML 3.0.
The project uses CMake along and it's fetch content feature to pull the SFML library. Make sure you have all the dependencies to build SFML installed on your system if you use Linux. In case you use windows, the process should be straightforward too.
Contributions are very welcome for fixes for these!
- No message box support on linux.
- No window minimizing on linux.
- Axes may not be consistent between platforms, for example throttle axis on windows may be mapped to windows' brake on linux.
- Dynamic port configuration via UI.
- Force Feedback support.
- More interactive widgets like line charts on the interface.
I hope you enjoy it!
