Skip to content

Conversation

@JoanDelilahPepin
Copy link
Contributor

Summary

This PR adds Vial support for the Keychron Q15 Max ANSI variant with dual rotary encoders.

Features

  • ✅ Full Vial GUI support with proper visual layout
  • ✅ Dual rotary encoders with configurable actions per layer
  • ✅ RGB Matrix with 64 LEDs and all QMK RGB effects
  • ✅ Vial configuration: 16 Macros, 8 Tap Dance keys, 8 Combos, 5 Layers
  • Wired-only implementation - no wireless dependencies

Technical Implementation

RGB Driver

  • Added SNLED27351 SPI variant driver to support the Q15 Max's RGB implementation
  • Driver ported from Keychron's wireless branch (credit: Tymon3310)
  • Fully integrated with QMK's RGB Matrix subsystem

Encoder Support

  • Two rotary encoders at top corners (positions 0,0 and 0,13)
  • Default mapping: Volume control (base layers), Brightness control (function layers)
  • Fully configurable through Vial GUI

Testing

  • Firmware compiles without warnings
  • All keys register correctly
  • Both encoders work (rotation and press)
  • RGB lighting functions properly
  • Vial GUI loads and configures correctly

Credits

  • SPI LED Driver: Ported from Tymon3310's implementation in Keychron wireless branch
  • Vial Integration: d3lilah
  • Original Hardware Support: Keychron

Files Changed

  • New driver: drivers/led/snled27351-spi.[ch]
  • Build system: Added snled27351_spi RGB Matrix driver type
  • New keyboard: keyboards/keychron/q15_max/ansi_encoder/keymaps/vial/

This is a clean, wired-only port that removes all wireless dependencies while maintaining full functionality.

ZMK User and others added 8 commits November 26, 2025 17:40
- Created complete Vial keymap structure following Q3 pattern
- Generated unique Vial UID and vial.json with 66-key layout
- Added 8 layer support and VialRGB configuration
- Simplified q15_max.c to remove wireless dependencies
- Created keyboard.json for Vial branch compatibility

Status: Structure complete but compilation fails due to peripheral
configuration differences between branches. See VIAL_PORT_STATUS.md
for details on remaining work needed.

Note: Wireless features not available in Vial branch
…int)

- Complete Vial port with 66-key ANSI layout
- 5 layers: Mac base, Windows base, Mac Fn, Windows Fn, F-keys
- Dual encoder support with volume control
- 16 macro slots, 8 tap dance slots, 8 combo slots
- Fixed matrix mapping issues in vial.json
- Keychron common functionality integrated
- RGB temporarily disabled (to be added next)

This is a working checkpoint before adding RGB support.

Co-Authored-By: Claude <[email protected]>
- Full RGB Matrix support via SNLED27351 SPI driver (ported from Tymon3310)
- Dual rotary encoders with proper Vial GUI integration
- 64 RGB LEDs with all effects working
- Clean wired-only implementation (no wireless dependencies)
- Vial features: 16 macros, 8 tap dance, 8 combos, 5 layers

Co-Authored-By: Tymon3310 (SPI LED driver implementation)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
- Add comprehensive README for Vial keymap
- Credit Tymon3310 for SPI LED driver port
- Document all features and technical details
- Clean up for PR submission

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Changed UID from 0xB5BE... to 0x70FE... to ensure uniqueness across all Vial keyboards
Move encoder representations to a separate row 5 to prevent skewing
of the main keyboard layout in the Vial GUI. This provides a cleaner
visual representation with encoders displayed below the keyboard.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Copy working Vial keymap to default and disable VIA/VIAL features
to create a standard QMK keymap. This is required for the Vial PR
to be merged.

- Based on Vial keymap structure with 5 layers
- Removed Vial-specific configuration
- Disabled VIA and VIAL in rules.mk
- Kept encoder map functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
The previous UID was causing the CI check to fail. Generated a fresh
random UID to ensure uniqueness.

UID: 0x36, 0xA9, 0x43, 0x75, 0x3E, 0x8A, 0x1D, 0xFA
@JoanDelilahPepin
Copy link
Contributor Author

Closing this PR to resubmit a clean version with only Q15 Max changes

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