Add keybind to change RGB effect
This commit is contained in:
42
keymaps/custom/config.h
Normal file
42
keymaps/custom/config.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
// Enable framebuffer effects (typing heatmap, digital rain)
|
||||
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||
|
||||
// Standard effects (no additional defines needed)
|
||||
#define ENABLE_RGB_MATRIX_ALPHAS_MODS
|
||||
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
||||
#define ENABLE_RGB_MATRIX_BREATHING
|
||||
#define ENABLE_RGB_MATRIX_BAND_SAT
|
||||
#define ENABLE_RGB_MATRIX_BAND_VAL
|
||||
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
|
||||
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||
#define ENABLE_RGB_MATRIX_DUAL_BEACON
|
||||
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
|
||||
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
#define ENABLE_RGB_MATRIX_HUE_BREATHING
|
||||
#define ENABLE_RGB_MATRIX_HUE_PENDULUM
|
||||
#define ENABLE_RGB_MATRIX_HUE_WAVE
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_FLOW
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
|
||||
// Framebuffer effects (require RGB_MATRIX_FRAMEBUFFER_EFFECTS)
|
||||
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||
|
||||
// Reactive effects (require RGB_MATRIX_KEYPRESSES, already enabled in board config)
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
|
||||
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
|
||||
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
|
||||
@@ -3,8 +3,13 @@
|
||||
#include "dynamic_keymap.h"
|
||||
#include "os_mode.h"
|
||||
|
||||
// System76 per-layer RGB state (defined in system76_ec.c, declared in launch_3.c)
|
||||
extern rgb_config_t layer_rgb[];
|
||||
void system76_ec_rgb_eeprom(bool write);
|
||||
|
||||
enum custom_keycodes {
|
||||
CK_OSMODE = SAFE_RANGE, // cycle OS mode
|
||||
CK_RGBMOD, // cycle RGB animation
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@@ -100,8 +105,8 @@ ________________________________________________________________________________
|
||||
| PRINT | | | | | | | | | | | | | || |
|
||||
| SCREEN | MUTE | VOL DN | VOL UP | | | | | | | | | | OS MODE || |
|
||||
|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________|
|
||||
| | PLAY/ | | | | | | | | | LED | LED | LED | || |
|
||||
| | PAUSE | PREV | NEXT | | | | | | | TOGGLE | DOWN | UP | || |
|
||||
| | PLAY/ | | | | | | | | | LED | LED | LED | LED || |
|
||||
| | PAUSE | PREV | NEXT | | | | | | | TOGGLE | DOWN | UP | MODE || |
|
||||
|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________|
|
||||
| | | | | | | | | | | | | | || |
|
||||
| | | | | | | | | | | | | | || |
|
||||
@@ -119,7 +124,7 @@ ________________________________________________________________________________
|
||||
|
||||
[1] = LAYOUT(
|
||||
KC_PSCR, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, CK_OSMODE, KC_NO,
|
||||
KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_VAD, RGB_VAI, KC_NO, KC_NO,
|
||||
KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_VAD, RGB_VAI, CK_RGBMOD, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP,
|
||||
@@ -172,6 +177,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Cycle RGB animation (FN+Backspace)
|
||||
// Must update layer_rgb for all layers because system76_ec_rgb_layer()
|
||||
// resets rgb_matrix_config from layer_rgb on every layer change.
|
||||
if (keycode == CK_RGBMOD) {
|
||||
if (record->event.pressed) {
|
||||
uint8_t mode = layer_rgb[0].mode + 1;
|
||||
if (mode >= RGB_MATRIX_EFFECT_MAX) mode = 1;
|
||||
layer_rgb[0].mode = mode;
|
||||
rgb_matrix_mode_noeeprom(mode);
|
||||
system76_ec_rgb_eeprom(true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// No rewrites in none mode
|
||||
if (os_mode == OS_MODE_NONE) return true;
|
||||
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
#include "os_mode.h"
|
||||
|
||||
// System76 per-layer RGB state (no header available)
|
||||
void system76_ec_rgb_layer(layer_state_t layer_state);
|
||||
|
||||
os_mode_t os_mode = OS_MODE_NONE;
|
||||
bool os_mode_manual = false;
|
||||
static bool os_detected = false;
|
||||
@@ -45,6 +48,6 @@ void matrix_scan_user(void) {
|
||||
// Restore default RGB animation after 500ms indicator flash
|
||||
if (flash_start && timer_elapsed32(flash_start) > 500) {
|
||||
flash_start = 0;
|
||||
rgb_matrix_reload_from_eeprom();
|
||||
system76_ec_rgb_layer(layer_state);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user