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 "dynamic_keymap.h"
|
||||||
#include "os_mode.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 {
|
enum custom_keycodes {
|
||||||
CK_OSMODE = SAFE_RANGE, // cycle OS mode
|
CK_OSMODE = SAFE_RANGE, // cycle OS mode
|
||||||
|
CK_RGBMOD, // cycle RGB animation
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -100,8 +105,8 @@ ________________________________________________________________________________
|
|||||||
| PRINT | | | | | | | | | | | | | || |
|
| PRINT | | | | | | | | | | | | | || |
|
||||||
| SCREEN | MUTE | VOL DN | VOL UP | | | | | | | | | | OS MODE || |
|
| SCREEN | MUTE | VOL DN | VOL UP | | | | | | | | | | OS MODE || |
|
||||||
|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________|
|
|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________|
|
||||||
| | PLAY/ | | | | | | | | | LED | LED | LED | || |
|
| | PLAY/ | | | | | | | | | LED | LED | LED | LED || |
|
||||||
| | PAUSE | PREV | NEXT | | | | | | | TOGGLE | DOWN | UP | || |
|
| | PAUSE | PREV | NEXT | | | | | | | TOGGLE | DOWN | UP | MODE || |
|
||||||
|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________|
|
|________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________|
|
||||||
| | | | | | | | | | | | | | || |
|
| | | | | | | | | | | | | | || |
|
||||||
| | | | | | | | | | | | | | || |
|
| | | | | | | | | | | | | | || |
|
||||||
@@ -119,7 +124,7 @@ ________________________________________________________________________________
|
|||||||
|
|
||||||
[1] = LAYOUT(
|
[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_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_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,
|
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;
|
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
|
// No rewrites in none mode
|
||||||
if (os_mode == OS_MODE_NONE) return true;
|
if (os_mode == OS_MODE_NONE) return true;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
#include "os_mode.h"
|
#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;
|
os_mode_t os_mode = OS_MODE_NONE;
|
||||||
bool os_mode_manual = false;
|
bool os_mode_manual = false;
|
||||||
static bool os_detected = false;
|
static bool os_detected = false;
|
||||||
@@ -45,6 +48,6 @@ void matrix_scan_user(void) {
|
|||||||
// Restore default RGB animation after 500ms indicator flash
|
// Restore default RGB animation after 500ms indicator flash
|
||||||
if (flash_start && timer_elapsed32(flash_start) > 500) {
|
if (flash_start && timer_elapsed32(flash_start) > 500) {
|
||||||
flash_start = 0;
|
flash_start = 0;
|
||||||
rgb_matrix_reload_from_eeprom();
|
system76_ec_rgb_layer(layer_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user