summaryrefslogtreecommitdiff
path: root/users/bbaserdem/bb-underglow.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/bbaserdem/bb-underglow.c')
-rw-r--r--users/bbaserdem/bb-underglow.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/users/bbaserdem/bb-underglow.c b/users/bbaserdem/bb-underglow.c
new file mode 100644
index 0000000000..69aae439f4
--- /dev/null
+++ b/users/bbaserdem/bb-underglow.c
@@ -0,0 +1,116 @@
+/* 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);
+}