116 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright 2021 Batuhan Başerdem
 | |
|  * <baserdem.batuhan@gmail.com> @bbaserdem
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 2 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #include "bb-underglow.h"
 | |
| 
 | |
| /* UNDERGLOW IMPLEMENTATION
 | |
|  */
 | |
| 
 | |
| // Define the layer switching code
 | |
| 
 | |
| // An empty layer on the base
 | |
| const rgblight_segment_t PROGMEM bb_base_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {0, 0, HSV_WHITE}
 | |
| );
 | |
| // Gaming layer is turquoise
 | |
| const rgblight_segment_t PROGMEM bb_game_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_PURPLE}
 | |
| );
 | |
| // Character overlay is chartereuse
 | |
| const rgblight_segment_t PROGMEM bb_char_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {0, RGBLED_NUM, HSV_GOLD}
 | |
| );
 | |
| 
 | |
| // Right-hand layers
 | |
| 
 | |
| // Media layer is orange
 | |
| const rgblight_segment_t PROGMEM bb_medi_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_RIGHT_BEG, RGBLIGHT_RIGHT_NUM, HSV_MAGENTA}
 | |
| );
 | |
| // Navigation layer is green
 | |
| const rgblight_segment_t PROGMEM bb_navi_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_RIGHT_BEG, RGBLIGHT_RIGHT_NUM, HSV_GREEN}
 | |
| );
 | |
| // Symbol layer is purple
 | |
| const rgblight_segment_t PROGMEM bb_symb_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_RIGHT_BEG, RGBLIGHT_RIGHT_NUM, HSV_YELLOW}
 | |
| );
 | |
| 
 | |
| // Left-hand layers
 | |
| 
 | |
| // Number layer is blue
 | |
| const rgblight_segment_t PROGMEM bb_numb_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_BLUE}
 | |
| );
 | |
| // Function layer is red
 | |
| const rgblight_segment_t PROGMEM bb_func_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_RED}
 | |
| );
 | |
| // Pointer layer is yellow
 | |
| const rgblight_segment_t PROGMEM bb_mous_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_SPRINGGREEN}
 | |
| );
 | |
| 
 | |
| // Music playback layer is magenta
 | |
| const rgblight_segment_t PROGMEM bb_musi_layer[] = RGBLIGHT_LAYER_SEGMENTS(
 | |
|     {0, RGBLED_NUM, HSV_ORANGE}
 | |
| );
 | |
| 
 | |
| const rgblight_segment_t* const PROGMEM bb_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
 | |
|     bb_base_layer,
 | |
|     bb_char_layer,
 | |
|     bb_game_layer,
 | |
|     bb_medi_layer,
 | |
|     bb_navi_layer,
 | |
|     bb_symb_layer,
 | |
|     bb_numb_layer,
 | |
|     bb_func_layer,
 | |
|     bb_mous_layer,
 | |
|     bb_musi_layer
 | |
| );
 | |
| 
 | |
| // Enable the LED switching layers
 | |
| void keyboard_post_init_underglow(void) {
 | |
|     rgblight_layers = bb_rgb_layers;
 | |
|     // Default rgb mode is rainbow swirl; set this
 | |
|     rgblight_sethsv_noeeprom(100, 255, 255);
 | |
|     rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL + 0);
 | |
| }
 | |
| 
 | |
| // Set RGBLIGHT state depending on layer
 | |
| layer_state_t layer_state_set_underglow(layer_state_t state) {
 | |
|     // Activate layers if on that region
 | |
|     rgblight_set_layer_state(_BASE, layer_state_cmp(state, _BASE));
 | |
|     rgblight_set_layer_state(_GAME, layer_state_cmp(state, _GAME));
 | |
|     rgblight_set_layer_state(_CHAR, layer_state_cmp(state, _CHAR));
 | |
|     rgblight_set_layer_state(_MEDI, layer_state_cmp(state, _MEDI));
 | |
|     rgblight_set_layer_state(_NAVI, layer_state_cmp(state, _NAVI));
 | |
|     rgblight_set_layer_state(_SYMB, layer_state_cmp(state, _SYMB));
 | |
|     rgblight_set_layer_state(_NUMB, layer_state_cmp(state, _NUMB));
 | |
|     rgblight_set_layer_state(_FUNC, layer_state_cmp(state, _FUNC));
 | |
|     rgblight_set_layer_state(_MOUS, layer_state_cmp(state, _MOUS));
 | |
|     rgblight_set_layer_state(_MUSI, layer_state_cmp(state, _MUSI));
 | |
|     // Return so other stuff can be done
 | |
|     return state;
 | |
| }
 | |
| 
 | |
| // Hook into shutdown code
 | |
| void shutdown_underglow(void) {
 | |
|     // Make the LED's red on shutdown
 | |
|     rgblight_enable_noeeprom();
 | |
|     rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | |
|     rgblight_sethsv(HSV_WHITE);
 | |
| }
 | 
