mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	rgblight.[ch] more configurable (#3582)
* add temporary test code rgblight-macro-test1.[ch] * rgblight.h : mode auto numberring and auto generate mode name symbol No change in build result. * rgblight.c use RGBLIGHT_MODE_xxx symbols No change in build result. * quantum.c use RGBLIGHT_MODE_xxx symbols No change in build result. * fix build break. when RGB_MATRIX_ENABLE defined * add temporary test code rgblight-macro-test2.[ch] * modify rgblight_mode_eeprom_helper() and rgblight_sethsv_eeprom_helper() * modify rgblight_task() * configurable each effect compile on/off in config.h * update docs/feature_rgblight.md * fix conflict. docs/feature_rgblight.md * remove temporary test code rgblight-macro-test*.[ch] * fix comment typo. * remove old mode number from comment * update docs/feature_rgblight.md about effect mode * Revert "update docs/feature_rgblight.md about effect mode" This reverts commit 43890663fcc9dda1899df7a37d382fc38b1a6d6d. * some change docs/feature_rgblight.md * fix typo * docs/feature_rgblight.md update: revise mode number table
This commit is contained in:
		
							parent
							
								
									ce122c4981
								
							
						
					
					
						commit
						6d6d91c834
					
				| @ -79,20 +79,23 @@ Your RGB lighting can be configured by placing these `#define`s in your `config. | |||||||
| 
 | 
 | ||||||
| ## Animations | ## Animations | ||||||
| 
 | 
 | ||||||
| Not only can this lighting be whatever color you want, if `RGBLIGHT_ANIMATIONS` is defined, you also have a number of animation modes at your disposal: |  | ||||||
| 
 | 
 | ||||||
| |Mode |Description          | | Not only can this lighting be whatever color you want, | ||||||
| |-----|---------------------| | if `RGBLIGHT_EFFECT_xxxx` or `RGBLIGHT_ANIMATIONS` is defined, you also have a number of animation modes at your disposal: | ||||||
| |1    |Solid color          | | 
 | ||||||
| |2-5  |Solid color breathing| | |Mode number symbol           |Additional number  |Description                            | | ||||||
| |6-8  |Cycling rainbow      | | |-----------------------------|-------------------|---------------------------------------| | ||||||
| |9-14 |Swirling rainbow     | | |`RGBLIGHT_MODE_STATIC_LIGHT` | *None*            |Solid color (this mode is always enabled) | | ||||||
| |15-20|Snake                | | |`RGBLIGHT_MODE_BREATHING`    | 0,1,2,3           |Solid color breathing                  | | ||||||
| |21-23|Knight               | | |`RGBLIGHT_MODE_RAINBOW_MOOD` | 0,1,2             |Cycling rainbow                        | | ||||||
| |24   |Christmas            | | |`RGBLIGHT_MODE_RAINBOW_SWIRL`| 0,1,2,3,4,5       |Swirling rainbow                       | | ||||||
| |25-34|Static gradient      | | |`RGBLIGHT_MODE_SNAKE`        | 0,1,2,3,4,5       |Snake                                  | | ||||||
| |35   |RGB Test             | | |`RGBLIGHT_MODE_KNIGHT`       | 0,1,2             |Knight                                 | | ||||||
| |36   |Alternating          | | |`RGBLIGHT_MODE_CHRISTMAS`    | *None*            |Christmas                              | | ||||||
|  | |`RGBLIGHT_MODE_STATIC_GRADIENT`| 0,1,..,9        |Static gradient                        | | ||||||
|  | |`RGBLIGHT_MODE_RGB_TEST`     | *None*            |RGB Test                               | | ||||||
|  | |`RGBLIGHT_MODE_ALTERNATING`  | *None*            |Alternating                            | | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration. | Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration. | ||||||
| 
 | 
 | ||||||
| @ -100,7 +103,16 @@ The following options can be used to tweak the various animations: | |||||||
| 
 | 
 | ||||||
| |Define                              |Default      |Description                                                                          | | |Define                              |Default      |Description                                                                          | | ||||||
| |------------------------------------|-------------|-------------------------------------------------------------------------------------| | |------------------------------------|-------------|-------------------------------------------------------------------------------------| | ||||||
| |`RGBLIGHT_ANIMATIONS`               |*Not defined*|If defined, enables additional animation modes                                       | | |`RGBLIGHT_EFFECT_BREATHING`         |*Not defined*|If defined, enable breathing animation mode.                                         | | ||||||
|  | |`RGBLIGHT_EFFECT_RAINBOW_MOOD`      |*Not defined*|If defined, enable rainbow mood animation mode.                                      | | ||||||
|  | |`RGBLIGHT_EFFECT_RAINBOW_SWIRL`     |*Not defined*|If defined, enable rainbow swirl animation mode.                                     | | ||||||
|  | |`RGBLIGHT_EFFECT_SNAKE`             |*Not defined*|If defined, enable snake animation mode.                                             | | ||||||
|  | |`RGBLIGHT_EFFECT_KNIGHT`            |*Not defined*|If defined, enable knight animation mode.                                            | | ||||||
|  | |`RGBLIGHT_EFFECT_CHRISTMAS`         |*Not defined*|If defined, enable christmas animation mode.                                         | | ||||||
|  | |`RGBLIGHT_EFFECT_STATIC_GRADIENT`   |*Not defined*|If defined, enable static gradient mode.                                             | | ||||||
|  | |`RGBLIGHT_EFFECT_RGB_TEST`          |*Not defined*|If defined, enable RGB test animation mode.                                          | | ||||||
|  | |`RGBLIGHT_EFFECT_ALTERNATING`       |*Not defined*|If defined, enable alternating animation mode.                                       | | ||||||
|  | |`RGBLIGHT_ANIMATIONS`               |*Not defined*|If defined, enables all additional animation modes                                   | | ||||||
| |`RGBLIGHT_EFFECT_BREATHE_CENTER`    |`1.85`       |Used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 | | |`RGBLIGHT_EFFECT_BREATHE_CENTER`    |`1.85`       |Used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 | | ||||||
| |`RGBLIGHT_EFFECT_BREATHE_MAX`       |`255`        |The maximum brightness for the breathing mode. Valid values are 1 to 255             | | |`RGBLIGHT_EFFECT_BREATHE_MAX`       |`255`        |The maximum brightness for the breathing mode. Valid values are 1 to 255             | | ||||||
| |`RGBLIGHT_EFFECT_SNAKE_LENGTH`      |`4`          |The number of LEDs to light up for the "Snake" animation                             | | |`RGBLIGHT_EFFECT_SNAKE_LENGTH`      |`4`          |The number of LEDs to light up for the "Snake" animation                             | | ||||||
|  | |||||||
| @ -445,75 +445,97 @@ bool process_record_quantum(keyrecord_t *record) { | |||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_PLAIN: |   case RGB_MODE_PLAIN: | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       rgblight_mode(1); |       rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); | ||||||
|       #ifdef SPLIT_KEYBOARD |       #ifdef SPLIT_KEYBOARD | ||||||
|           RGB_DIRTY = true; |           RGB_DIRTY = true; | ||||||
|       #endif |       #endif | ||||||
|     } |     } | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_BREATHE: |   case RGB_MODE_BREATHE: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_BREATHING | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       if ((2 <= rgblight_get_mode()) && (rgblight_get_mode() < 5)) { |       if ((RGBLIGHT_MODE_BREATHING <= rgblight_get_mode()) && | ||||||
|  |           (rgblight_get_mode() < RGBLIGHT_MODE_BREATHING_end)) { | ||||||
|         rgblight_step(); |         rgblight_step(); | ||||||
|       } else { |       } else { | ||||||
|         rgblight_mode(2); |         rgblight_mode(RGBLIGHT_MODE_BREATHING); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_RAINBOW: |   case RGB_MODE_RAINBOW: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       if ((6 <= rgblight_get_mode()) && (rgblight_get_mode() < 8)) { |       if ((RGBLIGHT_MODE_RAINBOW_MOOD <= rgblight_get_mode()) && | ||||||
|  |           (rgblight_get_mode() < RGBLIGHT_MODE_RAINBOW_MOOD_end)) { | ||||||
|         rgblight_step(); |         rgblight_step(); | ||||||
|       } else { |       } else { | ||||||
|         rgblight_mode(6); |         rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_SWIRL: |   case RGB_MODE_SWIRL: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       if ((9 <= rgblight_get_mode()) && (rgblight_get_mode() < 14)) { |       if ((RGBLIGHT_MODE_RAINBOW_SWIRL <= rgblight_get_mode()) && | ||||||
|  |           (rgblight_get_mode() < RGBLIGHT_MODE_RAINBOW_SWIRL_end)) { | ||||||
|         rgblight_step(); |         rgblight_step(); | ||||||
|       } else { |       } else { | ||||||
|         rgblight_mode(9); |         rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_SNAKE: |   case RGB_MODE_SNAKE: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_SNAKE | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       if ((15 <= rgblight_get_mode()) && (rgblight_get_mode() < 20)) { |       if ((RGBLIGHT_MODE_SNAKE <= rgblight_get_mode()) && | ||||||
|  |           (rgblight_get_mode() < RGBLIGHT_MODE_SNAKE_end)) { | ||||||
|         rgblight_step(); |         rgblight_step(); | ||||||
|       } else { |       } else { | ||||||
|         rgblight_mode(15); |         rgblight_mode(RGBLIGHT_MODE_SNAKE); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_KNIGHT: |   case RGB_MODE_KNIGHT: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_KNIGHT | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       if ((21 <= rgblight_get_mode()) && (rgblight_get_mode() < 23)) { |       if ((RGBLIGHT_MODE_KNIGHT <= rgblight_get_mode()) && | ||||||
|  |           (rgblight_get_mode() < RGBLIGHT_MODE_KNIGHT_end)) { | ||||||
|         rgblight_step(); |         rgblight_step(); | ||||||
|       } else { |       } else { | ||||||
|         rgblight_mode(21); |         rgblight_mode(RGBLIGHT_MODE_KNIGHT); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_XMAS: |   case RGB_MODE_XMAS: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_CHRISTMAS | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       rgblight_mode(24); |       rgblight_mode(RGBLIGHT_MODE_CHRISTMAS); | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_GRADIENT: |   case RGB_MODE_GRADIENT: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       if ((25 <= rgblight_get_mode()) && (rgblight_get_mode() < 34)) { |       if ((RGBLIGHT_MODE_STATIC_GRADIENT <= rgblight_get_mode()) && | ||||||
|  |           (rgblight_get_mode() < RGBLIGHT_MODE_STATIC_GRADIENT_end)) { | ||||||
|         rgblight_step(); |         rgblight_step(); | ||||||
|       } else { |       } else { | ||||||
|         rgblight_mode(25); |         rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   case RGB_MODE_RGBTEST: |   case RGB_MODE_RGBTEST: | ||||||
|  |   #ifdef RGBLIGHT_EFFECT_RGB_TEST | ||||||
|     if (record->event.pressed) { |     if (record->event.pressed) { | ||||||
|       rgblight_mode(35); |       rgblight_mode(RGBLIGHT_MODE_RGB_TEST); | ||||||
|     } |     } | ||||||
|  |   #endif | ||||||
|     return false; |     return false; | ||||||
|   #endif // defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
 |   #endif // defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
 | ||||||
|     #ifdef PROTOCOL_LUFA |     #ifdef PROTOCOL_LUFA | ||||||
|  | |||||||
| @ -32,6 +32,12 @@ | |||||||
| #endif | #endif | ||||||
| #ifdef RGBLIGHT_ENABLE | #ifdef RGBLIGHT_ENABLE | ||||||
|   #include "rgblight.h" |   #include "rgblight.h" | ||||||
|  | #else | ||||||
|  |   #ifdef RGB_MATRIX_ENABLE | ||||||
|  |     /* dummy define RGBLIGHT_MODE_xxxx */ | ||||||
|  |     #define RGBLIGHT_H_DUMMY_DEFINE | ||||||
|  |     #include "rgblight.h" | ||||||
|  |   #endif | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef SPLIT_KEYBOARD | #ifdef SPLIT_KEYBOARD | ||||||
|  | |||||||
| @ -14,6 +14,7 @@ | |||||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| #include <math.h> | #include <math.h> | ||||||
|  | #include <string.h> | ||||||
| #ifdef __AVR__ | #ifdef __AVR__ | ||||||
|   #include <avr/eeprom.h> |   #include <avr/eeprom.h> | ||||||
|   #include <avr/interrupt.h> |   #include <avr/interrupt.h> | ||||||
| @ -29,23 +30,27 @@ | |||||||
| #define RGBLIGHT_LIMIT_VAL 255 | #define RGBLIGHT_LIMIT_VAL 255 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #define _RGBM_SINGLE_STATIC(sym)   RGBLIGHT_MODE_ ## sym, | ||||||
|  | #define _RGBM_SINGLE_DYNAMIC(sym) | ||||||
|  | #define _RGBM_MULTI_STATIC(sym)    RGBLIGHT_MODE_ ## sym, | ||||||
|  | #define _RGBM_MULTI_DYNAMIC(sym) | ||||||
|  | #define _RGBM_TMP_STATIC(sym)      RGBLIGHT_MODE_ ## sym, | ||||||
|  | #define _RGBM_TMP_DYNAMIC(sym) | ||||||
|  | static uint8_t static_effect_table [] = { | ||||||
|  | #include "rgblight.h" | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static inline int is_static_effect(uint8_t mode) { | ||||||
|  |     return memchr(static_effect_table, mode, sizeof(static_effect_table)) != NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #define MIN(a,b) (((a)<(b))?(a):(b)) | #define MIN(a,b) (((a)<(b))?(a):(b)) | ||||||
| #define MAX(a,b) (((a)>(b))?(a):(b)) | #define MAX(a,b) (((a)>(b))?(a):(b)) | ||||||
| 
 | 
 | ||||||
| __attribute__ ((weak)) | #ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT | ||||||
| const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; |  | ||||||
| __attribute__ ((weak)) |  | ||||||
| const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30}; |  | ||||||
| __attribute__ ((weak)) |  | ||||||
| const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20}; |  | ||||||
| __attribute__ ((weak)) |  | ||||||
| const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20}; |  | ||||||
| __attribute__ ((weak)) |  | ||||||
| const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31}; |  | ||||||
| __attribute__ ((weak)) | __attribute__ ((weak)) | ||||||
| const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90}; | const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90}; | ||||||
| __attribute__ ((weak)) | #endif | ||||||
| const uint16_t RGBLED_RGBTEST_INTERVALS[] PROGMEM = {1024}; |  | ||||||
| 
 | 
 | ||||||
| rgblight_config_t rgblight_config; | rgblight_config_t rgblight_config; | ||||||
| 
 | 
 | ||||||
| @ -129,7 +134,7 @@ void eeconfig_update_rgblight(uint32_t val) { | |||||||
| void eeconfig_update_rgblight_default(void) { | void eeconfig_update_rgblight_default(void) { | ||||||
|   //dprintf("eeconfig_update_rgblight_default\n");
 |   //dprintf("eeconfig_update_rgblight_default\n");
 | ||||||
|   rgblight_config.enable = 1; |   rgblight_config.enable = 1; | ||||||
|   rgblight_config.mode = 1; |   rgblight_config.mode = RGBLIGHT_MODE_STATIC_LIGHT; | ||||||
|   rgblight_config.hue = 0; |   rgblight_config.hue = 0; | ||||||
|   rgblight_config.sat = 255; |   rgblight_config.sat = 255; | ||||||
|   rgblight_config.val = RGBLIGHT_LIMIT_VAL; |   rgblight_config.val = RGBLIGHT_LIMIT_VAL; | ||||||
| @ -163,9 +168,9 @@ void rgblight_init(void) { | |||||||
|   } |   } | ||||||
|   eeconfig_debug_rgblight(); // display current eeprom values
 |   eeconfig_debug_rgblight(); // display current eeprom values
 | ||||||
| 
 | 
 | ||||||
|   #ifdef RGBLIGHT_ANIMATIONS | #ifdef RGBLIGHT_USE_TIMER | ||||||
|     rgblight_timer_init(); // setup the timer
 |     rgblight_timer_init(); // setup the timer
 | ||||||
|   #endif | #endif | ||||||
| 
 | 
 | ||||||
|   if (rgblight_config.enable) { |   if (rgblight_config.enable) { | ||||||
|     rgblight_mode_noeeprom(rgblight_config.mode); |     rgblight_mode_noeeprom(rgblight_config.mode); | ||||||
| @ -178,9 +183,9 @@ void rgblight_update_dword(uint32_t dword) { | |||||||
|   if (rgblight_config.enable) |   if (rgblight_config.enable) | ||||||
|     rgblight_mode(rgblight_config.mode); |     rgblight_mode(rgblight_config.mode); | ||||||
|   else { |   else { | ||||||
|     #ifdef RGBLIGHT_ANIMATIONS | #ifdef RGBLIGHT_USE_TIMER | ||||||
|       rgblight_timer_disable(); |       rgblight_timer_disable(); | ||||||
|     #endif | #endif | ||||||
|       rgblight_set(); |       rgblight_set(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -195,7 +200,7 @@ void rgblight_increase(void) { | |||||||
| void rgblight_decrease(void) { | void rgblight_decrease(void) { | ||||||
|   uint8_t mode = 0; |   uint8_t mode = 0; | ||||||
|   // Mode will never be < 1. If it ever is, eeprom needs to be initialized.
 |   // Mode will never be < 1. If it ever is, eeprom needs to be initialized.
 | ||||||
|   if (rgblight_config.mode > 1) { |   if (rgblight_config.mode > RGBLIGHT_MODE_STATIC_LIGHT) { | ||||||
|     mode = rgblight_config.mode - 1; |     mode = rgblight_config.mode - 1; | ||||||
|   } |   } | ||||||
|   rgblight_mode(mode); |   rgblight_mode(mode); | ||||||
| @ -229,8 +234,8 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) { | |||||||
|   if (!rgblight_config.enable) { |   if (!rgblight_config.enable) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   if (mode < 1) { |   if (mode < RGBLIGHT_MODE_STATIC_LIGHT) { | ||||||
|     rgblight_config.mode = 1; |     rgblight_config.mode = RGBLIGHT_MODE_STATIC_LIGHT; | ||||||
|   } else if (mode > RGBLIGHT_MODES) { |   } else if (mode > RGBLIGHT_MODES) { | ||||||
|     rgblight_config.mode = RGBLIGHT_MODES; |     rgblight_config.mode = RGBLIGHT_MODES; | ||||||
|   } else { |   } else { | ||||||
| @ -242,30 +247,14 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) { | |||||||
|   } else { |   } else { | ||||||
|     xprintf("rgblight mode [NOEEPROM]: %u\n", rgblight_config.mode); |     xprintf("rgblight mode [NOEEPROM]: %u\n", rgblight_config.mode); | ||||||
|   } |   } | ||||||
|   if (rgblight_config.mode == 1) { |   if( is_static_effect(rgblight_config.mode) ) { | ||||||
|     #ifdef RGBLIGHT_ANIMATIONS | #ifdef RGBLIGHT_USE_TIMER | ||||||
|       rgblight_timer_disable(); |       rgblight_timer_disable(); | ||||||
|     #endif | #endif | ||||||
|   } else if ((rgblight_config.mode >= 2 && rgblight_config.mode <= 24) || |   } else { | ||||||
| 	     rgblight_config.mode == 35 || rgblight_config.mode == 36) { | #ifdef RGBLIGHT_USE_TIMER | ||||||
|     // MODE 2-5, breathing
 |  | ||||||
|     // MODE 6-8, rainbow mood
 |  | ||||||
|     // MODE 9-14, rainbow swirl
 |  | ||||||
|     // MODE 15-20, snake
 |  | ||||||
|     // MODE 21-23, knight
 |  | ||||||
|     // MODE 24, xmas
 |  | ||||||
|     // MODE 35  RGB test
 |  | ||||||
|     // MODE 36, alterating
 |  | ||||||
| 
 |  | ||||||
|     #ifdef RGBLIGHT_ANIMATIONS |  | ||||||
|       rgblight_timer_enable(); |       rgblight_timer_enable(); | ||||||
|     #endif | #endif | ||||||
|   } else if (rgblight_config.mode >= 25 && rgblight_config.mode <= 34) { |  | ||||||
|     // MODE 25-34, static gradient
 |  | ||||||
| 
 |  | ||||||
|     #ifdef RGBLIGHT_ANIMATIONS |  | ||||||
|       rgblight_timer_disable(); |  | ||||||
|     #endif |  | ||||||
|   } |   } | ||||||
|   rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); |   rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | ||||||
| } | } | ||||||
| @ -317,9 +306,9 @@ void rgblight_disable(void) { | |||||||
|   rgblight_config.enable = 0; |   rgblight_config.enable = 0; | ||||||
|   eeconfig_update_rgblight(rgblight_config.raw); |   eeconfig_update_rgblight(rgblight_config.raw); | ||||||
|   xprintf("rgblight disable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); |   xprintf("rgblight disable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); | ||||||
|   #ifdef RGBLIGHT_ANIMATIONS | #ifdef RGBLIGHT_USE_TIMER | ||||||
|       rgblight_timer_disable(); |       rgblight_timer_disable(); | ||||||
|   #endif | #endif | ||||||
|   wait_ms(50); |   wait_ms(50); | ||||||
|   rgblight_set(); |   rgblight_set(); | ||||||
| } | } | ||||||
| @ -327,9 +316,9 @@ void rgblight_disable(void) { | |||||||
| void rgblight_disable_noeeprom(void) { | void rgblight_disable_noeeprom(void) { | ||||||
|   rgblight_config.enable = 0; |   rgblight_config.enable = 0; | ||||||
|   xprintf("rgblight disable [noEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); |   xprintf("rgblight disable [noEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); | ||||||
|   #ifdef RGBLIGHT_ANIMATIONS | #ifdef RGBLIGHT_USE_TIMER | ||||||
|     rgblight_timer_disable(); |     rgblight_timer_disable(); | ||||||
|   #endif | #endif | ||||||
|   _delay_ms(50); |   _delay_ms(50); | ||||||
|   rgblight_set(); |   rgblight_set(); | ||||||
| } | } | ||||||
| @ -419,24 +408,43 @@ void rgblight_sethsv_noeeprom_old(uint16_t hue, uint8_t sat, uint8_t val) { | |||||||
| 
 | 
 | ||||||
| void rgblight_sethsv_eeprom_helper(uint16_t hue, uint8_t sat, uint8_t val, bool write_to_eeprom) { | void rgblight_sethsv_eeprom_helper(uint16_t hue, uint8_t sat, uint8_t val, bool write_to_eeprom) { | ||||||
|   if (rgblight_config.enable) { |   if (rgblight_config.enable) { | ||||||
|     if (rgblight_config.mode == 1) { |     if (rgblight_config.mode == RGBLIGHT_MODE_STATIC_LIGHT) { | ||||||
|       // same static color
 |       // same static color
 | ||||||
|       LED_TYPE tmp_led; |       LED_TYPE tmp_led; | ||||||
|       sethsv(hue, sat, val, &tmp_led); |       sethsv(hue, sat, val, &tmp_led); | ||||||
|       rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b); |       rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b); | ||||||
|     } else { |     } else { | ||||||
|       // all LEDs in same color
 |       // all LEDs in same color
 | ||||||
|       if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) { |       if ( 1 == 0 ) { //dummy
 | ||||||
|  |       } | ||||||
|  | #ifdef RGBLIGHT_EFFECT_BREATHING | ||||||
|  |       else if (rgblight_config.mode >= RGBLIGHT_MODE_BREATHING && | ||||||
|  |           rgblight_config.mode <= RGBLIGHT_MODE_BREATHING_end) { | ||||||
|         // breathing mode, ignore the change of val, use in memory value instead
 |         // breathing mode, ignore the change of val, use in memory value instead
 | ||||||
|         val = rgblight_config.val; |         val = rgblight_config.val; | ||||||
|       } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) { |       } | ||||||
|         // rainbow mood and rainbow swirl, ignore the change of hue
 | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD | ||||||
|  |       else if (rgblight_config.mode >= RGBLIGHT_MODE_RAINBOW_MOOD && | ||||||
|  |                   rgblight_config.mode <= RGBLIGHT_MODE_RAINBOW_MOOD_end) { | ||||||
|  |         // rainbow mood, ignore the change of hue
 | ||||||
|         hue = rgblight_config.hue; |         hue = rgblight_config.hue; | ||||||
|       } else if (rgblight_config.mode >= 25 && rgblight_config.mode <= 34) { |       } | ||||||
|  | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||||||
|  |       else if (rgblight_config.mode >= RGBLIGHT_MODE_RAINBOW_SWIRL && | ||||||
|  |                rgblight_config.mode <= RGBLIGHT_MODE_RAINBOW_SWIRL_end) { | ||||||
|  |         // rainbow swirl, ignore the change of hue
 | ||||||
|  |         hue = rgblight_config.hue; | ||||||
|  |       } | ||||||
|  | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT | ||||||
|  |       else if (rgblight_config.mode >= RGBLIGHT_MODE_STATIC_GRADIENT && | ||||||
|  |                rgblight_config.mode <= RGBLIGHT_MODE_STATIC_GRADIENT_end) { | ||||||
|         // static gradient
 |         // static gradient
 | ||||||
|         uint16_t _hue; |         uint16_t _hue; | ||||||
|         int8_t direction = ((rgblight_config.mode - 25) % 2) ? -1 : 1; |         int8_t direction = ((rgblight_config.mode - RGBLIGHT_MODE_STATIC_GRADIENT) % 2) ? -1 : 1; | ||||||
|         uint16_t range = pgm_read_word(&RGBLED_GRADIENT_RANGES[(rgblight_config.mode - 25) / 2]); |         uint16_t range = pgm_read_word(&RGBLED_GRADIENT_RANGES[(rgblight_config.mode - RGBLIGHT_MODE_STATIC_GRADIENT) / 2]); | ||||||
|         for (uint8_t i = 0; i < RGBLED_NUM; i++) { |         for (uint8_t i = 0; i < RGBLED_NUM; i++) { | ||||||
|           _hue = (range / RGBLED_NUM * i * direction + hue + 360) % 360; |           _hue = (range / RGBLED_NUM * i * direction + hue + 360) % 360; | ||||||
|           dprintf("rgblight rainbow set hsv: %u,%u,%d,%u\n", i, _hue, direction, range); |           dprintf("rgblight rainbow set hsv: %u,%u,%d,%u\n", i, _hue, direction, range); | ||||||
| @ -444,6 +452,7 @@ void rgblight_sethsv_eeprom_helper(uint16_t hue, uint8_t sat, uint8_t val, bool | |||||||
|         } |         } | ||||||
|         rgblight_set(); |         rgblight_set(); | ||||||
|       } |       } | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
|     rgblight_config.hue = hue; |     rgblight_config.hue = hue; | ||||||
|     rgblight_config.sat = sat; |     rgblight_config.sat = sat; | ||||||
| @ -528,7 +537,7 @@ void rgblight_set(void) { | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef RGBLIGHT_ANIMATIONS | #ifdef RGBLIGHT_USE_TIMER | ||||||
| 
 | 
 | ||||||
| // Animation timer -- AVR Timer3
 | // Animation timer -- AVR Timer3
 | ||||||
| void rgblight_timer_init(void) { | void rgblight_timer_init(void) { | ||||||
| @ -564,41 +573,77 @@ void rgblight_timer_toggle(void) { | |||||||
| 
 | 
 | ||||||
| void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b) { | void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b) { | ||||||
|   rgblight_enable(); |   rgblight_enable(); | ||||||
|   rgblight_mode(1); |   rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); | ||||||
|   rgblight_setrgb(r, g, b); |   rgblight_setrgb(r, g, b); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void rgblight_task(void) { | void rgblight_task(void) { | ||||||
|   if (rgblight_timer_enabled) { |   if (rgblight_timer_enabled) { | ||||||
|     // mode = 1, static light, do nothing here
 |     // static light mode, do nothing here
 | ||||||
|     if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) { |     if ( 1 == 0 ) { //dummy
 | ||||||
|       // mode = 2 to 5, breathing mode
 |     } | ||||||
|       rgblight_effect_breathing(rgblight_config.mode - 2); | #ifdef RGBLIGHT_EFFECT_BREATHING | ||||||
|     } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 8) { |     else if (rgblight_config.mode >= RGBLIGHT_MODE_BREATHING  && | ||||||
|       // mode = 6 to 8, rainbow mood mod
 |         rgblight_config.mode <= RGBLIGHT_MODE_BREATHING_end) { | ||||||
|       rgblight_effect_rainbow_mood(rgblight_config.mode - 6); |       // breathing mode
 | ||||||
|     } else if (rgblight_config.mode >= 9 && rgblight_config.mode <= 14) { |       rgblight_effect_breathing(rgblight_config.mode - RGBLIGHT_MODE_BREATHING ); | ||||||
|       // mode = 9 to 14, rainbow swirl mode
 |     } | ||||||
|       rgblight_effect_rainbow_swirl(rgblight_config.mode - 9); | #endif | ||||||
|     } else if (rgblight_config.mode >= 15 && rgblight_config.mode <= 20) { | #ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD | ||||||
|       // mode = 15 to 20, snake mode
 |     else if (rgblight_config.mode >= RGBLIGHT_MODE_RAINBOW_MOOD && | ||||||
|       rgblight_effect_snake(rgblight_config.mode - 15); |                rgblight_config.mode <= RGBLIGHT_MODE_RAINBOW_MOOD_end) { | ||||||
|     } else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) { |       // rainbow mood mode
 | ||||||
|       // mode = 21 to 23, knight mode
 |       rgblight_effect_rainbow_mood(rgblight_config.mode - RGBLIGHT_MODE_RAINBOW_MOOD); | ||||||
|       rgblight_effect_knight(rgblight_config.mode - 21); |     } | ||||||
|     } else if (rgblight_config.mode == 24) { | #endif | ||||||
|       // mode = 24, christmas mode
 | #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||||||
|  |     else if (rgblight_config.mode >= RGBLIGHT_MODE_RAINBOW_SWIRL && | ||||||
|  |                rgblight_config.mode <= RGBLIGHT_MODE_RAINBOW_SWIRL_end) { | ||||||
|  |       // rainbow swirl mode
 | ||||||
|  |       rgblight_effect_rainbow_swirl(rgblight_config.mode - RGBLIGHT_MODE_RAINBOW_SWIRL); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_SNAKE | ||||||
|  |     else if (rgblight_config.mode >= RGBLIGHT_MODE_SNAKE && | ||||||
|  |                rgblight_config.mode <= RGBLIGHT_MODE_SNAKE_end) { | ||||||
|  |       // snake mode
 | ||||||
|  |       rgblight_effect_snake(rgblight_config.mode - RGBLIGHT_MODE_SNAKE); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_KNIGHT | ||||||
|  |     else if (rgblight_config.mode >= RGBLIGHT_MODE_KNIGHT && | ||||||
|  |                rgblight_config.mode <= RGBLIGHT_MODE_KNIGHT_end) { | ||||||
|  |       // knight mode
 | ||||||
|  |       rgblight_effect_knight(rgblight_config.mode - RGBLIGHT_MODE_KNIGHT); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_CHRISTMAS | ||||||
|  |     else if (rgblight_config.mode == RGBLIGHT_MODE_CHRISTMAS) { | ||||||
|  |       // christmas mode
 | ||||||
|       rgblight_effect_christmas(); |       rgblight_effect_christmas(); | ||||||
|     } else if (rgblight_config.mode == 35) { |     } | ||||||
|       // mode = 35, RGB test
 | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_RGB_TEST | ||||||
|  |     else if (rgblight_config.mode == RGBLIGHT_MODE_RGB_TEST) { | ||||||
|  |       // RGB test mode
 | ||||||
|       rgblight_effect_rgbtest(); |       rgblight_effect_rgbtest(); | ||||||
|     } else if (rgblight_config.mode == 36){ |     } | ||||||
|  | #endif | ||||||
|  | #ifdef RGBLIGHT_EFFECT_ALTERNATING | ||||||
|  |     else if (rgblight_config.mode == RGBLIGHT_MODE_ALTERNATING){ | ||||||
|       rgblight_effect_alternating(); |       rgblight_effect_alternating(); | ||||||
|     } |     } | ||||||
|  | #endif | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #endif /* RGBLIGHT_USE_TIMER */ | ||||||
|  | 
 | ||||||
| // Effects
 | // Effects
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_BREATHING | ||||||
|  | __attribute__ ((weak)) | ||||||
|  | const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; | ||||||
|  | 
 | ||||||
| void rgblight_effect_breathing(uint8_t interval) { | void rgblight_effect_breathing(uint8_t interval) { | ||||||
|   static uint8_t pos = 0; |   static uint8_t pos = 0; | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
| @ -609,12 +654,17 @@ void rgblight_effect_breathing(uint8_t interval) { | |||||||
|   } |   } | ||||||
|   last_timer = timer_read(); |   last_timer = timer_read(); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|   // http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/
 |   // http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/
 | ||||||
|   val = (exp(sin((pos/255.0)*M_PI)) - RGBLIGHT_EFFECT_BREATHE_CENTER/M_E)*(RGBLIGHT_EFFECT_BREATHE_MAX/(M_E-1/M_E)); |   val = (exp(sin((pos/255.0)*M_PI)) - RGBLIGHT_EFFECT_BREATHE_CENTER/M_E)*(RGBLIGHT_EFFECT_BREATHE_MAX/(M_E-1/M_E)); | ||||||
|   rgblight_sethsv_noeeprom_old(rgblight_config.hue, rgblight_config.sat, val); |   rgblight_sethsv_noeeprom_old(rgblight_config.hue, rgblight_config.sat, val); | ||||||
|   pos = (pos + 1) % 256; |   pos = (pos + 1) % 256; | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD | ||||||
|  | __attribute__ ((weak)) | ||||||
|  | const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30}; | ||||||
|  | 
 | ||||||
| void rgblight_effect_rainbow_mood(uint8_t interval) { | void rgblight_effect_rainbow_mood(uint8_t interval) { | ||||||
|   static uint16_t current_hue = 0; |   static uint16_t current_hue = 0; | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
| @ -626,6 +676,12 @@ void rgblight_effect_rainbow_mood(uint8_t interval) { | |||||||
|   rgblight_sethsv_noeeprom_old(current_hue, rgblight_config.sat, rgblight_config.val); |   rgblight_sethsv_noeeprom_old(current_hue, rgblight_config.sat, rgblight_config.val); | ||||||
|   current_hue = (current_hue + 1) % 360; |   current_hue = (current_hue + 1) % 360; | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||||||
|  | __attribute__ ((weak)) | ||||||
|  | const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20}; | ||||||
|  | 
 | ||||||
| void rgblight_effect_rainbow_swirl(uint8_t interval) { | void rgblight_effect_rainbow_swirl(uint8_t interval) { | ||||||
|   static uint16_t current_hue = 0; |   static uint16_t current_hue = 0; | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
| @ -651,6 +707,12 @@ void rgblight_effect_rainbow_swirl(uint8_t interval) { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_SNAKE | ||||||
|  | __attribute__ ((weak)) | ||||||
|  | const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20}; | ||||||
|  | 
 | ||||||
| void rgblight_effect_snake(uint8_t interval) { | void rgblight_effect_snake(uint8_t interval) { | ||||||
|   static uint8_t pos = 0; |   static uint8_t pos = 0; | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
| @ -689,6 +751,12 @@ void rgblight_effect_snake(uint8_t interval) { | |||||||
|     pos = (pos + 1) % RGBLED_NUM; |     pos = (pos + 1) % RGBLED_NUM; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_KNIGHT | ||||||
|  | __attribute__ ((weak)) | ||||||
|  | const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31}; | ||||||
|  | 
 | ||||||
| void rgblight_effect_knight(uint8_t interval) { | void rgblight_effect_knight(uint8_t interval) { | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
|   if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { |   if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) { | ||||||
| @ -730,8 +798,9 @@ void rgblight_effect_knight(uint8_t interval) { | |||||||
|     increment = -increment; |     increment = -increment; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 
 | #ifdef RGBLIGHT_EFFECT_CHRISTMAS | ||||||
| void rgblight_effect_christmas(void) { | void rgblight_effect_christmas(void) { | ||||||
|   static uint16_t current_offset = 0; |   static uint16_t current_offset = 0; | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
| @ -748,6 +817,11 @@ void rgblight_effect_christmas(void) { | |||||||
|   } |   } | ||||||
|   rgblight_set(); |   rgblight_set(); | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_RGB_TEST | ||||||
|  | __attribute__ ((weak)) | ||||||
|  | const uint16_t RGBLED_RGBTEST_INTERVALS[] PROGMEM = {1024}; | ||||||
| 
 | 
 | ||||||
| void rgblight_effect_rgbtest(void) { | void rgblight_effect_rgbtest(void) { | ||||||
|   static uint8_t pos = 0; |   static uint8_t pos = 0; | ||||||
| @ -774,7 +848,9 @@ void rgblight_effect_rgbtest(void) { | |||||||
|   rgblight_setrgb(r, g, b); |   rgblight_setrgb(r, g, b); | ||||||
|   pos = (pos + 1) % 3; |   pos = (pos + 1) % 3; | ||||||
| } | } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|  | #ifdef RGBLIGHT_EFFECT_ALTERNATING | ||||||
| void rgblight_effect_alternating(void){ | void rgblight_effect_alternating(void){ | ||||||
|   static uint16_t last_timer = 0; |   static uint16_t last_timer = 0; | ||||||
|   static uint16_t pos = 0; |   static uint16_t pos = 0; | ||||||
| @ -795,5 +871,4 @@ void rgblight_effect_alternating(void){ | |||||||
|   rgblight_set(); |   rgblight_set(); | ||||||
|   pos = (pos + 1) % 2; |   pos = (pos + 1) % 2; | ||||||
| } | } | ||||||
| 
 | #endif | ||||||
| #endif /* RGBLIGHT_ANIMATIONS */ |  | ||||||
|  | |||||||
| @ -16,11 +16,23 @@ | |||||||
| #ifndef RGBLIGHT_H | #ifndef RGBLIGHT_H | ||||||
| #define RGBLIGHT_H | #define RGBLIGHT_H | ||||||
| 
 | 
 | ||||||
| #ifdef RGBLIGHT_ANIMATIONS | #include "rgblight_reconfig.h" | ||||||
| 	#define RGBLIGHT_MODES 36 | 
 | ||||||
| #else | #define _RGBM_SINGLE_STATIC(sym)   RGBLIGHT_MODE_ ## sym, | ||||||
| 	#define RGBLIGHT_MODES 1 | #define _RGBM_SINGLE_DYNAMIC(sym)  RGBLIGHT_MODE_ ## sym, | ||||||
| #endif | #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, | ||||||
|  | enum RGBLIGHT_EFFECT_MODE { | ||||||
|  |     RGBLIGHT_MODE_zero = 0, | ||||||
|  | #include "rgblight.h" | ||||||
|  |     RGBLIGHT_MODE_last | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #ifndef RGBLIGHT_H_DUMMY_DEFINE | ||||||
|  | 
 | ||||||
|  | #define RGBLIGHT_MODES (RGBLIGHT_MODE_last-1) | ||||||
| 
 | 
 | ||||||
| #ifndef RGBLIGHT_EFFECT_BREATHE_CENTER | #ifndef RGBLIGHT_EFFECT_BREATHE_CENTER | ||||||
| #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1-2.7
 | #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1-2.7
 | ||||||
| @ -168,4 +180,69 @@ void rgblight_effect_christmas(void); | |||||||
| void rgblight_effect_rgbtest(void); | void rgblight_effect_rgbtest(void); | ||||||
| void rgblight_effect_alternating(void); | void rgblight_effect_alternating(void); | ||||||
| 
 | 
 | ||||||
|  | #endif // #ifndef RGBLIGHT_H_DUMMY_DEFINE
 | ||||||
|  | #endif // RGBLIGHT_H
 | ||||||
|  | 
 | ||||||
|  | #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 | ||||||
| #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 | ||||||
|  | |||||||
							
								
								
									
										36
									
								
								quantum/rgblight_reconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								quantum/rgblight_reconfig.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | #ifndef RGBLIGHT_RECONFIG_H | ||||||
|  | #define RGBLIGHT_RECONFIG_H | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_ANIMATIONS | ||||||
|  |    // for backward compatibility
 | ||||||
|  |    #define RGBLIGHT_EFFECT_BREATHING | ||||||
|  |    #define RGBLIGHT_EFFECT_RAINBOW_MOOD | ||||||
|  |    #define RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||||||
|  |    #define RGBLIGHT_EFFECT_SNAKE | ||||||
|  |    #define RGBLIGHT_EFFECT_KNIGHT | ||||||
|  |    #define RGBLIGHT_EFFECT_CHRISTMAS | ||||||
|  |    #define RGBLIGHT_EFFECT_STATIC_GRADIENT | ||||||
|  |    #define RGBLIGHT_EFFECT_RGB_TEST | ||||||
|  |    #define RGBLIGHT_EFFECT_ALTERNATING | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef RGBLIGHT_STATIC_PATTERNS | ||||||
|  |    #define RGBLIGHT_EFFECT_STATIC_GRADIENT | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // check dynamic animation effects chose ?
 | ||||||
|  | #if defined(RGBLIGHT_EFFECT_BREATHING) || \ | ||||||
|  |     defined(RGBLIGHT_EFFECT_RAINBOW_MOOD) || \ | ||||||
|  |     defined(RGBLIGHT_EFFECT_RAINBOW_SWIRL) ||	\ | ||||||
|  |     defined(RGBLIGHT_EFFECT_SNAKE) ||		\ | ||||||
|  |     defined(RGBLIGHT_EFFECT_KNIGHT) ||		\ | ||||||
|  |     defined(RGBLIGHT_EFFECT_CHRISTMAS) ||	\ | ||||||
|  |     defined(RGBLIGHT_EFFECT_RGB_TEST) ||	\ | ||||||
|  |     defined(RGBLIGHT_EFFECT_ALTERNATING) | ||||||
|  |   #define RGBLIGHT_USE_TIMER | ||||||
|  |   #ifndef RGBLIGHT_ANIMATIONS | ||||||
|  |     #define RGBLIGHT_ANIMATIONS  // for backward compatibility
 | ||||||
|  |   #endif | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif // RGBLIGHT_RECONFIG_H
 | ||||||
| @ -10,6 +10,7 @@ | |||||||
| #include "timer.h" | #include "timer.h" | ||||||
| #include "led.h" | #include "led.h" | ||||||
| #include "host.h" | #include "host.h" | ||||||
|  | #include "rgblight_reconfig.h" | ||||||
| 
 | 
 | ||||||
| #ifdef PROTOCOL_LUFA | #ifdef PROTOCOL_LUFA | ||||||
| 	#include "lufa.h" | 	#include "lufa.h" | ||||||
|  | |||||||
| @ -54,6 +54,7 @@ | |||||||
| #include "quantum.h" | #include "quantum.h" | ||||||
| #include <util/atomic.h> | #include <util/atomic.h> | ||||||
| #include "outputselect.h" | #include "outputselect.h" | ||||||
|  | #include "rgblight_reconfig.h" | ||||||
| 
 | 
 | ||||||
| #ifdef NKRO_ENABLE | #ifdef NKRO_ENABLE | ||||||
|   #include "keycode_config.h" |   #include "keycode_config.h" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Takeshi ISHII
						Takeshi ISHII