Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions keyboards/keychron/q15_max/VIA_SUPPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Keychron Q15 Max VIA Support

This document describes the additions made to enable full VIA support with all RGB Matrix effects for the Keychron Q15 Max keyboard.

## Changes Made

### 1. VIA Keymap Configuration (`keyboards/keychron/q15_max/ansi_encoder/keymaps/via/config.h`)

Added configuration to enable all 47 available RGB Matrix effects:

- **Standard Effects** (22 effects)
- Solid Color, Alphas Mods, Gradient Up/Down, Gradient Left/Right
- Breathing, Band animations (SAT/VAL/Pinwheel/Spiral)
- Cycle animations (All/Left-Right/Up-Down/Out-In/Pinwheel/Spiral)
- Rainbow effects (Moving Chevron/Beacon/Pinwheels)
- Miscellaneous (Raindrops, Jellybean Raindrops, Hue animations, Pixel Rain, Starlight)

- **Framebuffer Effects** (2 effects)
- Typing Heatmap
- Digital Rain

- **Reactive Effects** (12 effects) - Require keypresses
- Solid Reactive variations
- Splash and Multisplash effects
- Cross and Nexus patterns

### 2. VIA JSON Definition (`keyboards/keychron/q15_max/via_json/q15_max_ansi_encoder_fixed.json`)

Created a corrected VIA JSON file that:
- Properly identifies the keyboard for VIA detection
- Lists all 47 RGB effects in the correct order
- Includes proper matrix configuration (5 rows × 14 columns)
- Defines the keyboard layout

## How to Use

### Compiling the Firmware

```bash
qmk compile -kb keychron/q15_max/ansi_encoder -km via
```

### Flashing the Firmware

1. Put the keyboard into DFU mode (hold ESC while plugging in USB)
2. Flash using QMK Toolbox or command line:
```bash
qmk flash -kb keychron/q15_max/ansi_encoder -km via
```

### Loading in VIA

1. Open VIA (web or desktop app)
2. Go to Settings → Show Design Tab
3. Load the JSON definition file from `keyboards/keychron/q15_max/via_json/q15_max_ansi_encoder_fixed.json`
4. The keyboard should now be detected and all RGB effects available

## RGB Effects List

The following effects are now available in VIA:

1. Solid Color
2. Alphas Mods
3. Gradient Up Down
4. Gradient Left Right
5. Breathing
6. Band Sat
7. Band Val
8. Band Pinwheel Sat
9. Band Pinwheel Val
10. Band Spiral Sat
11. Band Spiral Val
12. Cycle All
13. Cycle Left Right
14. Cycle Up Down
15. Rainbow Moving Chevron
16. Cycle Out In
17. Cycle Out In Dual
18. Cycle Pinwheel
19. Cycle Spiral
20. Dual Beacon
21. Rainbow Beacon
22. Rainbow Pinwheels
23. Flower Blooming
24. Raindrops
25. Jellybean Raindrops
26. Hue Breathing
27. Hue Pendulum
28. Hue Wave
29. Pixel Flow
30. Pixel Rain
31. Starlight
32. Starlight Dual Hue
33. Starlight Dual Sat
34. Typing Heatmap
35. Digital Rain
36. Solid Reactive Simple
37. Solid Reactive
38. Solid Reactive Wide
39. Solid Reactive Multiwide
40. Solid Reactive Cross
41. Solid Reactive Multicross
42. Solid Reactive Nexus
43. Solid Reactive Multinexus
44. Splash
45. Multisplash
46. Solid Splash
47. Solid Multisplash

## Known Issues

- The Pixel Fractal and Riverflow effects were commented out as they cause compilation issues with the current QMK version
- These effects may be added in future updates when compatibility is resolved

## Testing

All effects have been tested and verified working on actual Q15 Max hardware with VIA 3.0.

## Contributing

This configuration can be used as a reference for enabling VIA support on other Keychron Max series keyboards that use similar RGB Matrix configurations.
90 changes: 90 additions & 0 deletions keyboards/keychron/q15_max/ansi_encoder/keymaps/via/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

/* VIA configuration */
#define DYNAMIC_KEYMAP_LAYER_COUNT 5

/* Increase VIA layout options */
#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2

/* Keep USB connection active in wireless mode for VIA */
#define KEEP_USB_CONNECTION_IN_WIRELESS_MODE

/* Note: Color swap is handled at the driver level with SNLED27351_SWAP_RED_BLUE in main config.h */
/* RGB_MATRIX_COLOR_SWAP_RB was removed as it's not used in the codebase */

/* Ensure VIA works with wireless features */
#ifdef LK_WIRELESS_ENABLE
#define VIA_CUSTOM_LIGHTING_ENABLE
#define VIA_QMK_RGBLIGHT_ENABLE
#endif

/* Enable ALL RGB Matrix animations! */
#define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static gradient left to right, speed controls how much gradient changes
#define ENABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation
#define ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
#define ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness
#define ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient chevron scrolling left to right
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard
#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
#define ENABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard
#define ENABLE_RGB_MATRIX_FLOWER_BLOOMING // Full multiple gradients blooming from the center
#define ENABLE_RGB_MATRIX_RAINDROPS // Randomly lights LEDs winking in and out
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly lights LEDs with random hues
#define ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount then shifts back
#define ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left
#define ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right
#define ENABLE_RGB_MATRIX_PIXEL_FLOW // Pulsing RGB flow along LED wiring with random hues
#define ENABLE_RGB_MATRIX_PIXEL_RAIN // Randomly light keys with random hues
#define ENABLE_RGB_MATRIX_STARLIGHT // LEDs turn on and off at random at varying brightness
#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE // LEDs turn on and off at random at varying brightness and two hues
#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT // LEDs turn on and off at random at varying brightness and saturation
// Removed PIXEL_FRACTAL and RIVERFLOW - incompatible with this branch

#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM!
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation
#endif

#ifdef RGB_MATRIX_KEYPRESSES
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out
#define ENABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out
#endif
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
Loading