summaryrefslogtreecommitdiffstats
path: root/quantum/rgblight.h
diff options
context:
space:
mode:
authorTakeshi ISHII <2170248+mtei@users.noreply.github.com>2019-04-20 00:05:51 +0200
committerDrashna Jaelre <drashna@live.com>2019-04-20 00:05:51 +0200
commitdfab177f889fd6701e5f898c869be1bf3a2d0ef9 (patch)
tree5dd9582cf5271389e931530bf2c8689299b8512d /quantum/rgblight.h
parentdd64a4e73868027b44a018278039cc42a01e730b (diff)
downloadqmk_firmware-dfab177f889fd6701e5f898c869be1bf3a2d0ef9.tar.gz
qmk_firmware-dfab177f889fd6701e5f898c869be1bf3a2d0ef9.tar.xz
Add function to support split-keyboard in rgblight.[ch]. (#5020)
* add temporary file that is rgblight.c call graph * add rgblight_update_hook() * update rgblight-call-graph.dot (temporary file) * add more hook point * add TODO comment * temporary Revert "add TODO comment" This reverts commit df6165aac9b3a31d1d3e31ce52aadc134b84eac2. * temporary Revert "add more hook point" This reverts commit 64592b06f3bcdaac47c59f922018a273bef76776. * temporary Revert "add rgblight_update_hook()" This reverts commit 432b74c912ed4333e6633e20a1bcda10c6a10eaf. * add rgblight_update_hook() * add more hook point * add TODO comment * implement rgblight_update_hook() * remove rgblight_update_hook(), add RGBLIGHT_SPLIT_SET_CHANGE_XXXX rgblight_update_hook() is too large. change to simple flag setting. * shrink rgblight_config_t * implement rgblight_update_sync() Note: The animation synchronization process has not been implemented yet. * update quantum/rgblight-call-graph.dot (temporary file) * rmove quantum/rgblight-call-graph.dot (temporary file) * update rgblight.c * Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c . * fix build break rgblight_update_sync() when all animation off * fix quantum/rgblight.c:rgblight_disable_XX() add RGBLIGHT_SPLIT_SET_CHANGE_MODE * quantum/rgblight.c change code order: move rgblight_update_sync() * add mode_base_table[] to quantum/rgblight.c * quantum/rgblight.c use mode_base_table[] and rgblight_status.base_mode * quantum/rgblkght.c animation timer integration * quantum/rgblkght.c add animation sync for split keyboard * fix mode_base_table[] and snake effect * fix build break keyboards/mxss. keyboards/mxss's local rgblight.c need old version rgblight.h * rgblight.c: fix animation sync * quantum/rgblight.c: fix snake effect sync * quantum/rgblight.c: animation sync interverl 30 sec * quantum/rgblight.c: fix rgblight_effect_rainbow_swirl() and rgblight_effect_knight() * quantum/rgblight.c: add macro RGBLIGHT_SPLIT_ANIMATION * cherry-pick from 'rgblight_modes.h sample implementation' * fix RGBLIGHT_SPLIT_ANIMATION check position * Update temporary code in Helix keyboard 'five_rows' keymap to test rgblight.c * Reduce the firmware size by 1500 bytes when rgblight_effect_breathing() is enabled. * Changed to rgblight_sethsv_eeprom_helper() for easier reading. * add fail-safe code to quantum/rgblight.c:rgblight_task(),rgblight_timer_enable() * remove temporary code in Helix keyboard 'five_rows' keymap * quantum/rgblight.c: add split-keyboard master side sync functions add functions: uint8_t rgblight_get_change_flags(void); void rgblight_clear_change_flags(void); void rgblight_get_syncinfo(rgblight_syncinfo_t *syncinfo); change function: void rgblight_update_sync(rgblight_syncinfo_t *syncinfo, bool write_to_eeprom); * Change rgblight_update_sync() to use write_to_eeprom. * remove TODO comment from quantum/rgblight.h * Revert "fix build break keyboards/mxss." This reverts commit 90b9a1aa7d8af226751500e49e3ea0214cc4e024. (Separated this change into the newly opened PR #5461.) * Revert "Reduce the firmware size by 1500 bytes when rgblight_effect_breathing() is enabled." This reverts commit b61004e63e82cf5334cee4def4ba10cffa88885f. * update quantum/rgblight.c: Code size reduction when not using RGBLIGHT_SPLIT. * Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c . * add temporary pdhelix(Patched Helix) code * Add temporary code to split_common/transport.c to test rgblight.c. * Finish testing rgblight.c with helix keyboard. Revert "Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c ." This reverts commit 0bf81a4723a977adc0cb09b4272ee5c9b4f2bbbb. * Finish testing rgblight.c with quantum/split_common code. Revert "Add temporary code to split_common/transport.c to test rgblight.c." This reverts commit 71db3e24eef40d4c455fb9fd1664e4487c9d927a. * remove temporary pdhelix(Patched Helix) code This reverts commit 5287e51a394741bcb6028c7cfc0dd0c984645f76. * Added description of RGBLIGHT_SPLIT macro to docs/feature_rgblight.md. * add RGBLIGHT_SPLIT_SET_CHANGE_HSVS to rgblight_init() * Changed to restart animation only when changing mode. When changing hue, sat and val, the animation is not restarted and continues.
Diffstat (limited to 'quantum/rgblight.h')
-rw-r--r--quantum/rgblight.h134
1 files changed, 56 insertions, 78 deletions
diff --git a/quantum/rgblight.h b/quantum/rgblight.h
index 1769f719d..748d009dc 100644
--- a/quantum/rgblight.h
+++ b/quantum/rgblight.h
@@ -68,11 +68,11 @@
#define _RGBM_SINGLE_DYNAMIC(sym) RGBLIGHT_MODE_ ## sym,
#define _RGBM_MULTI_STATIC(sym) RGBLIGHT_MODE_ ## sym,
#define _RGBM_MULTI_DYNAMIC(sym) RGBLIGHT_MODE_ ## sym,
-#define _RGBM_TMP_STATIC(sym) RGBLIGHT_MODE_ ## sym,
-#define _RGBM_TMP_DYNAMIC(sym) RGBLIGHT_MODE_ ## sym,
+#define _RGBM_TMP_STATIC(sym, msym) RGBLIGHT_MODE_ ## sym,
+#define _RGBM_TMP_DYNAMIC(sym, msym) RGBLIGHT_MODE_ ## sym,
enum RGBLIGHT_EFFECT_MODE {
RGBLIGHT_MODE_zero = 0,
-#include "rgblight.h"
+#include "rgblight_modes.h"
RGBLIGHT_MODE_last
};
@@ -163,6 +163,33 @@ typedef union {
};
} rgblight_config_t;
+typedef struct _rgblight_status_t {
+ uint8_t base_mode;
+ bool timer_enabled;
+#ifdef RGBLIGHT_SPLIT
+ uint8_t change_flags;
+#endif
+} rgblight_status_t;
+
+#ifdef RGBLIGHT_SPLIT
+ #define RGBLIGHT_STATUS_CHANGE_MODE (1<<0)
+ #define RGBLIGHT_STATUS_CHANGE_HSVS (1<<1)
+ #define RGBLIGHT_STATUS_CHANGE_TIMER (1<<2)
+ #define RGBLIGHT_STATUS_ANIMATION_TICK (1<<3)
+
+ typedef struct _rgblight_syncinfo_t {
+ rgblight_config_t config;
+ rgblight_status_t status;
+ } rgblight_syncinfo_t;
+
+ /* for split keyboard master side */
+ uint8_t rgblight_get_change_flags(void);
+ void rgblight_clear_change_flags(void);
+ void rgblight_get_syncinfo(rgblight_syncinfo_t *syncinfo);
+ /* for split keyboard slave side */
+ void rgblight_update_sync(rgblight_syncinfo_t *syncinfo, bool write_to_eeprom);
+#endif
+
void rgblight_init(void);
void rgblight_increase(void);
void rgblight_decrease(void);
@@ -237,82 +264,33 @@ void rgblight_timer_init(void);
void rgblight_timer_enable(void);
void rgblight_timer_disable(void);
void rgblight_timer_toggle(void);
-void rgblight_effect_breathing(uint8_t interval);
-void rgblight_effect_rainbow_mood(uint8_t interval);
-void rgblight_effect_rainbow_swirl(uint8_t interval);
-void rgblight_effect_snake(uint8_t interval);
-void rgblight_effect_knight(uint8_t interval);
-void rgblight_effect_christmas(void);
-void rgblight_effect_rgbtest(void);
-void rgblight_effect_alternating(void);
-#endif // #ifndef RGBLIGHT_H_DUMMY_DEFINE
-#endif // RGBLIGHT_H
+#ifdef RGBLIGHT_USE_TIMER
+
+typedef struct _animation_status_t {
+ uint16_t last_timer;
+ uint8_t delta; /* mode - base_mode */
+ bool restart;
+ union {
+ uint16_t pos16;
+ uint8_t pos;
+ int16_t current_hue;
+ uint16_t current_offset;
+ };
+} animation_status_t;
+
+extern animation_status_t animation_status;
+
+void rgblight_effect_breathing(animation_status_t *anim);
+void rgblight_effect_rainbow_mood(animation_status_t *anim);
+void rgblight_effect_rainbow_swirl(animation_status_t *anim);
+void rgblight_effect_snake(animation_status_t *anim);
+void rgblight_effect_knight(animation_status_t *anim);
+void rgblight_effect_christmas(animation_status_t *anim);
+void rgblight_effect_rgbtest(animation_status_t *anim);
+void rgblight_effect_alternating(animation_status_t *anim);
-#ifdef _RGBM_SINGLE_STATIC
- _RGBM_SINGLE_STATIC( STATIC_LIGHT )
- #ifdef RGBLIGHT_EFFECT_BREATHING
- _RGBM_MULTI_DYNAMIC( BREATHING )
- _RGBM_TMP_DYNAMIC( breathing_3 )
- _RGBM_TMP_DYNAMIC( breathing_4 )
- _RGBM_TMP_DYNAMIC( BREATHING_end )
- #endif
- #ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD
- _RGBM_MULTI_DYNAMIC( RAINBOW_MOOD )
- _RGBM_TMP_DYNAMIC( rainbow_mood_7 )
- _RGBM_TMP_DYNAMIC( RAINBOW_MOOD_end )
- #endif
- #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL
- _RGBM_MULTI_DYNAMIC( RAINBOW_SWIRL )
- _RGBM_TMP_DYNAMIC( rainbow_swirl_10 )
- _RGBM_TMP_DYNAMIC( rainbow_swirl_11 )
- _RGBM_TMP_DYNAMIC( rainbow_swirl_12 )
- _RGBM_TMP_DYNAMIC( rainbow_swirl_13 )
- _RGBM_TMP_DYNAMIC( RAINBOW_SWIRL_end )
- #endif
- #ifdef RGBLIGHT_EFFECT_SNAKE
- _RGBM_MULTI_DYNAMIC( SNAKE )
- _RGBM_TMP_DYNAMIC( snake_16 )
- _RGBM_TMP_DYNAMIC( snake_17 )
- _RGBM_TMP_DYNAMIC( snake_18 )
- _RGBM_TMP_DYNAMIC( snake_19 )
- _RGBM_TMP_DYNAMIC( SNAKE_end )
- #endif
- #ifdef RGBLIGHT_EFFECT_KNIGHT
- _RGBM_MULTI_DYNAMIC( KNIGHT )
- _RGBM_TMP_DYNAMIC( knight_22 )
- _RGBM_TMP_DYNAMIC( KNIGHT_end )
- #endif
- #ifdef RGBLIGHT_EFFECT_CHRISTMAS
- _RGBM_SINGLE_DYNAMIC( CHRISTMAS )
- #endif
- #ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
- _RGBM_MULTI_STATIC( STATIC_GRADIENT )
- _RGBM_TMP_STATIC( static_gradient_26 )
- _RGBM_TMP_STATIC( static_gradient_27 )
- _RGBM_TMP_STATIC( static_gradient_28 )
- _RGBM_TMP_STATIC( static_gradient_29 )
- _RGBM_TMP_STATIC( static_gradient_30 )
- _RGBM_TMP_STATIC( static_gradient_31 )
- _RGBM_TMP_STATIC( static_gradient_32 )
- _RGBM_TMP_STATIC( static_gradient_33 )
- _RGBM_TMP_STATIC( STATIC_GRADIENT_end )
- #endif
- #ifdef RGBLIGHT_EFFECT_RGB_TEST
- _RGBM_SINGLE_DYNAMIC( RGB_TEST )
- #endif
- #ifdef RGBLIGHT_EFFECT_ALTERNATING
- _RGBM_SINGLE_DYNAMIC( ALTERNATING )
- #endif
- //// Add a new mode here.
- // #ifdef RGBLIGHT_EFFECT_<name>
- // _RGBM_<SINGLE|MULTI>_<STATIC|DYNAMIC>( <name> )
- // #endif
#endif
-#undef _RGBM_SINGLE_STATIC
-#undef _RGBM_SINGLE_DYNAMIC
-#undef _RGBM_MULTI_STATIC
-#undef _RGBM_MULTI_DYNAMIC
-#undef _RGBM_TMP_STATIC
-#undef _RGBM_TMP_DYNAMIC
+#endif // #ifndef RGBLIGHT_H_DUMMY_DEFINE
+#endif // RGBLIGHT_H