LCDPossible includes a virtual LCD simulator for testing and development without physical hardware. The simulator is a standalone Avalonia GUI application that receives display data over UDP and renders it in a window.
- Testing without hardware - Develop and test panels without an LCD device
- Development - Debug rendering issues with visual feedback
- Demonstrations - Show LCDPossible capabilities without hardware
- CI/CD - Automated testing of panel rendering
# From the repository root
dotnet run --project src/LCDPossible.VirtualLcdThe simulator opens a window showing a virtual 1280x480 LCD display.
In another terminal:
# The service auto-detects the virtual device
lcdpossible show cpu-infoThe panel appears in the simulator window.
dotnet run --project src/LCDPossible.VirtualLcd -- [options]| Option | Description | Default |
|---|---|---|
-d, --driver |
Protocol to simulate | trofeo-vision |
-p, --port |
UDP port to listen on | Auto (5302-5399) |
-b, --bind |
IP address to bind to | 0.0.0.0 |
--stats |
Show statistics overlay | Off |
--always-on-top |
Keep window above others | Off |
--borderless |
Hide window decorations | Off |
--scale |
Window scale factor (0.1-10.0) | 1.0 |
--list-drivers |
List available protocols | - |
# Show all available protocols
dotnet run --project src/LCDPossible.VirtualLcd -- --list-drivers
# Start with specific port
dotnet run --project src/LCDPossible.VirtualLcd -- -p 5302
# Scaled-down window, always on top
dotnet run --project src/LCDPossible.VirtualLcd -- --scale 0.5 --always-on-top
# Borderless window for streaming/recording
dotnet run --project src/LCDPossible.VirtualLcd -- --borderless
# Show frame statistics
dotnet run --project src/LCDPossible.VirtualLcd -- --statsThe simulator supports the same device protocols as physical devices:
| Protocol | Description | Resolution |
|---|---|---|
trofeo-vision |
Thermalright Trofeo Vision LCD | 1280x480 |
Protocols are provided by device plugins. When you add a new device driver plugin, it can also provide a simulator handler.
┌─────────────────┐ UDP Packets ┌─────────────────┐
│ LCDPossible │ ──────────────────▶ │ VirtualLcd │
│ (Service) │ │ (Simulator) │
└─────────────────┘ └─────────────────┘
│ │
│ Encodes frames as │ Decodes packets
│ HID packets │ using protocol
│ │ handler
▼ ▼
JPEG-encoded Rendered in
frame data Avalonia window
- LCDPossible encodes panel frames as JPEG data in HID packet format
- Instead of sending to USB, packets go to the simulator via UDP
- The simulator's protocol handler decodes the packets
- Decoded frames are displayed in the Avalonia window
Test your display profile with the simulator:
# Terminal 1: Start simulator
dotnet run --project src/LCDPossible.VirtualLcd
# Terminal 2: Run with your profile
lcdpossible serve --profile my-gaming-profile# Render panel to file (no simulator needed)
lcdpossible render cpu-info --debug
# Test with simulator for live preview
# Terminal 1:
dotnet run --project src/LCDPossible.VirtualLcd
# Terminal 2:
lcdpossible show my-new-panelEnable statistics overlay to see:
- Frame rate
- Decode time
- Packet count
dotnet run --project src/LCDPossible.VirtualLcd -- --statsUse borderless mode for clean captures:
dotnet run --project src/LCDPossible.VirtualLcd -- --borderless --scale 1.0The simulator is built as part of the main solution:
# Build all projects including simulator
./build.ps1
# Or build just the simulator
dotnet build src/LCDPossible.VirtualLcd- .NET 10.0 SDK
- Avalonia UI (included via NuGet)
-
Check port availability:
# Linux/macOS netstat -an | grep 5302 # Windows netstat -an | findstr 5302
-
Check firewall rules - UDP port must be open
-
Verify service is targeting simulator:
lcdpossible list # Should show virtual device
- Check if Avalonia dependencies are installed
- Try without
--borderlessflag - Check display scaling settings
- Reduce window scale:
--scale 0.5 - Disable stats overlay if enabled
- Check CPU usage of both simulator and service
See also: Getting Started | Panel Development