Skip to content

feat(lcd): Add support for Solarmax / HL-VMAX (Artinchip VID 0x33C3 PID 0xF101) displays - #1071

Open
Le-Maxime wants to merge 1 commit into
mathoudebine:mainfrom
Le-Maxime:HL-VMAX-Screen
Open

feat(lcd): Add support for Solarmax / HL-VMAX (Artinchip VID 0x33C3 PID 0xF101) displays#1071
Le-Maxime wants to merge 1 commit into
mathoudebine:mainfrom
Le-Maxime:HL-VMAX-Screen

Conversation

@Le-Maxime

Copy link
Copy Markdown

Summary

Add support for Solarmax / HL-VMAX (Artinchip USB VID 0x33C3, PID 0xF101) ultra-wide LCD displays.

These displays are featured in cases like the Solarmax CM-B600L and sold as standalone secondary ultrawide monitor bars (e.g. 462x1920 16.0"/9.2", 320x1480 11.3", and 480x1920 8.8").

Protocol & Implementation Details

  • Interface: USB CDC ACM Virtual Serial (pyserial).
  • Port Settings: Configured specifically for USB CDC virtual COM devices (rtscts=False, dsrdtr=False, dtr=True, rts=True).
  • Handshake & Geometry Auto-detection: Sends F0 A5 5A 0F, panel responds with 26-byte ASCII descriptor containing serial and geometry (e.g. VMAXD160462*1920...), dynamically setting display dimensions.
  • Brightness Control: 5-byte packet AA BB <level 0..100> CC DD.
  • Thread-safe Frame Streaming:
    • Implemented in-memory composite canvas with _frame_pending queue debounce.
    • Sensor threads update memory canvas without blocking, while full JPEG frames are serialized and rate-limited to avoid Artinchip USB FIFO buffer saturation.
  • Orientation Support: Full support for Portrait, Reverse Portrait, Landscape, and Reverse Landscape.

Changes Included

  1. Driver: library/lcd/lcd_comm_vmax.py implementing LcdCommVmax.
  2. Display Routing: Added VMAX revision routing in library/display.py.
  3. GUI Configuration: Updated configure.py with Solarmax / HL-VMAX model options and ultrawide dimensions.
  4. Console Window Fix: Patched GPUtil.getGPUs() and child process spawns with CREATE_NO_WINDOW on Windows to prevent flashing console windows.
  5. Testing & Tools: Added unit tests in tests/library/lcd/test_lcd_comm_vmax.py and test helper in tools/test-vmax-screen.py.
  6. Documentation: Updated README.md, config.yaml, and simple-program.py.

Hardware Validation

  • Physically validated with hardware VMAXD160462*1920S262001750 on Windows.
  • Tested themes (Cyberpunk 2077 Vertical), sensor streaming, and orientation switching.
  • Unit tests (tests/library/lcd/test_lcd_comm_vmax.py) pass.

@Le-Maxime
Le-Maxime force-pushed the HL-VMAX-Screen branch 2 times, most recently from 07e6156 to 32d4a9e Compare August 27, 2026 17:34
…ID 0xF101) displays

- Added LcdCommVmax driver supporting USB CDC serial protocol
- Added automatic geometry descriptor parsing (462x1920, 320x1480, 480x1920)
- Implemented thread-safe in-memory canvas buffering and frame queue rate-limiting
- Configured CDC serial parameters (rtscts=False, dtr=True, rts=True) for reliable handshake
- Patched GPUtil and Windows process execution with CREATE_NO_WINDOW
- Added unit tests, test script, configure.py model support, and documentation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant