summaryrefslogtreecommitdiffstats
path: root/quantum
diff options
context:
space:
mode:
authorDaniel Prilik <danielprilik@gmail.com>2019-04-29 23:48:41 +0200
committerDrashna Jaelre <drashna@live.com>2019-04-29 23:48:41 +0200
commit1d784f0f9575b70e35c9c8338b0ff80dc7316d7e (patch)
treef1617c0a36ccb3bf6c1b881b6f1b9caad2678e2e /quantum
parente337bb82a3b418dfd6c60b8c615322c854e5995d (diff)
downloadqmk_firmware-1d784f0f9575b70e35c9c8338b0ff80dc7316d7e.tar.gz
qmk_firmware-1d784f0f9575b70e35c9c8338b0ff80dc7316d7e.tar.xz
RGB Matrix: Custom effects on a kb/user level (#5338)
* Revamped custom effects approach See docs for example usage * push-up RGB Matrix default mode Override default effect using RGB_MATRIX_STARTUP_MODE. Useful on boards without EEPROM support (*cough* Massdrop ALT/CTRL *cough*) * update docs
Diffstat (limited to 'quantum')
-rw-r--r--quantum/rgb_matrix.c43
-rw-r--r--quantum/rgb_matrix.h12
2 files changed, 49 insertions, 6 deletions
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c
index 41ed8983e..5ca9b87a6 100644
--- a/quantum/rgb_matrix.c
+++ b/quantum/rgb_matrix.c
@@ -48,6 +48,19 @@
#include "rgb_matrix_animations/solid_splash_anim.h"
#include "rgb_matrix_animations/breathing_anim.h"
+#if defined(RGB_MATRIX_CUSTOM_KB) || defined(RGB_MATRIX_CUSTOM_USER)
+ #define RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+ #define RGB_MATRIX_EFFECT(name, ...)
+ #ifdef RGB_MATRIX_CUSTOM_KB
+ #include "rgb_matrix_kb.inc"
+ #endif
+ #ifdef RGB_MATRIX_CUSTOM_USER
+ #include "rgb_matrix_user.inc"
+ #endif
+ #undef RGB_MATRIX_EFFECT
+ #undef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif
+
#ifndef RGB_DISABLE_AFTER_TIMEOUT
#define RGB_DISABLE_AFTER_TIMEOUT 0
#endif
@@ -81,6 +94,15 @@
#define RGB_MATRIX_SPD_STEP 16
#endif
+#if !defined(RGB_MATRIX_STARTUP_MODE)
+ #ifndef DISABLE_RGB_MATRIX_CYCLE_ALL
+ #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
+ #else
+ // fallback to solid colors if RGB_MATRIX_CYCLE_LEFT_RIGHT is disabled in userspace
+ #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
+ #endif
+#endif
+
bool g_suspend_state = false;
rgb_config_t rgb_matrix_config;
@@ -104,12 +126,7 @@ void eeconfig_update_rgb_matrix(uint32_t val) {
void eeconfig_update_rgb_matrix_default(void) {
dprintf("eeconfig_update_rgb_matrix_default\n");
rgb_matrix_config.enable = 1;
-#ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
- rgb_matrix_config.mode = RGB_MATRIX_CYCLE_LEFT_RIGHT;
-#else
- // fallback to solid colors if RGB_MATRIX_CYCLE_LEFT_RIGHT is disabled in userspace
- rgb_matrix_config.mode = RGB_MATRIX_SOLID_COLOR;
-#endif
+ rgb_matrix_config.mode = RGB_MATRIX_STARTUP_MODE;
rgb_matrix_config.hue = 0;
rgb_matrix_config.sat = UINT8_MAX;
rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
@@ -435,6 +452,20 @@ static void rgb_task_render(uint8_t effect) {
#endif // DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+#if defined(RGB_MATRIX_CUSTOM_KB) || defined(RGB_MATRIX_CUSTOM_USER)
+ #define RGB_MATRIX_EFFECT(name, ...) \
+ case RGB_MATRIX_CUSTOM_##name: \
+ rendering = name(&rgb_effect_params); \
+ break;
+ #ifdef RGB_MATRIX_CUSTOM_KB
+ #include "rgb_matrix_kb.inc"
+ #endif
+ #ifdef RGB_MATRIX_CUSTOM_USER
+ #include "rgb_matrix_user.inc"
+ #endif
+ #undef RGB_MATRIX_EFFECT
+#endif
+
// Factory default magic value
case UINT8_MAX: {
rgb_matrix_test();
diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h
index 5fdc854f0..775cbeac0 100644
--- a/quantum/rgb_matrix.h
+++ b/quantum/rgb_matrix.h
@@ -142,6 +142,18 @@ enum rgb_matrix_effects {
RGB_MATRIX_SOLID_MULTISPLASH,
#endif // DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
+
+#if defined(RGB_MATRIX_CUSTOM_KB) || defined(RGB_MATRIX_CUSTOM_USER)
+ #define RGB_MATRIX_EFFECT(name, ...) RGB_MATRIX_CUSTOM_##name,
+ #ifdef RGB_MATRIX_CUSTOM_KB
+ #include "rgb_matrix_kb.inc"
+ #endif
+ #ifdef RGB_MATRIX_CUSTOM_USER
+ #include "rgb_matrix_user.inc"
+ #endif
+ #undef RGB_MATRIX_EFFECT
+#endif
+
RGB_MATRIX_EFFECT_MAX
};