|  |  |  | @ -23,8 +23,15 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include "debug.h" | 
			
		
	
		
			
				
					|  |  |  |  | #include "led_tables.h" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifndef RGBLIGHT_LIMIT_VAL | 
			
		
	
		
			
				
					|  |  |  |  | #define RGBLIGHT_LIMIT_VAL 255 | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #define MIN(a,b) (((a)<(b))?(a):(b)) | 
			
		
	
		
			
				
					|  |  |  |  | #define MAX(a,b) (((a)>(b))?(a):(b)) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | __attribute__ ((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | const uint16_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {1024, 20, 10, 5}; //modify for led_test
 | 
			
		
	
		
			
				
					|  |  |  |  | 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)) | 
			
		
	
	
		
			
				
					|  |  |  | @ -35,9 +42,10 @@ __attribute__ ((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31}; | 
			
		
	
		
			
				
					|  |  |  |  | __attribute__ ((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90}; | 
			
		
	
		
			
				
					|  |  |  |  | __attribute__ ((weak)) | 
			
		
	
		
			
				
					|  |  |  |  | const uint16_t RGBLED_RGBCYCLIC_INTERVALS[] PROGMEM = {1024}; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | rgblight_config_t rgblight_config; | 
			
		
	
		
			
				
					|  |  |  |  | rgblight_config_t inmem_config; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | LED_TYPE led[RGBLED_NUM]; | 
			
		
	
		
			
				
					|  |  |  |  | uint8_t rgblight_inited = 0; | 
			
		
	
	
		
			
				
					|  |  |  | @ -46,11 +54,9 @@ bool rgblight_timer_enabled = false; | 
			
		
	
		
			
				
					|  |  |  |  | void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { | 
			
		
	
		
			
				
					|  |  |  |  |   uint8_t r = 0, g = 0, b = 0, base, color; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef RGBLIGHT_LIMIT_VAL | 
			
		
	
		
			
				
					|  |  |  |  |     if (val > RGBLIGHT_LIMIT_VAL) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (val > RGBLIGHT_LIMIT_VAL) { | 
			
		
	
		
			
				
					|  |  |  |  |       val=RGBLIGHT_LIMIT_VAL; // limit the val
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
 | 
			
		
	
		
			
				
					|  |  |  |  |     r = val; | 
			
		
	
	
		
			
				
					|  |  |  | @ -119,7 +125,8 @@ void eeconfig_update_rgblight_default(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.mode = 1; | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.hue = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.sat = 255; | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.val = 255; | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.val = RGBLIGHT_LIMIT_VAL; | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.speed = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void eeconfig_debug_rgblight(void) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -129,6 +136,7 @@ void eeconfig_debug_rgblight(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   dprintf("rgblight_config.hue = %d\n", rgblight_config.hue); | 
			
		
	
		
			
				
					|  |  |  |  |   dprintf("rgblight_config.sat = %d\n", rgblight_config.sat); | 
			
		
	
		
			
				
					|  |  |  |  |   dprintf("rgblight_config.val = %d\n", rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  |   dprintf("rgblight_config.speed = %d\n", rgblight_config.speed); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_init(void) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -154,7 +162,7 @@ void rgblight_init(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.enable) { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_mode(rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_mode_noeeprom(rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -211,7 +219,7 @@ uint32_t rgblight_get_mode(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   return rgblight_config.mode; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_mode(uint8_t mode) { | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (!rgblight_config.enable) { | 
			
		
	
		
			
				
					|  |  |  |  |     return; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | @ -222,13 +230,18 @@ void rgblight_mode(uint8_t mode) { | 
			
		
	
		
			
				
					|  |  |  |  |   } else { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_config.mode = mode; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight mode: %u\n", rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  |   if (write_to_eeprom) { | 
			
		
	
		
			
				
					|  |  |  |  |     eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  |     xprintf("rgblight mode [EEPROM]: %u\n", rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  |   } else { | 
			
		
	
		
			
				
					|  |  |  |  |     xprintf("rgblight mode [NOEEPROM]: %u\n", rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.mode == 1) { | 
			
		
	
		
			
				
					|  |  |  |  |     #ifdef RGBLIGHT_ANIMATIONS | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_timer_disable(); | 
			
		
	
		
			
				
					|  |  |  |  |     #endif | 
			
		
	
		
			
				
					|  |  |  |  |   } else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 24) { | 
			
		
	
		
			
				
					|  |  |  |  |   } else if ((rgblight_config.mode >= 2 && rgblight_config.mode <= 24) || | 
			
		
	
		
			
				
					|  |  |  |  | 	     rgblight_config.mode == 35 ) { | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 2-5, breathing
 | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 6-8, rainbow mood
 | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 9-14, rainbow swirl
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -236,6 +249,7 @@ void rgblight_mode(uint8_t mode) { | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 21-23, knight
 | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 24, xmas
 | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 25-34, static rainbow
 | 
			
		
	
		
			
				
					|  |  |  |  |     // MODE 35  RGB cyclic
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     #ifdef RGBLIGHT_ANIMATIONS | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_timer_enable(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -247,11 +261,20 @@ void rgblight_mode(uint8_t mode) { | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_timer_disable(); | 
			
		
	
		
			
				
					|  |  |  |  |     #endif | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_mode(uint8_t mode) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_mode_eeprom_helper(mode, true); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_mode_noeeprom(uint8_t mode) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_mode_eeprom_helper(mode, false); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_toggle(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight toggle: rgblight_config.enable = %u\n", !rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight toggle [EEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.enable) { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_disable(); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | @ -260,17 +283,34 @@ void rgblight_toggle(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_toggle_noeeprom(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight toggle [NOEEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.enable) { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_disable_noeeprom(); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   else { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_enable_noeeprom(); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_enable(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.enable = 1; | 
			
		
	
		
			
				
					|  |  |  |  |   eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight enable: rgblight_config.enable = %u\n", rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   // No need to update EEPROM here. rgblight_mode() will do that, actually
 | 
			
		
	
		
			
				
					|  |  |  |  |   //eeconfig_update_rgblight(rgblight_config.raw);
 | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight enable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_mode(rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_enable_noeeprom(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.enable = 1; | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight enable [NOEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_mode_noeeprom(rgblight_config.mode); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_disable(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.enable = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight disable: rgblight_config.enable = %u\n", rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight disable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef RGBLIGHT_ANIMATIONS | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_timer_disable(); | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
	
		
			
				
					|  |  |  | @ -278,6 +318,29 @@ void rgblight_disable(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_set(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_disable_noeeprom(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.enable = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   xprintf("rgblight disable [noEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable); | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef RGBLIGHT_ANIMATIONS | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_timer_disable(); | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
		
			
				
					|  |  |  |  |   _delay_ms(50); | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_set(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // Deals with the messy details of incrementing an integer
 | 
			
		
	
		
			
				
					|  |  |  |  | uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { | 
			
		
	
		
			
				
					|  |  |  |  |     int16_t new_value = value; | 
			
		
	
		
			
				
					|  |  |  |  |     new_value += step; | 
			
		
	
		
			
				
					|  |  |  |  |     return MIN( MAX( new_value, min ), max ); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { | 
			
		
	
		
			
				
					|  |  |  |  |     int16_t new_value = value; | 
			
		
	
		
			
				
					|  |  |  |  |     new_value -= step; | 
			
		
	
		
			
				
					|  |  |  |  |     return MIN( MAX( new_value, min ), max ); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_increase_hue(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   uint16_t hue; | 
			
		
	
	
		
			
				
					|  |  |  | @ -313,8 +376,8 @@ void rgblight_decrease_sat(void) { | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_increase_val(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   uint8_t val; | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.val + RGBLIGHT_VAL_STEP > 255) { | 
			
		
	
		
			
				
					|  |  |  |  |     val = 255; | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.val + RGBLIGHT_VAL_STEP > RGBLIGHT_LIMIT_VAL) { | 
			
		
	
		
			
				
					|  |  |  |  |     val = RGBLIGHT_LIMIT_VAL; | 
			
		
	
		
			
				
					|  |  |  |  |   } else { | 
			
		
	
		
			
				
					|  |  |  |  |     val = rgblight_config.val + RGBLIGHT_VAL_STEP; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | @ -329,24 +392,32 @@ void rgblight_decrease_val(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_increase_speed(void) { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_config.speed = increment( rgblight_config.speed, 1, 0, 3 ); | 
			
		
	
		
			
				
					|  |  |  |  |     eeconfig_update_rgblight(rgblight_config.raw);//EECONFIG needs to be increased to support this
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) { | 
			
		
	
		
			
				
					|  |  |  |  |   inmem_config.raw = rgblight_config.raw; | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_decrease_speed(void) { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_config.speed = decrement( rgblight_config.speed, 1, 0, 3 ); | 
			
		
	
		
			
				
					|  |  |  |  |     eeconfig_update_rgblight(rgblight_config.raw);//EECONFIG needs to be increased to support this
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_sethsv_noeeprom_old(uint16_t hue, uint8_t sat, uint8_t val) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.enable) { | 
			
		
	
		
			
				
					|  |  |  |  |     LED_TYPE tmp_led; | 
			
		
	
		
			
				
					|  |  |  |  |     sethsv(hue, sat, val, &tmp_led); | 
			
		
	
		
			
				
					|  |  |  |  |     inmem_config.hue = hue; | 
			
		
	
		
			
				
					|  |  |  |  |     inmem_config.sat = sat; | 
			
		
	
		
			
				
					|  |  |  |  |     inmem_config.val = val; | 
			
		
	
		
			
				
					|  |  |  |  |     // dprintf("rgblight set hue [MEMORY]: %u,%u,%u\n", inmem_config.hue, inmem_config.sat, inmem_config.val);
 | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_sethsv(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) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_config.enable) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (rgblight_config.mode == 1) { | 
			
		
	
		
			
				
					|  |  |  |  |       // same static color
 | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_sethsv_noeeprom(hue, sat, val); | 
			
		
	
		
			
				
					|  |  |  |  |       LED_TYPE tmp_led; | 
			
		
	
		
			
				
					|  |  |  |  |       sethsv(hue, sat, val, &tmp_led); | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b); | 
			
		
	
		
			
				
					|  |  |  |  |     } else { | 
			
		
	
		
			
				
					|  |  |  |  |       // all LEDs in same color
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -371,11 +442,23 @@ void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_config.hue = hue; | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_config.sat = sat; | 
			
		
	
		
			
				
					|  |  |  |  |     rgblight_config.val = val; | 
			
		
	
		
			
				
					|  |  |  |  |     eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  |     xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  |     if (write_to_eeprom) { | 
			
		
	
		
			
				
					|  |  |  |  |       eeconfig_update_rgblight(rgblight_config.raw); | 
			
		
	
		
			
				
					|  |  |  |  |       xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  |     } else { | 
			
		
	
		
			
				
					|  |  |  |  |       xprintf("rgblight set hsv [NOEEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv_eeprom_helper(hue, sat, val, true); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) { | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv_eeprom_helper(hue, sat, val, false); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | uint16_t rgblight_get_hue(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   return rgblight_config.hue; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | @ -480,18 +563,11 @@ void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b) { | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_task(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_inited == 1) { //modify for led_test
 | 
			
		
	
		
			
				
					|  |  |  |  |       /* first call */ | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_inited = 2; | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_enable(); | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_mode(2); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   if (rgblight_timer_enabled) { | 
			
		
	
		
			
				
					|  |  |  |  |     // mode = 1, static light, do nothing here
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) { | 
			
		
	
		
			
				
					|  |  |  |  |       // mode = 2 to 5, breathing mode
 | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_effect_breathing(rgblight_config.mode - 2); | 
			
		
	
		
			
				
					|  |  |  |  | #if 0 | 
			
		
	
		
			
				
					|  |  |  |  |     } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 8) { | 
			
		
	
		
			
				
					|  |  |  |  |       // mode = 6 to 8, rainbow mood mod
 | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_effect_rainbow_mood(rgblight_config.mode - 6); | 
			
		
	
	
		
			
				
					|  |  |  | @ -507,7 +583,9 @@ void rgblight_task(void) { | 
			
		
	
		
			
				
					|  |  |  |  |     } else if (rgblight_config.mode == 24) { | 
			
		
	
		
			
				
					|  |  |  |  |       // mode = 24, christmas mode
 | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_effect_christmas(); | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  |     } else if (rgblight_config.mode == 35) { | 
			
		
	
		
			
				
					|  |  |  |  |       // mode = 35, RGB cyclic
 | 
			
		
	
		
			
				
					|  |  |  |  |       rgblight_effect_rgbcyclic(); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | @ -516,19 +594,19 @@ void rgblight_task(void) { | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_effect_breathing(uint8_t interval) { | 
			
		
	
		
			
				
					|  |  |  |  |   static uint8_t pos = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   static uint16_t last_timer = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   float val; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (timer_elapsed(last_timer) < pgm_read_word(&RGBLED_BREATHING_INTERVALS[interval])) {//modify for led_test
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_BREATHING_INTERVALS[interval])) { | 
			
		
	
		
			
				
					|  |  |  |  |     return; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   last_timer = timer_read(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   //modify for led_test
 | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_config.hue = (pos*120)%360; | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); | 
			
		
	
		
			
				
					|  |  |  |  |   pos = (pos + 1) % 3; | 
			
		
	
		
			
				
					|  |  |  |  |   // 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)); | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv_noeeprom_old(rgblight_config.hue, rgblight_config.sat, val); | 
			
		
	
		
			
				
					|  |  |  |  |   pos = (pos + 1) % 256; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #if 0 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_effect_rainbow_mood(uint8_t interval) { | 
			
		
	
		
			
				
					|  |  |  |  |   static uint16_t current_hue = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   static uint16_t last_timer = 0; | 
			
		
	
	
		
			
				
					|  |  |  | @ -537,7 +615,7 @@ void rgblight_effect_rainbow_mood(uint8_t interval) { | 
			
		
	
		
			
				
					|  |  |  |  |     return; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   last_timer = timer_read(); | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_sethsv_noeeprom(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; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_effect_rainbow_swirl(uint8_t interval) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -662,5 +740,24 @@ void rgblight_effect_christmas(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_set(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif /* 0 */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void rgblight_effect_rgbcyclic(void) { | 
			
		
	
		
			
				
					|  |  |  |  |   static uint8_t pos = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   static uint16_t last_timer = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   uint8_t g; uint8_t r; uint8_t b; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (timer_elapsed(last_timer) < pgm_read_word(&RGBLED_RGBCYCLIC_INTERVALS[0])) { | 
			
		
	
		
			
				
					|  |  |  |  |     return; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   last_timer = timer_read(); | 
			
		
	
		
			
				
					|  |  |  |  |   g = r = b = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   switch( pos ) { | 
			
		
	
		
			
				
					|  |  |  |  |     case 0: r = RGBLIGHT_LIMIT_VAL; break; | 
			
		
	
		
			
				
					|  |  |  |  |     case 1: g = RGBLIGHT_LIMIT_VAL; break; | 
			
		
	
		
			
				
					|  |  |  |  |     case 2: b = RGBLIGHT_LIMIT_VAL; break; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   rgblight_setrgb(r, g, b); | 
			
		
	
		
			
				
					|  |  |  |  |   pos = (pos + 1) % 3; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #endif /* RGBLIGHT_ANIMATIONS */ | 
			
		
	
	
		
			
				
					|  |  |  | 
 |