Type: Feature Request / Experimental Evaluation
Status: ๐ฌ Testing in Progress
Priority: Medium
๐ Description
Implement a system that allows application to act as a configurable button panel for DCS World by transmitting input events over UDP connection back to forward_parsed_udp.py .
This document also serves as an experimental evaluation to determine whether the Virtual HID approach is better and easier suited than direct Export.lua commands for the application and every Module Aircraft.
๐๏ธ Proposed Architecture
Option A: Virtual HID Device (Current Experiment)
โโโโโโโโโโโโโโโโ UDP/AES-GCM โโโโโโโโโโโโโโโโ HID Driver โโโโโโโโโโโโโ
โ ๐ฑ Android โ โโโโโโโโโโโโโโโโโบ โ ๐ Python โ โโโโโโโโโโโโโโโโบ โ ๐ฎ DCS โ
โ Button App โ โ Backend โ โ World โ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโ
(vgamepad/uinput) (Std Joystick)
Option B: Direct Export.lua (Comparison)
โโโโโโโโโโโโโโโโ UDP/AES-GCM โโโโโโโโโโโโโโโโ Export.lua โโโโโโโโโโโโโ
โ ๐ฑ Android โ โโโโโโโโโโโโโโโโโบ โ ๐ Python โ โโโโโโโโโโโโโโโโบ โ ๐ฎ DCS โ
โ Button App โ โ Backend โ โ World โ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโ
(Lua Socket) (LoSetCommand)
โ๏ธ Comparison Matrix
| Kriterium |
Virtual HID |
Export.lua |
| DCS Native Binding UI |
โ
|
โ |
| Works with other games |
โ
|
โ |
| No Lua scripting needed |
โ
|
โ |
| Module-specific commands |
โ |
โ
|
| No virtual device setup |
โ |
โ
|
| Lower abstraction layers |
โ |
โ
|
| Portable solution |
โ
|
โ |
๐ฆ Scope
โ
In Scope
- New Kotlin module with configurable buttons, switches, encoders
- Bidirectional UDP communication
- Secure channel: ECDH key exchange + AES-GCM encryption via forward_parsed_udp.py and crypto_handshake.py
- Python backend exposing virtual HID device
- DCS World recognition as standard input hardware
- Cross-platform backend (Windows/Linux)
- Working also in other games (MSFS , XPLANE etc)
โ Out of Scope
- Android as direct USB HID (no root/custom kernel)
- Reverse engineering of DCS internals
- Macro functionality (1 event = 1 HID input)
๐ Requirements
| Requirement |
Target |
Status |
| End-to-end latency |
< 10 ms |
โณ |
| Event mapping |
1:1 (no macros) |
โณ |
| Device identification |
Fixed VID/PID |
โณ |
| License compliance |
Apache/BSD/MIT only |
โณ |
๐ฅ๏ธ Platform Support
| Platform |
Implementation |
Library |
| Windows |
ViGEmBus |
vgamepad |
| Linux |
uinput/evdev |
evdev |
โ
Acceptance Criteria
๐งช Test Cases
Phase 1: Infrastructure Setup (if use seperate .py forwarder)
Phase 2: Basic HID Functionality
Phase 3: DCS World Integration
Phase 4: Stability & Edge Cases
Phase 5: Export.lua Comparison ๐ฌ
๐ Measurement Log
| Test |
Date |
Result |
Latency |
Notes |
| 2.4 |
|
โณ |
โ ms |
|
| 5.3 |
|
โณ |
โ ms |
|
| 5.6 |
|
โณ |
โ ms |
|
๐ ๏ธ Implementation Checklist
๐ฑ Android App
๐ Python Backend
๐ฎ DCS Integration
๐ฎ Future Extensions
๐ Current Status
| Phase |
Status |
| Infrastructure |
โณIn Progress |
| Basic HID |
โณ Open |
| DCS Integration |
โณ Open |
| Stability |
โณ Open |
| Comparison |
โณ Open |
๐ Description
Implement a system that allows application to act as a configurable button panel for DCS World by transmitting input events over UDP connection back to forward_parsed_udp.py .
This document also serves as an experimental evaluation to determine whether the Virtual HID approach is better and easier suited than direct Export.lua commands for the application and every Module Aircraft.
๐๏ธ Proposed Architecture
Option A: Virtual HID Device (Current Experiment)
Option B: Direct Export.lua (Comparison)
โ๏ธ Comparison Matrix
๐ฆ Scope
โ In Scope
โ Out of Scope
๐ Requirements
๐ฅ๏ธ Platform Support
vgamepadevdevโ Acceptance Criteria
๐งช Test Cases
Phase 1: Infrastructure Setup (if use seperate .py forwarder)
jstest/evtest(Linux)Phase 2: Basic HID Functionality
Phase 3: DCS World Integration
Phase 4: Stability & Edge Cases
Phase 5: Export.lua Comparison ๐ฌ
LoSetCommand()executes externallyGetDevice()cockpit manipulation works๐ Measurement Log
๐ ๏ธ Implementation Checklist
๐ฑ Android App
๐ Python Backend
๐ฎ DCS Integration
๐ฎ Future Extensions
๐ Current Status