mirror of
https://github.com/qmk/qmk_firmware
synced 2024-11-16 17:04:50 +00:00
117 lines
4 KiB
C
117 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);
|
||
|
}
|